Module: Wavefront::Mixins

Included in:
ApiCaller, CoreApi, Distribution, Response
Defined in:
lib/wavefront-sdk/support/mixins.rb

Overview

Methods which help out in the SDK, but may also be useful when coding against the SDK.

Instance Method Summary collapse

Instance Method Details

#log(message, severity = :info) ⇒ Object



95
96
97
# File 'lib/wavefront-sdk/support/mixins.rb', line 95

def log(message, severity = :info)
  logger.log(message, severity)
end

#parse_relative_time(time, in_ms = false) ⇒ Integer

Do the real work for #relative_time

Parameters:

  • time (String)

    as +1h, -3d etc

  • in_ms (Bool) (defaults to: false)

    whether to return time differential in ms rather than s

Returns:

  • (Integer)

    time differential



57
58
59
60
61
62
63
64
65
66
# File 'lib/wavefront-sdk/support/mixins.rb', line 57

def parse_relative_time(time, in_ms = false)
  unless valid_relative_time?(time)
    raise Wavefront::Exception::InvalidRelativeTime
  end

  m = in_ms ? 1000 : 1
  time = time.delete('+')
  match = time.match(/^(-?\d*\.?\d*)([smhdwy])$/)
  (match[1].to_f * time_multiplier(match[2]) * m).to_i
end

#parse_time(time, in_ms = false) ⇒ Integer

Return a time as an integer, however it might come in.

Parameters:

  • time (Integer, String, Time)

    timestamp

  • in_ms (Boolean) (defaults to: false)

    whether to return epoch milliseconds. Passing in an integer timestamp returns itself, regardless of this value

Returns:

  • (Integer)

    epoch time in seconds

Raises:

  • Wavefront::InvalidTimestamp



25
26
27
28
29
# File 'lib/wavefront-sdk/support/mixins.rb', line 25

def parse_time(time, in_ms = false)
  return relative_time(time, in_ms) if time.to_s.match?(/^[-+]/)

  ParseTime.new(time, in_ms).parse!
end

#relative_time(time, in_ms = false, ref = Time.now) ⇒ Integer

Return a timestamp described by the given string. That is, ‘+5m’ is five minutes in the future, and ‘-.1h’ is half an hour ago.

Parameters:

  • time (String)

    relative time string. Must begin with + or -, followed by a number, finished with a lower-case time unit identifier. See #time_multiplier

  • in_ms (Boolean) (defaults to: false)

    whether to return epoch milliseconds. Passing in an integer timestamp returns itself, regardless of this value

  • ref (Time, DateTime) (defaults to: Time.now)

    calculate time relative to this point. Primarily for easier testing. Defaults to “now”.

Returns:

  • (Integer)

    integer timestamp

Raises:

  • (InvalidRelativeTime)

    if t does not meet requirements



46
47
48
49
# File 'lib/wavefront-sdk/support/mixins.rb', line 46

def relative_time(time, in_ms = false, ref = Time.now)
  ref = in_ms ? ref.to_datetime.strftime('%Q') : ref.to_time
  ref.to_i + parse_relative_time(time, in_ms)
end

#time_multiplier(suffix) ⇒ Integer

naively return the number of seconds from the given multiplier. This makes absolutely no attempt to compensate for any kind of daylight savings or calendar adjustment. A day is always going to 60 seconds x 60 minutes x 24 hours, and a year will always have 365 days.

Parameters:

Returns:

  • (Integer)

    the number of seconds in one unit of the given suffix

Raises:

  • InvalidTimeUnit if the suffix is unknown



87
88
89
90
91
92
93
# File 'lib/wavefront-sdk/support/mixins.rb', line 87

def time_multiplier(suffix)
  u = { s: 1, m: 60, h: 3600, d: 86_400, w: 604_800, y: 31_536_000 }

  return u[suffix.to_sym] if u.key?(suffix.to_sym)

  raise Wavefront::Exception::InvalidTimeUnit
end

#valid_relative_time?(time) ⇒ Bool

Is a relative time valid?

Parameters:

  • time (String)

    time as +1d, -1h etc

Returns:

  • (Bool)


72
73
74
# File 'lib/wavefront-sdk/support/mixins.rb', line 72

def valid_relative_time?(time)
  time =~ /^[+-](-?\d*\.?\d*)[smhdwy]$/
end