NICParser.java
上传用户:quxuerui
上传日期:2018-01-08
资源大小:41811k
文件大小:5k
源码类别:

网格计算

开发平台:

Java

  1. /**
  2.  * Licensed to the Apache Software Foundation (ASF) under one
  3.  * or more contributor license agreements.  See the NOTICE file
  4.  * distributed with this work for additional information
  5.  * regarding copyright ownership.  The ASF licenses this file
  6.  * to you under the Apache License, Version 2.0 (the
  7.  * "License"); you may not use this file except in compliance
  8.  * with the License.  You may obtain a copy of the License at
  9.  *
  10.  *     http://www.apache.org/licenses/LICENSE-2.0
  11.  *
  12.  * Unless required by applicable law or agreed to in writing, software
  13.  * distributed under the License is distributed on an "AS IS" BASIS,
  14.  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  15.  * See the License for the specific language governing permissions and
  16.  * limitations under the License.
  17.  */
  18. package org.apache.hadoop.contrib.failmon;
  19. import java.net.InetAddress;
  20. import java.net.UnknownHostException;
  21. import java.util.ArrayList;
  22. import java.util.Calendar;
  23. /**********************************************************
  24.  * Objects of this class parse the output of ifconfig to 
  25.  * gather information about present Network Interface Cards
  26.  * in the system. The list of NICs to poll is specified in the 
  27.  * configuration file.
  28.  * 
  29.  **********************************************************/
  30. public class NICParser extends ShellParser {
  31.   String[] nics;
  32.   /**
  33.    * Constructs a NICParser and reads the list of NICs to query
  34.    */
  35.   public NICParser() {
  36.     super();
  37.     nics = Environment.getProperty("nic.list").split(",\s*");
  38.   }
  39.   /**
  40.    * Reads and parses the output of ifconfig for a specified NIC and 
  41.    * creates an appropriate EventRecord that holds the desirable 
  42.    * information for it.
  43.    * 
  44.    * @param device the NIC device name to query
  45.    * 
  46.    * @return the EventRecord created
  47.    */
  48.   public EventRecord query(String device) throws UnknownHostException {
  49.     StringBuffer sb = Environment.runCommand("/sbin/ifconfig " + device);
  50.     EventRecord retval = new EventRecord(InetAddress.getLocalHost()
  51.         .getCanonicalHostName(), InetAddress.getAllByName(InetAddress.getLocalHost()
  52.         .getHostName()), Calendar.getInstance(), "NIC", "Unknown", device, "-");
  53.     retval.set("hwAddress", findPattern("HWaddr\s*([\S{2}:]{17})", sb
  54.         .toString(), 1));
  55.     retval.set("ipAddress", findPattern("inet\s+addr:\s*([\w.?]*)", sb
  56.         .toString(), 1));
  57.     String tmp = findPattern("inet\s+addr:\s*([\w.?]*)", sb.toString(), 1);
  58.     retval.set("status", (tmp == null) ? "DOWN" : "UP");
  59.     if (tmp != null)
  60.       retval.set("ipAddress", tmp);
  61.     retval.set("rxPackets", findPattern("RX\s*packets\s*:\s*(\d+)", sb
  62.         .toString(), 1));
  63.     retval.set("rxErrors", findPattern("RX.+errors\s*:\s*(\d+)", sb
  64.         .toString(), 1));
  65.     retval.set("rxDropped", findPattern("RX.+dropped\s*:\s*(\d+)", sb
  66.         .toString(), 1));
  67.     retval.set("rxOverruns", findPattern("RX.+overruns\s*:\s*(\d+)", sb
  68.         .toString(), 1));
  69.     retval.set("rxFrame", findPattern("RX.+frame\s*:\s*(\d+)",
  70.         sb.toString(), 1));
  71.     retval.set("txPackets", findPattern("TX\s*packets\s*:\s*(\d+)", sb
  72.         .toString(), 1));
  73.     retval.set("txErrors", findPattern("TX.+errors\s*:\s*(\d+)", sb
  74.         .toString(), 1));
  75.     retval.set("txDropped", findPattern("TX.+dropped\s*:\s*(\d+)", sb
  76.         .toString(), 1));
  77.     retval.set("txOverruns", findPattern("TX.+overruns\s*:\s*(\d+)", sb
  78.         .toString(), 1));
  79.     retval.set("txCarrier", findPattern("TX.+carrier\s*:\s*(\d+)", sb
  80.         .toString(), 1));
  81.     retval.set("collisions", findPattern("\s+collisions\s*:\s*(\d+)", sb
  82.         .toString(), 1));
  83.     retval.set("rxBytes", findPattern("RX\s*bytes\s*:\s*(\d+)", sb
  84.         .toString(), 1));
  85.     retval.set("txBytes", findPattern("TX\s*bytes\s*:\s*(\d+)", sb
  86.         .toString(), 1));
  87.     return retval;
  88.   }
  89.   /**
  90.    * Invokes query() to do the parsing and handles parsing errors for 
  91.    * each one of the NICs specified in the configuration. 
  92.    * 
  93.    * @return an array of EventRecords that holds one element that represents
  94.    * the current state of network interfaces.
  95.    */
  96.   public EventRecord[] monitor() {
  97.     ArrayList<EventRecord> recs = new ArrayList<EventRecord>();
  98.     for (String nic : nics) {
  99.       try {
  100.         recs.add(query(nic));
  101.       } catch (UnknownHostException e) {
  102.         e.printStackTrace();
  103.       }
  104.     }
  105.     EventRecord[] T = new EventRecord[recs.size()];
  106.     return recs.toArray(T);
  107.   }
  108.   
  109.   /**
  110.    * Return a String with information about this class
  111.    * 
  112.    * @return A String describing this class
  113.    */
  114.   public String getInfo() {
  115.     String retval = "ifconfig parser for interfaces: ";
  116.     for (String nic : nics)
  117.       retval += nic + " ";
  118.     return retval;
  119.   }
  120. }