Sha256: bed417a9ac8a80a7d204baca6b9f5aa559cedd7ff133684614f247eab0e71879

Contents?: true

Size: 1.9 KB

Versions: 4

Compression:

Stored size: 1.9 KB

Contents

# typed: true

require 'datadog/core/metrics/metric'
require 'datadog/core/diagnostics/health'

module Datadog
  module Transport
    # Tracks statistics for transports
    module Statistics
      def stats
        @stats ||= Counts.new
      end

      def update_stats_from_response!(response)
        if response.ok?
          stats.success += 1
          stats.consecutive_errors = 0
        else
          stats.client_error += 1 if response.client_error?
          stats.server_error += 1 if response.server_error?
          stats.internal_error += 1 if response.internal_error?
          stats.consecutive_errors += 1
        end

        # Send health metrics
        Datadog.health_metrics.send_metrics(
          metrics_for_response(response).values
        )
      end

      def metrics_for_response(response)
        {}.tap do |metrics|
          metrics[:api_errors] = Core::Metrics::Metric.new(:api_errors, nil, 1) if response.internal_error?
          metrics[:api_responses] = Core::Metrics::Metric.new(:api_responses, nil, 1) unless response.internal_error?
        end
      end

      def update_stats_from_exception!(exception)
        stats.internal_error += 1
        stats.consecutive_errors += 1

        # Send health metrics
        Datadog.health_metrics.send_metrics(
          metrics_for_exception(exception).values
        )
      end

      def metrics_for_exception(_exception)
        { api_errors: Core::Metrics::Metric.new(:api_errors, nil, 1) }
      end

      # Stat counts
      class Counts
        attr_accessor \
          :success,
          :client_error,
          :server_error,
          :internal_error,
          :consecutive_errors

        def initialize
          reset!
        end

        def reset!
          @success = 0
          @client_error = 0
          @server_error = 0
          @internal_error = 0
          @consecutive_errors = 0
        end
      end
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
ddtrace-1.2.0 lib/ddtrace/transport/statistics.rb
ddtrace-1.1.0 lib/ddtrace/transport/statistics.rb
ddtrace-1.0.0 lib/ddtrace/transport/statistics.rb
ddtrace-1.0.0.beta2 lib/ddtrace/transport/statistics.rb