chillout 0.8.6 → 0.8.7

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
2
  SHA1:
3
- metadata.gz: 658b6a7781d10cb43a0d4b337823465ed2be5b0f
4
- data.tar.gz: 71bf4f623d9ed3f1db59443a84b5b2737c5ad190
3
+ metadata.gz: 6631dcadcf73b03ed3a10a4ef2e7d79ac081c3cf
4
+ data.tar.gz: e2097e2a4d295b7fd0f6c36f6eac008aad94523c
5
5
  SHA512:
6
- metadata.gz: 03b4744020e8157adb20fbd5a418d9679c1be269dcc597d5e67d2b198ac03102aa534ad94962c7aa46c5154fc292c3fe38b6d7a44380138626bb8fa255bbab89
7
- data.tar.gz: 57a7ab5198b538415f0d1e2eea38f8b1542b5aa9a05cc380181a38b2dfd7fda26fdb390e958dbb9049e21c535d3fcf126812e678d59970ab150778598f536045
6
+ metadata.gz: d10872b0af3d30b51ef10dfaa6530e177cc1d3f329ea39a621127d691dc10d9befc1a73e4fc2e3029fa06c0605df6fc51369bf0d662f0f3babd603a8ec6fe61b
7
+ data.tar.gz: b1a7b075053a58cb0e06e7f75cac2f6c6c4ca255c7a8abe9056eae3c05ea9549ece21bc5341ff6ac263631f479466d4474f8c1571ec77f5b0e2024a2079639b7
@@ -10,7 +10,7 @@ env:
10
10
  - SAMPLE_APP=rails_4_0_0
11
11
  - SAMPLE_APP=rails_4_0_13
12
12
  - SAMPLE_APP=rails_4_1_0
13
- - SAMPLE_APP=rails_4_1_16
13
+ - SAMPLE_APP=rails_4_1_16 SIDEKIQ_SUPPORTED=true
14
14
  - SAMPLE_APP=rails_4_2_0 SIDEKIQ_SUPPORTED=true
15
15
  - SAMPLE_APP=rails_4_2_8 SIDEKIQ_SUPPORTED=true
16
16
  - SAMPLE_APP=rails_5_0_3 SIDEKIQ_SUPPORTED=true
@@ -24,7 +24,7 @@ matrix:
24
24
  - rvm: 2.4.1
25
25
  env: SAMPLE_APP=rails_4_1_0
26
26
  - rvm: 2.4.1
27
- env: SAMPLE_APP=rails_4_1_16
27
+ env: SAMPLE_APP=rails_4_1_16 SIDEKIQ_SUPPORTED=true
28
28
  - rvm: 2.4.1
29
29
  env: SAMPLE_APP=rails_4_2_0 SIDEKIQ_SUPPORTED=true
30
30
  - rvm: 2.1.10
@@ -34,6 +34,10 @@ matrix:
34
34
  - rvm: 2.1.10
35
35
  env: SAMPLE_APP=rails_5_1_1 SIDEKIQ_SUPPORTED=true
36
36
  include:
37
+ - rvm: 2.1.10
38
+ env: SIDEKIQ_VERSION=3.5.3 SAMPLE_APP=rails_4_1_16 SIDEKIQ_SUPPORTED=true
39
+ - rvm: 2.1.10
40
+ env: SIDEKIQ_VERSION=4.0 SAMPLE_APP=rails_4_1_16 SIDEKIQ_SUPPORTED=true
37
41
  - rvm: 2.4.1
38
42
  env: SAMPLE_APP=rails_4_2_8 STRATEGY=active_job SIDEKIQ_SUPPORTED=true
39
43
  - rvm: 2.4.1
@@ -1,5 +1,11 @@
1
1
  # chillout gem changes
2
2
 
3
+ 0.8.7
4
+ -----
5
+
6
+ - Introduced sidekiq jobs monitoring.
7
+
8
+
3
9
  0.8.6
4
10
  -----
5
11
 
data/Gemfile CHANGED
@@ -8,5 +8,7 @@ gemspec
8
8
  if Gem::Version.new(RUBY_VERSION) < Gem::Version.new('2.2')
9
9
  gem "rack", "1.6"
10
10
  gem "activejob", "= 4.2.8"
11
- gem "sidekiq", "~> 4.2"
11
+ gem "sidekiq", ENV['SIDEKIQ_VERSION'] || "~> 4.2"
12
+ else
13
+ gem "sidekiq", ENV['SIDEKIQ_VERSION'] || ">= 5"
12
14
  end
