
com.peterphi.std.guice.metrics.rest.impl.MetricSerialiser Maven / Gradle / Ivy
package com.peterphi.std.guice.metrics.rest.impl;
import com.codahale.metrics.Counter;
import com.codahale.metrics.Gauge;
import com.codahale.metrics.Histogram;
import com.codahale.metrics.Meter;
import com.codahale.metrics.Snapshot;
import com.codahale.metrics.health.HealthCheck;
import com.peterphi.std.guice.metrics.rest.types.HealthCheckResult;
import com.peterphi.std.guice.metrics.rest.types.HealthImplication;
import com.peterphi.std.guice.metrics.rest.types.MetricsCounter;
import com.peterphi.std.guice.metrics.rest.types.MetricsGauge;
import com.peterphi.std.guice.metrics.rest.types.MetricsHistogram;
import com.peterphi.std.guice.metrics.rest.types.MetricsMeter;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.SortedMap;
class MetricSerialiser
{
public MetricsHistogram serialise(String name, Histogram histo)
{
Snapshot snapshot = histo.getSnapshot();
final long count = histo.getCount();
return new MetricsHistogram(name,
count,
snapshot.size(),
snapshot.getMin(),
snapshot.getMax(),
snapshot.getStdDev(),
snapshot.getMean(),
snapshot.getMedian(),
snapshot.get75thPercentile(),
snapshot.get95thPercentile(),
snapshot.get98thPercentile(),
snapshot.get99thPercentile(),
snapshot.get999thPercentile());
}
public MetricsGauge serialise(String name, Gauge gauge)
{
return new MetricsGauge(name, String.valueOf(gauge.getValue()));
}
public MetricsCounter serialise(String name, Counter counter)
{
return new MetricsCounter(name, counter.getCount());
}
public MetricsMeter serialise(String name, Meter meter)
{
return new MetricsMeter(name,
meter.getCount(),
meter.getOneMinuteRate(),
meter.getFiveMinuteRate(),
meter.getFifteenMinuteRate(),
meter.getMeanRate());
}
public List serialiseCounters(final Map counters)
{
List list = new ArrayList<>();
for (Map.Entry entry : counters.entrySet())
list.add(serialise(entry.getKey(), entry.getValue()));
return list;
}
public List serialiseHistograms(final Map counters)
{
List list = new ArrayList<>();
for (Map.Entry entry : counters.entrySet())
list.add(serialise(entry.getKey(), entry.getValue()));
return list;
}
public List serialiseGauges(final Map counters)
{
List list = new ArrayList<>();
for (Map.Entry entry : counters.entrySet())
list.add(serialise(entry.getKey(), entry.getValue()));
return list;
}
public List serialiseMeters(final Map counters)
{
List list = new ArrayList<>();
for (Map.Entry entry : counters.entrySet())
list.add(serialise(entry.getKey(), entry.getValue()));
return list;
}
public List serialiseHealthChecks(final SortedMap results)
{
List list = new ArrayList<>();
for (Map.Entry entry : results.entrySet())
list.add(serialise(entry.getKey(), entry.getValue()));
return list;
}
private HealthCheckResult serialise(String name, final HealthCheck.Result value)
{
final HealthImplication implication = HealthImplication.valueOfByPrefix(name);
// Discard everything before the first : (unless there is none or the implication is unknown, in which case leave it alone)
if (implication != null)
{
final String[] namebits = name.split(":", 2);
if (namebits.length == 2)
name = namebits[1];
}
return new HealthCheckResult(name, implication, value.isHealthy(), value.getMessage());
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy