diff --git a/bookkeeper-stats-providers/codahale-metrics-provider/src/main/java/org/apache/bookkeeper/stats/CodahaleMetricsProvider.java b/bookkeeper-stats-providers/codahale-metrics-provider/src/main/java/org/apache/bookkeeper/stats/CodahaleMetricsProvider.java deleted file mode 100644 index bbf7bcd0524..00000000000 --- a/bookkeeper-stats-providers/codahale-metrics-provider/src/main/java/org/apache/bookkeeper/stats/CodahaleMetricsProvider.java +++ /dev/null @@ -1,154 +0,0 @@ -/** - * 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.bookkeeper.stats; - -import com.codahale.metrics.CsvReporter; -import com.codahale.metrics.JmxReporter; -import com.codahale.metrics.MetricFilter; -import com.codahale.metrics.MetricRegistry; -import com.codahale.metrics.ScheduledReporter; -import com.codahale.metrics.Slf4jReporter; -import com.codahale.metrics.graphite.Graphite; -import com.codahale.metrics.graphite.GraphiteReporter; -import com.codahale.metrics.jvm.GarbageCollectorMetricSet; -import com.codahale.metrics.jvm.MemoryUsageGaugeSet; -import com.google.common.base.Strings; -import com.google.common.net.HostAndPort; -import java.io.File; -import java.net.InetSocketAddress; -import java.util.ArrayList; -import java.util.List; -import java.util.concurrent.TimeUnit; -import org.apache.commons.configuration.Configuration; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -/** - * A {@link StatsProvider} implemented based on Codahale metrics library. - */ -@Deprecated -@SuppressWarnings("deprecation") -public class CodahaleMetricsProvider implements StatsProvider { - - static final Logger LOG = LoggerFactory.getLogger(CodahaleMetricsProvider.class); - - MetricRegistry metrics = null; - List reporters = new ArrayList(); - JmxReporter jmx = null; - - synchronized void initIfNecessary() { - if (metrics == null) { - metrics = new MetricRegistry(); - metrics.registerAll(new MemoryUsageGaugeSet()); - metrics.registerAll(new GarbageCollectorMetricSet()); - } - } - - public synchronized MetricRegistry getMetrics() { - return metrics; - } - - @Override - public void start(Configuration conf) { - initIfNecessary(); - - int metricsOutputFrequency = conf.getInt("codahaleStatsOutputFrequencySeconds", 60); - String prefix = conf.getString("codahaleStatsPrefix", ""); - String graphiteHost = conf.getString("codahaleStatsGraphiteEndpoint"); - String csvDir = conf.getString("codahaleStatsCSVEndpoint"); - String slf4jCat = conf.getString("codahaleStatsSlf4jEndpoint"); - String jmxDomain = conf.getString("codahaleStatsJmxEndpoint"); - - if (!Strings.isNullOrEmpty(graphiteHost)) { - LOG.info("Configuring stats with graphite"); - HostAndPort addr = HostAndPort.fromString(graphiteHost); - final Graphite graphite = new Graphite( - new InetSocketAddress(addr.getHostText(), addr.getPort())); - reporters.add(GraphiteReporter.forRegistry(getMetrics()) - .prefixedWith(prefix) - .convertRatesTo(TimeUnit.SECONDS) - .convertDurationsTo(TimeUnit.MILLISECONDS) - .filter(MetricFilter.ALL) - .build(graphite)); - } - if (!Strings.isNullOrEmpty(csvDir)) { - // NOTE: 1/ metrics output files are exclusive to a given process - // 2/ the output directory must exist - // 3/ if output files already exist they are not overwritten and there is no metrics output - File outdir; - if (!Strings.isNullOrEmpty(prefix)) { - outdir = new File(csvDir, prefix); - } else { - outdir = new File(csvDir); - } - LOG.info("Configuring stats with csv output to directory [{}]", outdir.getAbsolutePath()); - reporters.add(CsvReporter.forRegistry(getMetrics()) - .convertRatesTo(TimeUnit.SECONDS) - .convertDurationsTo(TimeUnit.MILLISECONDS) - .build(outdir)); - } - if (!Strings.isNullOrEmpty(slf4jCat)) { - LOG.info("Configuring stats with slf4j"); - reporters.add(Slf4jReporter.forRegistry(getMetrics()) - .outputTo(LoggerFactory.getLogger(slf4jCat)) - .convertRatesTo(TimeUnit.SECONDS) - .convertDurationsTo(TimeUnit.MILLISECONDS) - .build()); - } - if (!Strings.isNullOrEmpty(jmxDomain)) { - LOG.info("Configuring stats with jmx"); - jmx = JmxReporter.forRegistry(getMetrics()) - .inDomain(jmxDomain) - .convertRatesTo(TimeUnit.SECONDS) - .convertDurationsTo(TimeUnit.MILLISECONDS) - .build(); - jmx.start(); - } - - for (ScheduledReporter r : reporters) { - r.start(metricsOutputFrequency, TimeUnit.SECONDS); - } - } - - @Override - public void stop() { - for (ScheduledReporter r : reporters) { - r.report(); - r.stop(); - } - if (jmx != null) { - jmx.stop(); - } - } - - @Override - public StatsLogger getStatsLogger(String name) { - initIfNecessary(); - return new CodahaleStatsLogger(getMetrics(), name); - } - - @Override - public String getStatsName(String... statsComponents) { - if (statsComponents.length == 0) { - return ""; - } - String baseName = statsComponents[0]; - String[] names = new String[statsComponents.length - 1]; - System.arraycopy(statsComponents, 1, names, 0, names.length); - return MetricRegistry.name(baseName, names); - } -} diff --git a/bookkeeper-stats-providers/codahale-metrics-provider/src/main/java/org/apache/bookkeeper/stats/CodahaleOpStatsLogger.java b/bookkeeper-stats-providers/codahale-metrics-provider/src/main/java/org/apache/bookkeeper/stats/CodahaleOpStatsLogger.java deleted file mode 100644 index f6ee602ab9c..00000000000 --- a/bookkeeper-stats-providers/codahale-metrics-provider/src/main/java/org/apache/bookkeeper/stats/CodahaleOpStatsLogger.java +++ /dev/null @@ -1,80 +0,0 @@ -/** - * 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.bookkeeper.stats; - -import com.codahale.metrics.Snapshot; -import com.codahale.metrics.Timer; -import java.util.Arrays; -import java.util.concurrent.TimeUnit; - -@Deprecated -class CodahaleOpStatsLogger implements OpStatsLogger { - final Timer success; - final Timer fail; - - CodahaleOpStatsLogger(Timer success, Timer fail) { - this.success = success; - this.fail = fail; - } - - // OpStatsLogger functions - @Override - public void registerFailedEvent(long eventLatency, TimeUnit unit) { - fail.update(eventLatency, unit); - } - - @Override - public void registerSuccessfulEvent(long eventLatency, TimeUnit unit) { - success.update(eventLatency, unit); - } - - @Override - public void registerSuccessfulValue(long value) { - // Values are inserted as millis, which is the unit they will be presented, to maintain 1:1 scale - success.update(value, TimeUnit.MILLISECONDS); - } - - @Override - public void registerFailedValue(long value) { - // Values are inserted as millis, which is the unit they will be presented, to maintain 1:1 scale - fail.update(value, TimeUnit.MILLISECONDS); - } - - @Override - public synchronized void clear() { - // can't clear a timer - } - - /** - * This function should go away soon (hopefully). - */ - @Override - public synchronized OpStatsData toOpStatsData() { - long numFailed = fail.getCount(); - long numSuccess = success.getCount(); - Snapshot s = success.getSnapshot(); - double avgLatencyMillis = s.getMean(); - - double[] defaultPercentiles = {10, 50, 90, 99, 99.9, 99.99}; - long[] latenciesMillis = new long[defaultPercentiles.length]; - Arrays.fill(latenciesMillis, Long.MAX_VALUE); - for (int i = 0; i < defaultPercentiles.length; i++) { - latenciesMillis[i] = (long) s.getValue(defaultPercentiles[i] / 100); - } - return new OpStatsData(numSuccess, numFailed, avgLatencyMillis, latenciesMillis); - } -} diff --git a/bookkeeper-stats-providers/codahale-metrics-provider/src/main/java/org/apache/bookkeeper/stats/CodahaleStatsLogger.java b/bookkeeper-stats-providers/codahale-metrics-provider/src/main/java/org/apache/bookkeeper/stats/CodahaleStatsLogger.java deleted file mode 100644 index 7a75258ead3..00000000000 --- a/bookkeeper-stats-providers/codahale-metrics-provider/src/main/java/org/apache/bookkeeper/stats/CodahaleStatsLogger.java +++ /dev/null @@ -1,109 +0,0 @@ -/** - * 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.bookkeeper.stats; - -import static com.codahale.metrics.MetricRegistry.name; - -import com.codahale.metrics.MetricRegistry; -import com.codahale.metrics.Timer; - -/** - * A {@link StatsLogger} implemented based on Codahale metrics library. - */ -@Deprecated -public class CodahaleStatsLogger implements StatsLogger { - protected final String basename; - final MetricRegistry metrics; - - CodahaleStatsLogger(MetricRegistry metrics, String basename) { - this.metrics = metrics; - this.basename = basename; - } - - @Override - public OpStatsLogger getOpStatsLogger(String statName) { - Timer success = metrics.timer(name(basename, statName)); - Timer failure = metrics.timer(name(basename, statName + "-fail")); - return new CodahaleOpStatsLogger(success, failure); - } - - @Override - public Counter getCounter(String statName) { - final com.codahale.metrics.Counter c = metrics.counter(name(basename, statName)); - return new Counter() { - @Override - public synchronized void clear() { - long cur = c.getCount(); - c.dec(cur); - } - - @Override - public Long get() { - return c.getCount(); - } - - @Override - public void inc() { - c.inc(); - } - - @Override - public void dec() { - c.dec(); - } - - @Override - public void add(long delta) { - c.inc(delta); - } - }; - } - - @Override - public void registerGauge(final String statName, final Gauge gauge) { - String metricName = name(basename, statName); - metrics.remove(metricName); - - metrics.register(metricName, new com.codahale.metrics.Gauge() { - @Override - public T getValue() { - return gauge.getSample(); - } - }); - } - - @Override - public void unregisterGauge(String statName, Gauge gauge) { - // do nothing right now as the Codahale doesn't support conditional removal - } - - @Override - public StatsLogger scope(String scope) { - String scopeName; - if (0 == basename.length()) { - scopeName = scope; - } else { - scopeName = name(basename, scope); - } - return new CodahaleStatsLogger(metrics, scopeName); - } - - @Override - public void removeScope(String name, StatsLogger statsLogger) { - // no-op. the codahale stats logger doesn't have the references for stats logger. - } -}