sidekiq-benchmark 0.4.1 → 0.5.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 +5 -5
- data/.travis.yml +2 -2
- data/lib/sidekiq-benchmark.rb +4 -0
- data/lib/sidekiq-benchmark/version.rb +1 -1
- data/lib/sidekiq-benchmark/web.rb +19 -19
- data/lib/sidekiq-benchmark/worker.rb +27 -19
- data/sidekiq-benchmark.gemspec +1 -2
- data/test/lib/testing.rb +3 -2
- data/test/lib/worker_test.rb +4 -6
- data/test/test_helper.rb +4 -2
- data/web/views/benchmarks.erb +1 -1
- metadata +32 -47
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 2b2583957b88fb1d556a08a53abe16bc823914ec
|
4
|
+
data.tar.gz: d084d3be5a35c882326c9d3f8df418c0a9c2bca6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b0662eec56c195a7077a263c10926e6b7484fde4fb54b7f0d45db8b70e61e74847bf2f35b9c1c9d1a60671362f6ee6970306358af0381e79073013facc47db05
|
7
|
+
data.tar.gz: 1e7042f4b933e3776cbeaea2cf682a86a69ffc1416f4da4784110036439e0ad9d85f98dc24d5b043e0f1eec7c3f67a5587a20dae443d2e019b576fbb46000ca0
|
data/.travis.yml
CHANGED
data/lib/sidekiq-benchmark.rb
CHANGED
@@ -6,6 +6,10 @@ Sidekiq::Web.tabs["Benchmarks"] = "benchmarks"
|
|
6
6
|
|
7
7
|
module Sidekiq
|
8
8
|
module Benchmark
|
9
|
+
REDIS_NAMESPACE = :benchmark
|
10
|
+
TYPES_KEY = "#{REDIS_NAMESPACE}:types".freeze
|
11
|
+
REDIS_KEYS_TTL = 3600 * 24 * 30
|
12
|
+
|
9
13
|
autoload :Worker, 'sidekiq-benchmark/worker'
|
10
14
|
end
|
11
15
|
end
|
@@ -1,41 +1,43 @@
|
|
1
|
-
require 'sinatra/assetpack'
|
2
1
|
require 'chartkick'
|
3
2
|
|
4
3
|
module Sidekiq
|
5
4
|
module Benchmark
|
6
5
|
module Web
|
7
|
-
|
8
|
-
|
9
|
-
|
6
|
+
WEB_DIR = File.expand_path("../../../web", __FILE__).freeze
|
7
|
+
JS_DIR = File.join(WEB_DIR, "assets", "javascripts").freeze
|
8
|
+
VIEW_PATH = File.join(WEB_DIR, "views", "benchmarks.erb").freeze
|
10
9
|
|
10
|
+
def self.registered(app)
|
11
11
|
app.helpers Chartkick::Helper
|
12
|
-
app.register Sinatra::AssetPack
|
13
12
|
|
14
|
-
app.
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
13
|
+
app.get '/benchmarks/javascripts/chartkick.js' do
|
14
|
+
body = File.read File.join(JS_DIR, 'chartkick.js')
|
15
|
+
headers = {
|
16
|
+
'Content-Type' => 'application/javascript',
|
17
|
+
'Cache-Control' => 'public, max-age=84600'
|
18
|
+
}
|
19
|
+
[200, headers, [body]]
|
20
|
+
end
|
19
21
|
|
20
22
|
app.get "/benchmarks" do
|
21
23
|
@charts = {}
|
22
24
|
|
23
25
|
Sidekiq.redis do |conn|
|
24
|
-
@types = conn.smembers
|
26
|
+
@types = conn.smembers Sidekiq::Benchmark::TYPES_KEY
|
25
27
|
@types.each do |type|
|
26
28
|
@charts[type] = { total: [], stats: [] }
|
27
29
|
|
28
|
-
|
29
|
-
|
30
|
+
total_key = "#{Sidekiq::Benchmark::REDIS_NAMESPACE}:#{type}:total"
|
31
|
+
total_keys = conn.hkeys(total_key) - %w(start_time job_time finish_time)
|
30
32
|
|
31
|
-
total_time = conn.hget
|
33
|
+
total_time = conn.hget total_key, :job_time
|
32
34
|
total_time = total_time.to_f
|
33
35
|
total_keys.each do |key|
|
34
|
-
value = conn.hget
|
36
|
+
value = conn.hget total_key, key
|
35
37
|
@charts[type][:total] << [key, value.to_f.round(2)]
|
36
38
|
end
|
37
39
|
|
38
|
-
stats = conn.hgetall "
|
40
|
+
stats = conn.hgetall "#{Sidekiq::Benchmark::REDIS_NAMESPACE}:#{type}:stats"
|
39
41
|
stats.each do |key, value|
|
40
42
|
@charts[type][:stats] << [key.to_f, value.to_i]
|
41
43
|
end
|
@@ -45,9 +47,7 @@ module Sidekiq
|
|
45
47
|
end
|
46
48
|
end
|
47
49
|
|
48
|
-
|
49
|
-
template = File.read view_path
|
50
|
-
render :erb, template
|
50
|
+
erb File.read(VIEW_PATH)
|
51
51
|
end
|
52
52
|
|
53
53
|
app.post "/benchmarks/remove" do
|
@@ -1,7 +1,8 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Sidekiq
|
2
4
|
module Benchmark
|
3
5
|
module Worker
|
4
|
-
|
5
6
|
def benchmark(options = {})
|
6
7
|
@benchmark ||= Benchmark.new self, benchmark_redis_type_key, options
|
7
8
|
|
@@ -18,9 +19,7 @@ module Sidekiq
|
|
18
19
|
end
|
19
20
|
|
20
21
|
class Benchmark
|
21
|
-
|
22
|
-
|
23
|
-
attr_reader :metrics, :start_time, :finish_time, :redis_key
|
22
|
+
attr_reader :metrics, :start_time, :finish_time, :redis_keys
|
24
23
|
|
25
24
|
def initialize(worker, redis_key, options)
|
26
25
|
@metrics = {}
|
@@ -28,7 +27,12 @@ module Sidekiq
|
|
28
27
|
@options = options
|
29
28
|
@start_time = Time.now
|
30
29
|
|
31
|
-
@
|
30
|
+
@redis_keys =
|
31
|
+
%i[total stats].reduce({}) do |m, e|
|
32
|
+
m[e] = "#{REDIS_NAMESPACE}:#{redis_key}:#{e}"
|
33
|
+
m
|
34
|
+
end
|
35
|
+
|
32
36
|
set_redis_key redis_key
|
33
37
|
end
|
34
38
|
|
@@ -62,18 +66,10 @@ module Sidekiq
|
|
62
66
|
@metrics[name]
|
63
67
|
end
|
64
68
|
|
65
|
-
def method_missing(name, *args, &block)
|
66
|
-
if block_given?
|
67
|
-
measure(name, &block)
|
68
|
-
self[name]
|
69
|
-
else
|
70
|
-
self[name] = args[0]
|
71
|
-
end
|
72
|
-
end
|
73
|
-
|
74
69
|
def set_redis_key(key)
|
75
70
|
Sidekiq.redis do |conn|
|
76
|
-
conn.sadd
|
71
|
+
conn.sadd Sidekiq::Benchmark::TYPES_KEY, key
|
72
|
+
conn.expire Sidekiq::Benchmark::TYPES_KEY, REDIS_KEYS_TTL
|
77
73
|
end
|
78
74
|
end
|
79
75
|
|
@@ -83,17 +79,29 @@ module Sidekiq
|
|
83
79
|
Sidekiq.redis do |conn|
|
84
80
|
conn.multi do
|
85
81
|
@metrics.each do |key, value|
|
86
|
-
conn.hincrbyfloat
|
82
|
+
conn.hincrbyfloat redis_keys[:total], key, value
|
87
83
|
end
|
88
84
|
|
89
|
-
conn.hincrby
|
85
|
+
conn.hincrby redis_keys[:stats], job_time_key, 1
|
86
|
+
|
87
|
+
conn.hsetnx redis_keys[:total], "start_time", start_time
|
88
|
+
conn.hset redis_keys[:total], "finish_time", finish_time
|
90
89
|
|
91
|
-
conn.
|
92
|
-
conn.
|
90
|
+
conn.expire redis_keys[:stats], REDIS_KEYS_TTL
|
91
|
+
conn.expire redis_keys[:total], REDIS_KEYS_TTL
|
93
92
|
end
|
94
93
|
end
|
95
94
|
end
|
96
95
|
|
96
|
+
def method_missing(name, *args, &block)
|
97
|
+
if block_given?
|
98
|
+
measure(name, &block)
|
99
|
+
self[name]
|
100
|
+
else
|
101
|
+
self[name] = args[0]
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
97
105
|
end
|
98
106
|
end
|
99
107
|
end
|
data/sidekiq-benchmark.gemspec
CHANGED
@@ -19,13 +19,12 @@ Gem::Specification.new do |gem|
|
|
19
19
|
gem.require_paths = ["lib"]
|
20
20
|
|
21
21
|
gem.add_dependency "chartkick", '>= 1.1.1'
|
22
|
-
gem.add_dependency "sinatra-assetpack", '>= 0.2.5'
|
23
22
|
|
24
23
|
gem.add_development_dependency "sidekiq"
|
25
|
-
gem.add_development_dependency "sinatra"
|
26
24
|
gem.add_development_dependency "rake"
|
27
25
|
gem.add_development_dependency "rack-test"
|
28
26
|
gem.add_development_dependency "minitest", "~> 5"
|
29
27
|
gem.add_development_dependency "coveralls"
|
28
|
+
gem.add_development_dependency "pry"
|
30
29
|
gem.add_development_dependency 'delorean', '~> 2.1'
|
31
30
|
end
|
data/test/lib/testing.rb
CHANGED
@@ -1,7 +1,8 @@
|
|
1
1
|
require 'test_helper'
|
2
|
-
require 'sidekiq-benchmark/testing'
|
3
2
|
|
4
3
|
class Sidekiq::Benchmark::TestingTest < Minitest::Spec
|
4
|
+
require 'sidekiq-benchmark/testing'
|
5
|
+
|
5
6
|
describe 'Testing' do
|
6
7
|
before do
|
7
8
|
Sidekiq::Benchmark::Test.flush_db
|
@@ -10,7 +11,7 @@ class Sidekiq::Benchmark::TestingTest < Minitest::Spec
|
|
10
11
|
|
11
12
|
it "save nothing to redis" do
|
12
13
|
Sidekiq.redis do |conn|
|
13
|
-
total_time = conn.hget(
|
14
|
+
total_time = conn.hget(@worker.benchmark.redis_keys[:total], :job_time)
|
14
15
|
total_time.must_be_nil
|
15
16
|
end
|
16
17
|
end
|
data/test/lib/worker_test.rb
CHANGED
@@ -33,10 +33,10 @@ module Sidekiq
|
|
33
33
|
|
34
34
|
it "should save metrics to redis" do
|
35
35
|
Sidekiq.redis do |conn|
|
36
|
-
total_time = conn.hget(
|
36
|
+
total_time = conn.hget(@worker.benchmark.redis_keys[:total], :job_time)
|
37
37
|
total_time.wont_be_nil
|
38
38
|
|
39
|
-
metrics = conn.hkeys(
|
39
|
+
metrics = conn.hkeys(@worker.benchmark.redis_keys[:stats])
|
40
40
|
metrics.wont_be_empty
|
41
41
|
end
|
42
42
|
end
|
@@ -46,7 +46,7 @@ module Sidekiq
|
|
46
46
|
metrics = worker.benchmark.metrics
|
47
47
|
|
48
48
|
Sidekiq.redis do |conn|
|
49
|
-
metric_set = conn.hkeys(
|
49
|
+
metric_set = conn.hkeys(worker.benchmark.redis_keys[:stats])
|
50
50
|
metric_set.must_be_empty
|
51
51
|
end
|
52
52
|
|
@@ -55,13 +55,11 @@ module Sidekiq
|
|
55
55
|
end
|
56
56
|
|
57
57
|
worker.benchmark.finish_time.must_be_nil
|
58
|
-
|
59
58
|
worker.finish
|
60
|
-
|
61
59
|
worker.benchmark.finish_time.wont_be_nil
|
62
60
|
|
63
61
|
Sidekiq.redis do |conn|
|
64
|
-
metric_set = conn.hkeys(
|
62
|
+
metric_set = conn.hkeys(worker.benchmark.redis_keys[:stats])
|
65
63
|
metric_set.wont_be_empty
|
66
64
|
end
|
67
65
|
end
|
data/test/test_helper.rb
CHANGED
@@ -6,6 +6,8 @@ Coveralls.wear! do
|
|
6
6
|
add_filter '/test/'
|
7
7
|
end
|
8
8
|
|
9
|
+
ENV['RACK_ENV'] = 'test'
|
10
|
+
|
9
11
|
require 'bundler/setup'
|
10
12
|
require 'rack/test'
|
11
13
|
|
@@ -14,9 +16,9 @@ require 'sidekiq/util'
|
|
14
16
|
require 'sidekiq-benchmark'
|
15
17
|
|
16
18
|
require 'delorean'
|
19
|
+
require 'pry'
|
17
20
|
|
18
|
-
REDIS = Sidekiq::RedisConnection.create url: "redis://localhost/15"
|
19
|
-
|
21
|
+
REDIS = Sidekiq::RedisConnection.create url: "redis://localhost/15"
|
20
22
|
Bundler.require
|
21
23
|
|
22
24
|
module Sidekiq
|
data/web/views/benchmarks.erb
CHANGED
metadata
CHANGED
@@ -1,139 +1,125 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sidekiq-benchmark
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Konstantin Kosmatov
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2016-10-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: chartkick
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
17
|
+
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: 1.1.1
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- -
|
24
|
+
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: 1.1.1
|
27
|
-
- !ruby/object:Gem::Dependency
|
28
|
-
name: sinatra-assetpack
|
29
|
-
requirement: !ruby/object:Gem::Requirement
|
30
|
-
requirements:
|
31
|
-
- - ! '>='
|
32
|
-
- !ruby/object:Gem::Version
|
33
|
-
version: 0.2.5
|
34
|
-
type: :runtime
|
35
|
-
prerelease: false
|
36
|
-
version_requirements: !ruby/object:Gem::Requirement
|
37
|
-
requirements:
|
38
|
-
- - ! '>='
|
39
|
-
- !ruby/object:Gem::Version
|
40
|
-
version: 0.2.5
|
41
27
|
- !ruby/object:Gem::Dependency
|
42
28
|
name: sidekiq
|
43
29
|
requirement: !ruby/object:Gem::Requirement
|
44
30
|
requirements:
|
45
|
-
- -
|
31
|
+
- - ">="
|
46
32
|
- !ruby/object:Gem::Version
|
47
33
|
version: '0'
|
48
34
|
type: :development
|
49
35
|
prerelease: false
|
50
36
|
version_requirements: !ruby/object:Gem::Requirement
|
51
37
|
requirements:
|
52
|
-
- -
|
38
|
+
- - ">="
|
53
39
|
- !ruby/object:Gem::Version
|
54
40
|
version: '0'
|
55
41
|
- !ruby/object:Gem::Dependency
|
56
|
-
name:
|
42
|
+
name: rake
|
57
43
|
requirement: !ruby/object:Gem::Requirement
|
58
44
|
requirements:
|
59
|
-
- -
|
45
|
+
- - ">="
|
60
46
|
- !ruby/object:Gem::Version
|
61
47
|
version: '0'
|
62
48
|
type: :development
|
63
49
|
prerelease: false
|
64
50
|
version_requirements: !ruby/object:Gem::Requirement
|
65
51
|
requirements:
|
66
|
-
- -
|
52
|
+
- - ">="
|
67
53
|
- !ruby/object:Gem::Version
|
68
54
|
version: '0'
|
69
55
|
- !ruby/object:Gem::Dependency
|
70
|
-
name:
|
56
|
+
name: rack-test
|
71
57
|
requirement: !ruby/object:Gem::Requirement
|
72
58
|
requirements:
|
73
|
-
- -
|
59
|
+
- - ">="
|
74
60
|
- !ruby/object:Gem::Version
|
75
61
|
version: '0'
|
76
62
|
type: :development
|
77
63
|
prerelease: false
|
78
64
|
version_requirements: !ruby/object:Gem::Requirement
|
79
65
|
requirements:
|
80
|
-
- -
|
66
|
+
- - ">="
|
81
67
|
- !ruby/object:Gem::Version
|
82
68
|
version: '0'
|
83
69
|
- !ruby/object:Gem::Dependency
|
84
|
-
name:
|
70
|
+
name: minitest
|
85
71
|
requirement: !ruby/object:Gem::Requirement
|
86
72
|
requirements:
|
87
|
-
- -
|
73
|
+
- - "~>"
|
88
74
|
- !ruby/object:Gem::Version
|
89
|
-
version: '
|
75
|
+
version: '5'
|
90
76
|
type: :development
|
91
77
|
prerelease: false
|
92
78
|
version_requirements: !ruby/object:Gem::Requirement
|
93
79
|
requirements:
|
94
|
-
- -
|
80
|
+
- - "~>"
|
95
81
|
- !ruby/object:Gem::Version
|
96
|
-
version: '
|
82
|
+
version: '5'
|
97
83
|
- !ruby/object:Gem::Dependency
|
98
|
-
name:
|
84
|
+
name: coveralls
|
99
85
|
requirement: !ruby/object:Gem::Requirement
|
100
86
|
requirements:
|
101
|
-
- -
|
87
|
+
- - ">="
|
102
88
|
- !ruby/object:Gem::Version
|
103
|
-
version: '
|
89
|
+
version: '0'
|
104
90
|
type: :development
|
105
91
|
prerelease: false
|
106
92
|
version_requirements: !ruby/object:Gem::Requirement
|
107
93
|
requirements:
|
108
|
-
- -
|
94
|
+
- - ">="
|
109
95
|
- !ruby/object:Gem::Version
|
110
|
-
version: '
|
96
|
+
version: '0'
|
111
97
|
- !ruby/object:Gem::Dependency
|
112
|
-
name:
|
98
|
+
name: pry
|
113
99
|
requirement: !ruby/object:Gem::Requirement
|
114
100
|
requirements:
|
115
|
-
- -
|
101
|
+
- - ">="
|
116
102
|
- !ruby/object:Gem::Version
|
117
103
|
version: '0'
|
118
104
|
type: :development
|
119
105
|
prerelease: false
|
120
106
|
version_requirements: !ruby/object:Gem::Requirement
|
121
107
|
requirements:
|
122
|
-
- -
|
108
|
+
- - ">="
|
123
109
|
- !ruby/object:Gem::Version
|
124
110
|
version: '0'
|
125
111
|
- !ruby/object:Gem::Dependency
|
126
112
|
name: delorean
|
127
113
|
requirement: !ruby/object:Gem::Requirement
|
128
114
|
requirements:
|
129
|
-
- - ~>
|
115
|
+
- - "~>"
|
130
116
|
- !ruby/object:Gem::Version
|
131
117
|
version: '2.1'
|
132
118
|
type: :development
|
133
119
|
prerelease: false
|
134
120
|
version_requirements: !ruby/object:Gem::Requirement
|
135
121
|
requirements:
|
136
|
-
- - ~>
|
122
|
+
- - "~>"
|
137
123
|
- !ruby/object:Gem::Version
|
138
124
|
version: '2.1'
|
139
125
|
description: Benchmarks for Sidekiq
|
@@ -143,8 +129,8 @@ executables: []
|
|
143
129
|
extensions: []
|
144
130
|
extra_rdoc_files: []
|
145
131
|
files:
|
146
|
-
- .gitignore
|
147
|
-
- .travis.yml
|
132
|
+
- ".gitignore"
|
133
|
+
- ".travis.yml"
|
148
134
|
- Gemfile
|
149
135
|
- LICENSE.txt
|
150
136
|
- README.md
|
@@ -171,17 +157,17 @@ require_paths:
|
|
171
157
|
- lib
|
172
158
|
required_ruby_version: !ruby/object:Gem::Requirement
|
173
159
|
requirements:
|
174
|
-
- -
|
160
|
+
- - ">="
|
175
161
|
- !ruby/object:Gem::Version
|
176
162
|
version: '0'
|
177
163
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
178
164
|
requirements:
|
179
|
-
- -
|
165
|
+
- - ">="
|
180
166
|
- !ruby/object:Gem::Version
|
181
167
|
version: '0'
|
182
168
|
requirements: []
|
183
169
|
rubyforge_project:
|
184
|
-
rubygems_version: 2.
|
170
|
+
rubygems_version: 2.5.1
|
185
171
|
signing_key:
|
186
172
|
specification_version: 4
|
187
173
|
summary: Adds benchmarking methods to Sidekiq workers, keeps metrics and adds tab
|
@@ -191,4 +177,3 @@ test_files:
|
|
191
177
|
- test/lib/web_test.rb
|
192
178
|
- test/lib/worker_test.rb
|
193
179
|
- test/test_helper.rb
|
194
|
-
has_rdoc:
|