001/**
002 * Copyright (c) 2015-2022, Michael Yang 杨福海 (fuhai999@gmail.com).
003 * <p>
004 * Licensed under the Apache License, Version 2.0 (the "License");
005 * you may not use this file except in compliance with the License.
006 * You may obtain a copy of the License at
007 * <p>
008 * http://www.apache.org/licenses/LICENSE-2.0
009 * <p>
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS,
012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013 * See the License for the specific language governing permissions and
014 * limitations under the License.
015 */
016package io.jboot.support.metric.reporter.graphite;
017
018import com.codahale.metrics.MetricFilter;
019import com.codahale.metrics.MetricRegistry;
020import com.codahale.metrics.graphite.Graphite;
021import com.codahale.metrics.graphite.GraphiteReporter;
022import io.jboot.Jboot;
023import io.jboot.support.metric.JbootMetricReporter;
024import io.jboot.utils.StrUtil;
025
026import java.net.InetSocketAddress;
027import java.util.concurrent.TimeUnit;
028
029/**
030 * @author Michael Yang 杨福海 (fuhai999@gmail.com)
031 * @version V1.0
032 */
033public class JbootGraphiteReporter implements JbootMetricReporter {
034    @Override
035    public void report(MetricRegistry metricRegistry) {
036
037        JbootMetricGraphiteReporterConfig config = Jboot.config(JbootMetricGraphiteReporterConfig.class);
038
039        if (StrUtil.isBlank(config.getHost())) {
040            throw new NullPointerException("graphite reporter host must not be null, please config jboot.metrics.reporter.graphite.host in you properties.");
041        }
042        if (config.getPort() == null) {
043            throw new NullPointerException("graphite reporter port must not be null, please config jboot.metrics.reporter.graphite.port in you properties.");
044        }
045        if (config.getPrefixedWith() == null) {
046            throw new NullPointerException("graphite reporter prefixedWith must not be null, please config jboot.metrics.reporter.graphite.prefixedWith in you properties.");
047        }
048
049        Graphite graphite = new Graphite(new InetSocketAddress(config.getHost(), config.getPort()));
050
051        GraphiteReporter reporter = GraphiteReporter.forRegistry(metricRegistry)
052                .prefixedWith(config.getPrefixedWith())
053                .convertRatesTo(TimeUnit.SECONDS)
054                .convertDurationsTo(TimeUnit.MILLISECONDS)
055                .filter(MetricFilter.ALL)
056                .build(graphite);
057
058        reporter.start(1, TimeUnit.MINUTES);
059    }
060}