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 +4 -4
- data/Changelog +4 -0
- data/Rakefile +15 -0
- data/VERSION +1 -1
- data/lib/resque/plugins/analytics.rb +15 -11
- data/lib/resque-analytics/server.rb +6 -11
- data/resque-analytics.gemspec +3 -3
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d34a98fb442788fefc0a49735c2fab53284a1cd4
|
4
|
+
data.tar.gz: 65663fbffa2183494ab24091c5bf3f4342afa1df
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 043b5a5aad5f9d9c8edae96b262e8a2b9572b6a00326b83362ea308d58f60c062d5f2b3382f27dd2b5cad218065703258766e4f86d52255c7603c28985d6d4e3
|
7
|
+
data.tar.gz: eea25ad9de22a490d44fe8d160107a7621faec14350c971de69efabd4b8be248751db988d078549dc83e92f27fb8ca9a54b08af58c2018d22a14a7b53afe2c62
|
data/Changelog
CHANGED
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.
|
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
|
42
|
+
def key
|
43
43
|
date = Time.now.strftime("%y_%m_%d")
|
44
|
-
"analytics:#{
|
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.
|
53
|
-
Resque.redis.expire(key
|
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.
|
58
|
-
Resque.redis.expire(key
|
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.
|
63
|
-
Resque.redis.expire(key
|
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.
|
68
|
-
Resque.redis.expire(key
|
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
|
13
|
-
kpi_keys.inject({}) { |res, key| res[key.split(':').last] =
|
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
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
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
|
data/resque-analytics.gemspec
CHANGED
@@ -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.
|
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.
|
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-
|
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.
|
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-
|
11
|
+
date: 2014-08-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: resque
|