sidekiq-amigo 1.8.0 → 1.9.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,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a32299bc84d87b6c497414b4fcb6b89278e2993543eff1ba07bcf1a9fb75c59f
4
- data.tar.gz: 27acf41f1e0235536da93d7dfd0b2a5ad1f65e4e993f428967e8072e7213f83f
3
+ metadata.gz: 330ead7f8face652362d632c9c127aa57b298d5587d1da392769b0458d1f8915
4
+ data.tar.gz: 7c0b0b9b1658eecfd202ef294580417233421edf4233eef522b747ce9c411f52
5
5
  SHA512:
6
- metadata.gz: 47e75ba71d67411a80e7d5ae20f06c0b3bb4e0fb056356e63fb47ec3cd84cdb72f0deb6e2bd00f5cc0cd091267dc30725e4607ae018b7f29a31093c4c9e82ebd
7
- data.tar.gz: 761f7febdba270fe365f39cb740f734615118bd8c160485ac9296119f00124458f1970e159dbdd0ed8a6fbecd4c66df8bfe07f86803a14e2982e738fbe69115c
6
+ metadata.gz: 898c24b82de6313c33e50b58a2c4d64ca365918a0aee2b223b452fea9428cc4d265b15975ebc2f7c7e689f547898e65b7c52d3e50edbe9bcdb062f3b25f3f0b6
7
+ data.tar.gz: a5ffcb482859fcddd6727a9869bef3ed00c8edb5b1b44f0cde84b31eddb44c6f84fbac6b45d8b8fccf06c712f6792a8ce3e211b4a49083fe8c0bab76474a5d38
@@ -81,7 +81,6 @@ module Amigo
81
81
  app_id_or_app_name: ENV.fetch("HEROKU_APP_NAME"),
82
82
  formation_id_or_formation_type: "worker"
83
83
  )
84
-
85
84
  @heroku = heroku
86
85
  @max_additional_workers = max_additional_workers
87
86
  @app_id_or_app_name = app_id_or_app_name
@@ -92,6 +92,13 @@ module Amigo
92
92
  # Proc/callable called with (level, message, params={}).
93
93
  # By default, use +Amigo.log+ (which logs to the Sidekiq logger).
94
94
  attr_reader :log
95
+ # Proc called with an exception that occurs while the thread is running.
96
+ # If the handler returns +true+, then the thread will keep going.
97
+ # All other values will kill the thread, which breaks autoscaling.
98
+ # Note that Amigo automatically logs unhandled exceptions at :error level.
99
+ # If you use an error reporter like Sentry, you can pass in something like:
100
+ # -> (e) { Sentry.capture_exception(e) }
101
+ attr_reader :on_unhandled_exception
95
102
 
96
103
  def initialize(
97
104
  poll_interval: 20,
@@ -101,9 +108,9 @@ module Amigo
101
108
  alert_interval: 120,
102
109
  latency_restored_threshold: latency_threshold,
103
110
  latency_restored_handlers: [:log],
104
- log: ->(level, message, params={}) { Amigo.log(nil, level, message, params) }
111
+ log: ->(level, message, params={}) { Amigo.log(nil, level, message, params) },
112
+ on_unhandled_exception: nil
105
113
  )
106
-
107
114
  raise ArgumentError, "latency_threshold must be > 0" if
108
115
  latency_threshold <= 0
109
116
  raise ArgumentError, "latency_restored_threshold must be >= 0" if
@@ -118,8 +125,10 @@ module Amigo
118
125
  @latency_restored_threshold = latency_restored_threshold
119
126
  @latency_restored_handlers = latency_restored_handlers.freeze
120
127
  @log = log
128
+ @on_unhandled_exception = on_unhandled_exception
121
129
  end
122
130
 
131
+ # @return [Thread]
123
132
  def polling_thread
124
133
  return @polling_thread
125
134
  end
@@ -189,6 +198,14 @@ module Amigo
189
198
  end
190
199
 
191
200
  def check
201
+ self._check
202
+ rescue StandardError => e
203
+ self._log(:error, "async_autoscaler_unhandled_error", exception: e)
204
+ handled = self.on_unhandled_exception&.call(e)
205
+ raise e unless handled.eql?(true)
206
+ end
207
+
208
+ def _check
192
209
  now = Time.now
193
210
  skip_check = now < (@last_alerted + self.alert_interval)
194
211
  if skip_check
data/lib/amigo/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Amigo
4
- VERSION = "1.8.0"
4
+ VERSION = "1.9.0"
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sidekiq-amigo
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.8.0
4
+ version: 1.9.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Lithic Technology
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-04-27 00:00:00.000000000 Z
11
+ date: 2025-02-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: sidekiq