sensu-plugins-slack 0.0.4 → 0.1.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
  SHA1:
3
- metadata.gz: 26bdada295518e050d9ebc9e276ef1696c1f8202
4
- data.tar.gz: 739541125dc5bcac1d447fe1a137b5e8864d859c
3
+ metadata.gz: fa3ad254dff9a4bdacf22ac50e4c1bef87910fb4
4
+ data.tar.gz: 7b09d2c2e40e949f9248c4b72b9818849a48d7a9
5
5
  SHA512:
6
- metadata.gz: e93ceb4d92866093f4cb74f0c93549b278d9fb4273730d3058540315f06219e66aa4f8f69460b56dbfff7fb9d14613f1bf6ae04fce198ccdd40117fd523b9b69
7
- data.tar.gz: b0fcf90e36a05ac81cdfe6c377c82c32a1eafdd1bd1ee6c578c169088e6384948f6cba9931795da1eec03f03b791c9caacfa8d2de22b5cf2714f0de1fdc53b56
6
+ metadata.gz: 8aa5e19e94ce77ee7dad46b0609d57acdaade31620cd95b56ce9591261823590dcc5d72ef752f179faabf3c20edcc597d07b956b975afbac79612c2d58698a9b
7
+ data.tar.gz: 53ca73e8bc885a05f6336b64aad8650f07bdaa1f32b40e9139b36fe32cd9ceeb2dec7344e442a028cf5a747c2ecc3d713621dc5a3ec3df9ee15efcfa20ec513f
checksums.yaml.gz.sig CHANGED
Binary file
data/CHANGELOG.md CHANGED
@@ -3,8 +3,20 @@ This project adheres to [Semantic Versioning](http://semver.org/).
3
3
 
4
4
  This CHANGELOG follows the format listed at [Keep A Changelog](http://keepachangelog.com/)
5
5
 
6
- ## Unreleased][unreleased]
6
+ ## Unreleased
7
7
 
8
+ ## [0.1.0] - 2015-11-12
9
+ ### Added
10
+ - New handler-slack-multichannel.rb handler for more complex multi-channel alerting to Slack
11
+ - Allow the client to set the channel
12
+
13
+ ### Changed
14
+ - updated sensu-plugin gem to 1.2.0
15
+
16
+ ### Fixed
17
+ - Fixed exception caused by missing field
18
+
19
+ ## [0.0.4] - 2015-07-13
8
20
  ### Changed
9
21
  - put gemspec deps in alpha order
10
22
  - remove cruft from sensu-plugins-slack.rb
@@ -15,7 +27,7 @@ This CHANGELOG follows the format listed at [Keep A Changelog](http://keepachang
15
27
 
16
28
  ## [0.0.3] - 2015-06-03
17
29
  ### Added
18
- -additional functionality to slack hander to improve generated output
30
+ - additional functionality to slack hander to improve generated output
19
31
 
20
32
  ## [0.0.2] - 2015-06-03
21
33
  ### Fixed
data/README.md CHANGED
@@ -5,12 +5,13 @@
5
5
  [![Code Climate](https://codeclimate.com/github/sensu-plugins/sensu-plugins-slack/badges/gpa.svg)](https://codeclimate.com/github/sensu-plugins/sensu-plugins-slack)
6
6
  [![Test Coverage](https://codeclimate.com/github/sensu-plugins/sensu-plugins-slack/badges/coverage.svg)](https://codeclimate.com/github/sensu-plugins/sensu-plugins-slack)
7
7
  [![Dependency Status](https://gemnasium.com/sensu-plugins/sensu-plugins-slack.svg)](https://gemnasium.com/sensu-plugins/sensu-plugins-slack)
8
- [ ![Codeship Status for sensu-plugins/sensu-plugins-slack](https://codeship.com/projects/26ebc260-e88a-0132-5df3-62885e5c211b/status?branch=master)](https://codeship.com/projects/82829)
8
+ [![Codeship Status for sensu-plugins/sensu-plugins-slack](https://codeship.com/projects/26ebc260-e88a-0132-5df3-62885e5c211b/status?branch=master)](https://codeship.com/projects/82829)
9
9
 
10
10
  ## Functionality
11
11
 
12
12
  ## Files
13
- * handler-slack.rb
13
+ * bin/handler-slack.rb
14
+ * bin/handler-slack-multichannel.rb
14
15
 
15
16
  ## Usage
16
17
  ```
@@ -0,0 +1,216 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ # Copyright 2014 Dan Shultz and contributors.
4
+ # Multichannel support added in 2015 by Rob Wilson
5
+ #
6
+ # Released under the same terms as Sensu (the MIT license); see LICENSE
7
+ # for details.
8
+ #
9
+ # In order to use this plugin, you must first configure an incoming webhook
10
+ # integration in slack. You can create the required webhook by visiting
11
+ # https://{your team}.slack.com/services/new/incoming-webhook
12
+ #
13
+ # After you configure your webhook, you'll need the webhook URL from the integration.
14
+ #
15
+ # Multi-channel support:
16
+ #
17
+ # Default channels and compulsory channels can be set in the handler config:
18
+ #
19
+ # { "handlers":
20
+ # "slack": {
21
+ # "channels" {
22
+ # "default": [ "#no-team-alerts" ],
23
+ # "compulsory": [ "#all-alerts" ],
24
+ # }
25
+ # }
26
+ # }
27
+ #
28
+ # Alerts are always sent to the compulsory channel(s).
29
+ #
30
+ # Alerts are sent to default channels if no channels are configured
31
+ # in the check config.
32
+ #
33
+ # Check specific channels:
34
+ #
35
+ # { "checks":
36
+ # "check_my_db": {
37
+ # "handlers": [ "default", "slack" ],
38
+ # "slack" {
39
+ # "channels" [ "#db-team-alerts" ]
40
+ # }
41
+ # ...,
42
+ # }
43
+ # }
44
+
45
+ require 'sensu-handler'
46
+ require 'json'
47
+
48
+ class Slack < Sensu::Handler
49
+ option :json_config,
50
+ description: 'Configuration name',
51
+ short: '-j JSONCONFIG',
52
+ long: '--json JSONCONFIG',
53
+ default: 'slack'
54
+
55
+ def slack_webhook_url
56
+ get_setting('webhook_url')
57
+ end
58
+
59
+ def slack_proxy_addr
60
+ get_setting('proxy_addr')
61
+ end
62
+
63
+ def slack_proxy_port
64
+ get_setting('proxy_port')
65
+ end
66
+
67
+ def slack_message_prefix
68
+ get_setting('message_prefix')
69
+ end
70
+
71
+ def slack_bot_name
72
+ get_setting('bot_name')
73
+ end
74
+
75
+ def slack_surround
76
+ get_setting('surround')
77
+ end
78
+
79
+ def default_channels
80
+ return get_setting('channels')['default']
81
+ rescue
82
+ return []
83
+ end
84
+
85
+ def compulsory_channels
86
+ return get_setting('channels')['compulsory']
87
+ rescue
88
+ return false
89
+ end
90
+
91
+ def check_configured_channels
92
+ return @event['check']['slack']['channels']
93
+ rescue
94
+ return false
95
+ end
96
+
97
+ def compile_channel_list
98
+ channels = []
99
+
100
+ if check_configured_channels
101
+ channels = check_configured_channels
102
+ puts "using check configured channels: #{channels.join('.').chomp(',')}"
103
+ else
104
+ channels = default_channels
105
+ puts "using check default channels: #{default_channels.join(',').chomp(',')}"
106
+ end
107
+
108
+ if compulsory_channels
109
+ channels |= compulsory_channels
110
+ puts "adding compulsory channels: #{compulsory_channels.join(',').chomp(',')}"
111
+ end
112
+
113
+ puts "target channels: #{channels.join(',').chomp(',')}"
114
+
115
+ channels
116
+ end
117
+
118
+ def slack_channels
119
+ @channels ||= compile_channel_list
120
+ end
121
+
122
+ def markdown_enabled
123
+ get_setting('markdown_enabled') || true
124
+ end
125
+
126
+ def incident_key
127
+ @event['client']['name'] + '/' + @event['check']['name']
128
+ end
129
+
130
+ def get_setting(name)
131
+ settings[config[:json_config]][name]
132
+ end
133
+
134
+ def build_notice
135
+ "#{@event['check']['status'].to_s.rjust(3)} | #{incident_key}: #{@event['check']['output'].strip}"
136
+ end
137
+
138
+ def handle
139
+ unless slack_channels.is_a?(Array)
140
+ puts 'nno channels found'
141
+ return
142
+ end
143
+
144
+ notice = build_notice
145
+
146
+ slack_channels.each do |channel|
147
+ puts "#{channel}: #{notice}"
148
+ post_data(notice, channel)
149
+ end
150
+ end
151
+
152
+ def post_data(notice, channel)
153
+ uri = URI(slack_webhook_url)
154
+
155
+ if (defined?(slack_proxy_addr)).nil?
156
+ http = Net::HTTP.new(uri.host, uri.port)
157
+ else
158
+ http = Net::HTTP::Proxy(slack_proxy_addr, slack_proxy_port).new(uri.host, uri.port)
159
+ end
160
+
161
+ http.use_ssl = true
162
+
163
+ begin
164
+ req = Net::HTTP::Post.new("#{uri.path}?#{uri.query}")
165
+ text = slack_surround ? slack_surround + notice + slack_surround : notice
166
+ req.body = payload(text, channel).to_json
167
+
168
+ puts "request: #{req}"
169
+
170
+ response = http.request(req)
171
+
172
+ puts "response: #{response}"
173
+
174
+ verify_response(response)
175
+ rescue => error
176
+ puts "error making http request: #{error}"
177
+ end
178
+ end
179
+
180
+ def verify_response(response)
181
+ case response
182
+ when Net::HTTPSuccess
183
+ true
184
+ else
185
+ fail response.error!
186
+ end
187
+ end
188
+
189
+ def payload(notice, channel)
190
+ {
191
+ icon_url: 'http://sensuapp.org/img/sensu_logo_large-c92d73db.png',
192
+ attachments: [{
193
+ text: [slack_message_prefix, notice].compact.join(' '),
194
+ color: color
195
+ }]
196
+ }.tap do |payload|
197
+ payload[:channel] = channel
198
+ payload[:username] = slack_bot_name if slack_bot_name
199
+ payload[:attachments][0][:mrkdwn_in] = %w(text) if markdown_enabled
200
+ end
201
+ end
202
+
203
+ def color
204
+ color = {
205
+ 0 => '#36a64f',
206
+ 1 => '#FFCC00',
207
+ 2 => '#FF0000',
208
+ 3 => '#6600CC'
209
+ }
210
+ color.fetch(check_status.to_i)
211
+ end
212
+
213
+ def check_status
214
+ @event['check']['status']
215
+ end
216
+ end
data/bin/handler-slack.rb CHANGED
@@ -27,11 +27,7 @@ class Slack < Sensu::Handler
27
27
  end
28
28
 
29
29
  def slack_channel
30
- if @event['check']['slack_channel']
31
- @event['check']['slack_channel']
32
- else
33
- get_setting('channel')
34
- end
30
+ @event['client']['slack_channel'] || @event['check']['slack_channel'] || get_setting('channel')
35
31
  end
36
32
 
37
33
  def slack_message_prefix
@@ -113,7 +109,7 @@ class Slack < Sensu::Handler
113
109
  fields.each do |field|
114
110
  # arbritary based on what I feel like
115
111
  # -vjanelle
116
- is_short = true unless @event['client'][field].length > 50
112
+ is_short = true unless @event['client'].key?(field) && @event['client'][field].length > 50
117
113
  client_fields << {
118
114
  title: field,
119
115
  value: @event['client'][field],
@@ -1,8 +1,8 @@
1
1
  module SensuPluginsSlack
2
2
  module Version
3
3
  MAJOR = 0
4
- MINOR = 0
5
- PATCH = 4
4
+ MINOR = 1
5
+ PATCH = 0
6
6
 
7
7
  VER_STRING = [MAJOR, MINOR, PATCH].compact.join('.')
8
8
  end
data.tar.gz.sig CHANGED
Binary file
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sensu-plugins-slack
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sensu-Plugins and contributors
@@ -30,7 +30,7 @@ cert_chain:
30
30
  8sHuVruarogxxKPBzlL2is4EUb6oN/RdpGx2l4254+nyR+abg//Ed27Ym0PkB4lk
31
31
  HP0m8WSjZmFr109pE/sVsM5jtOCvogyujQOjNVGN4gz1wwPr
32
32
  -----END CERTIFICATE-----
33
- date: 2015-07-13 00:00:00.000000000 Z
33
+ date: 2015-11-13 00:00:00.000000000 Z
34
34
  dependencies:
35
35
  - !ruby/object:Gem::Dependency
36
36
  name: erubis
@@ -52,14 +52,14 @@ dependencies:
52
52
  requirements:
53
53
  - - '='
54
54
  - !ruby/object:Gem::Version
55
- version: 1.1.0
55
+ version: 1.2.0
56
56
  type: :runtime
57
57
  prerelease: false
58
58
  version_requirements: !ruby/object:Gem::Requirement
59
59
  requirements:
60
60
  - - '='
61
61
  - !ruby/object:Gem::Version
62
- version: 1.1.0
62
+ version: 1.2.0
63
63
  - !ruby/object:Gem::Dependency
64
64
  name: bundler
65
65
  requirement: !ruby/object:Gem::Requirement
@@ -150,14 +150,14 @@ dependencies:
150
150
  requirements:
151
151
  - - '='
152
152
  - !ruby/object:Gem::Version
153
- version: '0.30'
153
+ version: 0.32.1
154
154
  type: :development
155
155
  prerelease: false
156
156
  version_requirements: !ruby/object:Gem::Requirement
157
157
  requirements:
158
158
  - - '='
159
159
  - !ruby/object:Gem::Version
160
- version: '0.30'
160
+ version: 0.32.1
161
161
  - !ruby/object:Gem::Dependency
162
162
  name: rspec
163
163
  requirement: !ruby/object:Gem::Requirement
@@ -190,12 +190,14 @@ description: Sensu plugins for interfacing with Slack chat
190
190
  email: "<sensu-users@googlegroups.com>"
191
191
  executables:
192
192
  - handler-slack.rb
193
+ - handler-slack-multichannel.rb
193
194
  extensions: []
194
195
  extra_rdoc_files: []
195
196
  files:
196
197
  - CHANGELOG.md
197
198
  - LICENSE
198
199
  - README.md
200
+ - bin/handler-slack-multichannel.rb
199
201
  - bin/handler-slack.rb
200
202
  - lib/sensu-plugins-slack.rb
201
203
  - lib/sensu-plugins-slack/version.rb
@@ -225,7 +227,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
225
227
  version: '0'
226
228
  requirements: []
227
229
  rubyforge_project:
228
- rubygems_version: 2.4.6
230
+ rubygems_version: 2.4.8
229
231
  signing_key:
230
232
  specification_version: 4
231
233
  summary: Sensu plugins for interfacing with Slack chat
metadata.gz.sig CHANGED
Binary file