1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.apache.hadoop.chukwa.datacollection.agent.metrics;
19
20 import org.apache.hadoop.metrics.MetricsContext;
21 import org.apache.hadoop.metrics.MetricsRecord;
22 import org.apache.hadoop.metrics.MetricsUtil;
23 import org.apache.hadoop.metrics.Updater;
24 import org.apache.hadoop.metrics.util.MetricsBase;
25 import org.apache.hadoop.metrics.util.MetricsIntValue;
26 import org.apache.hadoop.metrics.util.MetricsRegistry;
27 import org.apache.hadoop.metrics.util.MetricsTimeVaryingInt;
28
29 public class AgentMetrics implements Updater {
30 public static final AgentMetrics agentMetrics = new AgentMetrics("chukwaAgent", "metrics");
31
32 public MetricsRegistry registry = new MetricsRegistry();
33 private MetricsRecord metricsRecord;
34 private AgentActivityMBean agentActivityMBean;
35
36 public MetricsIntValue adaptorCount =
37 new MetricsIntValue("adaptorCount", registry,"number of new adaptor");
38
39 public MetricsTimeVaryingInt addedAdaptor =
40 new MetricsTimeVaryingInt("addedAdaptor", registry,"number of added adaptor");
41
42 public MetricsTimeVaryingInt removedAdaptor =
43 new MetricsTimeVaryingInt("removedAdaptor", registry,"number of removed adaptor");
44
45
46
47
48 public AgentMetrics(String processName, String recordName) {
49 MetricsContext context = MetricsUtil.getContext(processName);
50 metricsRecord = MetricsUtil.createRecord(context, recordName);
51 metricsRecord.setTag("process", processName);
52 agentActivityMBean = new AgentActivityMBean(registry, recordName);
53 context.registerUpdater(this);
54
55 }
56
57
58
59
60
61
62 public void doUpdates(MetricsContext unused) {
63 synchronized (this) {
64 for (MetricsBase m : registry.getMetricsList()) {
65 m.pushMetric(metricsRecord);
66 }
67 }
68 metricsRecord.update();
69 }
70
71 public void shutdown() {
72 if (agentActivityMBean != null)
73 agentActivityMBean.shutdown();
74 }
75
76 }