class Tabs::Metrics::Task

Constants

Stats

Attributes

key[R]

Public Class Methods

new(key) click to toggle source
# File lib/tabs/metrics/task.rb, line 19
def initialize(key)
  @key = key
end

Public Instance Methods

complete(token, timestamp=Time.now) click to toggle source
# File lib/tabs/metrics/task.rb, line 28
def complete(token, timestamp=Time.now)
  Token.new(token, key).complete(timestamp)
  true
end
drop!() click to toggle source
# File lib/tabs/metrics/task.rb, line 50
def drop!
  del_by_prefix("stat:task:#{key}")
end
start(token, timestamp=Time.now) click to toggle source
# File lib/tabs/metrics/task.rb, line 23
def start(token, timestamp=Time.now)
  Token.new(token, key).start(timestamp)
  true
end
stats(period, resolution) click to toggle source
# File lib/tabs/metrics/task.rb, line 33
def stats(period, resolution)
  range = timestamp_range(period, resolution)
  started_tokens = tokens_for_period(range, resolution, "started")
  completed_tokens = tokens_for_period(range, resolution, "completed")
  matching_tokens = started_tokens.select { |token| completed_tokens.include? token }
  completion_rate = (matching_tokens.size.to_f / range.size).round(Config.decimal_precision)
  elapsed_times = matching_tokens.map { |t| t.time_elapsed(resolution) }
  average_completion_time = matching_tokens.blank? ? 0.0 : (elapsed_times.sum) / matching_tokens.size
  Stats.new(
    started_tokens.size,
    completed_tokens.size,
    matching_tokens.size,
    completion_rate,
    average_completion_time
  )
end
storage_key(resolution, timestamp, type) click to toggle source
# File lib/tabs/metrics/task.rb, line 54
def storage_key(resolution, timestamp, type)
  formatted_time = Tabs::Resolution.serialize(resolution, timestamp)
  "stat:task:#{key}:#{type}:#{resolution}:#{formatted_time}"
end

Private Instance Methods

keys_for_range(range, resolution, type) click to toggle source
# File lib/tabs/metrics/task.rb, line 66
def keys_for_range(range, resolution, type)
  range.map { |timestamp| storage_key(resolution, timestamp, type) }
end
tokens_for_period(range, resolution, type) click to toggle source
# File lib/tabs/metrics/task.rb, line 61
def tokens_for_period(range, resolution, type)
  keys = keys_for_range(range, resolution, type)
  smembers_all(*keys).compact.map(&:to_a).flatten.map { |t| Token.new(t, key) }
end