logstash-output-rocketchat 0.1.2 → 0.1.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/logstash/outputs/rocketchat.rb +51 -16
- data/logstash-output-rocketchat.gemspec +3 -3
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 44b757b06ab254981ccc585669f4076333cfa2fc9dc1cd0a9b424d4e39f52636
|
4
|
+
data.tar.gz: 45a307633b6816f649af2f1421606b2828be2debc33e90235ca525c6fa6343f4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a353fe8fe553f1650b71553d91b7e87cd5946e0af7909413694ca7a9bfa7b71f6905541945b02183710e8eb62a2fbc8256ce765c809ad9744dce4a9ef14792b2
|
7
|
+
data.tar.gz: ab1a982a25ed8ba58e04ac7555255c442167ffa64fe9ad168ab62ecad2c34a146e8a2e90b2db495ee1db20be3a2991829ced1d949d98a3d0a498bbd01d202b9e
|
@@ -20,6 +20,7 @@ require "logstash/namespace"
|
|
20
20
|
# username => "rc_integrations"
|
21
21
|
# password => "p@$$w0rd"
|
22
22
|
# channels => ["management", "operations", "rh"]
|
23
|
+
# content => "My message: %{message}"
|
23
24
|
# }
|
24
25
|
# }
|
25
26
|
# ----------------------------------
|
@@ -51,8 +52,8 @@ class LogStash::Outputs::Rocketchat < LogStash::Outputs::Base
|
|
51
52
|
# A list of channels/groups to which the messages will be posted
|
52
53
|
config :channels, :validate => :string, :required => true, :list => true
|
53
54
|
|
54
|
-
#
|
55
|
-
config :
|
55
|
+
# Message's content to be sent
|
56
|
+
config :content, :validate => :string, :default => "%{message}"
|
56
57
|
|
57
58
|
concurrency :single
|
58
59
|
|
@@ -63,12 +64,18 @@ class LogStash::Outputs::Rocketchat < LogStash::Outputs::Base
|
|
63
64
|
require 'rest-client'
|
64
65
|
require 'cgi'
|
65
66
|
require 'json'
|
66
|
-
|
67
|
+
|
68
|
+
# Rocketchat's API
|
69
|
+
# More information in https://rocket.chat/docs/developer-guides/rest-api/
|
67
70
|
raw_url = "#{@scheme}://#{@host}:#{@port}#{@api}"
|
68
|
-
|
71
|
+
@url = ::LogStash::Util::SafeURI.new(raw_url)
|
72
|
+
|
73
|
+
# We'll keep the rooms' ids so we don't need to ask again for each event
|
74
|
+
@room_ids = Hash.new
|
69
75
|
|
70
76
|
@logger.info("[#{m}] URL #{@url}, Username: #{@username}, Channel: #{@channels}")
|
71
77
|
|
78
|
+
# We need to grab a token from Rocketchat
|
72
79
|
auth()
|
73
80
|
end # def register
|
74
81
|
|
@@ -78,8 +85,10 @@ class LogStash::Outputs::Rocketchat < LogStash::Outputs::Base
|
|
78
85
|
|
79
86
|
m = __method__.to_s
|
80
87
|
|
81
|
-
message
|
88
|
+
# The message itself
|
89
|
+
message = event.sprintf(@content)
|
82
90
|
|
91
|
+
# To which channels/groups should the message be sent
|
83
92
|
@channels.map {|channel|
|
84
93
|
if send_message(channel, message)
|
85
94
|
@logger.debug("[#{m}] Message sent to room #{channel}")
|
@@ -94,16 +103,19 @@ class LogStash::Outputs::Rocketchat < LogStash::Outputs::Base
|
|
94
103
|
def auth()
|
95
104
|
m = __method__.to_s
|
96
105
|
|
97
|
-
@logger.debug("[
|
106
|
+
@logger.debug("[#{m}] Trying to authenticate")
|
98
107
|
|
108
|
+
# https://rocket.chat/docs/developer-guides/rest-api/authentication/login/
|
99
109
|
endpoint = "#{@url}/login"
|
100
110
|
|
111
|
+
# We have to send a valid username/password in order to get a token
|
101
112
|
payload = Hash.new
|
102
113
|
payload['username'] = @username
|
103
114
|
payload['password'] = @password
|
104
115
|
|
105
116
|
@logger.debug("[#{m}] Endpoint: #{endpoint}, payload: #{payload}")
|
106
117
|
|
118
|
+
# Go get this token...
|
107
119
|
body = make_request('POST', endpoint, nil, payload)
|
108
120
|
|
109
121
|
if body.nil?
|
@@ -111,7 +123,8 @@ class LogStash::Outputs::Rocketchat < LogStash::Outputs::Base
|
|
111
123
|
return false
|
112
124
|
else
|
113
125
|
status = body['status']
|
114
|
-
|
126
|
+
if status == 'success'
|
127
|
+
# If it succeds, then we'll have an user id. and an authentication token
|
115
128
|
@userId = body['data']['userId']
|
116
129
|
@authToken = body['data']['authToken']
|
117
130
|
return true
|
@@ -123,20 +136,32 @@ class LogStash::Outputs::Rocketchat < LogStash::Outputs::Base
|
|
123
136
|
def get_room_id(room_name)
|
124
137
|
m = __method__.to_s
|
125
138
|
|
126
|
-
@logger.debug("[#{m}] Trying to get the room id for room #{room_name}")
|
139
|
+
@logger.debug("[#{m}] Trying to get the room's id for room #{room_name}")
|
127
140
|
|
141
|
+
# Have we got the room's id already?
|
142
|
+
if @room_ids.key?(room_name)
|
143
|
+
@logger.debug("[#{m}] Already got the id for room #{room_name}, no need to ask Rocketchat server")
|
144
|
+
return @room_ids[room_name]
|
145
|
+
end
|
146
|
+
|
147
|
+
# https://rocket.chat/docs/developer-guides/rest-api/channels/info/
|
128
148
|
endpoint = "#{@url}/channels.info"
|
129
|
-
|
149
|
+
body = make_request('GET', endpoint, {:roomName => room_name}, nil)
|
130
150
|
|
131
151
|
if body.nil?
|
132
152
|
@logger.error("[#{m}] An error occurred trying to get the room id (channels endpoint) for room #{room_name}")
|
133
153
|
else
|
134
154
|
success = body['success']
|
135
155
|
if success
|
136
|
-
|
156
|
+
# It's a channel... return the room's id
|
157
|
+
@logger.debug("[#{m}] Room #{room_name} is a channel, saving its id so we don't need to ask for it anymore")
|
158
|
+
@room_ids[:room_name] = body['channel']['_id']
|
159
|
+
@logger.debug("[#{m}] Rooms' ids: #{@room_ids}")
|
160
|
+
return body['channel']['_id']
|
137
161
|
else
|
138
162
|
@logger.info("[#{m}] Couldn't get the room id for room #{room_name} through the channels endpoint, trying with the groups endpoint")
|
139
163
|
|
164
|
+
# https://rocket.chat/docs/developer-guides/rest-api/groups/info/
|
140
165
|
endpoint = "#{@url}/groups.info"
|
141
166
|
body = make_request('GET', endpoint, {:roomName => room_name}, nil)
|
142
167
|
|
@@ -144,7 +169,11 @@ class LogStash::Outputs::Rocketchat < LogStash::Outputs::Base
|
|
144
169
|
@logger.error("[#{m}] An error occurred trying to get the room id (groups endpoint) for room #{room_name}")
|
145
170
|
else
|
146
171
|
success = body['success']
|
147
|
-
|
172
|
+
if success
|
173
|
+
# It's a group... return the room's id
|
174
|
+
@logger.debug("[#{m}] Room #{room_name} is a group, saving its id so we don't need to ask for it anymore")
|
175
|
+
@room_ids[:room_name] = body['group']['_id']
|
176
|
+
@logger.debug("[#{m}] Rooms' ids: #{@room_ids}")
|
148
177
|
return body['group']['_id']
|
149
178
|
else
|
150
179
|
return nil
|
@@ -160,10 +189,12 @@ class LogStash::Outputs::Rocketchat < LogStash::Outputs::Base
|
|
160
189
|
def send_message(room_name, message)
|
161
190
|
m = __method__.to_s
|
162
191
|
|
163
|
-
@logger.debug("[#{m}] Trying to send message to room #{room_name}")
|
192
|
+
@logger.debug("[#{m}] Trying to a send message to room #{room_name}")
|
164
193
|
|
194
|
+
# https://rocket.chat/docs/developer-guides/rest-api/chat/sendmessage/
|
165
195
|
endpoint = "#{@url}/chat.sendMessage"
|
166
196
|
|
197
|
+
# Go get the room's id
|
167
198
|
room_id = get_room_id(room_name)
|
168
199
|
|
169
200
|
if room_id
|
@@ -178,16 +209,20 @@ class LogStash::Outputs::Rocketchat < LogStash::Outputs::Base
|
|
178
209
|
@logger.error("[#{m}] An error occurred trying to send message to the Rocketchat server, room #{room_name}")
|
179
210
|
return false
|
180
211
|
else
|
181
|
-
|
182
|
-
if
|
212
|
+
success = body['success']
|
213
|
+
if success
|
214
|
+
# Message sent
|
183
215
|
return true
|
216
|
+
else
|
217
|
+
# Something went wrong
|
218
|
+
return false
|
184
219
|
end
|
185
220
|
end
|
186
221
|
else
|
187
|
-
@logger.warn("[#{m}] An error occurred trying to get the room id for room #{room_name}. Are you sure the user #{@user} is
|
222
|
+
@logger.warn("[#{m}] An error occurred trying to get the room id for room #{room_name}. Are you sure the user #{@user} is subscribed to this room?")
|
188
223
|
end
|
189
224
|
|
190
|
-
return
|
225
|
+
return false
|
191
226
|
end # def send_message
|
192
227
|
|
193
228
|
public
|
@@ -1,9 +1,9 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
s.name = 'logstash-output-rocketchat'
|
3
|
-
s.version = '0.1.
|
3
|
+
s.version = '0.1.3'
|
4
4
|
s.licenses = ['Apache-2.0']
|
5
|
-
s.summary = '
|
6
|
-
s.description = 'Rocket.Chat is the leading open source team chat software solution. Free, unlimited and completely customizable with on-premises and SaaS cloud hosting. This Logstash plugin allows to send events to Rocketchat
|
5
|
+
s.summary = 'Sends messages to a Rocketchat server with information from the events.'
|
6
|
+
s.description = 'Rocket.Chat is the leading open source team chat software solution. Free, unlimited and completely customizable with on-premises and SaaS cloud hosting. This Logstash plugin allows to send events to Rocketchat channels and groups.'
|
7
7
|
s.homepage = 'https://github.com/ffknob/logstash-output-rocketchat'
|
8
8
|
s.authors = ['ffknob']
|
9
9
|
s.email = 'ffknob@tce.rs.gov.br'
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: logstash-output-rocketchat
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- ffknob
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-01-
|
11
|
+
date: 2019-01-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
requirement: !ruby/object:Gem::Requirement
|
@@ -94,7 +94,7 @@ dependencies:
|
|
94
94
|
version: '0'
|
95
95
|
description: Rocket.Chat is the leading open source team chat software solution. Free,
|
96
96
|
unlimited and completely customizable with on-premises and SaaS cloud hosting. This
|
97
|
-
Logstash plugin allows to send events to Rocketchat
|
97
|
+
Logstash plugin allows to send events to Rocketchat channels and groups.
|
98
98
|
email: ffknob@tce.rs.gov.br
|
99
99
|
executables: []
|
100
100
|
extensions: []
|
@@ -134,6 +134,6 @@ rubyforge_project:
|
|
134
134
|
rubygems_version: 2.7.6
|
135
135
|
signing_key:
|
136
136
|
specification_version: 4
|
137
|
-
summary:
|
137
|
+
summary: Sends messages to a Rocketchat server with information from the events.
|
138
138
|
test_files:
|
139
139
|
- spec/outputs/rocketchat_spec.rb
|