sensu-plugins-slack 4.0.0 → 4.1.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 +4 -4
- data/CHANGELOG.md +6 -1
- data/bin/handler-slack.rb +56 -21
- data/lib/sensu-plugins-slack/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fbc28b57823791c32fb8d544c1dcffd13bb6f34378de1a3076ffe01bcd99ed4c
|
4
|
+
data.tar.gz: 17adcc1cbcc70332b177a4e0b954e8f9f12a6e089ddbb57151a1444e06f4ae4e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 726ad96b3ab0602eb51f1969047c93f1e8a1eed9e6ef7060be5ea12edfdf54a3074955d451838d3c8055bcae5aa383867ac757ebbf09bd58764edeb7f1c832a1
|
7
|
+
data.tar.gz: b80b09535f11cc5526f6204a4b63e85ff0a14d54f0c4ce0a1d8a1a1abceb61c693f57b4cead2fd226e411f4703ca68497b4c25aa39fdd48b2c9a0e3706be59ec
|
data/CHANGELOG.md
CHANGED
@@ -5,6 +5,10 @@ This CHANGELOG follows the format listed [here](https://github.com/sensu-plugins
|
|
5
5
|
|
6
6
|
## [Unreleased]
|
7
7
|
|
8
|
+
## [4.1.0]- 2019-05-16
|
9
|
+
### Added
|
10
|
+
- `handler-slack`: added `webhook_retries` (default: 5), `webhook_timeout` (default: 10), and `webhook_retry_sleep` configuration properties to harden against failures due to networking, rate limits, etc. (@kali-brandwatch)
|
11
|
+
|
8
12
|
## [4.0.0] - 2019-04-02
|
9
13
|
### Breaking Changes
|
10
14
|
- Bump sensu-plugin version from `~> 2.0` to `~> 4.0` for Sensu 1.x to Sensu Go event conversion you can read the changelog entries for [4.0](https://github.com/sensu-plugins/sensu-plugin/blob/master/CHANGELOG.md#400---2018-02-17) and [3.0](https://github.com/sensu-plugins/sensu-plugin/blob/master/CHANGELOG.md#300---2018-12-04)
|
@@ -134,7 +138,8 @@ This CHANGELOG follows the format listed [here](https://github.com/sensu-plugins
|
|
134
138
|
### Added
|
135
139
|
- initial release
|
136
140
|
|
137
|
-
[Unreleased]: https://github.com/sensu-plugins/sensu-plugins-slack/compare/4.
|
141
|
+
[Unreleased]: https://github.com/sensu-plugins/sensu-plugins-slack/compare/4.1.0...HEAD
|
142
|
+
[4.1.0]: https://github.com/sensu-plugins/sensu-plugins-slack/compare/4.0.0..4.1.0
|
138
143
|
[4.0.0]: https://github.com/sensu-plugins/sensu-plugins-slack/compare/3.1.1...4.0.0
|
139
144
|
[3.1.1]: https://github.com/sensu-plugins/sensu-plugins-slack/compare/3.1.0...3.1.1
|
140
145
|
[3.1.0]: https://github.com/sensu-plugins/sensu-plugins-slack/compare/3.0.0...3.1.0
|
data/bin/handler-slack.rb
CHANGED
@@ -30,6 +30,21 @@ class Slack < Sensu::Handler
|
|
30
30
|
get_setting('webhook_url')
|
31
31
|
end
|
32
32
|
|
33
|
+
def slack_webhook_retries
|
34
|
+
# The number of retries to deliver the payload to the slack webhook
|
35
|
+
get_setting('webhook_retries') || 5
|
36
|
+
end
|
37
|
+
|
38
|
+
def slack_webhook_timeout
|
39
|
+
# The amount of time (in seconds) to give for the webhook request to complete before failing it
|
40
|
+
get_setting('webhook_timeout') || 10
|
41
|
+
end
|
42
|
+
|
43
|
+
def slack_webhook_retry_sleep
|
44
|
+
# The amount of time (in seconds) to wait in between webhook retries
|
45
|
+
get_setting('webhook_retry_sleep') || 5
|
46
|
+
end
|
47
|
+
|
33
48
|
def slack_icon_emoji
|
34
49
|
get_setting('icon_emoji')
|
35
50
|
end
|
@@ -149,27 +164,47 @@ class Slack < Sensu::Handler
|
|
149
164
|
end
|
150
165
|
http.use_ssl = true
|
151
166
|
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
167
|
+
# Implement a retry-timeout strategy to handle slack api issues like network. Should solve #15
|
168
|
+
begin # retries loop
|
169
|
+
tries = slack_webhook_retries
|
170
|
+
Timeout.timeout(slack_webhook_timeout) do
|
171
|
+
begin # main loop for trying to deliver the message to slack webhook
|
172
|
+
req = Net::HTTP::Post.new("#{uri.path}?#{uri.query}", 'Content-Type' => 'application/json')
|
173
|
+
|
174
|
+
if payload_template.nil?
|
175
|
+
text = slack_surround ? slack_surround + body + slack_surround : body
|
176
|
+
req.body = payload(text).to_json
|
177
|
+
else
|
178
|
+
req.body = body
|
179
|
+
end
|
180
|
+
|
181
|
+
http.request(req)
|
182
|
+
|
183
|
+
# replace verify_response with a rescue within the loop
|
184
|
+
rescue Net::HTTPServerException => error
|
185
|
+
if (tries -= 1) > 0
|
186
|
+
sleep slack_webhook_retry_sleep
|
187
|
+
puts "retrying incident #{incident_key}... #{tries} left"
|
188
|
+
retry
|
189
|
+
else
|
190
|
+
# raise error for sensu-server to catch and log
|
191
|
+
puts "slack api failed (retries) #{incident_key}: #{error.response.code} #{error.response.message}: channel '#{slack_channel}', message: #{body}"
|
192
|
+
exit 1
|
193
|
+
end
|
194
|
+
end # of main loop for trying to deliver the message to slack webhook
|
195
|
+
end # of timeout:do loop
|
196
|
+
# if the timeout is exceeded, consider this try failed
|
197
|
+
rescue Timeout::Error
|
198
|
+
if (tries -= 1) > 0
|
199
|
+
puts "timeout hit, retrying... #{tries} left"
|
200
|
+
retry
|
201
|
+
else
|
202
|
+
# raise error for sensu-server to catch and log
|
203
|
+
puts "slack webhook failed (timeout) #{incident_key}: channel '#{slack_channel}', message: #{body}"
|
204
|
+
exit 1
|
205
|
+
end
|
206
|
+
end # of retries loop
|
207
|
+
end # of post_data
|
173
208
|
|
174
209
|
def payload(notice)
|
175
210
|
client_fields = []
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sensu-plugins-slack
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 4.
|
4
|
+
version: 4.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sensu-Plugins and contributors
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-
|
11
|
+
date: 2019-05-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: erubis
|