dosubot[bot] commented on issue #2601:
URL:
https://github.com/apache/incubator-hugegraph/issues/2601#issuecomment-2256215226
<!-- Answer -->
To address the issue of not serializing all Timer metrics correctly, you
need to ensure that the `TimerSerializer` class is used to serialize Timer
metrics. This class handles the serialization of various statistical measures
and the duration unit.
Here is the `TimerSerializer` class for reference:
```java
private static class TimerSerializer extends StdSerializer<Timer> {
private static final long serialVersionUID = 6283520188524929099L;
private final String rateUnit;
private final double rateFactor;
private final String durationUnit;
private final double durationFactor;
private final boolean showSamples;
private TimerSerializer(TimeUnit rateUnit, TimeUnit durationUnit,
boolean showSamples) {
super(Timer.class);
this.rateUnit = calculateRateUnit(rateUnit, "calls");
this.rateFactor = rateUnit.toSeconds(1);
this.durationUnit = durationUnit.toString().toLowerCase(Locale.US);
this.durationFactor = 1.0 / durationUnit.toNanos(1);
this.showSamples = showSamples;
}
@Override
public void serialize(Timer timer, JsonGenerator json,
SerializerProvider provider) throws IOException {
json.writeStartObject();
final Snapshot snapshot = timer.getSnapshot();
json.writeNumberField("count", timer.getCount());
json.writeNumberField("min", snapshot.getMin() *
this.durationFactor);
json.writeNumberField("mean", snapshot.getMean() *
this.durationFactor);
json.writeNumberField("max", snapshot.getMax() *
this.durationFactor);
json.writeNumberField("stddev", snapshot.getStdDev() *
this.durationFactor);
json.writeNumberField("p50", snapshot.getMedian() *
this.durationFactor);
json.writeNumberField("p75", snapshot.get75thPercentile() *
this.durationFactor);
json.writeNumberField("p95", snapshot.get95thPercentile() *
this.durationFactor);
json.writeNumberField("p98", snapshot.get98thPercentile() *
this.durationFactor);
json.writeNumberField("p99", snapshot.get99thPercentile() *
this.durationFactor);
json.writeNumberField("p999", snapshot.get999thPercentile() *
this.durationFactor);
json.writeStringField("duration_unit", this.durationUnit);
if (this.showSamples) {
final long[] values = snapshot.getValues();
final double[] scaledValues = new double[values.length];
for (int i = 0; i < values.length; i++) {
scaledValues[i] = values[i] * this.durationFactor;
}
json.writeObjectField("values", scaledValues);
}
json.writeNumberField("mean_rate", timer.getMeanRate() *
this.rateFactor);
json.writeNumberField("m15_rate", timer.getFifteenMinuteRate() *
this.rateFactor);
json.writeNumberField("m5_rate", timer.getFiveMinuteRate() *
this.rateFactor);
json.writeNumberField("m1_rate", timer.getOneMinuteRate() *
this.rateFactor);
json.writeStringField("rate_unit", this.rateUnit);
json.writeEndObject();
}
}
```
To integrate this with Spring Actuator, ensure that your Spring
configuration includes this custom serializer for Timer metrics. This can be
done by registering the `MetricsModule` with the appropriate configuration in
your Spring application.
Additionally, make sure your `application.yml` file has the necessary
configurations to expose the metrics:
```yml
management:
metrics:
export:
prometheus:
enabled: true
endpoints:
web:
exposure:
include: "*"
```
This setup will ensure that all Timer metrics are serialized correctly and
can be retrieved via the Spring Actuator interface
<sup>[[1]](https://github.com/apache/incubator-hugegraph/blob/master/hugegraph-server/hugegraph-api/src/main/java/org/apache/hugegraph/metrics/MetricsModule.java)</sup><sup>[[2]](https://github.com/apache/incubator-hugegraph/blob/master/hugegraph-store/hg-store-dist/src/assembly/static/conf/application.yml)</sup>.
<!-- Dosu Comment Footer -->
*To continue talking to [Dosu](https://dosu.dev), mention @dosu.*
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]