Package com.alibaba.jstorm.daemon.worker.metrics

Source Code of com.alibaba.jstorm.daemon.worker.metrics.MetricReporter$LatencyRatio

package com.alibaba.jstorm.daemon.worker.metrics;

import java.util.Random;
import java.util.concurrent.TimeUnit;

import org.slf4j.LoggerFactory;

import com.codahale.metrics.ConsoleReporter;
import com.codahale.metrics.Gauge;
import com.codahale.metrics.Meter;
import com.codahale.metrics.Slf4jReporter;
import com.codahale.metrics.Snapshot;
import com.codahale.metrics.Timer;
import com.alibaba.jstorm.daemon.worker.WorkerData;
import com.alibaba.jstorm.metric.JStormHistogram;
import com.alibaba.jstorm.metric.JStormTimer;
import com.alibaba.jstorm.metric.Metrics;

public class MetricReporter {

  final StormMetricReporter reporter1Minute;
  final Slf4jReporter reporter10Minute;

  WorkerData workerData;

  private boolean isEnable;

  public MetricReporter(WorkerData workerData) {
    this.workerData = workerData;

    reporter1Minute = StormMetricReporter.forRegistry(Metrics.getMetrics())
        .outputTo(LoggerFactory.getLogger(MetricReporter.class))
        .convertRatesTo(TimeUnit.SECONDS)
        .convertDurationsTo(TimeUnit.MILLISECONDS)
        .setWorkerData(workerData).build();

    reporter10Minute = Slf4jReporter.forRegistry(Metrics.getJstack())
        .outputTo(LoggerFactory.getLogger(MetricReporter.class))
        .convertRatesTo(TimeUnit.SECONDS)
        .convertDurationsTo(TimeUnit.MILLISECONDS).build();

  }

  public void start() {
    reporter1Minute.start(1, TimeUnit.MINUTES);
    reporter10Minute.start(10, TimeUnit.MINUTES);

  }

  public void stop() {
    reporter1Minute.stop();
    reporter10Minute.stop();

  }

  public void shutdown() {
    reporter10Minute.close();
    reporter1Minute.close();
  }

  public boolean isEnable() {
    return isEnable;
  }

  public void setEnable(boolean isEnable) {
    this.isEnable = isEnable;
    JStormTimer.setEnable(isEnable);
    JStormHistogram.setEnable(isEnable);
  }

  private static class LatencyRatio implements Gauge<Double> {
    Timer timer;

    protected LatencyRatio(Timer base) {
      timer = base;
    }

    @Override
    public Double getValue() {
      Snapshot snapshot = timer.getSnapshot();
      return snapshot.getMedian() / 1000000;
    }

  }

  public static void main(String[] args) {
    final Random random = new Random();
    random.setSeed(System.currentTimeMillis());

    Thread thread = new Thread(new Runnable() {

      final JStormTimer timer = Metrics.registerTimer("timer");
      final Meter meter = Metrics.registerMeter("meter");
      LatencyRatio latency = Metrics.getMetrics().register("latency", new LatencyRatio(timer.getInstance()));

      @Override
      public void run() {
        System.out.println("Begin to run");
        int counter = 0;
        while (counter++ < 40000) {
          meter.mark();
          timer.start();

          int rand = random.nextInt(10);

          try {
            Thread.sleep(rand * 1);
          } catch (InterruptedException e) {

          } finally {
            timer.stop();
          }

          try {
            Thread.sleep(2);
          } catch (InterruptedException e) {
          }
          if (counter % 1000 == 0) {
            System.out.println("Done " + counter);
          }

        }
      }
    });

    Metrics.getMetrics().registerAll(Metrics.getJstack());
    final ConsoleReporter reporter = ConsoleReporter
        .forRegistry(Metrics.getMetrics())
        .convertRatesTo(TimeUnit.SECONDS)
        .convertDurationsTo(TimeUnit.MILLISECONDS).build();
    reporter.start(1, TimeUnit.MINUTES);

    thread.start();
  }
}
TOP

Related Classes of com.alibaba.jstorm.daemon.worker.metrics.MetricReporter$LatencyRatio

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.