@@ -1,18 +1,72 @@
1
1
  module Chillout
2
2
  module Middleware
3
3
 
4
+ class SidekiqJobMeasurement
5
+ attr_reader :retriable, :queue, :started,
6
+ :finished, :delay, :duration, :success
7
+
8
+ def initialize(job, queue, started, finished, success)
9
+ @class = job["class"].to_s
10
+ @retriable = job["retry"].to_s
11
+ @queue = queue
12
+ @started = started.utc
13
+ @finished = finished.utc
14
+ enqueued_at = job["enqueued_at"] || @finished.to_f
15
+ @delay = 1000.0 * (@finished.to_f - enqueued_at)
16
+ @duration = 1000.0 * (@finished.to_f - @started.to_f)
17
+ @success = success.to_s
18
+ end
19
+
20
+ def job_class
21
+ @class
22
+ end
23
+
24
+ def as_measurements()
25
+ [{
26
+ series: "sidekiq_jobs",
27
+ tags: {
28
+ class: @class,
29
+ retriable: @retriable,
30
+ queue: @queue,
31
+ success: @success.to_s,
32
+ },
33
+ timestamp: @finished.iso8601,
34
+ values: {
35
+ finished: 1,
36
+ duration: @duration.to_f,
37
+ delay: @delay.to_f
38
+ },
39
+ }]
40
+ end
41
+ end
42
+
4
43
  class SidekiqCreationsMonitor
5
44
  def initialize(options)
6
45
  @client = options.fetch(:client)
7
46
  end
8
47
 
9
- def call(_worker, _job, _queue)
48
+ def call(_worker, job, queue)
49
+ started = Time.now.utc
50
+ success = false
10
51
  yield
52
+ success = true
11
53
  ensure
54
+ enqueue(queue, job, started, success)
55
+ end
56
+
57
+ def enqueue(_queue, job, started, success)
58
+ finished = Time.now.utc
12
59
  if creations = Chillout.creations
13
60
  Chillout.creations = nil
14
61
  @client.enqueue(creations)
15
62
  end
63
+ @client.enqueue(SidekiqJobMeasurement.new(
64
+ job,
65
+ _queue,
66
+ started,
67
+ finished,
68
+ success
69
+ ))
16
70
  end
17
71
  end
18
72
 
@@ -1,3 +1,3 @@
1
1
  module Chillout
2
- VERSION = "0.8.6"
2
+ VERSION = "0.8.7"
3
3
  end
@@ -8,15 +8,32 @@ class SidekiqWorkersSendMetricsTest < AcceptanceTestCase
8
8
  test_endpoint = TestEndpoint.new(port: 8081)
9
9
 
10
10
  test_endpoint.listen
11
- test_sidekiq_worker.boot(chillout_port: 8081)
12
11
  test_sidekiq_worker.push_job
12
+ test_sidekiq_worker.boot(chillout_port: 8081)
13
13
 
14
14
  if ENV['STRATEGY'] != 'active_job'
15
15
  assert test_endpoint.has_received_information_about_startup
16
16
  end
17
17
  assert test_endpoint.has_one_creation_for_entity_resource
18
+
19
+ assert sidekiq = test_endpoint.has_one_sidekiq_metric
20
+ assert_equal "CreateEntityJob", sidekiq.fetch("tags").fetch("class")
21
+ assert_equal "default", sidekiq.fetch("tags").fetch("queue")
22
+ assert_equal "true", sidekiq.fetch("tags").fetch("retriable")
23
+ assert_equal "true", sidekiq.fetch("tags").fetch("success")
24
+
25
+ assert sidekiq.fetch("timestamp")
26
+
27
+ assert_equal 1, sidekiq.fetch("values").fetch("finished")
28
+ assert_operator 90, :>, sidekiq.fetch("values").fetch("duration")
29
+ assert_operator 0, :<, sidekiq.fetch("values").fetch("duration")
30
+ assert_operator 8000, :>, sidekiq.fetch("values").fetch("delay")
31
+ assert_operator 200, :<, sidekiq.fetch("values").fetch("delay")
18
32
  ensure
19
- test_sidekiq_worker.shutdown if test_sidekiq_worker
33
+ if test_sidekiq_worker
34
+ test_sidekiq_worker.clear_jobs
35
+ test_sidekiq_worker.shutdown
36
+ end
20
37
  end
