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]

Reply via email to