sidekiq-benchmark 0.3.5 → 0.4.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,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
- metadata.gz: fdb92d78be7c844f1accc1fe2fbce4da0bf3c452
4
- data.tar.gz: 0da7b23ced5a5ffe697c7a22d369630ce8f95a38
3
+ metadata.gz: !binary |-
4
+ ZThkMDFhZjE3ZThiNmZiMzcyYzNlYTczYmNkNDk5M2UzM2JjMmExZQ==
5
+ data.tar.gz: !binary |-
6
+ OTNiNGJkMzZlNjhkMDU0NDJkZGNhNTEwN2FiNDg2MWZmYmExNTY0Zg==
5
7
  SHA512:
6
- metadata.gz: fcaa38d5d66d0e2740aa97fa9a35924b90d9cb42913efdc7a3122f414c1d2965a67ca29f5bd920deaad745099ed6bf4adc74e2b9e1d4cf97df425705a7f8dda2
7
- data.tar.gz: 2ede84bb4dfa5fad54438391b5528e221317d980074ac7955cb7f0da5c71842a7e69e719d92f8a41dcebb79f6a57312de936f409a142e2d4dc639186e3259a75
8
+ metadata.gz: !binary |-
9
+ NTQzY2QxODYxNjQwMDUwNTQ5NGFlMGM5NzFhY2U1MTk2NDQ5NGJkOGNlYzBj
10
+ MTQwZTg3NjdiZjlhMTQ5MjY5NGE5Zjk1MDA3ZmQxYjFjYjBkZTZiZWMxZmIy
11
+ Yjk5MGIzMzMwMmY1NWVhMTMxNzk1MWU2NTU1YmQwOTE2NDUxNTQ=
12
+ data.tar.gz: !binary |-
13
+ NmE3OTY0ZGUxMDcyMTc3Yjk2YzkyYmYwYjdhOGQ3YWNkMDNlNTgyNDIxZTkz
14
+ OTA2ZGIzMDk2ZjBlZTAyNDQ0YjVmNDFhNDc4MzhjNTFlMGU3MTQwZGIxYjI1
15
+ NGM4NjcyODg2ZGY4ZDFhOTU2YWIwMmY3YTEyODQ4M2ZkNDFmMjg=
data/.travis.yml CHANGED
@@ -2,5 +2,6 @@ language: ruby
2
2
  rvm:
3
3
  - 1.9.3
4
4
  - 2.0.0
5
+ - 2.1.0
5
6
  services:
6
7
  - redis-server
data/README.md CHANGED
@@ -71,6 +71,16 @@ end
71
71
 
