logstash-output-rocketchat 0.1.2 → 0.1.3
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/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
|