sidekiq-amigo 1.8.0 → 1.9.0

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
  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