dogapi 1.36.0 → 1.37.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|