/* * Copyright 2017 Hewlett-Packard Enterprise Development Company, L.P. * Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. */ package com.hp.autonomy.frontend.find.core.metrics; import com.codahale.metrics.MetricRegistry; import com.codahale.metrics.graphite.Graphite; import com.codahale.metrics.graphite.GraphiteReporter; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.actuate.autoconfigure.MetricRepositoryAutoConfiguration; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import java.net.InetSocketAddress; import java.util.concurrent.TimeUnit; import static com.hp.autonomy.frontend.find.core.metrics.MetricsConfiguration.FIND_METRICS_ENABLED_PROPERTY_KEY; /** * Customised copy of {@link MetricRepositoryAutoConfiguration} */ @Configuration @ConditionalOnProperty(FIND_METRICS_ENABLED_PROPERTY_KEY) public class MetricsConfiguration { public static final String FIND_METRICS_ENABLED_PROPERTY_KEY = "find.metrics.enabled"; public static final char METRIC_NAME_SEPARATOR = '.'; private static final boolean FIND_METRICS_ENABLED_DEFAULT = false; public static final String FIND_METRICS_ENABLED_PROPERTY = "${" + FIND_METRICS_ENABLED_PROPERTY_KEY + ':' + FIND_METRICS_ENABLED_DEFAULT + '}'; private static final String FIND_METRICS_TYPE_PROPERTY_KEY = "find.metrics.type"; private static final String FIND_METRICS_TYPE_DEFAULT = "timer"; public static final String FIND_METRICS_TYPE_PROPERTY = "${" + FIND_METRICS_TYPE_PROPERTY_KEY + ':' + FIND_METRICS_TYPE_DEFAULT + '}'; private static final String GRAPHITE_HOST_PROPERTY_KEY = "graphite.host"; private static final String GRAPHITE_HOST_PROPERTY = "${" + GRAPHITE_HOST_PROPERTY_KEY + '}'; private static final String GRAPHITE_PORT_PROPERTY_KEY = "graphite.port"; private static final int GRAPHITE_PORT_DEFAULT = 2003; private static final String GRAPHITE_PORT_PROPERTY = "${" + GRAPHITE_PORT_PROPERTY_KEY + ':' + GRAPHITE_PORT_DEFAULT + '}'; private static final String GRAPHITE_SCHEDULE_INTERVAL_PROPERTY_KEY = "graphite.schedule-interval"; private static final int GRAPHITE_SCHEDULE_INTERVAL_DEFAULT = 1000; private static final String GRAPHITE_SCHEDULE_INTERVAL_PROPERTY = "${" + GRAPHITE_SCHEDULE_INTERVAL_PROPERTY_KEY + ':' + GRAPHITE_SCHEDULE_INTERVAL_DEFAULT + '}'; private static final String GRAPHITE_PREFIX = "find"; @Bean @ConditionalOnProperty(GRAPHITE_HOST_PROPERTY_KEY) public GraphiteReporter graphiteReporter(final MetricRegistry registry, @Value(GRAPHITE_HOST_PROPERTY) final String graphiteHost, @Value(GRAPHITE_PORT_PROPERTY) final int graphitePort, @Value(GRAPHITE_SCHEDULE_INTERVAL_PROPERTY) final int graphiteScheduleInterval) { final Graphite graphite = new Graphite(new InetSocketAddress(graphiteHost, graphitePort)); final GraphiteReporter reporter = GraphiteReporter.forRegistry(registry) .prefixedWith(GRAPHITE_PREFIX) .build(graphite); reporter.start(graphiteScheduleInterval, TimeUnit.MILLISECONDS); return reporter; } }