sensu-plugins-slack 0.0.4 → 0.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 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