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.MetricsLongValue;
27 import org.apache.hadoop.metrics.util.MetricsRegistry;
28 import org.apache.hadoop.metrics.util.MetricsTimeVaryingInt;
29
30 public class ChunkQueueMetrics implements Updater {
31
32 public MetricsRegistry registry = new MetricsRegistry();
33 private MetricsRecord metricsRecord;
34 private ChunkQueueActivityMBean mbean;
35
36
37 public MetricsIntValue queueSize =
38 new MetricsIntValue("queueSize", registry,"Queue size");
39
40 public MetricsLongValue dataSize =
41 new MetricsLongValue("dataSize", registry,"Data size");
42
43 public MetricsTimeVaryingInt addedChunk =
44 new MetricsTimeVaryingInt("addedChunk", registry,"number of added chunk");
45
46 public MetricsTimeVaryingInt removedChunk =
47 new MetricsTimeVaryingInt("removedChunk", registry,"number of removed chunk");
48
49 public MetricsIntValue fullQueue =
50 new MetricsIntValue("fullQueue", registry,"Queue is full");
51
52
53
54 public ChunkQueueMetrics(String processName, String recordName) {
55 MetricsContext context = MetricsUtil.getContext(processName);
56 metricsRecord = MetricsUtil.createRecord(context, recordName);
57 mbean = new ChunkQueueActivityMBean(registry, recordName);
58 context.registerUpdater(this);
59
60 }
61
62
63
64
65
66
67 public void doUpdates(MetricsContext unused) {
68 synchronized (this) {
69 for (MetricsBase m : registry.getMetricsList()) {
70 m.pushMetric(metricsRecord);
71 }
72 }
73 metricsRecord.update();
74 }
75
76 public void shutdown() {
77 if (mbean != null)
78 mbean.shutdown();
79 }
80
81 }