Sha256: ed791e17ace56f49d0644a5864351be92d3ee8f5be973611d3899140ba8fc3fb

Contents?: true

Size: 1.83 KB

Versions: 14

Compression:

Stored size: 1.83 KB

Contents

require 'ddtrace/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
        Diagnostics::Health.metrics.send_metrics(
          metrics_for_response(response).values
        )
      end

      def metrics_for_response(response)
        {}.tap do |metrics|
          metrics[:api_errors] = Metrics::Metric.new(:api_errors, nil, 1) if response.internal_error?
          metrics[:api_responses] = 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
        Diagnostics::Health.metrics.send_metrics(
          metrics_for_exception(exception).values
        )
      end

      def metrics_for_exception(_exception)
        { api_errors: 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

14 entries across 14 versions & 2 rubygems

Version Path
ls-trace-0.1.2 lib/ddtrace/transport/statistics.rb
ddtrace-0.34.2 lib/ddtrace/transport/statistics.rb
ddtrace-0.34.1 lib/ddtrace/transport/statistics.rb
ddtrace-0.34.0 lib/ddtrace/transport/statistics.rb
ddtrace-0.33.1 lib/ddtrace/transport/statistics.rb
ddtrace-0.33.0 lib/ddtrace/transport/statistics.rb
ddtrace-0.32.0 lib/ddtrace/transport/statistics.rb
ddtrace-0.31.1 lib/ddtrace/transport/statistics.rb
ddtrace-0.31.0 lib/ddtrace/transport/statistics.rb
ddtrace-0.30.1 lib/ddtrace/transport/statistics.rb
ddtrace-0.30.0 lib/ddtrace/transport/statistics.rb
ddtrace-0.29.1 lib/ddtrace/transport/statistics.rb
ls-trace-0.1.1 lib/ddtrace/transport/statistics.rb
ddtrace-0.29.0 lib/ddtrace/transport/statistics.rb