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