All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.peterphi.std.guice.metrics.rest.impl.MetricSerialiser Maven / Gradle / Ivy

There is a newer version: 10.1.5
Show newest version
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 - 2024 Weber Informatics LLC | Privacy Policy