sidekiq-benchmark 0.3.5 → 0.4.0

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