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
55
56
57 public ChunkQueueMetrics(String processName, String recordName) {
58 MetricsContext context = MetricsUtil.getContext(processName);
59 metricsRecord = MetricsUtil.createRecord(context, recordName);
60 mbean = new ChunkQueueActivityMBean(registry, recordName);
61 context.registerUpdater(this);
62
63 }
64
65
66
67
68
69
70 public void doUpdates(MetricsContext unused) {
71 synchronized (this) {
72 for (MetricsBase m : registry.getMetricsList()) {
73 m.pushMetric(metricsRecord);
74 }
75 }
76 metricsRecord.update();
77 }
78
79 public void shutdown() {
80 if (mbean != null)
81 mbean.shutdown();
82 }
83
84 }