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 public AgentMetrics(String processName, String recordName) {
47 MetricsContext context = MetricsUtil.getContext(processName);
48 metricsRecord = MetricsUtil.createRecord(context, recordName);
49 metricsRecord.setTag("process", processName);
50 agentActivityMBean = new AgentActivityMBean(registry, recordName);
51 context.registerUpdater(this);
52
53 }
54
55
56
57
58
59
60 public void doUpdates(MetricsContext unused) {
61 synchronized (this) {
62 for (MetricsBase m : registry.getMetricsList()) {
63 m.pushMetric(metricsRecord);
64 }
65 }
66 metricsRecord.update();
67 }
68
69 public void shutdown() {
70 if (agentActivityMBean != null)
71 agentActivityMBean.shutdown();
72 }
73
74 }