1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 package org.apache.hadoop.hbase.ipc;
22
23 import org.apache.commons.logging.Log;
24 import org.apache.commons.logging.LogFactory;
25 import org.apache.hadoop.metrics.MetricsContext;
26 import org.apache.hadoop.metrics.MetricsRecord;
27 import org.apache.hadoop.metrics.MetricsUtil;
28 import org.apache.hadoop.metrics.Updater;
29 import org.apache.hadoop.metrics.util.MetricsRegistry;
30 import org.apache.hadoop.metrics.util.MetricsTimeVaryingRate;
31
32
33
34
35
36
37
38
39
40
41
42
43
44 public class HBaseRpcMetrics implements Updater {
45 private MetricsRecord metricsRecord;
46 private static Log LOG = LogFactory.getLog(HBaseRpcMetrics.class);
47 private final HBaseRPCStatistics rpcStatistics;
48
49 public HBaseRpcMetrics(String hostName, String port) {
50 MetricsContext context = MetricsUtil.getContext("rpc");
51 metricsRecord = MetricsUtil.createRecord(context, "metrics");
52
53 metricsRecord.setTag("port", port);
54
55 LOG.info("Initializing RPC Metrics with hostName="
56 + hostName + ", port=" + port);
57
58 context.registerUpdater(this);
59
60 rpcStatistics = new HBaseRPCStatistics(this.registry, hostName, port);
61 }
62
63
64
65
66
67
68
69 public final MetricsRegistry registry = new MetricsRegistry();
70
71 public MetricsTimeVaryingRate rpcQueueTime = new MetricsTimeVaryingRate("RpcQueueTime", registry);
72 public MetricsTimeVaryingRate rpcProcessingTime = new MetricsTimeVaryingRate("RpcProcessingTime", registry);
73
74
75
76
77 private MetricsTimeVaryingRate get(String key) {
78 return (MetricsTimeVaryingRate) registry.get(key);
79 }
80 private MetricsTimeVaryingRate create(String key) {
81 return new MetricsTimeVaryingRate(key, this.registry);
82 }
83
84 public synchronized void inc(String name, int amt) {
85 MetricsTimeVaryingRate m = get(name);
86 if (m == null) {
87 m = create(name);
88 }
89 m.inc(amt);
90 }
91
92
93
94
95
96 public void doUpdates(MetricsContext context) {
97 rpcQueueTime.pushMetric(metricsRecord);
98 rpcProcessingTime.pushMetric(metricsRecord);
99
100 synchronized (registry) {
101
102
103 for (String metricName : registry.getKeyList() ) {
104 MetricsTimeVaryingRate value = (MetricsTimeVaryingRate) registry.get(metricName);
105
106 value.pushMetric(metricsRecord);
107 }
108 }
109 metricsRecord.update();
110 }
111
112 public void shutdown() {
113 if (rpcStatistics != null)
114 rpcStatistics.shutdown();
115 }
116 }