001: package org.cougaar.core.qos.profile;
002:
003: import java.lang.reflect.*;
004: import java.io.*;
005: import java.text.*;
006: import java.util.*;
007: import java.util.regex.*;
008: import org.cougaar.core.agent.*;
009: import org.cougaar.core.component.*;
010: import org.cougaar.core.mts.*;
011: import org.cougaar.core.node.*;
012: import org.cougaar.core.qos.metrics.*;
013: import org.cougaar.core.service.*;
014: import org.cougaar.core.service.wp.*;
015: import org.cougaar.core.thread.*;
016: import org.cougaar.core.wp.resolver.*;
017: import org.cougaar.util.*;
018:
019: /**
020: * This component profiles system network activity from
021: * "/proc/net/dev".
022: *
023: * @see ProfilerCoordinator required coordinator component
024: */
025: public class ProcNetDev extends ProfilerBase {
026: //"cat /proc/net/dev", example output:
027: //Inter-| Receive | Transmit
028: // face |bytes packets errs drop fifo frame compressed multicast|bytes packets errs drop fifo colls carrier compressed
029: // lo:768602893 9086982 0 0 0 0 0 0 768602893 9086982 0 0 0 0 0 0
030: // eth0:572864334 2350534 0 0 0 0 0 0 93901494 622384 0 0 0 47833 0 0
031: //cipsec0: 0 527870 0 0 0 0 0 0 0 96869 0 0 0 0 0 0
032: private static final String[] FIELDS = new String[] { "recv_bytes",
033: "recv_packets", "recv_errs", "recv_drop", "recv_fifo",
034: "recv_frame", "recv_compr", "recv_mcast", "send_bytes",
035: "send_packets", "send_errs", "send_drop", "send_fifo",
036: "send_colls", "send_carrier", "send_compr", };
037: private static final String HEADER = toHeader(FIELDS);
038: private static final String ALIGN;
039: static {
040: StringBuffer buf = new StringBuffer();
041: for (int i = 0; i < FIELDS.length; i++) {
042: buf.append("0, ");
043: }
044: ALIGN = buf.toString();
045: }
046: private Map logs = new HashMap();
047:
048: public void run() {
049: logNet();
050: }
051:
052: private void logNet() {
053: StringBuffer buf = new StringBuffer();
054: try {
055: BufferedReader in = new BufferedReader(new FileReader(
056: "/proc/net/dev"));
057: String h1 = in.readLine();
058: String h2 = in.readLine();
059: while (true) {
060: String line = in.readLine();
061: if (line == null) {
062: break;
063: }
064: line = line.trim();
065: int sep = line.indexOf(':');
066: String key = line.substring(0, sep);
067: String value = line.substring(sep + 1);
068: record(key, value);
069: }
070: } catch (Exception e) {
071: }
072: }
073:
074: private void record(String key, String value) {
075: StringBuffer buf = new StringBuffer();
076: String[] sa = value.trim().split("\\s+");
077: for (int i = 0; i < sa.length; i++) {
078: for (int j = 8 - sa[i].length(); j > 0; j--) {
079: buf.append(" ");
080: }
081: buf.append(sa[i]).append(", ");
082: }
083: getLog(key).shout(buf.toString());
084: }
085:
086: private LoggingService getLog(String key) {
087: LoggingService log;
088: synchronized (logs) {
089: log = (LoggingService) logs.get(key);
090: if (log == null) {
091: log = (LoggingService) sb.getService(
092: "org.cougaar.core.qos.profile.proc.net.dev."
093: + key, LoggingService.class, null);
094: logs.put(key, log);
095: if (header) {
096: log.shout(HEADER);
097: }
098: if (align) {
099: for (int i = 0, n = getRunCount(); i < n; i++) {
100: log.shout(ALIGN);
101: }
102: }
103: }
104: }
105: return log;
106: }
107: }
|