1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.apache.hadoop.hbase.metrics;
19
20 import org.apache.commons.logging.Log;
21 import org.apache.commons.logging.LogFactory;
22 import org.apache.hadoop.classification.InterfaceAudience;
23 import org.apache.hadoop.metrics.MetricsRecord;
24 import org.apache.hadoop.metrics.util.MetricsRegistry;
25 import org.apache.hadoop.metrics.util.MetricsTimeVaryingRate;
26 import org.apache.hadoop.util.StringUtils;
27
28
29
30
31
32 @Deprecated
33 @InterfaceAudience.Private
34 public class PersistentMetricsTimeVaryingRate extends MetricsTimeVaryingRate {
35 protected static final Log LOG =
36 LogFactory.getLog("org.apache.hadoop.hbase.metrics");
37
38 protected boolean reset = false;
39 protected long lastOper = 0;
40 protected long totalOps = 0;
41
42
43
44
45
46
47
48 public PersistentMetricsTimeVaryingRate(final String nam,
49 final MetricsRegistry registry,
50 final String description) {
51 super(nam, registry, description);
52 }
53
54
55
56
57
58
59 public PersistentMetricsTimeVaryingRate(final String nam,
60 MetricsRegistry registry) {
61 this(nam, registry, NO_DESCRIPTION);
62 }
63
64
65
66
67
68
69
70
71
72
73 @Override
74 public synchronized void pushMetric(final MetricsRecord mr) {
75
76 super.pushMetric(mr);
77
78
79 try {
80 mr.setMetric(getName() + "_num_ops", totalOps);
81 } catch (Exception e) {
82 LOG.info("pushMetric failed for " + getName() + "\n" +
83 StringUtils.stringifyException(e));
84 }
85 if (reset) {
86
87 super.inc(getPreviousIntervalAverageTime());
88 reset = false;
89 } else {
90
91 maintainStats();
92 }
93 }
94
95
96
97
98
99
100 @Override
101 public synchronized void inc(final int numOps, final long time) {
102 super.inc(numOps, time);
103 totalOps += numOps;
104 }
105
106
107
108
109
110 @Override
111 public synchronized void inc(final long time) {
112 super.inc(time);
113 ++totalOps;
114 }
115
116
117
118
119
120 public synchronized void resetMinMaxAvg() {
121 reset = true;
122 }
123
124
125
126
127
128
129 protected void maintainStats() {
130 int curOps = this.getPreviousIntervalNumOps();
131 if (curOps > 0) {
132 long curTime = this.getPreviousIntervalAverageTime();
133 long totalTime = curTime * curOps;
134 if (curTime == 0 || totalTime / curTime == curOps) {
135 super.inc(curOps, totalTime);
136 } else {
137 LOG.info("Stats for " + this.getName() + " overflowed! resetting");
138 }
139 }
140 }
141 }