Sha256: 2840f827be262978d2ec5c33075e83cca943adb884f1f579ff78a19cdeea722f

Contents?: true

Size: 1.75 KB

Versions: 35

Compression:

Stored size: 1.75 KB

Contents

# frozen_string_literal: true

module Datadog
  module Core
    module Utils
      # Helper methods for parsing string values into Numeric
      module Duration
        def self.call(value, base: :s)
          cast = if value.include?('.')
                   method(:Float)
                 else
                   method(:Integer)
                 end

          scale = case base
                  when :s
                    1_000_000_000
                  when :ms
                    1_000_000
                  when :us
                    1000
                  when :ns
                    1
                  else
                    raise ArgumentError, "invalid base: #{base.inspect}"
                  end

          result = case value
                   when /^(\d+(?:\.\d+)?)h$/
                     cast.call(Regexp.last_match(1)) * 1_000_000_000 * 60 * 60 / scale
                   when /^(\d+(?:\.\d+)?)m$/
                     cast.call(Regexp.last_match(1)) * 1_000_000_000 * 60 / scale
                   when /^(\d+(?:\.\d+)?)s$/
                     cast.call(Regexp.last_match(1)) * 1_000_000_000 / scale
                   when /^(\d+(?:\.\d+)?)ms$/
                     cast.call(Regexp.last_match(1)) * 1_000_000 / scale
                   when /^(\d+(?:\.\d+)?)us$/
                     cast.call(Regexp.last_match(1)) * 1_000 / scale
                   when /^(\d+(?:\.\d+)?)ns$/
                     cast.call(Regexp.last_match(1)) / scale
                   when /^(\d+(?:\.\d+)?)$/
                     cast.call(Regexp.last_match(1))
                   else
                     raise ArgumentError, "invalid duration: #{value.inspect}"
                   end
          # @type var result: Numeric
          result.round
        end
      end
    end
  end
end

Version data entries

35 entries across 35 versions & 2 rubygems

Version Path
datadog-2.12.2 lib/datadog/core/utils/duration.rb
datadog-2.12.1 lib/datadog/core/utils/duration.rb
datadog-2.12.0 lib/datadog/core/utils/duration.rb
datadog-2.11.0 lib/datadog/core/utils/duration.rb
datadog-2.10.0 lib/datadog/core/utils/duration.rb
datadog-2.9.0 lib/datadog/core/utils/duration.rb
datadog-2.8.0 lib/datadog/core/utils/duration.rb
datadog-2.7.1 lib/datadog/core/utils/duration.rb
datadog-2.7.0 lib/datadog/core/utils/duration.rb
datadog-2.6.0 lib/datadog/core/utils/duration.rb
datadog-2.5.0 lib/datadog/core/utils/duration.rb
datadog-2.4.0 lib/datadog/core/utils/duration.rb
datadog-2.3.0 lib/datadog/core/utils/duration.rb
datadog-2.2.0 lib/datadog/core/utils/duration.rb
ddtrace-1.23.3 lib/datadog/core/utils/duration.rb
ddtrace-1.23.2 lib/datadog/core/utils/duration.rb
datadog-2.1.0 lib/datadog/core/utils/duration.rb
datadog-2.0.0 lib/datadog/core/utils/duration.rb
ddtrace-1.23.1 lib/datadog/core/utils/duration.rb
datadog-2.0.0.beta2 lib/datadog/core/utils/duration.rb