21
38
 
22
39
  end if ENV['SIDEKIQ_SUPPORTED']
@@ -24,8 +24,13 @@ module Chillout
24
24
  end
25
25
  end
26
26
 
27
- def test_enqueues_and_clears_creations
27
+ def test_enqueues_stats_and_clears_creations
28
28
  @client.expects(:enqueue).with(FakeJob::MOCK_CREATIONS)
29
+ @client.expects(:enqueue).with do |measurement|
30
+ SidekiqJobMeasurement === measurement &&
31
+ measurement.success == "true" &&
32
+ measurement.job_class == "Chillout::Middleware::SidekiqTest::FakeJob"
33
+ end
29
34
  Sidekiq::Testing.inline! { FakeJob.perform_async }
30
35
  assert_nil Chillout.creations
31
36
  end
@@ -35,11 +40,35 @@ module Chillout
35
40
  def perform; end
36
41
  end
37
42
 
38
- def test_does_nothing_when_no_creations
43
+ def test_enqueues_stats_only_when_no_creations
44
+ @client.expects(:enqueue).with do |measurement|
45
+ SidekiqJobMeasurement === measurement
46
+ end
39
47
  Sidekiq::Testing.inline! { EmptyJob.perform_async }
40
48
  assert_nil Chillout.creations
41
49
  end
42
50
 
51
+ class ErrorJob
52
+ Doh = Class.new(StandardError)
53
+ include Sidekiq::Worker
54
+ def perform
55
+ raise Doh
56
+ end
57
+ end
58
+
59
+ def test_enqueues_stats_even_on_failure
60
+ @client.expects(:enqueue).with do |measurement|
61
+ SidekiqJobMeasurement === measurement &&
62
+ measurement.success == "false"
63
+ end
64
+ Sidekiq::Testing.inline! do
65
+ assert_raises(ErrorJob::Doh) do
66
+ ErrorJob.perform_async
67
+ end
68
+ end
69
+ assert_nil Chillout.creations
70
+ end
71
+
43
72
  end
44
73
  end
45
74
  end
@@ -3,3 +3,8 @@ source 'https://rubygems.org'
3
3
  gem 'rails', '4.1.16'
4
4
  gem 'sqlite3'
5
5
  gem 'chillout', :path => '../../../'
6
+ if Gem::Version.new(RUBY_VERSION) < Gem::Version.new('2.2')
7
+ gem "sidekiq", ENV['SIDEKIQ_VERSION'] || "~> 4.2"
8
+ else
9
+ gem "sidekiq", ENV['SIDEKIQ_VERSION'] || ">= 5"
10
+ end
@@ -0,0 +1,6 @@
1
+ class CreateEntityJob
2
+ include Sidekiq::Worker
3
+ def perform
4
+ Entity.create!(name: Time.current.to_s)
5
+ end
6
+ end
@@ -4,7 +4,7 @@ gem 'rails', '4.2.0'
4
4
  gem 'sqlite3'
5
5
  gem 'chillout', :path => '../../../'
6
6
  if Gem::Version.new(RUBY_VERSION) < Gem::Version.new('2.2')
7
- gem "sidekiq", "~> 4.2"
7
+ gem "sidekiq", ENV['SIDEKIQ_VERSION'] || "~> 4.2"
8
8
  else
9
- gem 'sidekiq'
9
+ gem "sidekiq", ENV['SIDEKIQ_VERSION'] || ">= 5"
10
10
  end
@@ -3,4 +3,4 @@ source 'https://rubygems.org'
3
3
  gem 'rails', '4.2.8'
4
4
  gem 'sqlite3'
5
5
  gem 'chillout', :path => '../../../'
6
- gem 'sidekiq'
6
+ gem "sidekiq", ENV['SIDEKIQ_VERSION'] || ">= 5"
@@ -3,4 +3,4 @@ source 'https://rubygems.org'
3
3
  gem 'rails', '5.0.3'
4
4
  gem 'sqlite3'
5
5
  gem 'chillout', :path => '../../../'
6
- gem 'sidekiq'
6
+ gem "sidekiq", ENV['SIDEKIQ_VERSION'] || ">= 5"
@@ -3,4 +3,4 @@ source 'https://rubygems.org'
3
3
  gem 'rails', '5.1.1'
4
4
  gem 'sqlite3'
5
5
  gem 'chillout', :path => '../../../'
6
- gem 'sidekiq'
6
+ gem "sidekiq", ENV['SIDEKIQ_VERSION'] || ">= 5"
@@ -5,6 +5,7 @@ require 'rack/test'
5
5
  require 'pathname'
6
6
  require 'bbq/spawn'
7
7
  require 'sidekiq/testing'
8
+ require 'sidekiq/api'
8
9
 
9
10
  $LOAD_PATH << File.expand_path('../../lib', __FILE__)
10
11
 
@@ -135,6 +136,12 @@ class TestSidekiqServer
135
136
  )
136
137
  end
137
138
  end
139
+
140
+ def clear_jobs
141
+ Sidekiq::Testing.disable! do
142
+ Sidekiq::Queue.new.💣
143
+ end
144
+ end
138
145
  end
139
146
 
140
147
  class TestEndpoint
@@ -145,6 +152,7 @@ class TestEndpoint
145
152
  @metrics = Queue.new
146
153
  @startups = Queue.new
147
154
  @port = port
155
+ @all_metrics = []
148
156
  end
149
157
 
150
158
  def listen
@@ -182,36 +190,33 @@ class TestEndpoint
182
190
  end
183
191
 
184
192
  def has_one_creation_for_entity_resource
185
- 10.times do
186
- begin
187
- many = metrics.pop(true)
188
- metric = many["measurements"].find{|m| m["series"] == "Entity" }
189
- return metric if metric
190
- rescue ThreadError
191
- sleep(1)
192
- end
193
- end
194
- false
193
+ look_for_series("Entity")
195
194
  end
196
195
 
197
196
  def has_one_purchase
198
- 10.times do
199
- begin
200
- many = metrics.pop(true)
201
- metric = many["measurements"].find{|m| m["series"] == "purchases" }
202
- return metric if metric
203
- rescue ThreadError
204
- sleep(1)
205
- end
206
- end
207
- false
197
+ look_for_series("purchases")
208
198
  end
209
199
 
210
200
  def has_one_controller_metric
201
+ look_for_series("request")
202
+ end
203
+
204
+ def has_one_sidekiq_metric
205
+ look_for_series("sidekiq_jobs")
206
+ end
207
+
208
+ private
209
+
210
+ def look_for(&search)
211
211
  10.times do
212
212
  begin
213
+ metric = @all_metrics.find(&search)
214
+ return metric if metric
215
+
213
216
  many = metrics.pop(true)
214
- metric = many["measurements"].find{|m| m["series"] == "request" }
217
+ @all_metrics.concat(many["measurements"])
218
+
219
+ metric = @all_metrics.find(&search)
215
220
  return metric if metric
216
221
  rescue ThreadError
217
222
  sleep(1)
@@ -220,5 +225,8 @@ class TestEndpoint
220
225
  false
221
226
  end
222
227
 
223
- end
228
+ def look_for_series(series)
229
+ look_for{|m| m["series"] == series }
230
+ end
224
231
 
232
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: chillout
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.6
4
+ version: 0.8.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Michal Lomnicki
@@ -11,7 +11,7 @@ authors:
11
11
  autorequire:
12
12
  bindir: bin
13
13
  cert_chain: []
14
- date: 2017-07-03 00:00:00.000000000 Z
14
+ date: 2017-07-07 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: multi_json
@@ -388,6 +388,7 @@ files:
388
388
  - test/support/rails_4_1_16/app/controllers/entities_controller.rb
389
389
  - test/support/rails_4_1_16/app/controllers/purchases_controller.rb
390
390
  - test/support/rails_4_1_16/app/helpers/application_helper.rb
391
+ - test/support/rails_4_1_16/app/jobs/create_entity_job.rb
391
392
  - test/support/rails_4_1_16/app/models/.keep
392
393
  - test/support/rails_4_1_16/app/models/concerns/.keep
393
394
  - test/support/rails_4_1_16/app/models/entity.rb
@@ -800,6 +801,7 @@ test_files:
800
801
  - test/support/rails_4_1_16/app/controllers/entities_controller.rb
801
802
  - test/support/rails_4_1_16/app/controllers/purchases_controller.rb
802
803
  - test/support/rails_4_1_16/app/helpers/application_helper.rb
804
+ - test/support/rails_4_1_16/app/jobs/create_entity_job.rb
803
805
  - test/support/rails_4_1_16/app/models/.keep
804
806
  - test/support/rails_4_1_16/app/models/concerns/.keep
805
807
  - test/support/rails_4_1_16/app/models/entity.rb