Package org.platformlayer.metrics.client.codahale

Source Code of org.platformlayer.metrics.client.codahale.CodahaleMetricRegistry

package org.platformlayer.metrics.client.codahale;

import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;
import java.util.concurrent.TimeUnit;

import org.platformlayer.metrics.HasMetrics;
import org.platformlayer.metrics.MetricHistogram;
import org.platformlayer.metrics.MetricKey;
import org.platformlayer.metrics.MetricMeter;
import org.platformlayer.metrics.MetricRegistry;
import org.platformlayer.metrics.MetricTimer;
import org.platformlayer.metrics.MetricsSource;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.google.common.base.Joiner;
import com.google.common.collect.Lists;
import com.yammer.metrics.core.MetricName;
import com.yammer.metrics.core.MetricsRegistry;

public class CodahaleMetricRegistry implements MetricRegistry {
  private static final Logger log = LoggerFactory.getLogger(CodahaleMetricRegistry.class);

  final MetricsRegistry registry;

  final CopyOnWriteArrayList<MetricsSource> reporters = Lists.newCopyOnWriteArrayList();

  CodahaleMetricRegistry(MetricsRegistry registry) {
    this.registry = registry;
  }

  private MetricName toMetricName(MetricKey metricKey) {
    Class<?> sourceClass = metricKey.getSourceClass();

    String[] path = metricKey.getPath();
    String name = Joiner.on('.').join(path);

    return new MetricName(sourceClass, name);
  }

  @Override
  public MetricTimer getTimer(MetricKey metricKey) {
    MetricName metricName = toMetricName(metricKey);
    return new MetricTimerAdapter(registry.newTimer(metricName, TimeUnit.MILLISECONDS, TimeUnit.SECONDS));
  }

  @Override
  public MetricHistogram getHistogram(MetricKey metricKey) {
    MetricName metricName = toMetricName(metricKey);
    boolean biased = true;
    return new MetricHistogramAdapter(registry.newHistogram(metricName, biased));
  }

  @Override
  public MetricMeter getCounter(MetricKey metricKey) {
    MetricName metricName = toMetricName(metricKey);
    String eventType = "events";
    return new MetricMeterAdapter(registry.newMeter(metricName, eventType, TimeUnit.SECONDS));
  }

  @Override
  public void discoverMetrics(Object o) {
    if (o instanceof MetricsSource) {
      log.debug("Adding metrics from " + o);
      add((MetricsSource) o);
    }

    if (o instanceof HasMetrics) {
      log.debug("Discovering metrics on" + o);
      ((HasMetrics) o).discoverMetrics(this);
    }
  }

  @Override
  public void add(MetricsSource metricsSource) {
    reporters.add(metricsSource);
  }

  @Override
  public List<MetricsSource> getAdditionalSources() {
    return reporters;
  }

}
TOP

Related Classes of org.platformlayer.metrics.client.codahale.CodahaleMetricRegistry

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.