neetodeploy-autoscale 2.0.4 → 2.0.6

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
  SHA256:
3
- metadata.gz: 85b4ae0e9d4ca64aa8defb71b1a48f95ddfc8dd6ead0c36da7718e102596e6bd
4
- data.tar.gz: bbddecea047a1fe57852b6ccc50040e60d0617498d29dfd25b56780d37a8ba1d
3
+ metadata.gz: bffc52d124f0b677da6669f6b34b26347b0710396d362a17af10cb22dbf029a9
4
+ data.tar.gz: dd98640212220a0d4426d2fce3066f4764e1194a79da602b03428bc0c10e7dc3
5
5
  SHA512:
6
- metadata.gz: e0cb2130f7a0453d1ddeef3e580ae4347bb1041ca7367839e3a54cb95c2dfd7ad60c7f8a11f14974f0ba4e4eebf0160ff7f3c8d92ec7bce3014badb924bad88e
7
- data.tar.gz: d2974979d2cb668b1d36bee0e77dd1c0a1c7b680557faebcb560ce5b8d09e3fcd5f87f36366ae978daaa7840b86cb8c624372c313e8a1f14fdd010a9ed92d409
6
+ metadata.gz: 1e1b0fe71a3a89605214d79c971f63f52bbd75804dabf4b75b817824e65941a861fe7f32f159efc7126f5d53da8b1755b954d96efe8bb66341097a9afcad38a6
7
+ data.tar.gz: fa8e816a7be8dbdb7395272cd1c4ce67509b1048fb41feca137a62802ffb8607ebc3edc399c17faaf1a9fdbcfce5d5c6ef39ca5f0bf7cd959badcf1ebc46ce78
@@ -24,7 +24,7 @@ module Neetodeploy
24
24
  end
25
25
 
26
26
  def use_puma_queue_size?
27
- use_puma_queue_size == true
27
+ use_puma_queue_size
28
28
  end
29
29
  end
30
30
  end
@@ -32,29 +32,33 @@ module Neetodeploy
32
32
  end
33
33
 
34
34
  def running?
35
- @pid == Process.pid and @thread&.alive?
35
+ @pid == Process.pid && @thread&.alive?
36
36
  end
37
37
 
38
38
  def start_thread_with_collector_loop(config = Config.instance)
39
39
  @thread = Thread.new do
40
- metrics_store = MetricsStore.instance unless config.use_puma_queue_size?
41
40
  loop do
42
- if config.use_puma_queue_size?
43
- run_puma_metrics_collection(config)
44
- else
45
- run_queue_time_collection(metrics_store, config)
41
+ begin
42
+ metrics_store = MetricsStore.instance unless config.use_puma_queue_size?
43
+ loop do
44
+ if config.use_puma_queue_size?
45
+ run_puma_metrics_collection(config)
46
+ else
47
+ run_queue_time_collection(metrics_store, config)
48
+ end
49
+ multiplier = 1 - (rand / 4)
50
+ sleep config.report_interval_seconds * multiplier
51
+ end
52
+ rescue StandardError => e
53
+ logger.error("Rails metrics collector thread terminated with error: #{e.message}")
54
+ logger.error(e.backtrace.join("\n")) if e.backtrace
55
+
56
+ # Only restart if we're still the same process and thread should continue
57
+ break unless @pid == Process.pid && !@thread.nil?
58
+
59
+ logger.info("Restarting Rails metrics collector thread")
60
+ sleep(5)
46
61
  end
47
- multiplier = 1 - (rand / 4)
48
- sleep config.report_interval_seconds * multiplier
49
- end
50
- rescue StandardError => e
51
- logger.error("Rails metrics collector thread terminated with error: #{e.message}")
52
- logger.error(e.backtrace.join("\n")) if e.backtrace
53
- ensure
54
- if @pid == Process.pid && !@thread.nil?
55
- logger.info("Restarting Rails metrics collector thread")
56
- sleep(5)
57
- start_thread_with_collector_loop
58
62
  end
59
63
  end
60
64
  end
@@ -29,24 +29,30 @@ module Neetodeploy
29
29
  end
30
30
 
31
31
  def running?
32
- @pid == Process.pid and @thread&.alive?
32
+ @pid == Process.pid && @thread&.alive?
33
33
  end
34
34
 
35
35
  def start_thread_with_collector_loop(config = Config.instance)
36
36
  @thread = Thread.new do
37
+ # Use a non-recursive loop pattern to avoid SystemStackError and ThreadError on shutdown
37
38
  loop do
38
- run_sidekiq_metrics_collection
39
- multiplier = 1 - (rand / 4)
40
- sleep config.report_interval_seconds * multiplier
41
- end
42
- rescue StandardError => e
43
- logger.error("Sidekiq metrics collector thread terminated with error: #{e.message}")
44
- logger.error(e.backtrace.join("\n")) if e.backtrace
45
- ensure
46
- if @pid == Process.pid && !@thread.nil?
47
- logger.info("Restarting Sidekiq metrics collector thread")
48
- sleep(5)
49
- start_thread_with_collector_loop
39
+ begin
40
+ loop do
41
+ run_sidekiq_metrics_collection
42
+ multiplier = 1 - (rand / 4)
43
+ sleep config.report_interval_seconds * multiplier
44
+ end
45
+ rescue StandardError => e
46
+ logger.error("Sidekiq metrics collector thread terminated with error: #{e.message}")
47
+ logger.error(e.backtrace.join("\n")) if e.backtrace
48
+
49
+ # Only restart if we're still the same process and thread should continue
50
+ # Check if Sidekiq is shutting down to avoid ThreadError during shutdown
51
+ break unless @pid == Process.pid && !@thread.nil? && sidekiq_running?
52
+
53
+ logger.info("Restarting Sidekiq metrics collector thread")
54
+ sleep(5)
55
+ end
50
56
  end
51
57
  end
52
58
  end
@@ -73,6 +79,11 @@ module Neetodeploy
73
79
  defined?(::Sidekiq) && ::Sidekiq.respond_to?(:redis)
74
80
  end
75
81
 
82
+ def sidekiq_running?
83
+ # Check if Sidekiq server is still running to avoid restarting during shutdown
84
+ defined?(::Sidekiq) && ::Sidekiq.respond_to?(:server?) && ::Sidekiq.server?
85
+ end
86
+
76
87
  def collect_queue_metrics(queue)
77
88
  queue_name = queue.name
78
89
  latency_ms = (queue.latency * 1000).ceil
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Neetodeploy
4
4
  module Autoscale
5
- VERSION = "2.0.4"
5
+ VERSION = "2.0.6"
6
6
  end
7
7
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: neetodeploy-autoscale
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.4
4
+ version: 2.0.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sreeram Venkitesh
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2025-11-13 00:00:00.000000000 Z
11
+ date: 2025-11-14 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: For automatically scaling your Rails application based on network metrics
14
14
  email: