1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33 package org.apache.hadoop.chukwa.datacollection.adaptor.sigar;
34
35 import java.util.Timer;
36
37 import org.apache.hadoop.chukwa.datacollection.adaptor.AbstractAdaptor;
38 import org.apache.hadoop.chukwa.datacollection.adaptor.AdaptorException;
39 import org.apache.hadoop.chukwa.datacollection.adaptor.AdaptorShutdownPolicy;
40 import org.apache.log4j.Logger;
41
42 public class SystemMetrics extends AbstractAdaptor {
43 static Logger log = Logger.getLogger(SystemMetrics.class);
44 private long period = 60 * 1000;
45 private SigarRunner runner;
46 private Timer timer;
47
48 @Override
49 public String parseArgs(String args) {
50 int spOffset = args.indexOf(' ');
51 if (spOffset > 0) {
52 try {
53 period = Integer.parseInt(args.substring(0, spOffset));
54 period = period * 1000;
55 } catch (NumberFormatException e) {
56 StringBuilder buffer = new StringBuilder();
57 buffer.append("SystemMetrics: sample interval ");
58 buffer.append(args.substring(0, spOffset));
59 buffer.append(" can't be parsed.");
60 log.warn(buffer.toString());
61 }
62 }
63 return args;
64 }
65
66 @Override
67 public void start(long offset) throws AdaptorException {
68 if(timer == null) {
69 timer = new Timer();
70 runner = new SigarRunner(dest, SystemMetrics.this);
71 }
72 timer.scheduleAtFixedRate(runner, 0, period);
73
74 }
75
76 @Override
77 public String getCurrentStatus() {
78 StringBuilder buffer = new StringBuilder();
79 buffer.append(type);
80 buffer.append(" ");
81 buffer.append(period/1000);
82 return buffer.toString();
83 }
84
85 @Override
86 public long shutdown(AdaptorShutdownPolicy shutdownPolicy)
87 throws AdaptorException {
88 timer.cancel();
89 return 0;
90 }
91
92 }