sidekiq-benchmark 0.4.1 → 0.5.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
- !binary "U0hBMQ==":
3
- metadata.gz: 4c14f4a4df0d3176c7471258d3a7c40eb89bcd98
4
- data.tar.gz: 892130faabd2c956cf6727d1c17a760169da3ce3
2
+ SHA1:
3
+ metadata.gz: 2b2583957b88fb1d556a08a53abe16bc823914ec
4
+ data.tar.gz: d084d3be5a35c882326c9d3f8df418c0a9c2bca6
5
5
  SHA512:
6
- metadata.gz: a6d232bd0fa047ba153567e2fcee693a0ce3cb5916b73db8bae107502f65605e8d6a3fa222a96ef9d14c2a5f4e3625495aea55a92d89db0793eb1703c8335e60
7
- data.tar.gz: 31231c0ee739b0380359a4d58b5a9e9a4cf2c46fa32095f1d33f46c80b6ec9056d1072ea69b71b5e0e329a5e2e057e7217988a3116cd6e3df0f042f9e3027eb2
6
+ metadata.gz: b0662eec56c195a7077a263c10926e6b7484fde4fb54b7f0d45db8b70e61e74847bf2f35b9c1c9d1a60671362f6ee6970306358af0381e79073013facc47db05
7
+ data.tar.gz: 1e7042f4b933e3776cbeaea2cf682a86a69ffc1416f4da4784110036439e0ad9d85f98dc24d5b043e0f1eec7c3f67a5587a20dae443d2e019b576fbb46000ca0
@@ -1,6 +1,6 @@
1
1
  language: ruby
2
2
  rvm:
3
- - 1.9.3
4
- - 2.1.1
3
+ - 2.2.2
4
+ - 2.3.1
5
5
  services:
6
6
  - redis-server
@@ -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,5 +1,5 @@
1
1
  module Sidekiq
2
2
  module Benchmark
3
- VERSION = "0.4.1"
3
+ VERSION = "0.5.0"
4
4
  end
5
5
  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
- def self.registered(app)
8
- web_dir = File.expand_path("../../../web", __FILE__)
9
- js_dir = File.join(web_dir, "assets", "javascripts")
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.assets {
15
- serve '/js', from: js_dir
16
-
17
- js 'chartkick', ['/js/chartkick.js']
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 "benchmark:types"
26
+ @types = conn.smembers Sidekiq::Benchmark::TYPES_KEY
25
27
  @types.each do |type|
26
28
  @charts[type] = { total: [], stats: [] }
27
29
 
28
- total_keys = conn.hkeys("benchmark:#{type}:total") -
29
- ['start_time', 'job_time', 'finish_time']
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 "benchmark:#{type}:total", :job_time
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 "benchmark:#{type}:total", key
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 "benchmark:#{type}:stats"
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
- view_path = File.join(web_dir, "views", "benchmarks.erb")
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
- REDIS_NAMESPACE = :benchmark
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
- @redis_key = "#{REDIS_NAMESPACE}:#{redis_key}"
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 "#{REDIS_NAMESPACE}:types", key
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 "#{redis_key}:total", key, value
82
+ conn.hincrbyfloat redis_keys[:total], key, value
87
83
  end
88
84
 
89
- conn.hincrby "#{redis_key}:stats", job_time_key, 1
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.hsetnx "#{redis_key}:total", "start_time", start_time
92
- conn.hset "#{redis_key}:total", "finish_time", finish_time
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
@@ -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
@@ -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("#{@worker.benchmark.redis_key}:total", :job_time)
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
@@ -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("#{@worker.benchmark.redis_key}:total", :job_time)
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("#{@worker.benchmark.redis_key}:stats")
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("#{worker.benchmark.redis_key}:stats")
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("#{worker.benchmark.redis_key}:stats")
62
+ metric_set = conn.hkeys(worker.benchmark.redis_keys[:stats])
65
63
  metric_set.wont_be_empty
66
64
  end
67
65
  end
@@ -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", namespace: "testy"
19
-
21
+ REDIS = Sidekiq::RedisConnection.create url: "redis://localhost/15"
20
22
  Bundler.require
21
23
 
22
24
  module Sidekiq
@@ -1,5 +1,5 @@
1
1
  <script type="text/javascript" src="//www.google.com/jsapi"></script>
2
- <%= js :chartkick %>
2
+ <script type="text/javascript" src="<%= root_path %>benchmarks/javascripts/chartkick.js"></script>
3
3
 
4
4
  <header class="row">
5
5
  <div class="col-md-6">
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.1
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: 2014-07-07 00:00:00.000000000 Z
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: sinatra
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: rake
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: rack-test
70
+ name: minitest
85
71
  requirement: !ruby/object:Gem::Requirement
86
72
  requirements:
87
- - - ! '>='
73
+ - - "~>"
88
74
  - !ruby/object:Gem::Version
89
- version: '0'
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: '0'
82
+ version: '5'
97
83
  - !ruby/object:Gem::Dependency
98
- name: minitest
84
+ name: coveralls
99
85
  requirement: !ruby/object:Gem::Requirement
100
86
  requirements:
101
- - - ~>
87
+ - - ">="
102
88
  - !ruby/object:Gem::Version
103
- version: '5'
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: '5'
96
+ version: '0'
111
97
  - !ruby/object:Gem::Dependency
112
- name: coveralls
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.2.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: