01: package org.cougaar.core.qos.profile;
02:
03: import java.lang.reflect.*;
04: import java.io.*;
05: import java.text.*;
06: import java.util.*;
07: import java.util.regex.*;
08: import org.cougaar.core.agent.*;
09: import org.cougaar.core.component.*;
10: import org.cougaar.core.mts.*;
11: import org.cougaar.core.node.*;
12: import org.cougaar.core.qos.metrics.*;
13: import org.cougaar.core.service.*;
14: import org.cougaar.core.service.wp.*;
15: import org.cougaar.core.thread.*;
16: import org.cougaar.core.wp.resolver.*;
17: import org.cougaar.util.*;
18:
19: /**
20: * This component profiles the CPU load from "/proc/loadavg".
21: * <p>
22: * Example output:<pre>
23: * loadavg - #1_min_avg, 5_min_avg, 15_min_avg,
24: * running, total, pid,
25: * loadavg - 2.80, 2.81, 2.44,
26: * 4, 221, 1551,
27: * </pre>
28: *
29: * @see ProfilerCoordinator required coordinator component
30: */
31: public class ProcLoadAvg extends ProfilerBase {
32: // 0.07 0.36 0.37 1/262 5191
33: private static final String[] FIELDS = new String[] { "1_min_avg",
34: "5_min_avg", "15_min_avg", "running", "total", "pid", };
35: private static final String HEADER = toHeader(FIELDS);
36:
37: public void run() {
38: log("org.cougaar.core.qos.profile.proc.loadavg", HEADER,
39: getLoadAvg());
40: }
41:
42: private String getLoadAvg() {
43: //The first 3 fields are the CPU load averages from 1, 5, and
44: // 15 minutes. The 4th field is the number of running processes,
45: // and the 5th is the most recent new PID.
46: StringBuffer buf = new StringBuffer();
47: try {
48: BufferedReader in = new BufferedReader(new FileReader(
49: "/proc/loadavg"));
50: String line = in.readLine();
51: line = line.replace('/', ' ');
52: String[] sa = line.trim().split("\\s+");
53: for (int i = 0; i < sa.length; i++) {
54: for (int j = 5 - sa[i].length(); j > 0; j--) {
55: buf.append(" ");
56: }
57: buf.append(sa[i]).append(", ");
58: }
59: in.close();
60: } catch (Exception e) {
61: }
62: return buf.toString();
63: }
64: }
|