NICParser.java
上传用户:quxuerui
上传日期:2018-01-08
资源大小:41811k
文件大小:5k
- /**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- package org.apache.hadoop.contrib.failmon;
- import java.net.InetAddress;
- import java.net.UnknownHostException;
- import java.util.ArrayList;
- import java.util.Calendar;
- /**********************************************************
- * Objects of this class parse the output of ifconfig to
- * gather information about present Network Interface Cards
- * in the system. The list of NICs to poll is specified in the
- * configuration file.
- *
- **********************************************************/
- public class NICParser extends ShellParser {
- String[] nics;
- /**
- * Constructs a NICParser and reads the list of NICs to query
- */
- public NICParser() {
- super();
- nics = Environment.getProperty("nic.list").split(",\s*");
- }
- /**
- * Reads and parses the output of ifconfig for a specified NIC and
- * creates an appropriate EventRecord that holds the desirable
- * information for it.
- *
- * @param device the NIC device name to query
- *
- * @return the EventRecord created
- */
- public EventRecord query(String device) throws UnknownHostException {
- StringBuffer sb = Environment.runCommand("/sbin/ifconfig " + device);
- EventRecord retval = new EventRecord(InetAddress.getLocalHost()
- .getCanonicalHostName(), InetAddress.getAllByName(InetAddress.getLocalHost()
- .getHostName()), Calendar.getInstance(), "NIC", "Unknown", device, "-");
- retval.set("hwAddress", findPattern("HWaddr\s*([\S{2}:]{17})", sb
- .toString(), 1));
- retval.set("ipAddress", findPattern("inet\s+addr:\s*([\w.?]*)", sb
- .toString(), 1));
- String tmp = findPattern("inet\s+addr:\s*([\w.?]*)", sb.toString(), 1);
- retval.set("status", (tmp == null) ? "DOWN" : "UP");
- if (tmp != null)
- retval.set("ipAddress", tmp);
- retval.set("rxPackets", findPattern("RX\s*packets\s*:\s*(\d+)", sb
- .toString(), 1));
- retval.set("rxErrors", findPattern("RX.+errors\s*:\s*(\d+)", sb
- .toString(), 1));
- retval.set("rxDropped", findPattern("RX.+dropped\s*:\s*(\d+)", sb
- .toString(), 1));
- retval.set("rxOverruns", findPattern("RX.+overruns\s*:\s*(\d+)", sb
- .toString(), 1));
- retval.set("rxFrame", findPattern("RX.+frame\s*:\s*(\d+)",
- sb.toString(), 1));
- retval.set("txPackets", findPattern("TX\s*packets\s*:\s*(\d+)", sb
- .toString(), 1));
- retval.set("txErrors", findPattern("TX.+errors\s*:\s*(\d+)", sb
- .toString(), 1));
- retval.set("txDropped", findPattern("TX.+dropped\s*:\s*(\d+)", sb
- .toString(), 1));
- retval.set("txOverruns", findPattern("TX.+overruns\s*:\s*(\d+)", sb
- .toString(), 1));
- retval.set("txCarrier", findPattern("TX.+carrier\s*:\s*(\d+)", sb
- .toString(), 1));
- retval.set("collisions", findPattern("\s+collisions\s*:\s*(\d+)", sb
- .toString(), 1));
- retval.set("rxBytes", findPattern("RX\s*bytes\s*:\s*(\d+)", sb
- .toString(), 1));
- retval.set("txBytes", findPattern("TX\s*bytes\s*:\s*(\d+)", sb
- .toString(), 1));
- return retval;
- }
- /**
- * Invokes query() to do the parsing and handles parsing errors for
- * each one of the NICs specified in the configuration.
- *
- * @return an array of EventRecords that holds one element that represents
- * the current state of network interfaces.
- */
- public EventRecord[] monitor() {
- ArrayList<EventRecord> recs = new ArrayList<EventRecord>();
- for (String nic : nics) {
- try {
- recs.add(query(nic));
- } catch (UnknownHostException e) {
- e.printStackTrace();
- }
- }
- EventRecord[] T = new EventRecord[recs.size()];
- return recs.toArray(T);
- }
-
- /**
- * Return a String with information about this class
- *
- * @return A String describing this class
- */
- public String getInfo() {
- String retval = "ifconfig parser for interfaces: ";
- for (String nic : nics)
- retval += nic + " ";
- return retval;
- }
- }