Package org.apache.blur.metrics

Source Code of org.apache.blur.metrics.ReporterSetup

package org.apache.blur.metrics;

import java.io.File;
import java.util.concurrent.TimeUnit;

import org.apache.blur.BlurConfiguration;
import org.apache.blur.log.Log;
import org.apache.blur.log.LogFactory;

import com.yammer.metrics.Metrics;
import com.yammer.metrics.core.MetricPredicate;
import com.yammer.metrics.reporting.ConsoleReporter;
import com.yammer.metrics.reporting.CsvReporter;
import com.yammer.metrics.reporting.GangliaReporter;
import com.yammer.metrics.reporting.GraphiteReporter;

/**
* 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.
*/

/**
*
*/
public abstract class ReporterSetup {

  private static final Log LOG = LogFactory.getLog(ReporterSetup.class);

  public static final String BLUR_SHARD_METRICS_REPORTERS = "blur.metrics.reporters";
  public static final String BLUR_SHARD_METRICS_REPORTER_PREFIX = "blur.metrics.reporter.";

  public enum TYPES {
    ConsoleReporter, CsvReporter, GangliaReporter, GraphiteReporter
  }

  public static void setupReporters(BlurConfiguration configuration) {
    String reportersStr = configuration.get(BLUR_SHARD_METRICS_REPORTERS);
    if (reportersStr == null || reportersStr.trim().isEmpty()) {
      return;
    }
    String[] reporters = reportersStr.split(",");
    for (String reporter : reporters) {
      setupReporter(configuration, reporter);
    }
  }

  public static void setupReporter(BlurConfiguration configuration, String reporter) {
    reporter = reporter.trim();
    try {
      TYPES type = TYPES.valueOf(reporter.trim());
      switch (type) {
      case ConsoleReporter:
        setupConsoleReporter(configuration);
        return;
      case CsvReporter:
        setupCsvReporter(configuration);
        return;
      case GangliaReporter:
        setupGangliaReporter(configuration);
        return;
      case GraphiteReporter:
        setupGraphiteReporter(configuration);
        return;
      default:
        break;
      }
    } catch (IllegalArgumentException e) {
      LOG.info("Cannot resolve reporter of type [{0}] trying to find class.", reporter);
      try {
        Class<?> reporterClazz = Class.forName(reporter);
        reflectiveSetup(reporterClazz, configuration, reporter);
      } catch (ClassNotFoundException ex) {
        LOG.error("Cannot find class [{0}]", reporter);
      }
    }
  }

  private static void reflectiveSetup(Class<?> reporterClazz, BlurConfiguration configuration, String reporter) {
    try {
      Object o = reporterClazz.newInstance();
      if (o instanceof ReporterSetup) {
        ReporterSetup reporterSetup = (ReporterSetup) o;
        reporterSetup.setup(configuration);
      } else {
        LOG.error("Could not setup [{0}] because it does not extends [{1}]", reporter, ReporterSetup.class.getName());
      }
    } catch (InstantiationException e) {
      LOG.error("Could not instantiate [{0}]", e, reporter);
    } catch (IllegalAccessException e) {
      LOG.error("Could not instantiate [{0}]", e, reporter);
    }
  }

  private static void setupGraphiteReporter(BlurConfiguration configuration) {
    long period = configuration.getLong(BLUR_SHARD_METRICS_REPORTER_PREFIX + "graphite." + "period", 5l);
    TimeUnit unit = TimeUnit.valueOf(configuration.get(BLUR_SHARD_METRICS_REPORTER_PREFIX + "graphite." + "unit",
        "SECONDS").toUpperCase());
    String host = configuration.get(BLUR_SHARD_METRICS_REPORTER_PREFIX + "graphite." + "host", "localhost");
    int port = configuration.getInt(BLUR_SHARD_METRICS_REPORTER_PREFIX + "graphite." + "port", -1);
    String prefix = configuration.get(BLUR_SHARD_METRICS_REPORTER_PREFIX + "graphite." + "prefix", "");
    GraphiteReporter.enable(period, unit, host, port, prefix);
  }

  private static void setupGangliaReporter(BlurConfiguration configuration) {
    long period = configuration.getLong(BLUR_SHARD_METRICS_REPORTER_PREFIX + "ganglia." + "period", 5l);
    TimeUnit unit = TimeUnit.valueOf(configuration.get(BLUR_SHARD_METRICS_REPORTER_PREFIX + "ganglia." + "unit",
        "SECONDS").toUpperCase());
    String host = configuration.get(BLUR_SHARD_METRICS_REPORTER_PREFIX + "ganglia." + "host", "localhost");
    int port = configuration.getInt(BLUR_SHARD_METRICS_REPORTER_PREFIX + "ganglia." + "port", -1);
    String prefix = configuration.get(BLUR_SHARD_METRICS_REPORTER_PREFIX + "ganglia." + "prefix", "");
    boolean compressPackageNames = configuration.getBoolean(BLUR_SHARD_METRICS_REPORTER_PREFIX + "ganglia."
        + "compressPackageNames", false);
    GangliaReporter.enable(Metrics.defaultRegistry(), period, unit, host, port, prefix, MetricPredicate.ALL,
        compressPackageNames);
  }

  private static void setupCsvReporter(BlurConfiguration configuration) {
    long period = configuration.getLong(BLUR_SHARD_METRICS_REPORTER_PREFIX + "csv." + "period", 5l);
    TimeUnit unit = TimeUnit.valueOf(configuration.get(BLUR_SHARD_METRICS_REPORTER_PREFIX + "csv." + "unit", "SECONDS")
        .toUpperCase());
    File outputDir = new File(configuration.get(BLUR_SHARD_METRICS_REPORTER_PREFIX + "csv." + "outputDir", "."));
    CsvReporter.enable(outputDir, period, unit);
  }

  private static void setupConsoleReporter(BlurConfiguration configuration) {
    long period = configuration.getLong(BLUR_SHARD_METRICS_REPORTER_PREFIX + "console." + "period", 5l);
    TimeUnit unit = TimeUnit.valueOf(configuration.get(BLUR_SHARD_METRICS_REPORTER_PREFIX + "console." + "unit",
        "SECONDS").toUpperCase());
    ConsoleReporter.enable(period, unit);
  }

  public abstract void setup(BlurConfiguration configuration);

}
TOP

Related Classes of org.apache.blur.metrics.ReporterSetup

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.