Sha256: 5df8ae100ba33f08be9dc90504c43fd0cd2e1370be55c0e41ab54cdfad30dad9

Contents?: true

Size: 1.92 KB

Versions: 12

Compression:

Stored size: 1.92 KB

Contents

# typed: true

require_relative '../../datadog/core/metrics/metric'
require_relative '../../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

12 entries across 12 versions & 1 rubygems

Version Path
ddtrace-1.9.0 lib/ddtrace/transport/statistics.rb
ddtrace-1.8.0 lib/ddtrace/transport/statistics.rb
ddtrace-1.7.0 lib/ddtrace/transport/statistics.rb
ddtrace-1.6.1 lib/ddtrace/transport/statistics.rb
ddtrace-1.6.0 lib/ddtrace/transport/statistics.rb
ddtrace-1.5.2 lib/ddtrace/transport/statistics.rb
ddtrace-1.5.1 lib/ddtrace/transport/statistics.rb
ddtrace-1.5.0 lib/ddtrace/transport/statistics.rb
ddtrace-1.4.2 lib/ddtrace/transport/statistics.rb
ddtrace-1.4.1 lib/ddtrace/transport/statistics.rb
ddtrace-1.4.0 lib/ddtrace/transport/statistics.rb
ddtrace-1.3.0 lib/ddtrace/transport/statistics.rb