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}