Sha256: 2745937bbb368df9e8dbf5900b32e64cd0b35c2da70194c718fde2f77e848718

Contents?: true

Size: 1.75 KB

Versions: 5

Compression:

Stored size: 1.75 KB

Contents

require 'forwardable'

require 'ddtrace/runtime/metrics'

require 'ddtrace/worker'
require 'ddtrace/workers/polling'

module Datadog
  module Workers
    # Emits runtime metrics asynchronously on a timed loop
    class RuntimeMetrics < Worker
      extend Forwardable
      include Workers::Polling

      # In seconds
      DEFAULT_FLUSH_INTERVAL = 10
      DEFAULT_BACK_OFF_MAX = 30

      attr_reader \
        :metrics

      def initialize(options = {})
        @metrics = options.fetch(:metrics) { Runtime::Metrics.new }

        # Workers::Async::Thread settings
        self.fork_policy = options.fetch(:fork_policy, Workers::Async::Thread::FORK_POLICY_STOP)

        # Workers::IntervalLoop settings
        self.loop_base_interval = options.fetch(:interval, DEFAULT_FLUSH_INTERVAL)
        self.loop_back_off_ratio = options[:back_off_ratio] if options.key?(:back_off_ratio)
        self.loop_back_off_max = options.fetch(:back_off_max, DEFAULT_BACK_OFF_MAX)

        self.enabled = options.fetch(:enabled, false)
      end

      def perform
        metrics.flush
        true
      end

      def associate_with_span(*args)
        # Start the worker
        metrics.associate_with_span(*args).tap { perform }
      end

      # TODO: `close_metrics` is only needed because
      # Datadog::Components directly manipulates the lifecycle of
      # Runtime::Metrics.statsd instances.
      # This should be avoided, as it prevents this class from
      # ensuring correct resource decommission of its internal
      # dependencies.
      def stop(*args, close_metrics: true)
        self.enabled = false
        result = super(*args)
        @metrics.close if close_metrics
        result
      end

      def_delegators \
        :metrics,
        :register_service
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
ddtrace-0.51.1 lib/ddtrace/workers/runtime_metrics.rb
ddtrace-0.51.0 lib/ddtrace/workers/runtime_metrics.rb
ddtrace-0.50.0 lib/ddtrace/workers/runtime_metrics.rb
ddtrace-0.49.0 lib/ddtrace/workers/runtime_metrics.rb
ddtrace-0.48.0 lib/ddtrace/workers/runtime_metrics.rb