com.github.marschall.micrometer.jfr.JfrCounter Maven / Gradle / Ivy
package com.github.marschall.micrometer.jfr;
import java.util.function.Function;
import io.micrometer.core.instrument.Counter;
import io.micrometer.core.instrument.DistributionSummary;
import io.micrometer.core.instrument.FunctionCounter;
import io.micrometer.core.instrument.FunctionTimer;
import io.micrometer.core.instrument.Gauge;
import io.micrometer.core.instrument.LongTaskTimer;
import io.micrometer.core.instrument.Meter;
import io.micrometer.core.instrument.TimeGauge;
import io.micrometer.core.instrument.Timer;
final class JfrCounter extends AbstractJfrMeter implements Counter {
private final AtomicDouble value;
JfrCounter(Id id) {
super(id, new CounterEventFactory(id));
this.value = new AtomicDouble();
}
@Override
public void increment(double amount) {
// REVIEW, should we validate the value is greater than 0 to make sure it is actually
// monotonically increasing? No other implementations do this
double currentValue = this.value.add(amount);
JfrCounterEvent event = this.newEmptyEvent();
event.setValues(amount, currentValue);
event.commit();
}
@Override
public double count() {
return this.value.doubleValue();
}
@Override
public T match(Function visitGauge, Function visitCounter, Function visitTimer,
Function visitSummary, Function visitLongTaskTimer,
Function visitTimeGauge, Function visitFunctionCounter,
Function visitFunctionTimer, Function visitMeter) {
return visitCounter.apply(this);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy