resque-analytics 0.6.3 → 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
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