cloudfoundry/collector

View on GitHub
lib/collector/config.rb

Summary

Maintainability
A
1 hr
Test Coverage
require "steno"

module Collector
  # Singleton config used throughout
  class Config
    class << self
      attr_accessor :index, :tsdb_host, :tsdb_port, :aws_access_key_id,
        :aws_secret_access_key, :datadog_api_key, :datadog_application_key,
        :nats_uri, :discover_interval, :varz_interval, :healthz_interval,
        :prune_interval, :nats_ping_interval, :local_metrics_interval,
        :deployment_name, :datadog_data_threshold, :datadog_time_threshold_in_seconds, :cf_metrics_api_host,
        :graphite_host, :graphite_port

      def tsdb
        tsdb_host && tsdb_port
      end

      def aws_cloud_watch
        aws_access_key_id && aws_secret_access_key
      end

      def datadog
        datadog_api_key
      end

      def cf_metrics
        cf_metrics_api_host
      end

      def graphite
        graphite_host && graphite_port
      end

      def logger
        raise "logger was used without being configured" unless @logging_configured
        @logger ||= Steno.logger("collector")
      end

      def setup_logging(config={})
        log_counter = Steno::Sink::Counter.new
        cfg = Steno::Config.from_hash(config)
        cfg.sinks << log_counter
        Steno.init(cfg)
        @logging_configured = true
        logger.info("collector.started")
      end

      # Configures the various attributes
      #
      # @param [Hash] config the config Hash
      def configure(config)
        @index = config["index"].to_i
        setup_logging(config["logging"])

        @deployment_name = config["deployment_name"] || "untitled_dev"

        tsdb_config = config["tsdb"] || {}
        @tsdb_host = tsdb_config["host"]
        @tsdb_port = tsdb_config["port"]

        aws_config = config["aws_cloud_watch"] || {}
        @aws_access_key_id = aws_config["access_key_id"]
        @aws_secret_access_key = aws_config["secret_access_key"]

        datadog_config = config["datadog"] || {}
        @datadog_api_key = datadog_config["api_key"]
        @datadog_application_key = datadog_config["application_key"]
        @datadog_data_threshold = datadog_config.fetch("data_threshold", 1000).to_i
        @datadog_time_threshold_in_seconds = datadog_config.fetch("time_threshold_in_seconds", 10).to_i

        cf_metrics_config = config["cf_metrics"] || {}
        @cf_metrics_api_host = cf_metrics_config["host"]

        graphite_config = config["graphite"] || {}
        @graphite_host = graphite_config["host"]
        @graphite_port = graphite_config["port"]

        @nats_uri = config["message_bus_uris"]

        intervals = config["intervals"]

        @discover_interval = intervals["discover"] || 60
        @varz_interval = intervals["varz"] || 10
        @healthz_interval = intervals["healthz"] || 5
        @prune_interval = intervals["prune"] || 300
        @nats_ping_interval = intervals["nats_ping"] || 10
        @local_metrics_interval = intervals["local_metrics"] || 10
      end
    end
  end
end