Sha256: 5fd37d754e44da44a455469e5011daf3a60a327b6ab182df807054a748799e6e

Contents?: true

Size: 1.49 KB

Versions: 25

Compression:

Stored size: 1.49 KB

Contents

# frozen_string_literal: true
module Dynflow
  module TelemetryAdapters
    class StatsD < Abstract
      def initialize(host = '127.0.0.1:8125')
        require 'statsd-instrument'

        @instances = {}
        @host = host
        ::StatsD.backend = ::StatsD::Instrument::Backends::UDPBackend.new(host, :statsd)
      end

      def add_counter(name, description, instance_labels)
        raise "Metric already registered: #{name}" if @instances[name]
        @instances[name] = instance_labels
      end

      def add_gauge(name, description, instance_labels)
        raise "Metric already registered: #{name}" if @instances[name]
        @instances[name] = instance_labels
      end

      def add_histogram(name, description, instance_labels, buckets = DEFAULT_BUCKETS)
        raise "Metric already registered: #{name}" if @instances[name]
        @instances[name] = instance_labels
      end

      def increment_counter(name, value, tags)
        ::StatsD.increment(name_tag_mapping(name, tags), value)
      end

      def set_gauge(name, value, tags)
        ::StatsD.gauge(name_tag_mapping(name, tags), value)
      end

      def observe_histogram(name, value, tags)
        ::StatsD.measure(name_tag_mapping(name, tags), value)
      end

      private

      def name_tag_mapping(name, tags)
        instances = @instances[name]
        return name if instances.nil? || instances.empty?
        (name.to_s + '.' + instances.map {|x| tags[x]}.compact.join('.')).tr('-:/ ', '____')
      end
    end
  end
end

Version data entries

25 entries across 25 versions & 1 rubygems

Version Path
dynflow-1.8.2 lib/dynflow/telemetry_adapters/statsd.rb
dynflow-1.8.1 lib/dynflow/telemetry_adapters/statsd.rb
dynflow-1.8.0 lib/dynflow/telemetry_adapters/statsd.rb
dynflow-1.7.0 lib/dynflow/telemetry_adapters/statsd.rb
dynflow-1.6.11 lib/dynflow/telemetry_adapters/statsd.rb
dynflow-1.6.10 lib/dynflow/telemetry_adapters/statsd.rb
dynflow-1.6.8 lib/dynflow/telemetry_adapters/statsd.rb
dynflow-1.6.7 lib/dynflow/telemetry_adapters/statsd.rb
dynflow-1.6.6 lib/dynflow/telemetry_adapters/statsd.rb
dynflow-1.6.5 lib/dynflow/telemetry_adapters/statsd.rb
dynflow-1.6.4 lib/dynflow/telemetry_adapters/statsd.rb
dynflow-1.6.3 lib/dynflow/telemetry_adapters/statsd.rb
dynflow-1.6.2 lib/dynflow/telemetry_adapters/statsd.rb
dynflow-1.6.1 lib/dynflow/telemetry_adapters/statsd.rb
dynflow-1.4.9 lib/dynflow/telemetry_adapters/statsd.rb
dynflow-1.4.8 lib/dynflow/telemetry_adapters/statsd.rb
dynflow-1.5.0 lib/dynflow/telemetry_adapters/statsd.rb
dynflow-1.4.7 lib/dynflow/telemetry_adapters/statsd.rb
dynflow-1.4.6 lib/dynflow/telemetry_adapters/statsd.rb
dynflow-1.4.5 lib/dynflow/telemetry_adapters/statsd.rb