dogapi 1.36.0 → 1.37.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 +5 -5
- data/.azure-pipelines/all.yml +44 -0
- data/.rubocop_todo.yml +69 -58
- data/CHANGELOG.md +15 -0
- data/README.rdoc +2 -6
- data/lib/capistrano/datadog.rb +1 -1
- data/lib/dogapi/common.rb +29 -10
- data/lib/dogapi/facade.rb +54 -0
- data/lib/dogapi/v1.rb +1 -0
- data/lib/dogapi/v1/monitor.rb +9 -4
- data/lib/dogapi/v1/service_level_objective.rb +117 -0
- data/lib/dogapi/version.rb +1 -1
- data/spec/integration/comment_spec.rb +1 -3
- data/spec/integration/common_spec.rb +2 -6
- data/spec/integration/service_level_objective_spec.rb +71 -0
- data/spec/spec_helper.rb +34 -8
- data/spec/unit/common_spec.rb +38 -0
- metadata +7 -4
- data/.travis.yml +0 -15
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
2
|
+
SHA256:
|
|
3
|
+
metadata.gz: 762f1d3fe87b94278a55cca80da8824b0c2db3c420ea9e8192cd1f33d7a274ce
|
|
4
|
+
data.tar.gz: c60248ed8d4cc8e3d3f96662651878f42591bd336c4c6d58511489e504474607
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: '09565868bb18c71030b625b908a8783f83f135e237c6e6fe8600ecd745141c34cd3e2bc019fb24ad84d01fdb5b839d56cd4dc57db9fe751b37c13ec43f31593b'
|
|
7
|
+
data.tar.gz: d93617177693a86273716dd2ccc99bb3e79ef2aa77a44cd021a635a7181e34df9485592a2ed341c9cae50407007add7a9e30348a77212aea28ab7332da2b38bb
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
trigger:
|
|
2
|
+
batch: false
|
|
3
|
+
branches:
|
|
4
|
+
include:
|
|
5
|
+
- master
|
|
6
|
+
|
|
7
|
+
pr:
|
|
8
|
+
branches:
|
|
9
|
+
include:
|
|
10
|
+
- master
|
|
11
|
+
|
|
12
|
+
jobs:
|
|
13
|
+
- job: UnitTests
|
|
14
|
+
pool:
|
|
15
|
+
vmImage: "Ubuntu-16.04"
|
|
16
|
+
strategy:
|
|
17
|
+
matrix:
|
|
18
|
+
Rb23:
|
|
19
|
+
RUBY_VERSION: '2.3.7'
|
|
20
|
+
TASK: spec
|
|
21
|
+
Rb24:
|
|
22
|
+
RUBY_VERSION: '2.4.6'
|
|
23
|
+
TASK: spec
|
|
24
|
+
Rb25:
|
|
25
|
+
RUBY_VERSION: '2.5.5'
|
|
26
|
+
TASK: spec
|
|
27
|
+
Rb26:
|
|
28
|
+
RUBY_VERSION: '2.6.3'
|
|
29
|
+
TASK: spec
|
|
30
|
+
Lint:
|
|
31
|
+
RUBY_VERSION: '2.6.3'
|
|
32
|
+
TASK: rubocop
|
|
33
|
+
steps:
|
|
34
|
+
- task: UseRubyVersion@0
|
|
35
|
+
displayName: Use Ruby $(RUBY_VERSION)
|
|
36
|
+
inputs:
|
|
37
|
+
versionSpec: $(RUBY_VERSION)
|
|
38
|
+
addToPath: true
|
|
39
|
+
- script: |
|
|
40
|
+
gem install bundler
|
|
41
|
+
bundle install --retry=3 --jobs=4
|
|
42
|
+
displayName: 'bundle install'
|
|
43
|
+
- script: bundle exec rake $(TASK)
|
|
44
|
+
displayName: Run $(TASK) via bundle
|
data/.rubocop_todo.yml
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# This configuration was generated by
|
|
2
2
|
# `rubocop --auto-gen-config`
|
|
3
|
-
# on
|
|
3
|
+
# on 2019-10-23 14:52:35 -0500 using RuboCop version 0.49.1.
|
|
4
4
|
# The point is for the user to remove these configuration records
|
|
5
5
|
# one by one as the offenses are removed from the code base.
|
|
6
6
|
# Note that changes in the inspected code, or installation of new
|
|
@@ -51,14 +51,14 @@ Layout/EmptyLines:
|
|
|
51
51
|
- 'lib/capistrano/datadog/v2.rb'
|
|
52
52
|
- 'lib/dogapi/facade.rb'
|
|
53
53
|
|
|
54
|
-
# Offense count:
|
|
54
|
+
# Offense count: 78
|
|
55
55
|
# Cop supports --auto-correct.
|
|
56
56
|
# Configuration parameters: EnforcedStyle, SupportedStyles.
|
|
57
57
|
# SupportedStyles: empty_lines, empty_lines_except_namespace, empty_lines_special, no_empty_lines
|
|
58
58
|
Layout/EmptyLinesAroundClassBody:
|
|
59
59
|
Enabled: false
|
|
60
60
|
|
|
61
|
-
# Offense count:
|
|
61
|
+
# Offense count: 4
|
|
62
62
|
# Cop supports --auto-correct.
|
|
63
63
|
Layout/EmptyLinesAroundMethodBody:
|
|
64
64
|
Exclude:
|
|
@@ -85,10 +85,20 @@ Layout/ExtraSpacing:
|
|
|
85
85
|
|
|
86
86
|
# Offense count: 2
|
|
87
87
|
# Cop supports --auto-correct.
|
|
88
|
-
# Configuration parameters: SupportedStyles, IndentationWidth.
|
|
88
|
+
# Configuration parameters: EnforcedStyle, SupportedStyles, IndentationWidth.
|
|
89
|
+
# SupportedStyles: consistent, special_for_inner_method_call, special_for_inner_method_call_in_parentheses
|
|
90
|
+
Layout/FirstParameterIndentation:
|
|
91
|
+
Exclude:
|
|
92
|
+
- 'spec/spec_helper.rb'
|
|
93
|
+
|
|
94
|
+
# Offense count: 3
|
|
95
|
+
# Cop supports --auto-correct.
|
|
96
|
+
# Configuration parameters: EnforcedStyle, SupportedStyles, IndentationWidth.
|
|
89
97
|
# SupportedStyles: special_inside_parentheses, consistent, align_braces
|
|
90
98
|
Layout/IndentHash:
|
|
91
|
-
|
|
99
|
+
Exclude:
|
|
100
|
+
- 'lib/dogapi/v1/event.rb'
|
|
101
|
+
- 'lib/dogapi/v1/service_level_objective.rb'
|
|
92
102
|
|
|
93
103
|
# Offense count: 1
|
|
94
104
|
# Cop supports --auto-correct.
|
|
@@ -120,7 +130,7 @@ Layout/SpaceAfterComma:
|
|
|
120
130
|
Exclude:
|
|
121
131
|
- 'examples/custom_metric.rb'
|
|
122
132
|
|
|
123
|
-
# Offense count:
|
|
133
|
+
# Offense count: 83
|
|
124
134
|
# Cop supports --auto-correct.
|
|
125
135
|
# Configuration parameters: EnforcedStyle, SupportedStyles.
|
|
126
136
|
# SupportedStyles: space, no_space
|
|
@@ -147,12 +157,29 @@ Layout/SpaceAroundOperators:
|
|
|
147
157
|
- 'examples/custom_metric.rb'
|
|
148
158
|
- 'lib/dogapi/event.rb'
|
|
149
159
|
|
|
150
|
-
# Offense count:
|
|
160
|
+
# Offense count: 8
|
|
161
|
+
# Cop supports --auto-correct.
|
|
162
|
+
Layout/SpaceBeforeComma:
|
|
163
|
+
Exclude:
|
|
164
|
+
- 'lib/dogapi/facade.rb'
|
|
165
|
+
- 'lib/dogapi/v1/service_level_objective.rb'
|
|
166
|
+
|
|
167
|
+
# Offense count: 2
|
|
151
168
|
# Cop supports --auto-correct.
|
|
152
169
|
# Configuration parameters: AllowForAlignment.
|
|
153
170
|
Layout/SpaceBeforeFirstArg:
|
|
154
171
|
Exclude:
|
|
155
172
|
- 'lib/capistrano/datadog/v2.rb'
|
|
173
|
+
- 'lib/dogapi/v1/service_level_objective.rb'
|
|
174
|
+
|
|
175
|
+
# Offense count: 6
|
|
176
|
+
# Cop supports --auto-correct.
|
|
177
|
+
# Configuration parameters: EnforcedStyle, SupportedStyles, EnforcedStyleForEmptyBraces, SupportedStylesForEmptyBraces.
|
|
178
|
+
# SupportedStyles: space, no_space, compact
|
|
179
|
+
# SupportedStylesForEmptyBraces: space, no_space
|
|
180
|
+
Layout/SpaceInsideHashLiteralBraces:
|
|
181
|
+
Exclude:
|
|
182
|
+
- 'spec/integration/service_level_objective_spec.rb'
|
|
156
183
|
|
|
157
184
|
# Offense count: 1
|
|
158
185
|
# Cop supports --auto-correct.
|
|
@@ -201,44 +228,42 @@ Lint/UselessAssignment:
|
|
|
201
228
|
Exclude:
|
|
202
229
|
- 'lib/capistrano/datadog.rb'
|
|
203
230
|
|
|
204
|
-
# Offense count:
|
|
231
|
+
# Offense count: 13
|
|
205
232
|
Metrics/AbcSize:
|
|
206
233
|
Max: 51
|
|
207
234
|
|
|
208
|
-
# Offense count:
|
|
235
|
+
# Offense count: 24
|
|
209
236
|
# Configuration parameters: CountComments, ExcludedMethods.
|
|
210
237
|
Metrics/BlockLength:
|
|
211
|
-
Max:
|
|
212
|
-
Exclude:
|
|
213
|
-
- 'spec/integration/monitor_spec.rb'
|
|
238
|
+
Max: 102
|
|
214
239
|
|
|
215
|
-
# Offense count:
|
|
240
|
+
# Offense count: 5
|
|
216
241
|
Metrics/CyclomaticComplexity:
|
|
217
|
-
Max:
|
|
242
|
+
Max: 11
|
|
218
243
|
|
|
219
|
-
# Offense count:
|
|
244
|
+
# Offense count: 18
|
|
220
245
|
# Configuration parameters: CountComments.
|
|
221
246
|
Metrics/MethodLength:
|
|
222
247
|
Max: 34
|
|
223
248
|
|
|
224
|
-
# Offense count:
|
|
249
|
+
# Offense count: 7
|
|
225
250
|
# Configuration parameters: CountKeywordArgs.
|
|
226
251
|
Metrics/ParameterLists:
|
|
227
|
-
Max:
|
|
252
|
+
Max: 11
|
|
228
253
|
|
|
229
|
-
# Offense count:
|
|
254
|
+
# Offense count: 4
|
|
230
255
|
Metrics/PerceivedComplexity:
|
|
231
|
-
Max:
|
|
256
|
+
Max: 12
|
|
232
257
|
|
|
233
|
-
# Offense count:
|
|
258
|
+
# Offense count: 13
|
|
234
259
|
Style/AccessorMethodName:
|
|
235
260
|
Exclude:
|
|
236
261
|
- 'lib/dogapi/facade.rb'
|
|
237
262
|
- 'lib/dogapi/v1/alert.rb'
|
|
238
263
|
- 'lib/dogapi/v1/dash.rb'
|
|
264
|
+
- 'lib/dogapi/v1/dashboard.rb'
|
|
239
265
|
- 'lib/dogapi/v1/embed.rb'
|
|
240
266
|
- 'lib/dogapi/v1/screenboard.rb'
|
|
241
|
-
- 'lib/dogapi/v1/dashboard.rb'
|
|
242
267
|
- 'lib/dogapi/v1/user.rb'
|
|
243
268
|
|
|
244
269
|
# Offense count: 1
|
|
@@ -283,7 +308,7 @@ Style/ClassMethods:
|
|
|
283
308
|
Exclude:
|
|
284
309
|
- 'lib/dogapi/common.rb'
|
|
285
310
|
|
|
286
|
-
# Offense count:
|
|
311
|
+
# Offense count: 3
|
|
287
312
|
Style/ClassVars:
|
|
288
313
|
Exclude:
|
|
289
314
|
- 'lib/dogapi/common.rb'
|
|
@@ -295,24 +320,24 @@ Style/ColonMethodCall:
|
|
|
295
320
|
- 'lib/capistrano/datadog.rb'
|
|
296
321
|
- 'lib/capistrano/datadog/v2.rb'
|
|
297
322
|
|
|
298
|
-
# Offense count:
|
|
323
|
+
# Offense count: 1
|
|
299
324
|
# Cop supports --auto-correct.
|
|
300
325
|
# Configuration parameters: EnforcedStyle, SupportedStyles, AllowInnerBackticks.
|
|
301
326
|
# SupportedStyles: backticks, percent_x, mixed
|
|
302
327
|
Style/CommandLiteral:
|
|
303
328
|
Exclude:
|
|
304
|
-
- 'lib/capistrano/datadog.rb'
|
|
305
329
|
- 'lib/dogapi/common.rb'
|
|
306
330
|
|
|
307
|
-
# Offense count:
|
|
331
|
+
# Offense count: 2
|
|
308
332
|
# Cop supports --auto-correct.
|
|
309
333
|
# Configuration parameters: EnforcedStyle, SupportedStyles, SingleLineConditionsOnly, IncludeTernaryExpressions.
|
|
310
334
|
# SupportedStyles: assign_to_condition, assign_inside_condition
|
|
311
335
|
Style/ConditionalAssignment:
|
|
312
336
|
Exclude:
|
|
313
337
|
- 'lib/capistrano/datadog.rb'
|
|
338
|
+
- 'lib/dogapi/v1/service_level_objective.rb'
|
|
314
339
|
|
|
315
|
-
# Offense count:
|
|
340
|
+
# Offense count: 21
|
|
316
341
|
# Cop supports --auto-correct.
|
|
317
342
|
Style/DefWithParentheses:
|
|
318
343
|
Exclude:
|
|
@@ -322,28 +347,9 @@ Style/DefWithParentheses:
|
|
|
322
347
|
- 'lib/dogapi/v1/metric.rb'
|
|
323
348
|
- 'lib/dogapi/v1/screenboard.rb'
|
|
324
349
|
|
|
325
|
-
# Offense count:
|
|
350
|
+
# Offense count: 23
|
|
326
351
|
Style/Documentation:
|
|
327
|
-
|
|
328
|
-
- 'spec/**/*'
|
|
329
|
-
- 'test/**/*'
|
|
330
|
-
- 'lib/capistrano/datadog.rb'
|
|
331
|
-
- 'lib/capistrano/datadog/v2.rb'
|
|
332
|
-
- 'lib/capistrano/datadog/v3.rb'
|
|
333
|
-
- 'lib/dogapi/common.rb'
|
|
334
|
-
- 'lib/dogapi/v1/alert.rb'
|
|
335
|
-
- 'lib/dogapi/v1/comment.rb'
|
|
336
|
-
- 'lib/dogapi/v1/dash.rb'
|
|
337
|
-
- 'lib/dogapi/v1/metadata.rb'
|
|
338
|
-
- 'lib/dogapi/v1/monitor.rb'
|
|
339
|
-
- 'lib/dogapi/v1/screenboard.rb'
|
|
340
|
-
- 'lib/dogapi/v1/search.rb'
|
|
341
|
-
- 'lib/dogapi/v1/service_check.rb'
|
|
342
|
-
- 'lib/dogapi/v1/snapshot.rb'
|
|
343
|
-
- 'lib/dogapi/v1/user.rb'
|
|
344
|
-
- 'lib/dogapi/v1/integration.rb'
|
|
345
|
-
- 'lib/dogapi/v1/usage.rb'
|
|
346
|
-
- 'lib/dogapi/v1/metric.rb'
|
|
352
|
+
Enabled: false
|
|
347
353
|
|
|
348
354
|
# Offense count: 1
|
|
349
355
|
# Cop supports --auto-correct.
|
|
@@ -351,7 +357,7 @@ Style/EmptyLiteral:
|
|
|
351
357
|
Exclude:
|
|
352
358
|
- 'lib/dogapi/v1/metric.rb'
|
|
353
359
|
|
|
354
|
-
# Offense count:
|
|
360
|
+
# Offense count: 3
|
|
355
361
|
# Configuration parameters: MinBodyLength.
|
|
356
362
|
Style/GuardClause:
|
|
357
363
|
Exclude:
|
|
@@ -399,7 +405,7 @@ Style/LineEndConcatenation:
|
|
|
399
405
|
Exclude:
|
|
400
406
|
- 'dogapi.gemspec'
|
|
401
407
|
|
|
402
|
-
# Offense count:
|
|
408
|
+
# Offense count: 18
|
|
403
409
|
# Cop supports --auto-correct.
|
|
404
410
|
Style/MethodCallWithoutArgsParentheses:
|
|
405
411
|
Exclude:
|
|
@@ -414,7 +420,7 @@ Style/MultilineIfThen:
|
|
|
414
420
|
Exclude:
|
|
415
421
|
- 'lib/capistrano/datadog.rb'
|
|
416
422
|
|
|
417
|
-
# Offense count:
|
|
423
|
+
# Offense count: 30
|
|
418
424
|
# Cop supports --auto-correct.
|
|
419
425
|
Style/MutableConstant:
|
|
420
426
|
Enabled: false
|
|
@@ -434,12 +440,17 @@ Style/Not:
|
|
|
434
440
|
Exclude:
|
|
435
441
|
- 'lib/dogapi/v1/metric.rb'
|
|
436
442
|
|
|
437
|
-
# Offense count:
|
|
443
|
+
# Offense count: 1
|
|
444
|
+
# Cop supports --auto-correct.
|
|
445
|
+
# Configuration parameters: Strict.
|
|
446
|
+
Style/NumericLiterals:
|
|
447
|
+
MinDigits: 8
|
|
448
|
+
|
|
449
|
+
# Offense count: 4
|
|
438
450
|
# Cop supports --auto-correct.
|
|
439
451
|
# Configuration parameters: PreferredDelimiters.
|
|
440
452
|
Style/PercentLiteralDelimiters:
|
|
441
453
|
Exclude:
|
|
442
|
-
- 'lib/capistrano/datadog.rb'
|
|
443
454
|
- 'lib/dogapi/common.rb'
|
|
444
455
|
- 'spec/integration/event_spec.rb'
|
|
445
456
|
- 'spec/integration/monitor_spec.rb'
|
|
@@ -452,12 +463,11 @@ Style/PreferredHashMethods:
|
|
|
452
463
|
Exclude:
|
|
453
464
|
- 'lib/dogapi/common.rb'
|
|
454
465
|
|
|
455
|
-
# Offense count:
|
|
466
|
+
# Offense count: 2
|
|
456
467
|
# Cop supports --auto-correct.
|
|
457
468
|
Style/RedundantBegin:
|
|
458
469
|
Exclude:
|
|
459
470
|
- 'lib/capistrano/datadog.rb'
|
|
460
|
-
- 'lib/dogapi/common.rb'
|
|
461
471
|
- 'lib/dogapi/v1/metric.rb'
|
|
462
472
|
|
|
463
473
|
# Offense count: 2
|
|
@@ -497,7 +507,7 @@ Style/SpecialGlobalVars:
|
|
|
497
507
|
Exclude:
|
|
498
508
|
- 'dogapi.gemspec'
|
|
499
509
|
|
|
500
|
-
# Offense count:
|
|
510
|
+
# Offense count: 23
|
|
501
511
|
# Cop supports --auto-correct.
|
|
502
512
|
# Configuration parameters: EnforcedStyle, SupportedStyles, ConsistentQuotesInMultiline.
|
|
503
513
|
# SupportedStyles: single_quotes, double_quotes
|
|
@@ -509,6 +519,7 @@ Style/StringLiterals:
|
|
|
509
519
|
- 'examples/Capfile'
|
|
510
520
|
- 'examples/custom_event.rb'
|
|
511
521
|
- 'lib/dogapi/event.rb'
|
|
522
|
+
- 'spec/integration/service_level_objective_spec.rb'
|
|
512
523
|
|
|
513
524
|
# Offense count: 10
|
|
514
525
|
# Cop supports --auto-correct.
|
|
@@ -526,11 +537,11 @@ Style/TrailingCommaInLiteral:
|
|
|
526
537
|
|
|
527
538
|
# Offense count: 2
|
|
528
539
|
# Cop supports --auto-correct.
|
|
529
|
-
# Configuration parameters:
|
|
540
|
+
# Configuration parameters: SupportedStyles, WordRegex.
|
|
530
541
|
# SupportedStyles: percent, brackets
|
|
531
542
|
Style/WordArray:
|
|
532
|
-
|
|
533
|
-
|
|
543
|
+
EnforcedStyle: percent
|
|
544
|
+
MinSize: 3
|
|
534
545
|
|
|
535
546
|
# Offense count: 1
|
|
536
547
|
# Cop supports --auto-correct.
|
data/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|
# Changes
|
|
2
2
|
|
|
3
|
+
## 1.37.0 / 2019-11-04
|
|
4
|
+
|
|
5
|
+
* [FEATURE] Add Service Level Objectives support. See [#188][], thanks [@platinummonkey][]
|
|
6
|
+
* [IMPROVEMENTS] Don't fail if `hostname` binary is not installed. See [#179][], thanks [@pschipitsch][]
|
|
7
|
+
* [IMPROVEMENTS] Use headers-only for api and app keys for endpoints that support this. See [#189][], thanks [@ssc3][]
|
|
8
|
+
* [IMPROVEMENTS] Make `query` and `options` optional for `update_monitor` calls. See [#192][], thanks [@unclebconnor][]
|
|
9
|
+
|
|
3
10
|
## 1.36.0 / 2019-06-05
|
|
4
11
|
|
|
5
12
|
* [BUGFIX] Pass the options as params to request, not body content. See [#157][], thanks [@wonko][]
|
|
@@ -246,6 +253,10 @@ This is the last release compatible with Ruby 1.8. ([EOL 2013-06-30](https://www
|
|
|
246
253
|
[#172]: https://github.com/DataDog/dogapi-rb/issues/172
|
|
247
254
|
[#173]: https://github.com/DataDog/dogapi-rb/issues/173
|
|
248
255
|
[#174]: https://github.com/DataDog/dogapi-rb/issues/174
|
|
256
|
+
[#179]: https://github.com/DataDog/dogapi-rb/issues/179
|
|
257
|
+
[#188]: https://github.com/DataDog/dogapi-rb/issues/188
|
|
258
|
+
[#189]: https://github.com/DataDog/dogapi-rb/issues/189
|
|
259
|
+
[#192]: https://github.com/DataDog/dogapi-rb/issues/192
|
|
249
260
|
[@ArjenSchwarz]: https://github.com/ArjenSchwarz
|
|
250
261
|
[@Kaixiang]: https://github.com/Kaixiang
|
|
251
262
|
[@TaylURRE]: https://github.com/TaylURRE
|
|
@@ -265,8 +276,12 @@ This is the last release compatible with Ruby 1.8. ([EOL 2013-06-30](https://www
|
|
|
265
276
|
[@miknight]: https://github.com/miknight
|
|
266
277
|
[@nots]: https://github.com/nots
|
|
267
278
|
[@orien]: https://github.com/orien
|
|
279
|
+
[@platinummonkey]: https://github.com/platinummonkey
|
|
280
|
+
[@pschipitsch]: https://github.com/pschipitsch
|
|
268
281
|
[@rmoriz]: https://github.com/rmoriz
|
|
282
|
+
[@ssc3]: https://github.com/ssc3
|
|
269
283
|
[@treeder]: https://github.com/treeder
|
|
284
|
+
[@unclebconnor]: https://github.com/unclebconnor
|
|
270
285
|
[@winebarrel]: https://github.com/winebarrel
|
|
271
286
|
[@wonko]: https://github.com/wonko
|
|
272
287
|
[@yyuu]: https://github.com/yyuu
|
data/README.rdoc
CHANGED
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
= Ruby Client for Datadog API
|
|
2
2
|
|
|
3
|
-
{<img src="https://badge.fury.io/rb/dogapi.
|
|
4
|
-
|
|
5
|
-
{<img src="https://travis-ci.org/DataDog/dogapi-rb.png?branch=master" alt="Build Status" />}[https://travis-ci.org/DataDog/dogapi-rb]
|
|
3
|
+
{<img src="https://badge.fury.io/rb/dogapi.svg" alt="Gem Version" />}[http://badge.fury.io/rb/dogapi]
|
|
4
|
+
{<img src="https://dev.azure.com/datadoghq/dogapi-rb/_apis/build/status/DataDog.dogapi-rb?branchName=master" alt="Build Status" />}[https://dev.azure.com/datadoghq/dogapi-rb/_build/latest?definitionId=16&branchName=master]
|
|
6
5
|
|
|
7
6
|
The Ruby client is a library suitable for inclusion in existing Ruby projects or for development of standalone scripts. It provides an abstraction on top of Datadog's raw HTTP interface for reporting events and metrics.
|
|
8
7
|
|
|
@@ -166,6 +165,3 @@ data point you will need to pass a list of +Time+, +float+ pairs, instead of a s
|
|
|
166
165
|
query = 'sum:metric.count{*}.as_count()'
|
|
167
166
|
|
|
168
167
|
dog.get_points(query, from, to)
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
data/lib/capistrano/datadog.rb
CHANGED
data/lib/dogapi/common.rb
CHANGED
|
@@ -2,9 +2,11 @@ require 'cgi'
|
|
|
2
2
|
require 'net/https'
|
|
3
3
|
require 'socket'
|
|
4
4
|
require 'uri'
|
|
5
|
+
require 'English'
|
|
5
6
|
|
|
6
7
|
require 'rubygems'
|
|
7
8
|
require 'multi_json'
|
|
9
|
+
require 'set'
|
|
8
10
|
|
|
9
11
|
module Dogapi
|
|
10
12
|
|
|
@@ -68,6 +70,7 @@ module Dogapi
|
|
|
68
70
|
|
|
69
71
|
# Superclass that deals with the details of communicating with the DataDog API
|
|
70
72
|
class APIService
|
|
73
|
+
attr_reader :api_key, :application_key
|
|
71
74
|
def initialize(api_key, application_key, silent=true, timeout=nil, endpoint=nil)
|
|
72
75
|
@api_key = api_key
|
|
73
76
|
@application_key = application_key
|
|
@@ -115,8 +118,10 @@ module Dogapi
|
|
|
115
118
|
resp = nil
|
|
116
119
|
connect do |conn|
|
|
117
120
|
begin
|
|
118
|
-
current_url = url + prepare_params(extra_params, with_app_key)
|
|
121
|
+
current_url = url + prepare_params(extra_params, url, with_app_key)
|
|
119
122
|
req = method.new(current_url)
|
|
123
|
+
req['DD-API-KEY'] = @api_key
|
|
124
|
+
req['DD-APPLICATION-KEY'] = @application_key if with_app_key
|
|
120
125
|
|
|
121
126
|
if send_json
|
|
122
127
|
req.content_type = 'application/json'
|
|
@@ -131,15 +136,31 @@ module Dogapi
|
|
|
131
136
|
end
|
|
132
137
|
end
|
|
133
138
|
|
|
134
|
-
def prepare_params(extra_params, with_app_key)
|
|
135
|
-
params =
|
|
136
|
-
params[:application_key] = @application_key if with_app_key
|
|
139
|
+
def prepare_params(extra_params, url, with_app_key)
|
|
140
|
+
params = set_api_and_app_keys_in_params(url, with_app_key)
|
|
137
141
|
params = extra_params.merge params unless extra_params.nil?
|
|
138
142
|
qs_params = params.map { |k, v| CGI.escape(k.to_s) + '=' + CGI.escape(v.to_s) }
|
|
139
143
|
qs = '?' + qs_params.join('&')
|
|
140
144
|
qs
|
|
141
145
|
end
|
|
142
146
|
|
|
147
|
+
def set_api_and_app_keys_in_params(url, with_app_key)
|
|
148
|
+
set_of_urls = Set.new ['/api/v1/series',
|
|
149
|
+
'/api/v1/check_run',
|
|
150
|
+
'/api/v1/events',
|
|
151
|
+
'/api/v1/screen']
|
|
152
|
+
|
|
153
|
+
include_in_params = set_of_urls.include?(url)
|
|
154
|
+
|
|
155
|
+
if include_in_params
|
|
156
|
+
params = { api_key: @api_key }
|
|
157
|
+
params[:application_key] = @application_key if with_app_key
|
|
158
|
+
else
|
|
159
|
+
params = {}
|
|
160
|
+
end
|
|
161
|
+
return params
|
|
162
|
+
end
|
|
163
|
+
|
|
143
164
|
def handle_response(resp)
|
|
144
165
|
if resp.code == 204 || resp.body == '' || resp.body == 'null' || resp.body.nil?
|
|
145
166
|
return resp.code, {}
|
|
@@ -163,11 +184,9 @@ module Dogapi
|
|
|
163
184
|
@@hostname = nil
|
|
164
185
|
|
|
165
186
|
def Dogapi.find_localhost
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
raise 'Cannot determine local hostname via hostname -f'
|
|
171
|
-
end
|
|
187
|
+
@@hostname ||= %x[hostname -f].strip
|
|
188
|
+
rescue SystemCallError
|
|
189
|
+
raise $ERROR_INFO unless $ERROR_INFO.class.name == 'Errno::ENOENT'
|
|
190
|
+
@@hostname = Addrinfo.getaddrinfo(Socket.gethostname, nil, nil, nil, nil, Socket::AI_CANONNAME).first.canonname
|
|
172
191
|
end
|
|
173
192
|
end
|
data/lib/dogapi/facade.rb
CHANGED
|
@@ -95,6 +95,8 @@ module Dogapi
|
|
|
95
95
|
@hosts_svc = Dogapi::V1::HostsService.new(@api_key, @application_key, silent, timeout, @datadog_host)
|
|
96
96
|
@integration_svc = Dogapi::V1::IntegrationService.new(@api_key, @application_key, silent, timeout, @datadog_host)
|
|
97
97
|
@usage_svc = Dogapi::V1::UsageService.new(@api_key, @application_key, silent, timeout, @datadog_host)
|
|
98
|
+
@service_level_objective_svc = Dogapi::V1::ServiceLevelObjectiveService.new(@api_key, @application_key, silent,
|
|
99
|
+
timeout, @datadog_host)
|
|
98
100
|
|
|
99
101
|
# Support for Dashboard List API v2.
|
|
100
102
|
@v2 = Dogapi::ClientV2.new(@api_key, @application_key, true, true, @datadog_host)
|
|
@@ -616,6 +618,58 @@ module Dogapi
|
|
|
616
618
|
@monitor_svc.unmute_host(hostname)
|
|
617
619
|
end
|
|
618
620
|
|
|
621
|
+
#
|
|
622
|
+
# SERVICE LEVEL OBJECTIVES
|
|
623
|
+
#
|
|
624
|
+
|
|
625
|
+
def create_service_level_objective(type: , name: , description: nil, tags: nil, thresholds: nil, numerator: nil,
|
|
626
|
+
denominator: nil, monitor_ids: nil, monitor_search: nil, groups: nil)
|
|
627
|
+
@service_level_objective_svc.create_service_level_objective(type: type, name: name, description: description,
|
|
628
|
+
tags: tags, thresholds: thresholds,
|
|
629
|
+
numerator: numerator, denominator: denominator,
|
|
630
|
+
monitor_ids: monitor_ids,
|
|
631
|
+
monitor_search: monitor_search, groups: groups)
|
|
632
|
+
end
|
|
633
|
+
|
|
634
|
+
def update_service_level_objective(slo_id: , type: , name: nil, description: nil, tags: nil, thresholds: nil,
|
|
635
|
+
numerator: nil, denominator: nil, monitor_ids: nil, monitor_search: nil,
|
|
636
|
+
groups: nil)
|
|
637
|
+
@service_level_objective_svc.update_service_level_objective(slo_id: slo_id, type: type, name: name,
|
|
638
|
+
description: description, tags: tags,
|
|
639
|
+
thresholds: thresholds, numerator: numerator,
|
|
640
|
+
denominator: denominator, monitor_ids: monitor_ids,
|
|
641
|
+
monitor_search: monitor_search, groups: groups)
|
|
642
|
+
end
|
|
643
|
+
|
|
644
|
+
def get_service_level_objective(slo_id)
|
|
645
|
+
@service_level_objective_svc.get_service_level_objective(slo_id)
|
|
646
|
+
end
|
|
647
|
+
|
|
648
|
+
def get_service_level_objective_history(slo_id, from_ts, to_ts)
|
|
649
|
+
@service_level_objective_svc.get_service_level_objective_history(slo_id, from_ts, to_ts)
|
|
650
|
+
end
|
|
651
|
+
|
|
652
|
+
def search_service_level_objective(slo_ids: nil, query: nil, offset: nil, limit: nil)
|
|
653
|
+
@service_level_objective_svc.search_service_level_objective(slo_ids: slo_ids, query: query, offset: offset,
|
|
654
|
+
limit: limit)
|
|
655
|
+
end
|
|
656
|
+
|
|
657
|
+
def can_delete_service_level_objective(slo_ids)
|
|
658
|
+
@service_level_objective_svc.can_delete_service_level_objective(slo_ids)
|
|
659
|
+
end
|
|
660
|
+
|
|
661
|
+
def delete_service_level_objective(slo_id)
|
|
662
|
+
@service_level_objective_svc.delete_service_level_objective(slo_id)
|
|
663
|
+
end
|
|
664
|
+
|
|
665
|
+
def delete_many_service_level_objective(slo_ids)
|
|
666
|
+
@service_level_objective_svc.delete_many_service_level_objective(slo_ids)
|
|
667
|
+
end
|
|
668
|
+
|
|
669
|
+
def delete_timeframes_service_level_objective(ops)
|
|
670
|
+
@service_level_objective_svc.delete_timeframes_service_level_objective(ops)
|
|
671
|
+
end
|
|
672
|
+
|
|
619
673
|
#
|
|
620
674
|
# SERVICE CHECKS
|
|
621
675
|
#
|
data/lib/dogapi/v1.rb
CHANGED
|
@@ -11,6 +11,7 @@ require 'dogapi/v1/monitor'
|
|
|
11
11
|
require 'dogapi/v1/screenboard'
|
|
12
12
|
require 'dogapi/v1/search'
|
|
13
13
|
require 'dogapi/v1/service_check'
|
|
14
|
+
require 'dogapi/v1/service_level_objective'
|
|
14
15
|
require 'dogapi/v1/snapshot'
|
|
15
16
|
require 'dogapi/v1/tag'
|
|
16
17
|
require 'dogapi/v1/user'
|
data/lib/dogapi/v1/monitor.rb
CHANGED
|
@@ -16,10 +16,15 @@ module Dogapi
|
|
|
16
16
|
request(Net::HTTP::Post, "/api/#{API_VERSION}/monitor", nil, body, true)
|
|
17
17
|
end
|
|
18
18
|
|
|
19
|
-
def update_monitor(monitor_id, query, options)
|
|
20
|
-
body = {
|
|
21
|
-
|
|
22
|
-
|
|
19
|
+
def update_monitor(monitor_id, query = nil, options = {})
|
|
20
|
+
body = {}.merge options
|
|
21
|
+
unless query.nil?
|
|
22
|
+
body = {
|
|
23
|
+
'query' => query
|
|
24
|
+
}.merge body
|
|
25
|
+
warn '[DEPRECATION] query param is not required anymore and should be set to nil.'\
|
|
26
|
+
' To update the query, set it in the options parameter instead'
|
|
27
|
+
end
|
|
23
28
|
|
|
24
29
|
request(Net::HTTP::Put, "/api/#{API_VERSION}/monitor/#{monitor_id}", nil, body, true)
|
|
25
30
|
end
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
require 'dogapi'
|
|
2
|
+
|
|
3
|
+
module Dogapi
|
|
4
|
+
class V1 # for namespacing
|
|
5
|
+
|
|
6
|
+
# Implements Service Level Objectives endpoints
|
|
7
|
+
class ServiceLevelObjectiveService < Dogapi::APIService
|
|
8
|
+
|
|
9
|
+
API_VERSION = 'v1'
|
|
10
|
+
|
|
11
|
+
def create_service_level_objective(type: , name: , description: nil, tags: nil, thresholds: nil,
|
|
12
|
+
numerator: nil, denominator: nil, monitor_ids: nil, monitor_search: nil,
|
|
13
|
+
groups: nil)
|
|
14
|
+
body = {
|
|
15
|
+
type: type,
|
|
16
|
+
name: name,
|
|
17
|
+
thresholds: thresholds
|
|
18
|
+
}
|
|
19
|
+
if type == 'metric'
|
|
20
|
+
body[:query] = {
|
|
21
|
+
numerator: numerator,
|
|
22
|
+
denominator: denominator
|
|
23
|
+
}
|
|
24
|
+
else
|
|
25
|
+
body[:monitor_search] = monitor_search unless monitor_search.nil?
|
|
26
|
+
body[:monitor_ids] = monitor_ids unless monitor_ids.nil?
|
|
27
|
+
body[:groups] = groups unless groups.nil?
|
|
28
|
+
end
|
|
29
|
+
body[:tags] = tags unless tags.nil?
|
|
30
|
+
body[:description] = description unless description.nil?
|
|
31
|
+
|
|
32
|
+
request(Net::HTTP::Post, "/api/#{API_VERSION}/slo", nil, body, true)
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def update_service_level_objective(slo_id: , type: , name: nil, description: nil, tags: nil,
|
|
36
|
+
thresholds: nil, numerator: nil, denominator: nil, monitor_ids: nil,
|
|
37
|
+
monitor_search: nil, groups: nil)
|
|
38
|
+
body = {
|
|
39
|
+
type: type
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
body[:name] = name unless name.nil?
|
|
43
|
+
|
|
44
|
+
body[:thresholds] = thresholds unless thresholds.nil?
|
|
45
|
+
|
|
46
|
+
if type == 'metric'
|
|
47
|
+
if !numerator.nil? && !denominator.nil?
|
|
48
|
+
body[:query] = {
|
|
49
|
+
numerator: numerator,
|
|
50
|
+
denominator: denominator
|
|
51
|
+
}
|
|
52
|
+
end
|
|
53
|
+
else
|
|
54
|
+
body[:monitor_search] = monitor_search unless monitor_search.nil?
|
|
55
|
+
body[:monitor_ids] = monitor_ids unless monitor_ids.nil?
|
|
56
|
+
body[:groups] = groups unless groups.nil?
|
|
57
|
+
end
|
|
58
|
+
body[:tags] = tags unless tags.nil?
|
|
59
|
+
body[:description] = description unless description.nil?
|
|
60
|
+
|
|
61
|
+
request(Net::HTTP::Put, "/api/#{API_VERSION}/slo/#{slo_id}", nil, body, true)
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
def get_service_level_objective(slo_id)
|
|
65
|
+
request(Net::HTTP::Get, "/api/#{API_VERSION}/slo/#{slo_id}", nil, nil, false)
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
def search_service_level_objective(slo_ids: nil, query: nil, offset: nil, limit: nil)
|
|
69
|
+
params = {}
|
|
70
|
+
params[:offset] = offset unless offset.nil?
|
|
71
|
+
params[:limit] = limit unless limit.nil?
|
|
72
|
+
if !slo_ids.nil?
|
|
73
|
+
params[:ids] = slo_ids.join(',')
|
|
74
|
+
else
|
|
75
|
+
params[:query] = query
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
request(Net::HTTP::Get, "/api/#{API_VERSION}/slo/", params, nil, false)
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
def delete_service_level_objective(slo_id)
|
|
82
|
+
request(Net::HTTP::Delete, "/api/#{API_VERSION}/slo/#{slo_id}", nil, nil, false)
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
def delete_many_service_level_objective(slo_ids)
|
|
86
|
+
body = {
|
|
87
|
+
ids: slo_ids
|
|
88
|
+
}
|
|
89
|
+
request(Net::HTTP::Delete, "/api/#{API_VERSION}/slo/", nil, body, true)
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
def delete_timeframes_service_level_objective(ops)
|
|
93
|
+
# ops is a hash of slo_id: [<timeframe>] to delete
|
|
94
|
+
request(Net::HTTP::Post, "/api/#{API_VERSION}/slo/bulk_delete", nil, ops, true)
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
def get_service_level_objective_history(slo_id, from_ts, to_ts)
|
|
98
|
+
params = {
|
|
99
|
+
from_ts: from_ts,
|
|
100
|
+
to_ts: to_ts
|
|
101
|
+
}
|
|
102
|
+
request(Net::HTTP::Get, "/api/#{API_VERSION}/slo/#{slo_id}/history", params, nil, false)
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
def can_delete_service_level_objective(slo_ids)
|
|
106
|
+
params = {}
|
|
107
|
+
if slo_ids.is_a?Array
|
|
108
|
+
params[:ids] = slo_ids.join(',')
|
|
109
|
+
else
|
|
110
|
+
params[:ids] = slo_ids
|
|
111
|
+
end
|
|
112
|
+
request(Net::HTTP::Get, "/api/#{API_VERSION}/slo/can_delete", params, nil, false)
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
end
|
|
116
|
+
end
|
|
117
|
+
end
|
data/lib/dogapi/version.rb
CHANGED
|
@@ -18,9 +18,7 @@ describe Dogapi::Client do
|
|
|
18
18
|
stub_request(:put, /#{url}/).to_return(body: '{}').then.to_raise(StandardError)
|
|
19
19
|
expect(dog.send(:update_comment, COMMENT_ID, options)).to eq ['200', {}]
|
|
20
20
|
|
|
21
|
-
expect(WebMock).to have_requested(:put, url)
|
|
22
|
-
query: default_query
|
|
23
|
-
)
|
|
21
|
+
expect(WebMock).to have_requested(:put, url)
|
|
24
22
|
end
|
|
25
23
|
end
|
|
26
24
|
|
|
@@ -12,9 +12,7 @@ describe Dogapi::APIService do
|
|
|
12
12
|
stub_request(:get, /#{url}/).to_return(body: '{}').then.to_raise(StandardError)
|
|
13
13
|
expect(service.request(Net::HTTP::Get, '/api/v1/awesome', nil, nil, true, true)).to eq(['200', {}])
|
|
14
14
|
|
|
15
|
-
expect(WebMock).to have_requested(:get, url)
|
|
16
|
-
query: default_query
|
|
17
|
-
)
|
|
15
|
+
expect(WebMock).to have_requested(:get, url)
|
|
18
16
|
end
|
|
19
17
|
end
|
|
20
18
|
context 'and it is down' do
|
|
@@ -22,9 +20,7 @@ describe Dogapi::APIService do
|
|
|
22
20
|
stub_request(:get, /#{url}/).to_timeout
|
|
23
21
|
expect(service.request(Net::HTTP::Get, '/api/v1/awesome', nil, nil, true, true)).to eq([-1, {}])
|
|
24
22
|
|
|
25
|
-
expect(WebMock).to have_requested(:get, url)
|
|
26
|
-
query: default_query
|
|
27
|
-
)
|
|
23
|
+
expect(WebMock).to have_requested(:get, url)
|
|
28
24
|
end
|
|
29
25
|
end
|
|
30
26
|
end
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
require_relative '../spec_helper'
|
|
2
|
+
|
|
3
|
+
describe Dogapi::Client do
|
|
4
|
+
SLO_ID = '42424242424242424242424242424242'.freeze
|
|
5
|
+
SLO_TYPE = 'metric'.freeze
|
|
6
|
+
SLO_NAME = 'test slo'.freeze
|
|
7
|
+
SLO_DESCRIPTION = 'test slo description'.freeze
|
|
8
|
+
SLO_QUERY_NUMERATOR = 'sum:test.metric.metric{type:good}.as_count()'.freeze
|
|
9
|
+
SLO_QUERY_DENOMINATOR = 'sum:test.metric.metric{*}.as_count()'.freeze
|
|
10
|
+
SLO_TAGS = ['type:test'].freeze
|
|
11
|
+
SLO_THRESHOLDS = [{ timeframe: '7d', target: 90 }, { timeframe: '30d', target: 95 }].freeze
|
|
12
|
+
|
|
13
|
+
describe '#create_service_level_objective' do
|
|
14
|
+
it_behaves_like 'an api method with named args',
|
|
15
|
+
:create_service_level_objective, {type: SLO_TYPE, name: SLO_NAME, description: SLO_DESCRIPTION,
|
|
16
|
+
tags: SLO_TAGS, thresholds: SLO_THRESHOLDS,
|
|
17
|
+
numerator: SLO_QUERY_NUMERATOR,
|
|
18
|
+
denominator: SLO_QUERY_DENOMINATOR},
|
|
19
|
+
:post, '/slo', 'type' => SLO_TYPE, 'name' => SLO_NAME, 'thresholds' => SLO_THRESHOLDS,
|
|
20
|
+
'query' => { numerator: SLO_QUERY_NUMERATOR, denominator: SLO_QUERY_DENOMINATOR },
|
|
21
|
+
'tags' => SLO_TAGS, 'description' => SLO_DESCRIPTION
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
describe '#update_service_level_objective' do
|
|
25
|
+
it_behaves_like 'an api method with named args',
|
|
26
|
+
:update_service_level_objective, {slo_id: SLO_ID, type: SLO_TYPE, name: SLO_NAME},
|
|
27
|
+
:put, "/slo/#{SLO_ID}", 'type' => SLO_TYPE, 'name' => SLO_NAME
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
describe '#get_service_level_objective' do
|
|
31
|
+
it_behaves_like 'an api method',
|
|
32
|
+
:get_service_level_objective, [SLO_ID],
|
|
33
|
+
:get, "/slo/#{SLO_ID}"
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
describe '#get_service_level_objective_history' do
|
|
37
|
+
it_behaves_like 'an api method with params',
|
|
38
|
+
:get_service_level_objective_history, [SLO_ID],
|
|
39
|
+
:get, "/slo/#{SLO_ID}/history", 'from_ts' => 0, 'to_ts' => 1000000
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
describe '#can_delete_service_level_objective' do
|
|
43
|
+
it_behaves_like 'an api method with params',
|
|
44
|
+
:can_delete_service_level_objective, [],
|
|
45
|
+
:get, "/slo/can_delete", 'ids' => [SLO_ID]
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
describe '#search_service_level_objective' do
|
|
49
|
+
it_behaves_like 'an api method with named args making params',
|
|
50
|
+
:search_service_level_objective, {slo_ids: [SLO_ID]},
|
|
51
|
+
:get, '/slo/', 'ids' => SLO_ID
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
describe '#delete_service_level_objective' do
|
|
55
|
+
it_behaves_like 'an api method',
|
|
56
|
+
:delete_service_level_objective, [SLO_ID],
|
|
57
|
+
:delete, "/slo/#{SLO_ID}"
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
describe '#delete_many_service_level_objective' do
|
|
61
|
+
it_behaves_like 'an api method',
|
|
62
|
+
:delete_many_service_level_objective, [[SLO_ID]],
|
|
63
|
+
:delete, '/slo/', 'ids' => [SLO_ID]
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
describe '#delete_timeframes_service_level_objective' do
|
|
67
|
+
it_behaves_like 'an api method',
|
|
68
|
+
:delete_timeframes_service_level_objective, [{ SLO_ID => ['7d'] }],
|
|
69
|
+
:post, '/slo/bulk_delete', SLO_ID => ['7d']
|
|
70
|
+
end
|
|
71
|
+
end
|
data/spec/spec_helper.rb
CHANGED
|
@@ -37,12 +37,27 @@ module SpecDog
|
|
|
37
37
|
body = MultiJson.dump(body) if body
|
|
38
38
|
|
|
39
39
|
expect(WebMock).to have_requested(request, /#{url}|#{old_url}/).with(
|
|
40
|
-
query: default_query,
|
|
41
40
|
body: body
|
|
42
41
|
)
|
|
43
42
|
end
|
|
44
43
|
end
|
|
45
44
|
|
|
45
|
+
shared_examples 'an api method with named args' do |command, args, request, endpoint, body|
|
|
46
|
+
it 'queries the api' do
|
|
47
|
+
url = api_url + endpoint
|
|
48
|
+
old_url = old_api_url + endpoint
|
|
49
|
+
stub_request(request, /#{url}|#{old_url}/).to_return(body: '{}').then.to_raise(StandardError)
|
|
50
|
+
expect(dog.send(command, **args)).to eq ['200', {}]
|
|
51
|
+
|
|
52
|
+
body = MultiJson.dump(body) if body
|
|
53
|
+
|
|
54
|
+
expect(WebMock).to have_requested(request, /#{url}|#{old_url}/).with(
|
|
55
|
+
# ignore query: default_query -- here as in the test it's never properly included
|
|
56
|
+
body: body
|
|
57
|
+
)
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
|
|
46
61
|
shared_examples 'an api method with options' do |command, args, request, endpoint, body|
|
|
47
62
|
include_examples 'an api method', command, args, request, endpoint, body
|
|
48
63
|
it 'queries the api with options' do
|
|
@@ -55,7 +70,6 @@ module SpecDog
|
|
|
55
70
|
body = MultiJson.dump(body ? (body.merge options) : options)
|
|
56
71
|
|
|
57
72
|
expect(WebMock).to have_requested(request, /#{url}|#{old_url}/).with(
|
|
58
|
-
query: default_query,
|
|
59
73
|
body: body
|
|
60
74
|
)
|
|
61
75
|
end
|
|
@@ -67,7 +81,7 @@ module SpecDog
|
|
|
67
81
|
stub_request(request, /#{url}/).to_return(body: '{}').then.to_raise(StandardError)
|
|
68
82
|
expect(dog.send(command, *args, *params.values)).to eq ['200', {}]
|
|
69
83
|
params.each { |k, v| params[k] = v.join(',') if v.is_a? Array }
|
|
70
|
-
params = params
|
|
84
|
+
params = params
|
|
71
85
|
|
|
72
86
|
expect(WebMock).to have_requested(request, url).with(
|
|
73
87
|
query: params
|
|
@@ -75,6 +89,20 @@ module SpecDog
|
|
|
75
89
|
end
|
|
76
90
|
end
|
|
77
91
|
|
|
92
|
+
shared_examples 'an api method with named args making params' do |command, args, request, endpoint, params|
|
|
93
|
+
it 'queries the api with params' do
|
|
94
|
+
url = api_url + endpoint
|
|
95
|
+
stub_request(request, /#{url}/).to_return(body: '{}').then.to_raise(StandardError)
|
|
96
|
+
expect(dog.send(command, **args)).to eq ['200', {}]
|
|
97
|
+
params.each { |k, v| params[k] = v.join(',') if v.is_a? Array }
|
|
98
|
+
# hack/note: do not merge with default_query for this test case
|
|
99
|
+
|
|
100
|
+
expect(WebMock).to have_requested(request, url).with(
|
|
101
|
+
query: params
|
|
102
|
+
)
|
|
103
|
+
end
|
|
104
|
+
end
|
|
105
|
+
|
|
78
106
|
shared_examples 'an api method with optional params' do |command, args, request, endpoint, opt_params|
|
|
79
107
|
include_examples 'an api method', command, args, request, endpoint
|
|
80
108
|
it 'queries the api with optional params' do
|
|
@@ -83,7 +111,7 @@ module SpecDog
|
|
|
83
111
|
expect(dog.send(command, *args, opt_params)).to eq ['200', {}]
|
|
84
112
|
|
|
85
113
|
opt_params.each { |k, v| opt_params[k] = v.join(',') if v.is_a? Array }
|
|
86
|
-
params = opt_params
|
|
114
|
+
params = opt_params
|
|
87
115
|
|
|
88
116
|
expect(WebMock).to have_requested(request, url).with(
|
|
89
117
|
query: params
|
|
@@ -101,7 +129,6 @@ module SpecDog
|
|
|
101
129
|
body = MultiJson.dump(body) if body
|
|
102
130
|
|
|
103
131
|
expect(WebMock).to have_requested(request, url).with(
|
|
104
|
-
query: default_query,
|
|
105
132
|
body: body
|
|
106
133
|
)
|
|
107
134
|
end
|
|
@@ -117,7 +144,6 @@ module SpecDog
|
|
|
117
144
|
body = MultiJson.dump(body ? (body.merge options) : options)
|
|
118
145
|
|
|
119
146
|
expect(WebMock).to have_requested(request, url).with(
|
|
120
|
-
query: default_query,
|
|
121
147
|
body: body
|
|
122
148
|
)
|
|
123
149
|
end
|
|
@@ -129,7 +155,7 @@ module SpecDog
|
|
|
129
155
|
stub_request(request, /#{url}/).to_return(body: '{}').then.to_raise(StandardError)
|
|
130
156
|
expect(dog2.send(command, *args, *params.values)).to eq ['200', {}]
|
|
131
157
|
params.each { |k, v| params[k] = v.join(',') if v.is_a? Array }
|
|
132
|
-
params = params
|
|
158
|
+
params = params
|
|
133
159
|
|
|
134
160
|
expect(WebMock).to have_requested(request, url).with(
|
|
135
161
|
query: params
|
|
@@ -144,7 +170,7 @@ module SpecDog
|
|
|
144
170
|
stub_request(request, /#{url}/).to_return(body: '{}').then.to_raise(StandardError)
|
|
145
171
|
expect(dog2.send(command, *args, opt_params)).to eq ['200', {}]
|
|
146
172
|
opt_params.each { |k, v| opt_params[k] = v.join(',') if v.is_a? Array }
|
|
147
|
-
params = opt_params
|
|
173
|
+
params = opt_params
|
|
148
174
|
|
|
149
175
|
expect(WebMock).to have_requested(request, url).with(
|
|
150
176
|
query: params
|
data/spec/unit/common_spec.rb
CHANGED
|
@@ -48,6 +48,44 @@ describe 'Common' do
|
|
|
48
48
|
expect(conn.port).to eq 443
|
|
49
49
|
end
|
|
50
50
|
end
|
|
51
|
+
|
|
52
|
+
it 'respects http headers' do
|
|
53
|
+
service = Dogapi::APIService.new('api_key', 'app_key', true, nil, 'https://app.example.com')
|
|
54
|
+
|
|
55
|
+
expect(service.api_key).to eq 'api_key'
|
|
56
|
+
expect(service.application_key).to eq 'app_key'
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
it 'sets api and app keys in params' do
|
|
60
|
+
service = Dogapi::APIService.new('api_key', 'app_key', true, nil, 'https://app.example.com')
|
|
61
|
+
|
|
62
|
+
urls = ['/api/v1/series',
|
|
63
|
+
'/api/v1/check_run',
|
|
64
|
+
'/api/v1/events',
|
|
65
|
+
'/api/v1/screen']
|
|
66
|
+
|
|
67
|
+
urls.each do |url|
|
|
68
|
+
params = service.set_api_and_app_keys_in_params(url, true)
|
|
69
|
+
expect(params).to have_key(:api_key)
|
|
70
|
+
expect(params[:api_key]).to eq service.api_key
|
|
71
|
+
expect(params).to have_key(:application_key)
|
|
72
|
+
expect(params[:application_key]).to eq service.application_key
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
it 'does not set api and app keys in params' do
|
|
77
|
+
service = Dogapi::APIService.new('api_key', 'app_key', true, nil, 'https://app.example.com')
|
|
78
|
+
|
|
79
|
+
urls = ['/api/v2/series',
|
|
80
|
+
'/api/v1/random_endpoint',
|
|
81
|
+
'/api/v1/dashboards',
|
|
82
|
+
'/api/v2/users']
|
|
83
|
+
|
|
84
|
+
urls.each do |url|
|
|
85
|
+
params = service.set_api_and_app_keys_in_params(url, true)
|
|
86
|
+
expect(params).to eq({})
|
|
87
|
+
end
|
|
88
|
+
end
|
|
51
89
|
end
|
|
52
90
|
end
|
|
53
91
|
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: dogapi
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.
|
|
4
|
+
version: 1.37.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Datadog, Inc.
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2019-
|
|
11
|
+
date: 2019-11-04 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: multi_json
|
|
@@ -74,12 +74,12 @@ extensions: []
|
|
|
74
74
|
extra_rdoc_files:
|
|
75
75
|
- README.rdoc
|
|
76
76
|
files:
|
|
77
|
+
- ".azure-pipelines/all.yml"
|
|
77
78
|
- ".gitignore"
|
|
78
79
|
- ".rspec"
|
|
79
80
|
- ".rubocop.yml"
|
|
80
81
|
- ".rubocop_todo.yml"
|
|
81
82
|
- ".tailor"
|
|
82
|
-
- ".travis.yml"
|
|
83
83
|
- CHANGELOG.md
|
|
84
84
|
- Gemfile
|
|
85
85
|
- LICENSE
|
|
@@ -114,6 +114,7 @@ files:
|
|
|
114
114
|
- lib/dogapi/v1/screenboard.rb
|
|
115
115
|
- lib/dogapi/v1/search.rb
|
|
116
116
|
- lib/dogapi/v1/service_check.rb
|
|
117
|
+
- lib/dogapi/v1/service_level_objective.rb
|
|
117
118
|
- lib/dogapi/v1/snapshot.rb
|
|
118
119
|
- lib/dogapi/v1/tag.rb
|
|
119
120
|
- lib/dogapi/v1/usage.rb
|
|
@@ -136,6 +137,7 @@ files:
|
|
|
136
137
|
- spec/integration/screenboard_spec.rb
|
|
137
138
|
- spec/integration/search_spec.rb
|
|
138
139
|
- spec/integration/service_check_spec.rb
|
|
140
|
+
- spec/integration/service_level_objective_spec.rb
|
|
139
141
|
- spec/integration/snapshot_spec.rb
|
|
140
142
|
- spec/integration/tag_spec.rb
|
|
141
143
|
- spec/integration/usage_spec.rb
|
|
@@ -174,7 +176,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
174
176
|
version: '0'
|
|
175
177
|
requirements: []
|
|
176
178
|
rubyforge_project:
|
|
177
|
-
rubygems_version: 2.6
|
|
179
|
+
rubygems_version: 2.7.6
|
|
178
180
|
signing_key:
|
|
179
181
|
specification_version: 4
|
|
180
182
|
summary: Ruby bindings for Datadog's API
|
|
@@ -194,6 +196,7 @@ test_files:
|
|
|
194
196
|
- spec/integration/screenboard_spec.rb
|
|
195
197
|
- spec/integration/search_spec.rb
|
|
196
198
|
- spec/integration/service_check_spec.rb
|
|
199
|
+
- spec/integration/service_level_objective_spec.rb
|
|
197
200
|
- spec/integration/snapshot_spec.rb
|
|
198
201
|
- spec/integration/tag_spec.rb
|
|
199
202
|
- spec/integration/usage_spec.rb
|