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

com.ea.orbit.metrics.JvmMetricsComponent Maven / Gradle / Ivy

The newest version!
package com.ea.orbit.metrics;

import com.codahale.metrics.Metric;
import com.codahale.metrics.MetricRegistry;
import com.codahale.metrics.MetricSet;
import com.codahale.metrics.jvm.GarbageCollectorMetricSet;
import com.codahale.metrics.jvm.MemoryUsageGaugeSet;
import com.codahale.metrics.jvm.ThreadStatesGaugeSet;
import com.ea.orbit.concurrent.Task;
import com.ea.orbit.container.Startable;
import com.ea.orbit.metrics.jvm.ThreadCPUUsageSet;

import javax.inject.Singleton;
import java.util.Map;

/**
 * Created by jefft on 9/18/2015.
 */
@Singleton
public class JvmMetricsComponent implements Startable
{

    GarbageCollectorMetricSet gcMetricSet = new GarbageCollectorMetricSet();
    MemoryUsageGaugeSet memoryMetricSet = new MemoryUsageGaugeSet();
    ThreadStatesGaugeSet threadsMetricSet = new ThreadStatesGaugeSet();
    ThreadCPUUsageSet threadCPUMetricSet = new ThreadCPUUsageSet();

    @Override
    public Task start()
    {
        MetricRegistry registry = MetricsManager.getInstance().getRegistry();
        try
        {
            registry.register("gc", gcMetricSet);
            registry.register("memory", memoryMetricSet);
            registry.register("threads", threadsMetricSet);
            registry.register("threads", threadCPUMetricSet);
        }
        catch(IllegalArgumentException iae)
        {
            //This is actually ok. This means that the metrics are already registered.
        }

        return Task.done();
    }

    @Override
    public Task stop()
    {
        MetricRegistry registry = MetricsManager.getInstance().getRegistry();
        unregisterMetricSet(gcMetricSet, registry);
        unregisterMetricSet(memoryMetricSet, registry);
        unregisterMetricSet(threadsMetricSet, registry);
        unregisterMetricSet(threadCPUMetricSet, registry);
        return Task.done();
    }

    private void unregisterMetricSet(MetricSet metricSet, MetricRegistry registry)
    {
        Map metrics = metricSet.getMetrics();
        metrics.entrySet().stream().map(Map.Entry::getKey).forEach(metricName -> registry.remove(metricName));
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy