1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.apache.hadoop.hbase.client.metrics;
19
20 import java.util.HashMap;
21 import java.util.Map;
22 import java.util.concurrent.atomic.AtomicLong;
23
24 import org.apache.hadoop.hbase.classification.InterfaceAudience;
25 import org.apache.hadoop.hbase.classification.InterfaceStability;
26
27 import com.google.common.collect.ImmutableMap;
28
29
30
31
32 @InterfaceAudience.Public
33 @InterfaceStability.Evolving
34 public class ServerSideScanMetrics {
35
36
37
38 private final Map<String, AtomicLong> counters = new HashMap<String, AtomicLong>();
39
40
41
42
43
44
45 protected AtomicLong createCounter(String counterName) {
46 AtomicLong c = new AtomicLong(0);
47 counters.put(counterName, c);
48 return c;
49 }
50
51 public static final String COUNT_OF_ROWS_SCANNED_KEY = "ROWS_SCANNED";
52 public static final String COUNT_OF_ROWS_FILTERED_KEY = "ROWS_FILTERED";
53
54
55
56
57 public final AtomicLong countOfRowsFiltered = createCounter(COUNT_OF_ROWS_FILTERED_KEY);
58
59
60
61
62
63 public final AtomicLong countOfRowsScanned = createCounter(COUNT_OF_ROWS_SCANNED_KEY);
64
65
66
67
68
69 public void setCounter(String counterName, long value) {
70 AtomicLong c = this.counters.get(counterName);
71 if (c != null) {
72 c.set(value);
73 }
74 }
75
76
77
78
79
80 public boolean hasCounter(String counterName) {
81 return this.counters.containsKey(counterName);
82 }
83
84
85
86
87
88 public AtomicLong getCounter(String counterName) {
89 return this.counters.get(counterName);
90 }
91
92
93
94
95
96 public void addToCounter(String counterName, long delta) {
97 AtomicLong c = this.counters.get(counterName);
98 if (c != null) {
99 c.addAndGet(delta);
100 }
101 }
102
103
104
105
106
107
108 public Map<String, Long> getMetricsMap() {
109
110 ImmutableMap.Builder<String, Long> builder = ImmutableMap.builder();
111
112 for (Map.Entry<String, AtomicLong> e : this.counters.entrySet()) {
113 builder.put(e.getKey(), e.getValue().getAndSet(0));
114 }
115
116 return builder.build();
117 }
118 }