-
Notifications
You must be signed in to change notification settings - Fork 997
Expand file tree
/
Copy pathSdkLongCounter.java
More file actions
117 lines (96 loc) · 3.47 KB
/
Copy pathSdkLongCounter.java
File metadata and controls
117 lines (96 loc) · 3.47 KB
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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
/*
* Copyright The OpenTelemetry Authors
* SPDX-License-Identifier: Apache-2.0
*/
package io.opentelemetry.sdk.metrics;
import io.opentelemetry.api.common.Attributes;
import io.opentelemetry.api.metrics.DoubleCounterBuilder;
import io.opentelemetry.api.metrics.LongCounter;
import io.opentelemetry.api.metrics.LongCounterBuilder;
import io.opentelemetry.api.metrics.ObservableLongCounter;
import io.opentelemetry.api.metrics.ObservableLongMeasurement;
import io.opentelemetry.context.Context;
import io.opentelemetry.sdk.common.internal.ThrottlingLogger;
import io.opentelemetry.sdk.metrics.internal.descriptor.InstrumentDescriptor;
import io.opentelemetry.sdk.metrics.internal.state.WriteableMetricStorage;
import java.util.function.Consumer;
import java.util.function.Predicate;
import java.util.logging.Level;
import java.util.logging.Logger;
class SdkLongCounter extends AbstractInstrument implements LongCounter {
private static final Logger logger = Logger.getLogger(SdkLongCounter.class.getName());
private final ThrottlingLogger throttlingLogger = new ThrottlingLogger(logger);
final SdkMeter sdkMeter;
final WriteableMetricStorage storage;
SdkLongCounter(
InstrumentDescriptor descriptor, SdkMeter sdkMeter, WriteableMetricStorage storage) {
super(descriptor);
this.sdkMeter = sdkMeter;
this.storage = storage;
}
@Override
public boolean isEnabled() {
return sdkMeter.isMeterEnabled() && storage.isEnabled();
}
@Override
public void add(long increment, Attributes attributes, Context context) {
if (increment < 0) {
throttlingLogger.log(
Level.WARNING,
"Counters can only increase. Instrument "
+ getDescriptor().getName()
+ " has recorded a negative value.");
return;
}
storage.recordLong(increment, attributes, context);
}
@Override
public void add(long increment, Attributes attributes) {
add(increment, attributes, Context.current());
}
@Override
public void add(long increment) {
add(increment, Attributes.empty());
}
@Override
public void finish(Predicate<Attributes> condition, Context context) {
storage.finish(condition, context);
}
static class SdkLongCounterBuilder implements LongCounterBuilder {
final InstrumentBuilder builder;
SdkLongCounterBuilder(SdkMeter sdkMeter, String name) {
this.builder =
new InstrumentBuilder(name, InstrumentType.COUNTER, InstrumentValueType.LONG, sdkMeter);
}
@Override
public LongCounterBuilder setDescription(String description) {
builder.setDescription(description);
return this;
}
@Override
public LongCounterBuilder setUnit(String unit) {
builder.setUnit(unit);
return this;
}
@Override
public SdkLongCounter build() {
return builder.buildSynchronousInstrument(SdkLongCounter::new);
}
@Override
public DoubleCounterBuilder ofDoubles() {
return builder.swapBuilder(SdkDoubleCounter.SdkDoubleCounterBuilder::new);
}
@Override
public ObservableLongCounter buildWithCallback(Consumer<ObservableLongMeasurement> callback) {
return builder.buildLongAsynchronousInstrument(InstrumentType.OBSERVABLE_COUNTER, callback);
}
@Override
public ObservableLongMeasurement buildObserver() {
return builder.buildObservableMeasurement(InstrumentType.OBSERVABLE_COUNTER);
}
@Override
public String toString() {
return builder.toStringHelper(getClass().getSimpleName());
}
}
}