Sha256: 225ceecfbcb3b5a03a55b96aef9b6422b2b6ff521e7ee9d6a14f9a9bd1d50c63

Contents?: true

Size: 1.35 KB

Versions: 11

Compression:

Stored size: 1.35 KB

Contents

# frozen_string_literal: true

module Datadog
  module CI
    module Remote
      # Parses "slow_test_retries" payload for early flake detection settings
      #
      # Example payload:
      # {
      #  "5s" => 10,
      #  "10s" => 5,
      #  "30s" => 3,
      #  "5m" => 2
      # }
      #
      # The payload above means that for tests that run less than 5 seconds, we should retry them 10 times,
      # for tests that run less than 10 seconds, we should retry them 5 times, and so on.
      class SlowTestRetries
        attr_reader :entries

        Entry = Struct.new(:duration, :max_attempts)

        DURATION_MEASURES = {
          "s" => 1,
          "m" => 60
        }.freeze

        def initialize(payload)
          @entries = parse(payload)
        end

        def max_attempts_for_duration(duration)
          @entries.each do |entry|
            return entry.max_attempts if duration < entry.duration
          end

          0
        end

        private

        def parse(payload)
          (payload || {}).keys.filter_map do |key|
            duration, measure = key.match(/(\d+)(\w+)/)&.captures
            next if duration.nil? || measure.nil? || !DURATION_MEASURES.key?(measure)

            Entry.new(duration.to_f * DURATION_MEASURES.fetch(measure, 1), payload[key].to_i)
          end.sort_by(&:duration)
        end
      end
    end
  end
end

Version data entries

11 entries across 11 versions & 1 rubygems

Version Path
datadog-ci-1.14.0 lib/datadog/ci/remote/slow_test_retries.rb
datadog-ci-1.13.0 lib/datadog/ci/remote/slow_test_retries.rb
datadog-ci-1.12.0 lib/datadog/ci/remote/slow_test_retries.rb
datadog-ci-1.11.0 lib/datadog/ci/remote/slow_test_retries.rb
datadog-ci-1.10.0 lib/datadog/ci/remote/slow_test_retries.rb
datadog-ci-1.9.0 lib/datadog/ci/remote/slow_test_retries.rb
datadog-ci-1.8.1 lib/datadog/ci/remote/slow_test_retries.rb
datadog-ci-1.8.0 lib/datadog/ci/remote/slow_test_retries.rb
datadog-ci-1.7.0 lib/datadog/ci/remote/slow_test_retries.rb
datadog-ci-1.6.0 lib/datadog/ci/remote/slow_test_retries.rb
datadog-ci-1.5.0 lib/datadog/ci/remote/slow_test_retries.rb