1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package org.apache.hadoop.hbase.replication.regionserver;
21 import java.io.UnsupportedEncodingException;
22 import java.net.URLEncoder;
23
24 import org.apache.hadoop.hbase.metrics.MetricsRate;
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.jvm.JvmMetrics;
30 import org.apache.hadoop.metrics.util.MetricsIntValue;
31 import org.apache.hadoop.metrics.util.MetricsLongValue;
32 import org.apache.hadoop.metrics.util.MetricsRegistry;
33
34
35
36
37
38 public class ReplicationSourceMetrics implements Updater {
39 private final MetricsRecord metricsRecord;
40 private MetricsRegistry registry = new MetricsRegistry();
41
42
43 public final MetricsRate shippedOpsRate =
44 new MetricsRate("shippedOpsRate", registry);
45
46
47 public final MetricsRate shippedBatchesRate =
48 new MetricsRate("shippedBatchesRate", registry);
49
50
51 public final MetricsRate logEditsReadRate =
52 new MetricsRate("logEditsReadRate", registry);
53
54
55 public final MetricsRate logEditsFilteredRate =
56 new MetricsRate("logEditsFilteredRate", registry);
57
58
59 private final MetricsLongValue ageOfLastShippedOp =
60 new MetricsLongValue("ageOfLastShippedOp", registry);
61
62
63
64
65
66 public final MetricsIntValue sizeOfLogQueue =
67 new MetricsIntValue("sizeOfLogQueue", registry);
68
69
70
71
72 private long lastTimestampForAge = System.currentTimeMillis();
73
74
75
76
77
78 public ReplicationSourceMetrics(String id) {
79 MetricsContext context = MetricsUtil.getContext("hbase");
80 String name = Thread.currentThread().getName();
81 metricsRecord = MetricsUtil.createRecord(context, "replication");
82 metricsRecord.setTag("RegionServer", name);
83 context.registerUpdater(this);
84 try {
85 id = URLEncoder.encode(id, "UTF8");
86 } catch (UnsupportedEncodingException e) {
87 id = "CAN'T ENCODE UTF8";
88 }
89
90 new ReplicationStatistics(this.registry, "ReplicationSource for " + id);
91 }
92
93
94
95
96
97 public void setAgeOfLastShippedOp(long timestamp) {
98 lastTimestampForAge = timestamp;
99 ageOfLastShippedOp.set(System.currentTimeMillis() - lastTimestampForAge);
100 }
101
102
103
104
105
106
107 public void refreshAgeOfLastShippedOp() {
108 setAgeOfLastShippedOp(lastTimestampForAge);
109 }
110
111 @Override
112 public void doUpdates(MetricsContext metricsContext) {
113 synchronized (this) {
114 this.shippedOpsRate.pushMetric(this.metricsRecord);
115 this.shippedBatchesRate.pushMetric(this.metricsRecord);
116 this.logEditsReadRate.pushMetric(this.metricsRecord);
117 this.logEditsFilteredRate.pushMetric(this.metricsRecord);
118 this.ageOfLastShippedOp.pushMetric(this.metricsRecord);
119 this.sizeOfLogQueue.pushMetric(this.metricsRecord);
120 }
121 this.metricsRecord.update();
122 }
123 }