fluent-plugin-slack 0.6.4 → 0.6.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +6 -0
- data/VERSION +1 -1
- data/lib/fluent/plugin/out_buffered_slack.rb +1 -1
- data/lib/fluent/plugin/slack_client.rb +31 -2
- data/test/plugin/test_slack_client.rb +46 -0
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: abca37bc729bcbae33c6550af3a6a271f979e70d
|
4
|
+
data.tar.gz: d7124e7eed5b0c920bdf0125324683668ff938b2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b7380082aca202039dee0eef3c69a4c6ee80752245be769c182de7e35dc994967b960c4555cd5658d4b93a53aa5f412d5a75e8f2a8288835a1e7f1f867fc8f49
|
7
|
+
data.tar.gz: c73f180c32d084c5d7d91434b56a94b189ec19722327d7008a406abe5825eb507be84c2c3e149db86640cfce083e56a4001c07534418796b8e541c6e46105e01
|
data/CHANGELOG.md
CHANGED
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.6.
|
1
|
+
0.6.5
|
@@ -1 +1 @@
|
|
1
|
-
out_slack.rb
|
1
|
+
lib/fluent/plugin/out_slack.rb
|
@@ -97,6 +97,35 @@ module Fluent
|
|
97
97
|
end
|
98
98
|
end
|
99
99
|
end
|
100
|
+
|
101
|
+
def to_json_with_scrub!(params)
|
102
|
+
retries = 1
|
103
|
+
begin
|
104
|
+
params.to_json
|
105
|
+
rescue Encoding::UndefinedConversionError => e
|
106
|
+
recursive_scrub!(params)
|
107
|
+
if (retries -= 1) >= 0 # one time retry
|
108
|
+
log.warn "out_slack: to_json `#{params}` failed. retry after scrub!. #{e.message}"
|
109
|
+
retry
|
110
|
+
else
|
111
|
+
raise e
|
112
|
+
end
|
113
|
+
end
|
114
|
+
end
|
115
|
+
|
116
|
+
def recursive_scrub!(params)
|
117
|
+
case params
|
118
|
+
when Hash
|
119
|
+
params.each {|k, v| recursive_scrub!(v)}
|
120
|
+
when Array
|
121
|
+
params.each {|elm| recursive_scrub!(elm)}
|
122
|
+
when String
|
123
|
+
params.force_encoding(Encoding::UTF_8) if params.encoding == Encoding::ASCII_8BIT
|
124
|
+
params.scrub!('?') if params.respond_to?(:scrub!)
|
125
|
+
else
|
126
|
+
params
|
127
|
+
end
|
128
|
+
end
|
100
129
|
end
|
101
130
|
|
102
131
|
# Slack client for Incoming Webhook
|
@@ -115,7 +144,7 @@ module Fluent
|
|
115
144
|
|
116
145
|
def encode_body(params = {})
|
117
146
|
# https://api.slack.com/docs/formatting
|
118
|
-
params.
|
147
|
+
to_json_with_scrub!(params).gsub(/&/, '&').gsub(/</, '<').gsub(/>/, '>')
|
119
148
|
end
|
120
149
|
|
121
150
|
def response_check(res, params)
|
@@ -237,7 +266,7 @@ module Fluent
|
|
237
266
|
def encode_body(params = {})
|
238
267
|
body = params.dup
|
239
268
|
if params[:attachments]
|
240
|
-
body[:attachments] = params[:attachments]
|
269
|
+
body[:attachments] = to_json_with_scrub!(params[:attachments])
|
241
270
|
end
|
242
271
|
URI.encode_www_form(body)
|
243
272
|
end
|
@@ -92,6 +92,15 @@ if ENV['WEBHOOK_URL'] and ENV['SLACKBOT_URL'] and ENV['SLACK_API_TOKEN']
|
|
92
92
|
}
|
93
93
|
end
|
94
94
|
|
95
|
+
def valid_utf8_encoded_string
|
96
|
+
"#general \xE3\x82\xA4\xE3\x83\xB3\xE3\x82\xB9\xE3\x83\x88\xE3\x83\xBC\xE3\x83\xAB\n"
|
97
|
+
end
|
98
|
+
|
99
|
+
def invalid_ascii8bit_encoded_utf8_string
|
100
|
+
str = "#general \xE3\x82\xA4\xE3\x83\xB3\xE3\x82\xB9\xE3\x83\x88\xE3\x83\xBC\xE3\x83\xAB\x81\n"
|
101
|
+
str.force_encoding(Encoding::ASCII_8BIT)
|
102
|
+
end
|
103
|
+
|
95
104
|
# Notification via Mention works for all three with plain text payload
|
96
105
|
def test_post_message_plain_payload_mention
|
97
106
|
[@incoming, @slackbot, @api].each do |slack|
|
@@ -232,5 +241,42 @@ if ENV['WEBHOOK_URL'] and ENV['SLACKBOT_URL'] and ENV['SLACK_API_TOKEN']
|
|
232
241
|
)
|
233
242
|
end
|
234
243
|
end
|
244
|
+
|
245
|
+
# IncomingWebhook posts "#general インストール"
|
246
|
+
def test_post_message_utf8_encoded_text
|
247
|
+
[@incoming].each do |slack|
|
248
|
+
assert_nothing_raised do
|
249
|
+
slack.post_message(default_payload(slack).merge({
|
250
|
+
text: valid_utf8_encoded_string,
|
251
|
+
}))
|
252
|
+
end
|
253
|
+
end
|
254
|
+
end
|
255
|
+
|
256
|
+
# IncomingWebhook posts "#general インストール?"
|
257
|
+
def test_post_message_ascii8bit_encoded_utf8_text
|
258
|
+
[@incoming].each do |slack|
|
259
|
+
assert_nothing_raised do
|
260
|
+
slack.post_message(default_payload(slack).merge({
|
261
|
+
text: invalid_ascii8bit_encoded_utf8_string,
|
262
|
+
}))
|
263
|
+
end
|
264
|
+
end
|
265
|
+
end
|
266
|
+
|
267
|
+
# IncomingWebhook and API posts "#general インストール?"
|
268
|
+
def test_post_message_ascii8bit_encoded_utf8_attachments
|
269
|
+
[@incoming, @api].each do |slack|
|
270
|
+
assert_nothing_raised do
|
271
|
+
slack.post_message(default_payload(slack).merge({
|
272
|
+
attachments: [default_attachment.merge({
|
273
|
+
color: 'good',
|
274
|
+
fallback: invalid_ascii8bit_encoded_utf8_string,
|
275
|
+
text: invalid_ascii8bit_encoded_utf8_string,
|
276
|
+
})]
|
277
|
+
}))
|
278
|
+
end
|
279
|
+
end
|
280
|
+
end
|
235
281
|
end
|
236
282
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fluent-plugin-slack
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.6.
|
4
|
+
version: 0.6.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Keisuke SOGAWA
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2017-05-20 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: fluentd
|
@@ -169,7 +169,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
169
169
|
version: '0'
|
170
170
|
requirements: []
|
171
171
|
rubyforge_project:
|
172
|
-
rubygems_version: 2.
|
172
|
+
rubygems_version: 2.6.11
|
173
173
|
signing_key:
|
174
174
|
specification_version: 4
|
175
175
|
summary: fluent Slack plugin
|