kapacitor-ruby 1.0.1 → 1.0.6
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 +5 -5
- data/lib/kapacitor/client.rb +75 -80
- data/lib/kapacitor/version.rb +1 -1
- metadata +20 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 821ace263cd605e3233f42c76b01ff93c8d9a2bd08764634d843183296eef674
|
4
|
+
data.tar.gz: ce299b58d8e2d5eb1efc792c36a6a101fb3504773e4b610fc8ea91457369936b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ab76b9f3b5dd49d919f7b38422c68f5d2ae286694584dbaa53dd1e2b7e72fc088022a78b996c8106846f9047985f23776bf18f3d4c7b53456bf3d7f606b58181
|
7
|
+
data.tar.gz: 509abc65bc1104000e58cc8871e36d8557055db8b937a09c90d19f35f3c6cdb67ce6ae469d1847bf35aba2dee371b7c36f4d2c09372ed24cbf7dfd81de585979
|
data/lib/kapacitor/client.rb
CHANGED
@@ -1,10 +1,10 @@
|
|
1
|
-
require '
|
1
|
+
require 'httpclient'
|
2
2
|
require 'json'
|
3
3
|
|
4
4
|
module Kapacitor
|
5
5
|
class Client
|
6
6
|
# @return [URI] Kapacitor REST API URL
|
7
|
-
attr_reader :
|
7
|
+
attr_reader :url
|
8
8
|
# @return [Net::HTTP] HTTP client instance
|
9
9
|
attr_reader :http
|
10
10
|
|
@@ -13,9 +13,9 @@ module Kapacitor
|
|
13
13
|
# @param url [String] Kapacitor REST API's URL (defaults to `http://localhost:9092`)
|
14
14
|
# @param version [Integer] API version (defaults to `v1preview`)
|
15
15
|
#
|
16
|
-
def initialize(url: 'http://localhost:9092', version: '
|
17
|
-
@
|
18
|
-
@
|
16
|
+
def initialize(url: 'http://localhost:9092/kapacitor', version: 'v1')
|
17
|
+
@http = HTTPClient.new
|
18
|
+
@url = [url, version].join('/')
|
19
19
|
end
|
20
20
|
|
21
21
|
# Define a Kapacitor template
|
@@ -33,7 +33,7 @@ module Kapacitor
|
|
33
33
|
'script' => script
|
34
34
|
}
|
35
35
|
|
36
|
-
api_post(endpoint: '
|
36
|
+
api_post(endpoint: 'templates', data: req)
|
37
37
|
end
|
38
38
|
|
39
39
|
# Update a Kapacitor template
|
@@ -50,7 +50,7 @@ module Kapacitor
|
|
50
50
|
raise ArgumentError, "Kapacitor template type can be either 'batch' or 'stream'" unless opts[:type] == 'batch' or opts[:type] == 'stream'
|
51
51
|
end
|
52
52
|
|
53
|
-
api_patch(endpoint: "
|
53
|
+
api_patch(endpoint: "templates/#{id}", data: req) unless req.empty?
|
54
54
|
end
|
55
55
|
|
56
56
|
# Delete a Kapacitor template
|
@@ -58,7 +58,16 @@ module Kapacitor
|
|
58
58
|
# @param id [String] Template ID
|
59
59
|
#
|
60
60
|
def delete_template(id:)
|
61
|
-
api_delete(endpoint: "
|
61
|
+
api_delete(endpoint: "templates/#{id}")
|
62
|
+
end
|
63
|
+
|
64
|
+
# Retrieve Kapacitor topic
|
65
|
+
#
|
66
|
+
# @return [List[String]] List of topics
|
67
|
+
#
|
68
|
+
def topics()
|
69
|
+
res = api_get(endpoint: "alerts/topics")
|
70
|
+
return res['topics'].map { |v| v['id'] }
|
62
71
|
end
|
63
72
|
|
64
73
|
# Retrieve Kapacitor templates
|
@@ -71,7 +80,7 @@ module Kapacitor
|
|
71
80
|
ret = []
|
72
81
|
|
73
82
|
loop do
|
74
|
-
res = api_get(endpoint: "
|
83
|
+
res = api_get(endpoint: "templates?offset=#{offset}&limit=#{limit}")['templates']
|
75
84
|
break unless res.size > 0
|
76
85
|
ret += res
|
77
86
|
offset += limit
|
@@ -89,7 +98,7 @@ module Kapacitor
|
|
89
98
|
def define_task(id:, dbrps:, **opts)
|
90
99
|
if (opts[:template_id].nil? && opts[:type].nil? && opts[:script].nil?) || (opts[:template_id] && (opts[:type] || opts[:script]))
|
91
100
|
raise ArgumentError, "Must specify either a Template ID or a script and type"
|
92
|
-
elsif opts[
|
101
|
+
elsif opts[:template_id].nil? && (opts[:type].nil? || opts[:script].nil?)
|
93
102
|
raise ArgumentError, "Must specify both task type and script when not using a Template ID"
|
94
103
|
end
|
95
104
|
|
@@ -116,7 +125,7 @@ module Kapacitor
|
|
116
125
|
|
117
126
|
req['vars'] = opts[:vars] if opts[:vars]
|
118
127
|
|
119
|
-
api_post(endpoint: '
|
128
|
+
api_post(endpoint: 'tasks', data: req)
|
120
129
|
end
|
121
130
|
|
122
131
|
# Update a Kapacitor task
|
@@ -141,7 +150,7 @@ module Kapacitor
|
|
141
150
|
raise ArgumentError, "Kapacitor task status can be either 'enabled' or 'disabled'" unless opts[:status] == 'enabled' || opts[:status] == 'disabled'
|
142
151
|
end
|
143
152
|
|
144
|
-
api_patch(endpoint: "
|
153
|
+
api_patch(endpoint: "tasks/#{id}", data: req) unless req.empty?
|
145
154
|
end
|
146
155
|
|
147
156
|
# Delete a Kapacitor task
|
@@ -149,7 +158,7 @@ module Kapacitor
|
|
149
158
|
# @param id [String] Task ID
|
150
159
|
#
|
151
160
|
def delete_task(id:)
|
152
|
-
api_delete(endpoint: "
|
161
|
+
api_delete(endpoint: "tasks/#{id}")
|
153
162
|
end
|
154
163
|
|
155
164
|
# Retrieve Kapacitor tasks
|
@@ -162,11 +171,11 @@ module Kapacitor
|
|
162
171
|
tasks = []
|
163
172
|
|
164
173
|
loop do
|
165
|
-
res = api_get(endpoint: "
|
174
|
+
res = api_get(endpoint: "tasks?fields=id&offset=#{offset}&limit=#{limit}")['tasks']
|
166
175
|
break unless res.size > 0
|
167
176
|
|
168
177
|
res.each do |task|
|
169
|
-
tasks << api_get(endpoint: "
|
178
|
+
tasks << api_get(endpoint: "tasks/#{task['id']}")
|
170
179
|
end
|
171
180
|
|
172
181
|
offset += limit
|
@@ -193,7 +202,7 @@ module Kapacitor
|
|
193
202
|
end
|
194
203
|
|
195
204
|
req['actions'] = actions
|
196
|
-
api_post(endpoint: "
|
205
|
+
api_post(endpoint: "alerts/topics/#{topic}/handlers", data: req)
|
197
206
|
end
|
198
207
|
|
199
208
|
# Update a topic handler
|
@@ -209,7 +218,7 @@ module Kapacitor
|
|
209
218
|
raise ArgumentError, "Kapacitor topic handler requires one or more actions" unless actions.size > 0
|
210
219
|
|
211
220
|
req['actions'] = actions
|
212
|
-
api_put(endpoint: "
|
221
|
+
api_put(endpoint: "alerts/topics/#{topic}/handlers/#{id}", data: req) unless req.empty?
|
213
222
|
end
|
214
223
|
|
215
224
|
# Delete a topic handler
|
@@ -218,7 +227,7 @@ module Kapacitor
|
|
218
227
|
# @param topic [String] Topic name
|
219
228
|
#
|
220
229
|
def delete_topic_handler(id:, topic:)
|
221
|
-
api_delete(endpoint: "
|
230
|
+
api_delete(endpoint: "alerts/topics/#{topic}/handlers/#{id}")
|
222
231
|
end
|
223
232
|
|
224
233
|
# Retrieve topic's handlers
|
@@ -227,28 +236,27 @@ module Kapacitor
|
|
227
236
|
# @return [Array[Hash]] List of handlers
|
228
237
|
#
|
229
238
|
def topic_handlers(topic:)
|
230
|
-
|
239
|
+
api_get(endpoint: "alerts/topics/#{topic}/handlers")['handlers']
|
231
240
|
end
|
232
241
|
|
233
242
|
private
|
234
243
|
# Perform a HTTP GET request
|
235
244
|
#
|
236
245
|
# @param endpoint [String] HTTP API endpoint
|
246
|
+
# @param query [String] HTTP query
|
237
247
|
# @return [Array[Hash], Hash] API response
|
238
248
|
#
|
239
|
-
def api_get(endpoint:)
|
249
|
+
def api_get(endpoint:, query: nil)
|
240
250
|
begin
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
-
|
246
|
-
|
247
|
-
|
248
|
-
|
249
|
-
|
250
|
-
else
|
251
|
-
raise Exception, "Query returned a non successful HTTP code (Code: #{resp.code}, Error: #{resp.message})"
|
251
|
+
resp = self.http.get([self.url, endpoint].join('/'), query, {'Content-type' => 'application/json', 'Accept' => 'application/json'})
|
252
|
+
begin
|
253
|
+
data = JSON.parse(resp.body) unless resp.body.empty?
|
254
|
+
rescue JSON::ParserError
|
255
|
+
raise Exception, "Failed to decode response message"
|
256
|
+
end
|
257
|
+
if resp.status != 200
|
258
|
+
error = data.include?('error') ? data['error'] : data.inspect if data
|
259
|
+
raise Exception, "Query returned a non successful HTTP code (Status: #{resp.status}, Reason: #{resp.reason}#{", Error: #{error}" if error}"
|
252
260
|
end
|
253
261
|
rescue
|
254
262
|
raise Exception, "Failed to execute GET request to Kapacitor REST API (#{$!})"
|
@@ -264,18 +272,15 @@ private
|
|
264
272
|
#
|
265
273
|
def api_post(endpoint:, data:)
|
266
274
|
begin
|
267
|
-
|
268
|
-
|
269
|
-
|
270
|
-
|
271
|
-
|
272
|
-
|
273
|
-
|
274
|
-
|
275
|
-
|
276
|
-
end
|
277
|
-
else
|
278
|
-
raise Exception, "Query returned a non successful HTTP code (Code: #{resp.code}, Error: #{resp.message})"
|
275
|
+
resp = self.http.post([self.url, endpoint].join('/'), data.to_json, {'Content-Type' => 'application/json', 'Accept' => 'application/json'})
|
276
|
+
begin
|
277
|
+
data = JSON.parse(resp.body) unless resp.body.empty?
|
278
|
+
rescue JSON::ParserError
|
279
|
+
raise Exception, "Failed to decode response message"
|
280
|
+
end
|
281
|
+
if resp.status != 200
|
282
|
+
error = data.include?('error') ? data['error'] : data.inspect if data
|
283
|
+
raise Exception, "Query returned a non successful HTTP code (Status: #{resp.status}, Reason: #{resp.reason}#{", Error: #{error}" if error}"
|
279
284
|
end
|
280
285
|
rescue
|
281
286
|
raise Exception, "Failed to execute POST request to Kapacitor REST API (#{$!})"
|
@@ -290,19 +295,15 @@ private
|
|
290
295
|
#
|
291
296
|
def api_delete(endpoint:)
|
292
297
|
begin
|
293
|
-
|
294
|
-
|
295
|
-
|
296
|
-
|
297
|
-
|
298
|
-
|
299
|
-
|
300
|
-
|
301
|
-
|
302
|
-
end
|
303
|
-
end
|
304
|
-
else
|
305
|
-
raise Exception, "Query returned a non successful HTTP code (Code: #{resp.code}, Error: #{resp.message})"
|
298
|
+
resp = self.http.delete([self.url, endpoint].join('/'), {'Content-type' => 'application/json', 'Accept' => 'application/json'})
|
299
|
+
begin
|
300
|
+
data = JSON.parse(resp.body) unless resp.body.empty?
|
301
|
+
rescue JSON::ParserError
|
302
|
+
raise Exception, "Failed to decode response message"
|
303
|
+
end
|
304
|
+
if resp.status != 204
|
305
|
+
error = data.include?('error') ? data['error'] : data.inspect if data
|
306
|
+
raise Exception, "Query returned a non successful HTTP code (Status: #{resp.status}, Reason: #{resp.reason}#{", Error: #{error}" if error}"
|
306
307
|
end
|
307
308
|
rescue
|
308
309
|
raise Exception, "Failed to execute DELETE request to Kapacitor REST API (#{$!})"
|
@@ -318,18 +319,15 @@ private
|
|
318
319
|
#
|
319
320
|
def api_patch(endpoint:, data:)
|
320
321
|
begin
|
321
|
-
|
322
|
-
|
323
|
-
|
324
|
-
|
325
|
-
|
326
|
-
|
327
|
-
|
328
|
-
|
329
|
-
|
330
|
-
end
|
331
|
-
else
|
332
|
-
raise Exception, "Query returned a non successful HTTP code (Code: #{resp.code}, Error: #{resp.message})"
|
322
|
+
resp = self.http.patch([self.url, endpoint].join('/'), data.to_json, {'Content-Type' => 'application/json', 'Accept' => 'application/json'})
|
323
|
+
begin
|
324
|
+
data = JSON.parse(resp.body) unless resp.body.empty?
|
325
|
+
rescue JSON::ParserError
|
326
|
+
raise Exception, "Failed to decode response message"
|
327
|
+
end
|
328
|
+
if resp.status != 200
|
329
|
+
error = data.include?('error') ? data['error'] : data.inspect if data
|
330
|
+
raise Exception, "Query returned a non successful HTTP code (Status: #{resp.status}, Reason: #{resp.reason}#{", Error: #{error}" if error}"
|
333
331
|
end
|
334
332
|
rescue
|
335
333
|
raise Exception, "Failed to execute PATCH request to Kapacitor REST API (#{$!})"
|
@@ -345,18 +343,15 @@ private
|
|
345
343
|
#
|
346
344
|
def api_put(endpoint:, data:)
|
347
345
|
begin
|
348
|
-
|
349
|
-
|
350
|
-
|
351
|
-
|
352
|
-
|
353
|
-
|
354
|
-
|
355
|
-
|
356
|
-
|
357
|
-
end
|
358
|
-
else
|
359
|
-
raise Exception, "Query returned a non successful HTTP code (Code: #{resp.code}, Error: #{resp.message})"
|
346
|
+
resp = self.http.put([self.url, endpoint].join('/'), data.to_json, {'Content-Type' => 'application/json', 'Accept' => 'application/json'})
|
347
|
+
begin
|
348
|
+
data = JSON.parse(resp.body) unless resp.body.empty?
|
349
|
+
rescue JSON::ParserError
|
350
|
+
raise Exception, "Failed to decode response message"
|
351
|
+
end
|
352
|
+
if resp.status != 200
|
353
|
+
error = data.include?('error') ? data['error'] : data.inspect if data
|
354
|
+
raise Exception, "Query returned a non successful HTTP code (Status: #{resp.status}, Reason: #{resp.reason}#{", Error: #{error}" if error}"
|
360
355
|
end
|
361
356
|
rescue
|
362
357
|
raise Exception, "Failed to execute PUT request to Kapacitor REST API (#{$!})"
|
data/lib/kapacitor/version.rb
CHANGED
metadata
CHANGED
@@ -1,15 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: kapacitor-ruby
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Matteo Cerutti
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-11-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: httpclient
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 2.4.0
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 2.4.0
|
13
27
|
- !ruby/object:Gem::Dependency
|
14
28
|
name: json
|
15
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -38,7 +52,7 @@ homepage: https://github.com/m4ce/kapacitor-ruby
|
|
38
52
|
licenses:
|
39
53
|
- Apache 2.0
|
40
54
|
metadata: {}
|
41
|
-
post_install_message:
|
55
|
+
post_install_message:
|
42
56
|
rdoc_options: []
|
43
57
|
require_paths:
|
44
58
|
- lib
|
@@ -53,9 +67,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
53
67
|
- !ruby/object:Gem::Version
|
54
68
|
version: '0'
|
55
69
|
requirements: []
|
56
|
-
|
57
|
-
|
58
|
-
signing_key:
|
70
|
+
rubygems_version: 3.0.1
|
71
|
+
signing_key:
|
59
72
|
specification_version: 4
|
60
73
|
summary: Ruby client library that allows to interact with the Kapacitor JSON REST
|
61
74
|
API
|