Class: SidekiqVigil::Notifier::Slack
- Defined in:
- lib/sidekiq_vigil/notifier/slack.rb
Constant Summary collapse
- SPARKS =
"▁▂▃▄▅▆▇█"
Instance Attribute Summary
Attributes inherited from Base
Instance Method Summary collapse
-
#initialize(options: {}, logger: SidekiqVigil.logger, transport: HttpTransport.new, sleeper: ->(seconds) { sleep(seconds) }, fallback: Log.new(logger:)) ⇒ Slack
constructor
A new instance of Slack.
- #notify(event) ⇒ Object
- #payload(event) ⇒ Object
Methods inherited from Base
Constructor Details
#initialize(options: {}, logger: SidekiqVigil.logger, transport: HttpTransport.new, sleeper: ->(seconds) { sleep(seconds) }, fallback: Log.new(logger:)) ⇒ Slack
Returns a new instance of Slack.
11 12 13 14 15 16 17 18 19 20 21 22 |
# File 'lib/sidekiq_vigil/notifier/slack.rb', line 11 def initialize( options: {}, logger: SidekiqVigil.logger, transport: HttpTransport.new, sleeper: ->(seconds) { sleep(seconds) }, fallback: Log.new(logger:) ) super(options:, logger:) @transport = transport @sleeper = sleeper @fallback = fallback end |
Instance Method Details
#notify(event) ⇒ Object
24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
# File 'lib/sidekiq_vigil/notifier/slack.rb', line 24 def notify(event) attempts = .fetch(:retries, 3) + 1 attempts.times do |attempt| response = transport.post(webhook_url(event), JSON.generate(payload(event))) return true if response.success? raise Error, "Slack returned HTTP #{response.code}" rescue StandardError => e if attempt == attempts - 1 logger.error("[sidekiq-vigil] Slack notification failed after #{attempts} attempts: #{safe_error(e)}") fallback.notify(event) return false end sleeper.call(2**attempt) end end |
#payload(event) ⇒ Object
41 42 43 44 45 46 |
# File 'lib/sidekiq_vigil/notifier/slack.rb', line 41 def payload(event) { text: header(event), blocks: event.transition == :digest ? digest_blocks(event) : alert_blocks(event) } end |