blob: 5db347ebb876f1d6aa60f7be335d4416c5156599 [file] [log] [blame]
/**
* Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version
* 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions
* and limitations under the License.
*/
package org.apache.storm.metric;
import com.codahale.metrics.Gauge;
import com.codahale.metrics.Histogram;
import com.codahale.metrics.Meter;
import com.codahale.metrics.Metric;
import com.codahale.metrics.MetricRegistry;
import com.codahale.metrics.MetricSet;
import com.codahale.metrics.Reservoir;
import com.codahale.metrics.Timer;
import java.util.List;
import java.util.Map;
import org.apache.storm.daemon.metrics.MetricsUtils;
import org.apache.storm.daemon.metrics.reporters.PreparableReporter;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class StormMetricsRegistry {
private static final Logger LOG = LoggerFactory.getLogger(StormMetricsRegistry.class);
private final MetricRegistry registry = new MetricRegistry();
private List<PreparableReporter> reporters;
private boolean reportersStarted = false;
public Meter registerMeter(String name) {
return registry.meter(name);
}
public Meter registerMeter(String name, Meter meter) {
return registry.meter(name, () -> meter);
}
public Timer registerTimer(String name) {
return registry.timer(name);
}
public Histogram registerHistogram(String name) {
return registry.histogram(name);
}
public Histogram registerHistogram(String name, Reservoir reservoir) {
return registry.histogram(name, () -> new Histogram(reservoir));
}
public <V> Gauge<V> registerGauge(final String name, Gauge<V> gauge) {
return registry.gauge(name, () -> gauge);
}
public void registerAll(MetricSet metrics) {
registry.registerAll(metrics);
}
public void removeAll(MetricSet metrics) {
//Could be replaced when metrics support remove all functions
// https://github.com/dropwizard/metrics/pull/1280
Map<String, Metric> nameToMetric = metrics.getMetrics();
registry.removeMatching((name, metric) -> nameToMetric.containsKey(name));
}
public Meter getMeter(String meterName) {
return registry.getMeters().get(meterName);
}
public void startMetricsReporters(Map<String, Object> daemonConf) {
reporters = MetricsUtils.getPreparableReporters(daemonConf);
for (PreparableReporter reporter : reporters) {
reporter.prepare(registry, daemonConf);
reporter.start();
LOG.info("Started statistics report plugin...");
}
reportersStarted = true;
}
public void stopMetricsReporters() {
if (reportersStarted) {
for (PreparableReporter reporter : reporters) {
reporter.stop();
}
reportersStarted = false;
}
}
}