resque-analytics 0.6.3 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 17ae0b32a8358b7f91cbec473ec1ce6262eb42c9
4
- data.tar.gz: 15252ab1873d1204e8c09d1fe01bd83623bd6a26
3
+ metadata.gz: d34a98fb442788fefc0a49735c2fab53284a1cd4
4
+ data.tar.gz: 65663fbffa2183494ab24091c5bf3f4342afa1df
5
5
  SHA512:
6
- metadata.gz: a1abe2a07366bf72ea85e6f80726f4379f0305f65f0412eb0cdc668efc73fefaffb4d0efd1ff62d288f2b7bffc530eba48c0d3d7ca18b6e0ce363d4298c07e6d
7
- data.tar.gz: 5bb4c49cf4b2560315eca59e70519e931858db7debc64e5b0eed3d7502cba13db08768829f2fc76984a6a66b68690ffc8c3e793c8225f8fadab00e10d5684b5f
6
+ metadata.gz: 043b5a5aad5f9d9c8edae96b262e8a2b9572b6a00326b83362ea308d58f60c062d5f2b3382f27dd2b5cad218065703258766e4f86d52255c7603c28985d6d4e3
7
+ data.tar.gz: eea25ad9de22a490d44fe8d160107a7621faec14350c971de69efabd4b8be248751db988d078549dc83e92f27fb8ca9a54b08af58c2018d22a14a7b53afe2c62
data/Changelog CHANGED
@@ -1,3 +1,7 @@
1
+ ## 0.7.0 (August 11, 2014)
2
+
3
+ * Move statistics to summary format, keep a single value for each key per day
4
+
1
5
  ## 0.6.3 (June 23, 2014)
2
6
 
3
7
  * Add ability to select worker jobs on index screen
data/Rakefile CHANGED
@@ -2,6 +2,7 @@
2
2
 
3
3
  require 'rubygems'
4
4
  require 'bundler'
5
+ require 'resque'
5
6
  begin
6
7
  Bundler.setup(:default, :development)
7
8
  rescue Bundler::BundlerError => e
@@ -49,3 +50,17 @@ Rake::RDocTask.new do |rdoc|
49
50
  rdoc.rdoc_files.include('README*')
50
51
  rdoc.rdoc_files.include('lib/**/*.rb')
51
52
  end
53
+
54
+ desc "Convert multiple queues to a single summarized value"
55
+ task :multi_convert do
56
+ require 'byebug'
57
+ Resque.redis.keys("analytics:*").each do |key|
58
+ _, kpi, job, date = key.split(":")
59
+ if Resque.redis.type(key) == "string"
60
+ Resque.redis.hincrby("resque-analytics:#{date}", "#{job}:#{kpi}", Resque.redis.get(key))
61
+ else
62
+ Resque.redis.hincrbyfloat("resque-analytics:#{date}", "#{job}:#{kpi}", Resque.redis.lrange(key, 0, -1).inject(0) {|sum,x| sum+x.to_f})
63
+ end
64
+ puts "handling #{key}\n"
65
+ end
66
+ end
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.6.3
1
+ 0.7.0
@@ -13,7 +13,7 @@ module Resque
13
13
  class Job
14
14
  # Override Job initialization to extract the timestamp
15
15
  def initialize(queue, payload)
16
- timestamp = payload.delete('analytics_timestamp')
16
+ timestamp = payload && payload.delete('analytics_timestamp')
17
17
  @queue = queue
18
18
  @payload = payload
19
19
  @failure_hooks_ran = false
@@ -39,9 +39,13 @@ module Resque
39
39
  @ignore_classes || []
40
40
  end
41
41
 
42
- def key(kpi)
42
+ def key
43
43
  date = Time.now.strftime("%y_%m_%d")
44
- "analytics:#{kpi}:#{self.name}:#{date}"
44
+ "resque-analytics:#{date}"
45
+ end
46
+
47
+ def field(kpi)
48
+ "#{self.name}:#{kpi}"
45
49
  end
46
50
 
47
51
  def around_perform_analytics(*args)
@@ -49,23 +53,23 @@ module Resque
49
53
  yield
50
54
  total_time = Time.now - start
51
55
 
52
- Resque.redis.lpush(key(TOTAL_TIME), total_time)
53
- Resque.redis.expire(key(WAIT_TIME), EXPIRE)
56
+ Resque.redis.hincrbyfloat(key, field(TOTAL_TIME), total_time)
57
+ Resque.redis.expire(key, EXPIRE)
54
58
  end
55
59
 
56
60
  def after_perform_analytics(*args)
57
- Resque.redis.incr(key(PERFORMED))
58
- Resque.redis.expire(key(WAIT_TIME), EXPIRE)
61
+ Resque.redis.hincrby(key, field(PERFORMED), 1)
62
+ Resque.redis.expire(key, EXPIRE)
59
63
  end
60
64
 
61
65
  def on_failure_analytics(error, *args)
62
- Resque.redis.incr(key(FAILED))
63
- Resque.redis.expire(key(WAIT_TIME), EXPIRE)
66
+ Resque.redis.hincrby(key, field(FAILED), 1)
67
+ Resque.redis.expire(key, EXPIRE)
64
68
  end
65
69
 
66
70
  def analytics_timestamp(timestamp)
67
- Resque.redis.lpush(key(WAIT_TIME), Time.now - Time.parse(timestamp))
68
- Resque.redis.expire(key(WAIT_TIME), EXPIRE)
71
+ Resque.redis.hincrbyfloat(key, field(WAIT_TIME), Time.now - Time.parse(timestamp))
72
+ Resque.redis.expire(key, EXPIRE)
69
73
  end
70
74
 
71
75
  end
@@ -9,20 +9,15 @@ module Resque
9
9
 
10
10
  module Helpers
11
11
  def counters_for(job, kpi)
12
- kpi_keys = Resque.redis.keys("analytics:#{kpi}:#{job}:*").sort { |a,b| a <=> b }
13
- kpi_keys.inject({}) { |res, key| res[key.split(':').last] = key_value(key); res}
12
+ kpi_keys = Resque.redis.keys("resque-analytics:*").sort { |a,b| a <=> b }
13
+ kpi_keys.inject({}) { |res, key| res[key.split(':').last] = Resque.redis.hget(key, "#{job}:#{kpi}"); res}
14
14
  end
15
15
 
16
16
  def measured_jobs
17
- Resque.redis.keys("analytics*").map { |key| key.split(':')[2] }.uniq
18
- end
19
-
20
- def key_value(key)
21
- if Resque.redis.type(key) == "string"
22
- Resque.redis.get(key)
23
- else
24
- Resque.redis.lrange(key, 0, -1).map(&:to_f).sum
25
- end
17
+ yesterday = 1.day.ago.strftime("%y_%m_%d")
18
+ today = Time.now.strftime("%y_%m_%d")
19
+ fields = Resque.redis.hkeys("resque-analytics:#{yesterday}") + Resque.redis.hkeys("resque-analytics:#{today}")
20
+ fields.map { |field| field.split(':').first }.uniq.sort { |a,b| a <=> b }
26
21
  end
27
22
 
28
23
  def legend_keys
@@ -2,15 +2,15 @@
2
2
  # DO NOT EDIT THIS FILE DIRECTLY
3
3
  # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
4
  # -*- encoding: utf-8 -*-
5
- # stub: resque-analytics 0.6.3 ruby lib
5
+ # stub: resque-analytics 0.7.0 ruby lib
6
6
 
7
7
  Gem::Specification.new do |s|
8
8
  s.name = "resque-analytics"
9
- s.version = "0.6.3"
9
+ s.version = "0.7.0"
10
10
 
11
11
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
12
12
  s.authors = ["Nir Tzur"]
13
- s.date = "2014-06-23"
13
+ s.date = "2014-08-11"
14
14
  s.description = "Shows Resque jobs key performance indciators over time"
15
15
  s.email = "nir.tzur@samanage.com"
16
16
  s.extra_rdoc_files = [
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: resque-analytics
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.3
4
+ version: 0.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nir Tzur
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-06-23 00:00:00.000000000 Z
11
+ date: 2014-08-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: resque