Class: TabsTabs::Metrics::Task

Inherits:
Object
  • Object
show all
Includes:
Helpers, Storage
Defined in:
lib/tabs_tabs/metrics/task.rb,
lib/tabs_tabs/metrics/task/token.rb

Defined Under Namespace

Classes: Stats, Token, UnstartedTaskMetricError

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from Helpers

#normalize_period, #timestamp_range, #to_numeric

Methods included from Storage

#del, #del_by_prefix, #exists, #expireat, #get, #hdel, #hget, #hgetall, #hincrby, #hkeys, #hset, #incr, #mget, #redis, #rpush, #sadd, #set, #sismember, #smembers, #smembers_all, #tabs_key, #ttl

Constructor Details

#initialize(key) ⇒ Task

Returns a new instance of Task.



19
20
21
# File 'lib/tabs_tabs/metrics/task.rb', line 19

def initialize(key)
  @key = key
end

Instance Attribute Details

#keyObject (readonly)

Returns the value of attribute key.



17
18
19
# File 'lib/tabs_tabs/metrics/task.rb', line 17

def key
  @key
end

Instance Method Details

#complete(token, timestamp = Time.now) ⇒ Object



28
29
30
31
# File 'lib/tabs_tabs/metrics/task.rb', line 28

def complete(token, timestamp=Time.now)
  Token.new(token, key).complete(timestamp)
  true
end

#drop!Object



50
51
52
# File 'lib/tabs_tabs/metrics/task.rb', line 50

def drop!
  del_by_prefix("stat:task:#{key}")
end

#start(token, timestamp = Time.now) ⇒ Object



23
24
25
26
# File 'lib/tabs_tabs/metrics/task.rb', line 23

def start(token, timestamp=Time.now)
  Token.new(token, key).start(timestamp)
  true
end

#stats(period, resolution) ⇒ Object



33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# File 'lib/tabs_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) ⇒ Object



54
55
56
57
# File 'lib/tabs_tabs/metrics/task.rb', line 54

def storage_key(resolution, timestamp, type)
  formatted_time = TabsTabs::Resolution.serialize(resolution, timestamp)
  "stat:task:#{key}:#{type}:#{resolution}:#{formatted_time}"
end