sidekiq-worker_stats 0.0.6 → 0.0.7

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,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: a919bfb3641622d0bd058fa20bb8b6f5dade45cc
4
- data.tar.gz: bb83a5cfb20634e1c55d1c0375df33b0a1b0154c
3
+ metadata.gz: a2dfa84049939f2b9e106c0c952210cc8ca4f775
4
+ data.tar.gz: 5247578e6a5277f95954a64b002d8e1d9f13b4ab
5
5
  SHA512:
6
- metadata.gz: b4406690214aaea0283b2e7dec63749f13625fe99dc7b3bbe70b14e58d01cdd5e4002dd57997a40a265deff4c20c21d87b46a88c7755a8b9e15788708949983a
7
- data.tar.gz: 488d49ebcf49273c7bc832f04c5a8c59b449a981c72701bb7599c9c4d59c0818029ce73f4b6fcaa5d02d34f403315708674886e7dc2980cbe0634ae7d3222fbb
6
+ metadata.gz: 755fab1f88cbd2e373f706644e9b8f977fbec17804311ccf6f0baa9787feab1f81922392a8fd4fd1e78bc723f6d29a319da2b85494d588a7b4dce8ef9f7e53d3
7
+ data.tar.gz: 0f513ff1b469ad9e7d948a6e79b0485e9b7dc78f6601a5d310505ece41982bd706c978a2c81a19821e481ef0f22f9d46aaefd838ec9153e0a3474fc524b95742
data/README.md CHANGED
@@ -50,5 +50,5 @@ All configurations you can include on `sidekiq_options`
50
50
  |---------------|------|---------|-------------|
51
51
  | `worker_stats_enabled` | boolean | false | Whether `worker_stats` should be enabled for this worker or not |
52
52
  | `worker_stats_mem_sleep ` | number | 5 | How many seconds to wait between each memory measurement |
53
-
53
+ | `worker_stats_max_samples ` | number | 1000 | How many samples to keep for a given worker, it will delete the oldest samples first |
54
54
 
@@ -3,6 +3,7 @@ module Sidekiq
3
3
  class Configuration
4
4
  DEFAULT_MEM_SLEEP = 5.freeze
5
5
  DEFAULT_ENABLED = false.freeze
6
+ DEFAULT_MAX_SAMPLES = 1000
6
7
 
7
8
  attr_reader :klass
8
9
 
@@ -17,7 +18,10 @@ module Sidekiq
17
18
  def enabled
18
19
  @klass.get_sidekiq_options['worker_stats_enabled'] || Sidekiq::WorkerStats::Configuration::DEFAULT_ENABLED
19
20
  end
21
+
22
+ def max_samples
23
+ @klass.get_sidekiq_options['worker_stats_max_samples'] || Sidekiq::WorkerStats::Configuration::DEFAULT_MAX_SAMPLES
24
+ end
20
25
  end
21
26
  end
22
27
  end
23
-
@@ -65,6 +65,8 @@ module Sidekiq
65
65
  Sidekiq.redis do |redis|
66
66
  redis.hset ::Sidekiq::WorkerStats::REDIS_HASH, worker_key, JSON.generate(data)
67
67
  end
68
+
69
+ remove_old_samples
68
70
  end
69
71
 
70
72
  private
@@ -83,6 +85,29 @@ module Sidekiq
83
85
  def current_memory
84
86
  `awk '{ print $2 }' /proc/#{@pid}/statm`.strip.to_i * @page_size
85
87
  end
88
+
89
+ # Remove old samples if number of samples > @config.max_samples
90
+ def remove_old_samples
91
+ keys = nil
92
+ Sidekiq.redis do |redis|
93
+ keys = redis.hkeys ::Sidekiq::WorkerStats::REDIS_HASH
94
+ end
95
+
96
+ return if keys.length <= @config.max_samples
97
+
98
+ keys = keys.map { |k| k.split(':') if k.start_with?(@klass.to_s) }.compact
99
+
100
+ return if keys.length <= @config.max_samples
101
+
102
+ keys.sort! { |x, y| x[1] <=> y[1] }
103
+ keys = keys.map { |k| k.join(':') }
104
+
105
+ Sidekiq.redis do |redis|
106
+ keys[0..keys.length - @config.max_samples - 1].each do |k|
107
+ redis.hdel ::Sidekiq::WorkerStats::REDIS_HASH, k
108
+ end
109
+ end
110
+ end
86
111
  end
87
112
  end
88
113
  end
@@ -1,5 +1,5 @@
1
1
  module Sidekiq
2
2
  module WorkerStats
3
- VERSION = '0.0.6'.freeze
3
+ VERSION = '0.0.7'.freeze
4
4
  end
5
5
  end
@@ -7,15 +7,15 @@ require 'sidekiq/worker_stats'
7
7
  class BasicWorker
8
8
  include Sidekiq::Worker
9
9
 
10
- sidekiq_options({
10
+ sidekiq_options(
11
11
  worker_stats_enabled: true,
12
12
  worker_stats_mem_sleep: 1
13
- })
13
+ )
14
14
 
15
- def perform(arg1)
15
+ def perform(_arg1)
16
16
  # Let's use some memory
17
17
  a = []
18
- for i in 1..5000000
18
+ (1..5_000_000).each do |i|
19
19
  a << i.to_s * 10
20
20
  end
21
21
  end
@@ -24,9 +24,9 @@ end
24
24
  class NoStatsWorker
25
25
  include Sidekiq::Worker
26
26
 
27
- sidekiq_options({
27
+ sidekiq_options(
28
28
  worker_stats_enabled: false
29
- })
29
+ )
30
30
 
31
31
  def perform
32
32
  end
@@ -35,13 +35,26 @@ end
35
35
  class ErrorWorker
36
36
  include Sidekiq::Worker
37
37
 
38
- sidekiq_options({
38
+ sidekiq_options(
39
39
  worker_stats_enabled: true,
40
40
  worker_stats_mem_sleep: 1
41
- })
41
+ )
42
+
43
+ def perform
44
+ raise StandardError.new('Error')
45
+ end
46
+ end
47
+
48
+ class Max2Worker
49
+ include Sidekiq::Worker
50
+
51
+ sidekiq_options(
52
+ worker_stats_enabled: true,
53
+ worker_stats_mem_sleep: 1,
54
+ worker_stats_max_samples: 2
55
+ )
42
56
 
43
57
  def perform
44
- raise StandardError.new("Error")
45
58
  end
46
59
  end
47
60
 
@@ -54,7 +67,7 @@ class TestMiddleware < Minitest::Test
54
67
 
55
68
  def test_basic_worker_stats_are_saved
56
69
  Sidekiq::Testing.inline! do
57
- BasicWorker.perform_async("teste")
70
+ BasicWorker.perform_async('teste')
58
71
  end
59
72
  end
60
73
 
@@ -71,9 +84,19 @@ class TestMiddleware < Minitest::Test
71
84
  end
72
85
  end
73
86
  end
74
-
87
+
88
+ def test_max_samples
89
+ Sidekiq::Testing.inline! do
90
+ Max2Worker.perform_async
91
+ Max2Worker.perform_async
92
+ Max2Worker.perform_async
93
+ Max2Worker.perform_async
94
+ end
95
+
96
+ # Should only mantain record for 2 elements
97
+ end
98
+
75
99
  def test_that_middleware_reports_end
76
100
  skip 'todo'
77
101
  end
78
-
79
102
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sidekiq-worker_stats
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.6
4
+ version: 0.0.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alexandre Jesus
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-11-18 00:00:00.000000000 Z
11
+ date: 2016-11-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: sidekiq