blob: 6642b06ff83d5b092ff0f092d080f250edaa1e5d (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
|
// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.container.jdisc.state;
import com.yahoo.jdisc.Metric;
import com.yahoo.jdisc.application.MetricConsumer;
import java.util.Map;
/**
* @author <a href="mailto:simon@yahoo-inc.com">Simon Thoresen Hult</a>
*/
final class StateMetricConsumer implements MetricConsumer {
final static Metric.Context NULL_CONTEXT = StateMetricContext.newInstance(null);
private final Object lock = new Object();
private MetricSnapshot metricSnapshot = new MetricSnapshot();
@Override
public void set(String key, Number val, Metric.Context ctx) {
synchronized (lock) {
metricSnapshot.set(dimensionsOrDefault(ctx), key, val);
}
}
private MetricDimensions dimensionsOrDefault(Metric.Context ctx) {
return (MetricDimensions)(ctx != null ? ctx : NULL_CONTEXT);
}
@Override
public void add(String key, Number val, Metric.Context ctx) {
synchronized (lock) {
metricSnapshot.add(dimensionsOrDefault(ctx), key, val);
}
}
@Override
public Metric.Context createContext(Map<String, ?> properties) {
return StateMetricContext.newInstance(properties);
}
MetricSnapshot createSnapshot() {
MetricSnapshot metricSnapshot;
synchronized (lock) {
metricSnapshot = this.metricSnapshot;
this.metricSnapshot = this.metricSnapshot.createSnapshot();
}
return metricSnapshot;
}
}
|