72
72
  [Heroku App](http://sidekiq-benchmark.herokuapp.com/benchmarks)
73
73
 
74
+ ## Testing sidekiq workers
75
+
76
+ When you use [Sidekiq::Testing](https://github.com/mperham/sidekiq/wiki/Testing) you
77
+ must load `sidekiq-benchmark/testing` to stop saving benchmark data to redis.
78
+ Just add next code to your test or spec helper:
79
+
80
+ ```ruby
81
+ require 'sidekiq-benchmark/testing'
82
+ ```
83
+
74
84
  ## Contributing
75
85
 
76
86
  1. Fork it
@@ -7,7 +7,6 @@ Sidekiq::Web.tabs["Benchmarks"] = "benchmarks"
7
7
  module Sidekiq
8
8
  module Benchmark
9
9
  autoload :Worker, 'sidekiq-benchmark/worker'
10
- autoload :Version, 'sidekiq-benchmark/version'
11
10
  end
12
11
  end
13
12
 
@@ -1,5 +1,5 @@
1
1
  module Sidekiq
2
2
  module Benchmark
3
- VERSION = "0.3.5"
3
+ VERSION = "0.4.0"
4
4
  end
5
5
  end
@@ -3,7 +3,7 @@ module Sidekiq
3
3
  module Worker
4
4
 
5
5
  def benchmark(options = {})
6
- @benchmark ||= Benchmark.new Time.now, benchmark_redis_type_key, options
6
+ @benchmark ||= Benchmark.new self, benchmark_redis_type_key, options
7
7
 
8
8
  if block_given?
9
9
  yield @benchmark
@@ -22,34 +22,51 @@ module Sidekiq
22
22
 
23
23
  attr_reader :metrics, :start_time, :finish_time, :redis_key
24
24
 
25
- def initialize(start_time, redis_key, options)
25
+ def initialize(worker, redis_key, options)
26
26
  @metrics = {}
27
+ @worker = worker
27
28
  @options = options
28
- @start_time = start_time.to_f
29
+ @start_time = Time.now
29
30
 
30
31
  @redis_key = "#{REDIS_NAMESPACE}:#{redis_key}"
31
32
  set_redis_key redis_key
32
33
  end
33
34
 
34
35
  def finish
35
- @finish_time = Time.now.to_f
36
- @metrics[:job_time] = @finish_time - start_time
36
+ @finish_time = Time.now
37
+ self[:job_time] = finish_time - start_time
37
38
  save
38
39
  end
39
40
 
40
- def method_missing(name, *args)
41
- if block_given?
42
- start_time = Time.now
41
+ def measure(name)
42
+ t0 = Time.now
43
+ ret = yield
44
+
45
+ self[name] = Time.now - t0
46
+
47
+ ret
48
+ end
49
+ alias_method :bm, :measure
43
50
 
44
- yield
51
+ def call(name, *args)
52
+ measure(name) { @worker.send(name, *args) }
53
+ end
45
54
 
46
- finish_time = Time.now
47
- value = finish_time.to_f - start_time.to_f
55
+ def []=(name, value)
56
+ @metrics[name] = value.to_f
57
+ end
58
+
59
+ def [](name)
60
+ @metrics[name]
61
+ end
62
+
63
+ def method_missing(name, *args, &block)
64
+ if block_given?
65
+ measure(name, &block)
66
+ self[name]
48
67
  else
49
- value = args[0].to_f
68
+ self[name] = args[0]
50
69
  end
51
-
52
- @metrics[name] = value
53
70
  end
54
71
 
55
72
  def set_redis_key(key)
@@ -70,7 +87,6 @@ module Sidekiq
70
87
  conn.hincrby "#{redis_key}:stats", job_time_key, 1
71
88
 
72
89
  conn.hsetnx "#{redis_key}:total", "start_time", start_time
73
- conn.hincrbyfloat "#{redis_key}:total", "job_time", @metrics[:job_time]
74
90
  conn.hset "#{redis_key}:total", "finish_time", finish_time
75
91
  end
76
92
  end
data/test/lib/testing.rb CHANGED
@@ -14,5 +14,9 @@ class Sidekiq::Benchmark::TestingTest < Minitest::Spec
14
14
  total_time.must_be_nil
15
15
  end
16
16
  end
17
+
18
+ it "run code in bm blocks" do
19
+ @worker.counter.wont_equal 0
20
+ end
17
21
  end
18
22
  end
data/test/lib/web_test.rb CHANGED
@@ -23,7 +23,7 @@ module Sidekiq
23
23
  WorkerMock.new
24
24
 
25
25
  get '/benchmarks'
26
- last_response.status.must_equal 200, last_response.body
26
+ last_response.status.must_equal 200
27
27
  end
28
28
 
29
29
  it "should remove benchmarks data" do
@@ -59,6 +59,14 @@ module Sidekiq
59
59
  end
60
60
  end
61
61
 
62
+ it "should allow benchmark methods" do
63
+ worker = AlterWorkerMock.new
64
+ value = worker.benchmark.call(:multiply, 4, 4)
65
+
66
+ value.must_equal 16
67
+ worker.benchmark.metrics[:multiply].wont_be_nil
68
+ end
69
+
62
70
  end
63
71
  end
64
72
  end
data/test/test_helper.rb CHANGED
@@ -25,16 +25,18 @@ module Sidekiq
25
25
  include Sidekiq::Worker
26
26
  include Sidekiq::Benchmark::Worker
27
27
 
28
- attr_reader :bm_obj, :metric_names, :assigned_metric
28
+ attr_reader :bm_obj, :metric_names, :assigned_metric, :counter
29
29
 
30
30
  def initialize
31
31
  @assigned_metric = 0.1
32
+ @counter = 0
32
33
 
33
34
  benchmark do |bm|
34
35
  bm.test_metric do
35
36
  2.times do |i|
36
37
  bm.send("nested_test_metric_#{i}") do
37
- 100500.times do |i|
38
+ 100500.times do |j|
39
+ @counter += 1
38
40
  end
39
41
  end
40
42
  end
@@ -62,6 +64,10 @@ module Sidekiq
62
64
  @metric_names = [:test_metric, :other_metric]
63
65
  end
64
66
 
67
+ def multiply(a, b)
68
+ a * b
69
+ end
70
+
65
71
  def finish
66
72
  benchmark.finish
67
73
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sidekiq-benchmark
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.5
4
+ version: 0.4.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-02-20 00:00:00.000000000 Z
11
+ date: 2014-03-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: chartkick
@@ -167,7 +167,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
167
167
  version: '0'
168
168
  requirements: []
169
169
  rubyforge_project:
170
- rubygems_version: 2.1.11
170
+ rubygems_version: 2.2.2
171
171
  signing_key:
172
172
  specification_version: 4
173
173
  summary: Adds benchmarking methods to Sidekiq workers, keeps metrics and adds tab
@@ -177,3 +177,4 @@ test_files:
177
177
  - test/lib/web_test.rb
178
178
  - test/lib/worker_test.rb
179
179
  - test/test_helper.rb
180
+ has_rdoc: