Sha256: ee2de697ce1386140c2182f442eb597b8ec50351dfc733be6b57d37805eee0bd

Contents?: true

Size: 1.1 KB

Versions: 4

Compression:

Stored size: 1.1 KB

Contents

# frozen_string_literal: true

module Datadog
  module AppSec
    module Metrics
      # A class responsible for collecting WAF and RASP call metrics.
      class Collector
        Store = Struct.new(:evals, :timeouts, :duration_ns, :duration_ext_ns, keyword_init: true)

        attr_reader :waf, :rasp

        def initialize
          @mutex = Mutex.new
          @waf = Store.new(evals: 0, timeouts: 0, duration_ns: 0, duration_ext_ns: 0)
          @rasp = Store.new(evals: 0, timeouts: 0, duration_ns: 0, duration_ext_ns: 0)
        end

        def record_waf(result)
          @mutex.synchronize do
            @waf.evals += 1
            @waf.timeouts += 1 if result.timeout?
            @waf.duration_ns += result.duration_ns
            @waf.duration_ext_ns += result.duration_ext_ns
          end
        end

        def record_rasp(result)
          @mutex.synchronize do
            @rasp.evals += 1
            @rasp.timeouts += 1 if result.timeout?
            @rasp.duration_ns += result.duration_ns
            @rasp.duration_ext_ns += result.duration_ext_ns
          end
        end
      end
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
datadog-2.12.1 lib/datadog/appsec/metrics/collector.rb
datadog-2.12.0 lib/datadog/appsec/metrics/collector.rb
datadog-2.11.0 lib/datadog/appsec/metrics/collector.rb
datadog-2.10.0 lib/datadog/appsec/metrics/collector.rb