Package com.tinkerpop.rexster.server.metrics

Source Code of com.tinkerpop.rexster.server.metrics.GraphiteReporterConfig

package com.tinkerpop.rexster.server.metrics;

import com.codahale.metrics.MetricRegistry;
import com.codahale.metrics.graphite.Graphite;
import com.codahale.metrics.graphite.GraphiteReporter;
import com.tinkerpop.rexster.Tokens;
import org.apache.commons.configuration.HierarchicalConfiguration;
import org.apache.log4j.Logger;

import java.net.InetSocketAddress;
import java.util.ArrayList;
import java.util.List;

/**
* Configures Graphite as a reporter.
*
* @author Stephen Mallette (http://stephen.genoprime.com)
*/
class GraphiteReporterConfig extends AbstractHostPortReporterConfig {
    private static final Logger logger = Logger.getLogger(GraphiteReporterConfig.class);

    private final String prefix;

    private final List<GraphiteReporter> reporters = new ArrayList<GraphiteReporter>();

    public GraphiteReporterConfig(final HierarchicalConfiguration config, final MetricRegistry metricRegistry) {
        super(config, metricRegistry);
        this.hostsString = this.registryConfiguration.getString(Tokens.REXSTER_REPORTER_HOSTS, "localhost:2003");
        this.prefix = this.registryConfiguration.getString(Tokens.REXSTER_REPORTER_PREFIX, "");

        logger.info(String.format("Configured Graphite Metric Reporter [%s].", this.hostsString));
    }

    @Override
    public List<HostPort> getFullHostList()
    {
        return getHostListAndStringList();
    }

    @Override
    public boolean enable()
    {
        final List<HostPort> hosts = getFullHostList();
        if (hosts == null || hosts.isEmpty())
        {
            logger.error("No hosts specified, cannot enable GraphiteReporter");
            return false;
        }
        for (HostPort hostPort : hosts)
        {
            try
            {
                logger.info(String.format("Enabling GraphiteReporter to %s:%s", hostPort.getHost(), hostPort.getPort()));

                final Graphite graphite = new Graphite(new InetSocketAddress(hostPort.getHost(), hostPort.getPort()));
                final GraphiteReporter reporter = GraphiteReporter.forRegistry(this.metricRegistry)
                        .convertDurationsTo(this.getRealDurationTimeUnitConversion())
                        .convertRatesTo(this.getRealRateTimeUnitConversion())
                        .prefixedWith(this.prefix)
                        .filter(new RegexMetricFilter(this.inclusion, this.exclusion))
                        .build(graphite);
                reporter.start(this.period, this.getRealTimeUnit());

                reporters.add(reporter);

            }
            catch (Exception e)
            {
                logger.error("Failed to enable GraphiteReporter", e);
                return false;
            }
        }
        return true;
    }

    @Override
    public void disable() {
        for (GraphiteReporter reporter : reporters) {
            reporter.stop();
        }

        reporters.clear();
    }
}
TOP

Related Classes of com.tinkerpop.rexster.server.metrics.GraphiteReporterConfig

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.