dogtrainer 0.3.0 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 61ad47a205486a220109a1e79127f4c7e5d13724
4
- data.tar.gz: 054eb39e28f43c41599d64840813da35d78210b3
3
+ metadata.gz: 9d7837f6e54fe84c9f57427f5d2b9e861ef4f877
4
+ data.tar.gz: b82006e011dddfd1b7824286a4e35e2f386f8037
5
5
  SHA512:
6
- metadata.gz: 81048ff88866c2439e90d0ff18d46ece9480a73c8b8358a4b975f4b59c38bf6415c9018502b82092ad240c8dc2dbd7a12f38afdda251098287b81a68f12fb84a
7
- data.tar.gz: 0cd934673286968e9657102fc9f11c156e4ad8817e3d86ec4c2881601a43e0cbdebb135ebee3c7aeed6ec790abd4442e9795805a277583bdd04e5f6a205e0fd4
6
+ metadata.gz: 3c107adb47eb154d18d0a82f7cece1ecdb383a7e8978b03c91f0f687e18eaf2b1a552930e0f7c3bece0a3c3646976c44a27484022f9ad8fd8138ab878fe7e322
7
+ data.tar.gz: 013e429c47d13a91c39cd11ef5a495bd045ec88a2b5fef12bf84a2b35ae2548625e7341201aa3529cc7c286c117479e8bb4de20ff58156768f89a72e7773ba22
data/.rubocop.yml CHANGED
@@ -27,4 +27,16 @@ Style/PreferredHashMethods:
27
27
  - 'lib/dogtrainer/api.rb'
28
28
 
29
29
  Metrics/BlockLength:
30
- Max: 2000
30
+ Max: 3000
31
+
32
+ Lint/RescueWithoutErrorClass:
33
+ Exclude:
34
+ - 'lib/dogtrainer/api.rb'
35
+
36
+ Performance/Caller:
37
+ Exclude:
38
+ - 'lib/dogtrainer/api.rb'
39
+
40
+ Performance/HashEachMethods:
41
+ Exclude:
42
+ - 'lib/dogtrainer/api.rb'
data/ChangeLog.md CHANGED
@@ -1,3 +1,8 @@
1
+ Version 0.4.0
2
+
3
+ - Added support for ``:no_data_timeframe`` and ``:evaluation_delay`` options
4
+ on monitors.
5
+
1
6
  Version 0.3.0
2
7
 
3
8
  - Added ``DogTrainer::DogApiException`` custom exception class, subclass of ``StandardError``.
data/README.md CHANGED
@@ -102,12 +102,15 @@ puts "aws.ec2.host_ok monitor id: #{id}"
102
102
  Metric alert, also alerting on missing data:
103
103
 
104
104
  ```ruby
105
- # alert if 'MY_ASG_NAME' ASG in service instances < 2
105
+ # alert if 'MY_ASG_NAME' ASG in service instances < 2; set no_data_timeframe
106
+ # to 60 minutes and evaluation_delay to 900 seconds, for sparse AWS metrics
106
107
  dog.upsert_monitor(
107
108
  "ASG In-Service Instances",
108
109
  "avg(last_5m):sum:aws.autoscaling.group_in_service_instances{autoscaling_group:MY_ASG_NAME} < 2",
109
110
  2,
110
- '>='
111
+ '>=',
112
+ no_data_timeframe: 60,
113
+ evaluation_delay: 900
111
114
  )
112
115
  ```
113
116
 
data/Rakefile CHANGED
@@ -36,7 +36,7 @@ namespace :yard do
36
36
  end
37
37
 
38
38
  desc 'Run specs and rubocop before pushing'
39
- task pre_commit: [:spec, :rubocop]
39
+ task pre_commit: %i[spec rubocop]
40
40
 
41
41
  desc 'Display the list of available rake tasks'
42
42
  task :help do
data/dogtrainer.gemspec CHANGED
@@ -1,4 +1,4 @@
1
- # -*- encoding: utf-8 -*-
1
+
2
2
  require File.expand_path('../lib/dogtrainer/version', __FILE__)
3
3
 
4
4
  Gem::Specification.new do |gem|
@@ -62,7 +62,7 @@ module DogTrainer
62
62
  #
63
63
  # If none of these are found, an error will be raised.
64
64
  def get_repo_path
65
- %w(GIT_URL CIRCLE_REPOSITORY_URL).each do |vname|
65
+ %w[GIT_URL CIRCLE_REPOSITORY_URL].each do |vname|
66
66
  return ENV[vname] if ENV.has_key?(vname) && !ENV[vname].empty?
67
67
  end
68
68
  # try to find git repository
@@ -169,6 +169,16 @@ module DogTrainer
169
169
  # the last notification before a monitor will re-notify on the current
170
170
  # status. It will re-notify only if not resolved. Default: 60. Set to nil
171
171
  # to disable re-notification.
172
+ # @option options [Integer] :no_data_timeframe the number of minutes before
173
+ # a monitor will notify when data stops reporting. Must be at least 2x the
174
+ # monitor timeframe for metric alerts or 2 minutes for service checks.
175
+ # Defaults to 20 minutes; API default is 2x the monitor timeframe.
176
+ # @option options [Integer] :evaluation_delay (metric monitors only) Time
177
+ # (in seconds) to delay evaluation, as a non-negative integer. For
178
+ # example, if the value is set to 300 (5min), the timeframe is set to
179
+ # last_5m and the time is 7:00, the monitor will evaluate data from 6:50
180
+ # to 6:55. This is useful for AWS CloudWatch and other backfilled metrics
181
+ # to ensure the monitor will always have data during evaluation.
172
182
  def params_for_monitor(
173
183
  name,
174
184
  message,
@@ -178,12 +188,16 @@ module DogTrainer
178
188
  escalation_message: nil,
179
189
  alert_no_data: true,
180
190
  mon_type: 'metric alert',
181
- renotify_interval: 60
191
+ renotify_interval: 60,
192
+ no_data_timeframe: 20,
193
+ evaluation_delay: nil
182
194
  }
183
195
  )
184
196
  options[:alert_no_data] = true unless options.key?(:alert_no_data)
185
197
  options[:mon_type] = 'metric alert' unless options.key?(:mon_type)
186
198
  options[:renotify_interval] = 60 unless options.key?(:renotify_interval)
199
+ options[:no_data_timeframe] = 20 unless options.key?(:no_data_timeframe)
200
+ options[:evaluation_delay] = nil unless options.key?(:evaluation_delay)
187
201
 
188
202
  # handle threshold hash
189
203
  thresh = if threshold.is_a?(Hash)
@@ -207,13 +221,16 @@ module DogTrainer
207
221
  'require_full_window' => false,
208
222
  'notify_no_data' => options[:alert_no_data],
209
223
  'renotify_interval' => options[:renotify_interval],
210
- 'no_data_timeframe' => 20
224
+ 'no_data_timeframe' => options[:no_data_timeframe]
211
225
  }
212
226
  }
213
227
  unless options[:escalation_message].nil?
214
228
  monitor_data['options']['escalation_message'] = \
215
229
  options[:escalation_message]
216
230
  end
231
+ unless options[:evaluation_delay].nil?
232
+ monitor_data['options']['evaluation_delay'] = options[:evaluation_delay]
233
+ end
217
234
  monitor_data
218
235
  end
219
236
 
@@ -248,6 +265,16 @@ module DogTrainer
248
265
  # the last notification before a monitor will re-notify on the current
249
266
  # status. It will re-notify only if not resolved. Default: 60. Set to nil
250
267
  # to disable re-notification.
268
+ # @option options [Integer] :no_data_timeframe the number of minutes before
269
+ # a monitor will notify when data stops reporting. Must be at least 2x the
270
+ # monitor timeframe for metric alerts or 2 minutes for service checks.
271
+ # Defaults to 20 minutes; API default is 2x the monitor timeframe.
272
+ # @option options [Integer] :evaluation_delay (metric monitors only) Time
273
+ # (in seconds) to delay evaluation, as a non-negative integer. For
274
+ # example, if the value is set to 300 (5min), the timeframe is set to
275
+ # last_5m and the time is 7:00, the monitor will evaluate data from 6:50
276
+ # to 6:55. This is useful for AWS CloudWatch and other backfilled metrics
277
+ # to ensure the monitor will always have data during evaluation.
251
278
  # @option options [String] :message alert/notification message for the
252
279
  # monitor; if omitted, will be generated by #generate_messages
253
280
  # @option options [String] :escalation_message optional escalation message
@@ -263,12 +290,16 @@ module DogTrainer
263
290
  alert_no_data: true,
264
291
  mon_type: 'metric alert',
265
292
  renotify_interval: 60,
293
+ no_data_timeframe: 20,
294
+ evaluation_delay: nil,
266
295
  message: nil
267
296
  }
268
297
  )
269
298
  options[:alert_no_data] = true unless options.key?(:alert_no_data)
270
299
  options[:mon_type] = 'metric alert' unless options.key?(:mon_type)
271
300
  options[:renotify_interval] = 60 unless options.key?(:renotify_interval)
301
+ options[:no_data_timeframe] = 20 unless options.key?(:no_data_timeframe)
302
+ options[:evaluation_delay] = nil unless options.key?(:evaluation_delay)
272
303
 
273
304
  msg, esc = generate_messages(mon_name, comparator, options[:mon_type])
274
305
  message = if options[:message].nil?
@@ -283,11 +314,15 @@ module DogTrainer
283
314
  end
284
315
 
285
316
  rno = options[:renotify_interval]
286
- mon_params = params_for_monitor(mon_name, message, query, threshold,
287
- escalation_message: escalation,
288
- alert_no_data: options[:alert_no_data],
289
- mon_type: options[:mon_type],
290
- renotify_interval: rno)
317
+ mon_params = params_for_monitor(
318
+ mon_name, message, query, threshold,
319
+ escalation_message: escalation,
320
+ alert_no_data: options[:alert_no_data],
321
+ mon_type: options[:mon_type],
322
+ renotify_interval: rno,
323
+ no_data_timeframe: options[:no_data_timeframe],
324
+ evaluation_delay: options[:evaluation_delay]
325
+ )
291
326
  logger.info "Upserting monitor: #{mon_name}"
292
327
  monitor = get_existing_monitor_by_name(mon_name)
293
328
  return create_monitor(mon_name, mon_params) if monitor.nil?
@@ -1,4 +1,4 @@
1
1
  module DogTrainer
2
2
  # store the verson of the Gem/module; used in the gemspec and in messages
3
- VERSION = '0.3.0'.freeze
3
+ VERSION = '0.4.0'.freeze
4
4
  end
@@ -80,13 +80,13 @@ describe DogTrainer::API do
80
80
  context 'with custom accepted_codes' do
81
81
  describe 'when code is in accepted array' do
82
82
  it 'does not raise an exception' do
83
- expect { subject.check_dog_result(['404', response], %w(200 404)) }
83
+ expect { subject.check_dog_result(['404', response], %w[200 404]) }
84
84
  .to_not raise_error
85
85
  end
86
86
  end
87
87
  describe 'when code is not in accepted array' do
88
88
  it 'raises an exception' do
89
- expect { subject.check_dog_result(['400', response], %w(200 404)) }
89
+ expect { subject.check_dog_result(['400', response], %w[200 404]) }
90
90
  .to raise_error DogTrainer::DogApiException,
91
91
  /Datadog API call returned status 400/
92
92
  end
@@ -95,26 +95,34 @@ describe DogTrainer::API do
95
95
  end
96
96
  describe '#get_repo_path' do
97
97
  it 'calls #get_git_url_for_directory if ENV vars are not set' do
98
- allow(ENV).to receive(:has_key?).with('GIT_URL').and_return(false)
99
- allow(ENV).to receive(:has_key?).with('CIRCLE_REPOSITORY_URL')
98
+ allow(ENV).to receive(:has_key?)
99
+ .with('GIT_URL')
100
+ .and_return(false)
101
+ allow(ENV).to receive(:has_key?)
102
+ .with('CIRCLE_REPOSITORY_URL')
100
103
  .and_return(false)
101
104
  allow(subject).to receive(:caller)
102
105
  .and_return(['foo', 'my/path/Rakefile:123'])
103
- allow(subject).to receive(:get_git_url_for_directory).with(any_args)
106
+ allow(subject).to receive(:get_git_url_for_directory)
107
+ .with(any_args)
104
108
  .and_return('my/repo/path')
105
109
 
106
- expect(subject).to receive(:get_git_url_for_directory).with('my/path')
110
+ expect(subject).to receive(:get_git_url_for_directory)
111
+ .with('my/path')
107
112
  .once
108
113
  expect(subject.get_repo_path).to eq('my/repo/path')
109
114
  end
110
115
  it 'raises an Exception if #get_git_url_for_directory returns nil' do
111
- allow(ENV).to receive(:has_key?).with('GIT_URL').and_return(false)
112
- allow(ENV).to receive(:has_key?).with('CIRCLE_REPOSITORY_URL')
116
+ allow(ENV).to receive(:has_key?)
117
+ .with('GIT_URL')
118
+ .and_return(false)
119
+ allow(ENV).to receive(:has_key?)
120
+ .with('CIRCLE_REPOSITORY_URL')
113
121
  .and_return(false)
114
122
  allow(subject).to receive(:caller)
115
123
  .and_return(['foo', 'my/path/Rakefile:123'])
116
124
  allow(subject).to receive(:get_git_url_for_directory).with(any_args)
117
- .and_return(nil)
125
+ .and_return(nil)
118
126
 
119
127
  expect(subject).to receive(:get_git_url_for_directory)
120
128
  .with('my/path').once
@@ -126,11 +134,11 @@ describe DogTrainer::API do
126
134
  it 'returns GIT_URL if set' do
127
135
  allow(ENV).to receive(:has_key?).with('GIT_URL').and_return(true)
128
136
  allow(ENV).to receive(:has_key?).with('CIRCLE_REPOSITORY_URL')
129
- .and_return(true)
137
+ .and_return(true)
130
138
 
131
139
  allow(ENV).to receive(:[]).with('GIT_URL').and_return('my/git/url')
132
140
  allow(ENV).to receive(:[]).with('CIRCLE_REPOSITORY_URL')
133
- .and_return('my/circle/url')
141
+ .and_return('my/circle/url')
134
142
  allow(subject).to receive(:caller)
135
143
  allow(subject).to receive(:get_git_url_for_directory)
136
144
 
@@ -330,6 +338,61 @@ describe DogTrainer::API do
330
338
  renotify_interval: 120
331
339
  )).to eq(expected)
332
340
  end
341
+ it 'sets no_data_timeframe if provided in options' do
342
+ expected = {
343
+ 'name' => 'monname',
344
+ 'type' => 'metric alert',
345
+ 'query' => 'my_query',
346
+ 'message' => 'my_msg',
347
+ 'tags' => [],
348
+ 'options' => {
349
+ 'notify_audit' => false,
350
+ 'locked' => false,
351
+ 'timeout_h' => 0,
352
+ 'silenced' => {},
353
+ 'thresholds' => { 'critical' => 123.4 },
354
+ 'require_full_window' => false,
355
+ 'notify_no_data' => true,
356
+ 'renotify_interval' => 60,
357
+ 'no_data_timeframe' => 66
358
+ }
359
+ }
360
+ expect(subject.params_for_monitor(
361
+ 'monname',
362
+ 'my_msg',
363
+ 'my_query',
364
+ 123.4,
365
+ no_data_timeframe: 66
366
+ )).to eq(expected)
367
+ end
368
+ it 'sets evaluation_delay if provided in options' do
369
+ expected = {
370
+ 'name' => 'monname',
371
+ 'type' => 'metric alert',
372
+ 'query' => 'my_query',
373
+ 'message' => 'my_msg',
374
+ 'tags' => [],
375
+ 'options' => {
376
+ 'notify_audit' => false,
377
+ 'locked' => false,
378
+ 'timeout_h' => 0,
379
+ 'silenced' => {},
380
+ 'thresholds' => { 'critical' => 123.4 },
381
+ 'require_full_window' => false,
382
+ 'notify_no_data' => true,
383
+ 'renotify_interval' => 60,
384
+ 'no_data_timeframe' => 20,
385
+ 'evaluation_delay' => 900
386
+ }
387
+ }
388
+ expect(subject.params_for_monitor(
389
+ 'monname',
390
+ 'my_msg',
391
+ 'my_query',
392
+ 123.4,
393
+ evaluation_delay: 900
394
+ )).to eq(expected)
395
+ end
333
396
  it 'passes through a threshold Hash' do
334
397
  expected = {
335
398
  'name' => 'monname',
@@ -408,8 +471,9 @@ describe DogTrainer::API do
408
471
  'require_full_window' => false,
409
472
  'notify_no_data' => false,
410
473
  'renotify_interval' => 123,
411
- 'no_data_timeframe' => 20,
412
- 'escalation_message' => 'myesc'
474
+ 'no_data_timeframe' => 60,
475
+ 'escalation_message' => 'myesc',
476
+ 'evaluation_delay' => 345
413
477
  }
414
478
  }
415
479
  expect(subject.params_for_monitor(
@@ -420,7 +484,9 @@ describe DogTrainer::API do
420
484
  alert_no_data: false,
421
485
  mon_type: 'foo',
422
486
  escalation_message: 'myesc',
423
- renotify_interval: 123
487
+ renotify_interval: 123,
488
+ no_data_timeframe: 60,
489
+ evaluation_delay: 345
424
490
  )).to eq(expected)
425
491
  end
426
492
  end
@@ -431,26 +497,30 @@ describe DogTrainer::API do
431
497
  allow(dog).to receive(:update_monitor).with(any_args)
432
498
  subject.instance_variable_set('@dog', dog)
433
499
  allow(subject).to receive(:generate_messages).with(any_args)
434
- .and_return(%w(msg esc))
500
+ .and_return(%w[msg esc])
435
501
  allow(subject).to receive(:params_for_monitor).with(any_args)
436
- .and_return(params)
502
+ .and_return(params)
437
503
  allow(subject).to receive(:get_existing_monitor_by_name).with(any_args)
438
- .and_return(nil)
504
+ .and_return(nil)
439
505
  allow(subject).to receive(:create_monitor).with(any_args)
440
- .and_return('12345')
506
+ .and_return('12345')
441
507
 
442
508
  expect(dog).to_not receive(:update_monitor)
443
- expect(subject).to receive(:generate_messages).once
509
+ expect(subject).to receive(:generate_messages)
510
+ .once
444
511
  .with('mname', '>=', 'metric alert')
445
- expect(subject).to receive(:params_for_monitor).once
512
+ expect(subject).to receive(:params_for_monitor)
513
+ .once
446
514
  .with('mname', 'msg', 'my_query', 123.4, escalation_message: 'esc',
447
515
  alert_no_data: true,
448
516
  mon_type: 'metric alert',
449
- renotify_interval: 60)
517
+ renotify_interval: 60,
518
+ no_data_timeframe: 20,
519
+ evaluation_delay: nil)
450
520
  expect(subject).to receive(:get_existing_monitor_by_name).once
451
- .with('mname')
521
+ .with('mname')
452
522
  expect(subject).to receive(:create_monitor).once
453
- .with('mname', params)
523
+ .with('mname', params)
454
524
 
455
525
  expect(subject.upsert_monitor(
456
526
  'mname',
@@ -465,27 +535,31 @@ describe DogTrainer::API do
465
535
  allow(dog).to receive(:update_monitor).with(any_args)
466
536
  subject.instance_variable_set('@dog', dog)
467
537
  allow(subject).to receive(:generate_messages).with(any_args)
468
- .and_return(%w(msg esc))
538
+ .and_return(%w[msg esc])
469
539
  allow(subject).to receive(:params_for_monitor).with(any_args)
470
- .and_return(params)
540
+ .and_return(params)
471
541
  allow(subject).to receive(:get_existing_monitor_by_name).with(any_args)
472
- .and_return(nil)
542
+ .and_return(nil)
473
543
  allow(subject).to receive(:create_monitor).with(any_args)
474
- .and_return('12345')
544
+ .and_return('12345')
475
545
 
476
546
  expect(dog).to_not receive(:update_monitor)
477
- expect(subject).to receive(:generate_messages).once
547
+ expect(subject).to receive(:generate_messages)
548
+ .once
478
549
  .with('mname', '>=', 'metric alert')
479
- expect(subject).to receive(:params_for_monitor).once
550
+ expect(subject).to receive(:params_for_monitor)
551
+ .once
480
552
  .with('mname', 'msg', 'my_query', { 'warning' => 5.3, 'ok' => 1 },
481
553
  escalation_message: 'esc',
482
554
  alert_no_data: true,
483
555
  mon_type: 'metric alert',
484
- renotify_interval: 60)
556
+ renotify_interval: 60,
557
+ no_data_timeframe: 20,
558
+ evaluation_delay: nil)
485
559
  expect(subject).to receive(:get_existing_monitor_by_name).once
486
- .with('mname')
560
+ .with('mname')
487
561
  expect(subject).to receive(:create_monitor).once
488
- .with('mname', params)
562
+ .with('mname', params)
489
563
 
490
564
  expect(subject.upsert_monitor(
491
565
  'mname',
@@ -501,24 +575,29 @@ describe DogTrainer::API do
501
575
  allow(dog).to receive(:update_monitor).with(any_args)
502
576
  subject.instance_variable_set('@dog', dog)
503
577
  allow(subject).to receive(:generate_messages).with(any_args)
504
- .and_return(%w(msg esc))
578
+ .and_return(%w[msg esc])
505
579
  allow(subject).to receive(:params_for_monitor).with(any_args)
506
- .and_return(params)
507
- allow(subject).to receive(:get_existing_monitor_by_name).with(any_args)
580
+ .and_return(params)
581
+ allow(subject).to receive(:get_existing_monitor_by_name)
582
+ .with(any_args)
508
583
  .and_return(existing)
509
584
  allow(subject).to receive(:create_monitor).with(any_args)
510
- .and_return('12345')
585
+ .and_return('12345')
511
586
 
512
587
  expect(dog).to_not receive(:update_monitor)
513
- expect(subject).to receive(:generate_messages).once
588
+ expect(subject).to receive(:generate_messages)
589
+ .once
514
590
  .with('mname', '>=', 'metric alert')
515
- expect(subject).to receive(:params_for_monitor).once
591
+ expect(subject).to receive(:params_for_monitor)
592
+ .once
516
593
  .with('mname', 'msg', 'my_query', 123.4, escalation_message: 'esc',
517
594
  alert_no_data: true,
518
595
  mon_type: 'metric alert',
519
- renotify_interval: 60)
596
+ renotify_interval: 60,
597
+ no_data_timeframe: 20,
598
+ evaluation_delay: nil)
520
599
  expect(subject).to receive(:get_existing_monitor_by_name).once
521
- .with('mname')
600
+ .with('mname')
522
601
  expect(subject).to_not receive(:create_monitor)
523
602
 
524
603
  expect(subject.upsert_monitor(
@@ -543,28 +622,34 @@ describe DogTrainer::API do
543
622
  }
544
623
  dog = double(Dogapi::Client)
545
624
  allow(dog).to receive(:update_monitor).with(any_args)
546
- .and_return(['200', {}])
625
+ .and_return(['200', {}])
547
626
  subject.instance_variable_set('@dog', dog)
548
- allow(subject).to receive(:generate_messages).with(any_args)
549
- .and_return(%w(msg esc))
627
+ allow(subject).to receive(:generate_messages)
628
+ .with(any_args)
629
+ .and_return(%w[msg esc])
550
630
  allow(subject).to receive(:params_for_monitor).with(any_args)
551
- .and_return(params)
552
- allow(subject).to receive(:get_existing_monitor_by_name).with(any_args)
631
+ .and_return(params)
632
+ allow(subject).to receive(:get_existing_monitor_by_name)
633
+ .with(any_args)
553
634
  .and_return(existing)
554
635
  allow(subject).to receive(:create_monitor).with(any_args)
555
- .and_return('12345')
636
+ .and_return('12345')
556
637
 
557
638
  expect(dog).to receive(:update_monitor).once
558
- .with('monid', 'my_query', params)
559
- expect(subject).to receive(:generate_messages).once
639
+ .with('monid', 'my_query', params)
640
+ expect(subject).to receive(:generate_messages)
641
+ .once
560
642
  .with('mname', '>=', 'metric alert')
561
- expect(subject).to receive(:params_for_monitor).once
643
+ expect(subject).to receive(:params_for_monitor)
644
+ .once
562
645
  .with('mname', 'msg', 'my_query', 123.4, escalation_message: 'esc',
563
646
  alert_no_data: true,
564
647
  mon_type: 'metric alert',
565
- renotify_interval: 60)
648
+ renotify_interval: 60,
649
+ no_data_timeframe: 20,
650
+ evaluation_delay: nil)
566
651
  expect(subject).to receive(:get_existing_monitor_by_name).once
567
- .with('mname')
652
+ .with('mname')
568
653
  expect(subject).to_not receive(:create_monitor)
569
654
 
570
655
  expect(subject.upsert_monitor(
@@ -584,28 +669,33 @@ describe DogTrainer::API do
584
669
  }
585
670
  dog = double(Dogapi::Client)
586
671
  allow(dog).to receive(:update_monitor).with(any_args)
587
- .and_return(['200', {}])
672
+ .and_return(['200', {}])
588
673
  subject.instance_variable_set('@dog', dog)
589
674
  allow(subject).to receive(:generate_messages).with(any_args)
590
- .and_return(%w(msg esc))
675
+ .and_return(%w[msg esc])
591
676
  allow(subject).to receive(:params_for_monitor).with(any_args)
592
- .and_return(params)
593
- allow(subject).to receive(:get_existing_monitor_by_name).with(any_args)
677
+ .and_return(params)
678
+ allow(subject).to receive(:get_existing_monitor_by_name)
679
+ .with(any_args)
594
680
  .and_return(existing)
595
681
  allow(subject).to receive(:create_monitor).with(any_args)
596
- .and_return('12345')
682
+ .and_return('12345')
597
683
 
598
684
  expect(dog).to receive(:update_monitor).once
599
- .with('monid', 'my_query', params)
600
- expect(subject).to receive(:generate_messages).once
685
+ .with('monid', 'my_query', params)
686
+ expect(subject).to receive(:generate_messages)
687
+ .once
601
688
  .with('mname', '>=', 'metric alert')
602
- expect(subject).to receive(:params_for_monitor).once
689
+ expect(subject).to receive(:params_for_monitor)
690
+ .once
603
691
  .with('mname', 'msg', 'my_query', 123.4, escalation_message: 'esc',
604
692
  alert_no_data: true,
605
693
  mon_type: 'metric alert',
606
- renotify_interval: 60)
694
+ renotify_interval: 60,
695
+ no_data_timeframe: 20,
696
+ evaluation_delay: nil)
607
697
  expect(subject).to receive(:get_existing_monitor_by_name).once
608
- .with('mname')
698
+ .with('mname')
609
699
  expect(subject).to_not receive(:create_monitor)
610
700
 
611
701
  expect(subject.upsert_monitor(
@@ -633,30 +723,36 @@ describe DogTrainer::API do
633
723
  allow(dog).to receive(:update_monitor).with(any_args).and_return(res)
634
724
  subject.instance_variable_set('@dog', dog)
635
725
  allow(subject).to receive(:generate_messages).with(any_args)
636
- .and_return(%w(msg esc))
726
+ .and_return(%w[msg esc])
637
727
  allow(subject).to receive(:params_for_monitor).with(any_args)
638
- .and_return(params)
639
- allow(subject).to receive(:get_existing_monitor_by_name).with(any_args)
728
+ .and_return(params)
729
+ allow(subject).to receive(:get_existing_monitor_by_name)
730
+ .with(any_args)
640
731
  .and_return(existing)
641
732
  allow(subject).to receive(:create_monitor).with(any_args)
642
- .and_return('12345')
733
+ .and_return('12345')
643
734
  allow(subject.logger).to receive(:debug).with(any_args)
644
735
  allow(subject.logger).to receive(:info).with(any_args)
645
736
  allow(subject.logger).to receive(:error).with(any_args)
646
737
 
647
738
  expect(dog).to receive(:update_monitor).once
648
- .with('monid', 'my_query', params)
649
- expect(subject).to receive(:generate_messages).once
739
+ .with('monid', 'my_query', params)
740
+ expect(subject).to receive(:generate_messages)
741
+ .once
650
742
  .with('mname', '>=', 'metric alert')
651
- expect(subject).to receive(:params_for_monitor).once
743
+ expect(subject).to receive(:params_for_monitor)
744
+ .once
652
745
  .with('mname', 'msg', 'my_query', 123.4, escalation_message: 'esc',
653
746
  alert_no_data: true,
654
747
  mon_type: 'metric alert',
655
- renotify_interval: 60)
748
+ renotify_interval: 60,
749
+ no_data_timeframe: 20,
750
+ evaluation_delay: nil)
656
751
  expect(subject).to receive(:get_existing_monitor_by_name).once
657
- .with('mname')
752
+ .with('mname')
658
753
  expect(subject).to_not receive(:create_monitor)
659
- expect(subject.logger).to receive(:error).once
754
+ expect(subject.logger).to receive(:error)
755
+ .once
660
756
  .with("\tError updating monitor monid: #{res}")
661
757
 
662
758
  expect(subject.upsert_monitor(
@@ -673,24 +769,29 @@ describe DogTrainer::API do
673
769
  allow(dog).to receive(:update_monitor).with(any_args)
674
770
  subject.instance_variable_set('@dog', dog)
675
771
  allow(subject).to receive(:generate_messages).with(any_args)
676
- .and_return(%w(msg esc))
772
+ .and_return(%w[msg esc])
677
773
  allow(subject).to receive(:params_for_monitor).with(any_args)
678
- .and_return(params)
679
- allow(subject).to receive(:get_existing_monitor_by_name).with(any_args)
774
+ .and_return(params)
775
+ allow(subject).to receive(:get_existing_monitor_by_name)
776
+ .with(any_args)
680
777
  .and_return(existing)
681
778
  allow(subject).to receive(:create_monitor).with(any_args)
682
- .and_return('12345')
779
+ .and_return('12345')
683
780
 
684
781
  expect(dog).to_not receive(:update_monitor)
685
- expect(subject).to receive(:generate_messages).once
782
+ expect(subject).to receive(:generate_messages)
783
+ .once
686
784
  .with('mname', '>=', 'metric alert')
687
- expect(subject).to receive(:params_for_monitor).once
785
+ expect(subject).to receive(:params_for_monitor)
786
+ .once
688
787
  .with('mname', 'msg', 'my_query', 123.4, escalation_message: 'esc',
689
788
  alert_no_data: false,
690
789
  mon_type: 'metric alert',
691
- renotify_interval: 60)
790
+ renotify_interval: 60,
791
+ no_data_timeframe: 20,
792
+ evaluation_delay: nil)
692
793
  expect(subject).to receive(:get_existing_monitor_by_name).once
693
- .with('mname')
794
+ .with('mname')
694
795
  expect(subject).to_not receive(:create_monitor)
695
796
 
696
797
  expect(subject.upsert_monitor(
@@ -708,24 +809,29 @@ describe DogTrainer::API do
708
809
  allow(dog).to receive(:update_monitor).with(any_args)
709
810
  subject.instance_variable_set('@dog', dog)
710
811
  allow(subject).to receive(:generate_messages).with(any_args)
711
- .and_return(%w(msg esc))
812
+ .and_return(%w[msg esc])
712
813
  allow(subject).to receive(:params_for_monitor).with(any_args)
713
- .and_return(params)
714
- allow(subject).to receive(:get_existing_monitor_by_name).with(any_args)
814
+ .and_return(params)
815
+ allow(subject).to receive(:get_existing_monitor_by_name)
816
+ .with(any_args)
715
817
  .and_return(existing)
716
818
  allow(subject).to receive(:create_monitor).with(any_args)
717
- .and_return('12345')
819
+ .and_return('12345')
718
820
 
719
821
  expect(dog).to_not receive(:update_monitor)
720
- expect(subject).to receive(:generate_messages).once
822
+ expect(subject).to receive(:generate_messages)
823
+ .once
721
824
  .with('mname', '>=', 'foobar')
722
- expect(subject).to receive(:params_for_monitor).once
825
+ expect(subject).to receive(:params_for_monitor)
826
+ .once
723
827
  .with('mname', 'msg', 'my_query', 123.4, escalation_message: 'esc',
724
828
  alert_no_data: true,
725
829
  mon_type: 'foobar',
726
- renotify_interval: 60)
830
+ renotify_interval: 60,
831
+ no_data_timeframe: 20,
832
+ evaluation_delay: nil)
727
833
  expect(subject).to receive(:get_existing_monitor_by_name).once
728
- .with('mname')
834
+ .with('mname')
729
835
  expect(subject).to_not receive(:create_monitor)
730
836
 
731
837
  expect(subject.upsert_monitor(
@@ -743,24 +849,29 @@ describe DogTrainer::API do
743
849
  allow(dog).to receive(:update_monitor).with(any_args)
744
850
  subject.instance_variable_set('@dog', dog)
745
851
  allow(subject).to receive(:generate_messages).with(any_args)
746
- .and_return(%w(msg esc))
852
+ .and_return(%w[msg esc])
747
853
  allow(subject).to receive(:params_for_monitor).with(any_args)
748
- .and_return(params)
749
- allow(subject).to receive(:get_existing_monitor_by_name).with(any_args)
854
+ .and_return(params)
855
+ allow(subject).to receive(:get_existing_monitor_by_name)
856
+ .with(any_args)
750
857
  .and_return(existing)
751
858
  allow(subject).to receive(:create_monitor).with(any_args)
752
- .and_return('12345')
859
+ .and_return('12345')
753
860
 
754
861
  expect(dog).to_not receive(:update_monitor)
755
- expect(subject).to receive(:generate_messages).once
862
+ expect(subject).to receive(:generate_messages)
863
+ .once
756
864
  .with('mname', '>=', 'metric alert')
757
- expect(subject).to receive(:params_for_monitor).once
865
+ expect(subject).to receive(:params_for_monitor)
866
+ .once
758
867
  .with('mname', 'msg', 'my_query', 123.4, escalation_message: 'esc',
759
868
  alert_no_data: true,
760
869
  mon_type: 'metric alert',
761
- renotify_interval: 100)
870
+ renotify_interval: 100,
871
+ no_data_timeframe: 20,
872
+ evaluation_delay: nil)
762
873
  expect(subject).to receive(:get_existing_monitor_by_name).once
763
- .with('mname')
874
+ .with('mname')
764
875
  expect(subject).to_not receive(:create_monitor)
765
876
 
766
877
  expect(subject.upsert_monitor(
@@ -771,6 +882,86 @@ describe DogTrainer::API do
771
882
  renotify_interval: 100
772
883
  )).to eq('monid')
773
884
  end
885
+ it 'handles sparse options, with only no_data_timeframe' do
886
+ params = { 'foo' => 'bar', 'baz' => 'blam' }
887
+ existing = { 'foo' => 'bar', 'baz' => 'blam', 'id' => 'monid' }
888
+ dog = double(Dogapi::Client)
889
+ allow(dog).to receive(:update_monitor).with(any_args)
890
+ subject.instance_variable_set('@dog', dog)
891
+ allow(subject).to receive(:generate_messages).with(any_args)
892
+ .and_return(%w[msg esc])
893
+ allow(subject).to receive(:params_for_monitor).with(any_args)
894
+ .and_return(params)
895
+ allow(subject).to receive(:get_existing_monitor_by_name)
896
+ .with(any_args)
897
+ .and_return(existing)
898
+ allow(subject).to receive(:create_monitor).with(any_args)
899
+ .and_return('12345')
900
+
901
+ expect(dog).to_not receive(:update_monitor)
902
+ expect(subject).to receive(:generate_messages)
903
+ .once
904
+ .with('mname', '>=', 'metric alert')
905
+ expect(subject).to receive(:params_for_monitor)
906
+ .once
907
+ .with('mname', 'msg', 'my_query', 123.4, escalation_message: 'esc',
908
+ alert_no_data: true,
909
+ mon_type: 'metric alert',
910
+ renotify_interval: 60,
911
+ no_data_timeframe: 100,
912
+ evaluation_delay: nil)
913
+ expect(subject).to receive(:get_existing_monitor_by_name).once
914
+ .with('mname')
915
+ expect(subject).to_not receive(:create_monitor)
916
+
917
+ expect(subject.upsert_monitor(
918
+ 'mname',
919
+ 'my_query',
920
+ 123.4,
921
+ '>=',
922
+ no_data_timeframe: 100
923
+ )).to eq('monid')
924
+ end
925
+ it 'handles sparse options, with only evaluation_delay' do
926
+ params = { 'foo' => 'bar', 'baz' => 'blam' }
927
+ existing = { 'foo' => 'bar', 'baz' => 'blam', 'id' => 'monid' }
928
+ dog = double(Dogapi::Client)
929
+ allow(dog).to receive(:update_monitor).with(any_args)
930
+ subject.instance_variable_set('@dog', dog)
931
+ allow(subject).to receive(:generate_messages).with(any_args)
932
+ .and_return(%w[msg esc])
933
+ allow(subject).to receive(:params_for_monitor).with(any_args)
934
+ .and_return(params)
935
+ allow(subject).to receive(:get_existing_monitor_by_name)
936
+ .with(any_args)
937
+ .and_return(existing)
938
+ allow(subject).to receive(:create_monitor).with(any_args)
939
+ .and_return('12345')
940
+
941
+ expect(dog).to_not receive(:update_monitor)
942
+ expect(subject).to receive(:generate_messages)
943
+ .once
944
+ .with('mname', '>=', 'metric alert')
945
+ expect(subject).to receive(:params_for_monitor)
946
+ .once
947
+ .with('mname', 'msg', 'my_query', 123.4, escalation_message: 'esc',
948
+ alert_no_data: true,
949
+ mon_type: 'metric alert',
950
+ renotify_interval: 60,
951
+ no_data_timeframe: 20,
952
+ evaluation_delay: 234)
953
+ expect(subject).to receive(:get_existing_monitor_by_name).once
954
+ .with('mname')
955
+ expect(subject).to_not receive(:create_monitor)
956
+
957
+ expect(subject.upsert_monitor(
958
+ 'mname',
959
+ 'my_query',
960
+ 123.4,
961
+ '>=',
962
+ evaluation_delay: 234
963
+ )).to eq('monid')
964
+ end
774
965
  it 'handles sparse options, with only message' do
775
966
  params = { 'foo' => 'bar', 'baz' => 'blam' }
776
967
  existing = { 'foo' => 'bar', 'baz' => 'blam', 'id' => 'monid' }
@@ -778,24 +969,29 @@ describe DogTrainer::API do
778
969
  allow(dog).to receive(:update_monitor).with(any_args)
779
970
  subject.instance_variable_set('@dog', dog)
780
971
  allow(subject).to receive(:generate_messages).with(any_args)
781
- .and_return(%w(msg esc))
972
+ .and_return(%w[msg esc])
782
973
  allow(subject).to receive(:params_for_monitor).with(any_args)
783
- .and_return(params)
784
- allow(subject).to receive(:get_existing_monitor_by_name).with(any_args)
974
+ .and_return(params)
975
+ allow(subject).to receive(:get_existing_monitor_by_name)
976
+ .with(any_args)
785
977
  .and_return(existing)
786
978
  allow(subject).to receive(:create_monitor).with(any_args)
787
- .and_return('12345')
979
+ .and_return('12345')
788
980
 
789
981
  expect(dog).to_not receive(:update_monitor)
790
- expect(subject).to receive(:generate_messages).once
982
+ expect(subject).to receive(:generate_messages)
983
+ .once
791
984
  .with('mname', '>=', 'metric alert')
792
- expect(subject).to receive(:params_for_monitor).once
985
+ expect(subject).to receive(:params_for_monitor)
986
+ .once
793
987
  .with('mname', 'foo', 'my_query', 123.4, escalation_message: 'esc',
794
988
  alert_no_data: true,
795
989
  mon_type: 'metric alert',
796
- renotify_interval: 60)
990
+ renotify_interval: 60,
991
+ no_data_timeframe: 20,
992
+ evaluation_delay: nil)
797
993
  expect(subject).to receive(:get_existing_monitor_by_name).once
798
- .with('mname')
994
+ .with('mname')
799
995
  expect(subject).to_not receive(:create_monitor)
800
996
 
801
997
  expect(subject.upsert_monitor(
@@ -813,24 +1009,29 @@ describe DogTrainer::API do
813
1009
  allow(dog).to receive(:update_monitor).with(any_args)
814
1010
  subject.instance_variable_set('@dog', dog)
815
1011
  allow(subject).to receive(:generate_messages).with(any_args)
816
- .and_return(%w(msg esc))
1012
+ .and_return(%w[msg esc])
817
1013
  allow(subject).to receive(:params_for_monitor).with(any_args)
818
- .and_return(params)
819
- allow(subject).to receive(:get_existing_monitor_by_name).with(any_args)
1014
+ .and_return(params)
1015
+ allow(subject).to receive(:get_existing_monitor_by_name)
1016
+ .with(any_args)
820
1017
  .and_return(existing)
821
1018
  allow(subject).to receive(:create_monitor).with(any_args)
822
- .and_return('12345')
1019
+ .and_return('12345')
823
1020
 
824
1021
  expect(dog).to_not receive(:update_monitor)
825
- expect(subject).to receive(:generate_messages).once
1022
+ expect(subject).to receive(:generate_messages)
1023
+ .once
826
1024
  .with('mname', '>=', 'metric alert')
827
- expect(subject).to receive(:params_for_monitor).once
1025
+ expect(subject).to receive(:params_for_monitor)
1026
+ .once
828
1027
  .with('mname', 'msg', 'my_query', 123.4, escalation_message: 'bar',
829
1028
  alert_no_data: true,
830
1029
  mon_type: 'metric alert',
831
- renotify_interval: 60)
1030
+ renotify_interval: 60,
1031
+ no_data_timeframe: 20,
1032
+ evaluation_delay: nil)
832
1033
  expect(subject).to receive(:get_existing_monitor_by_name).once
833
- .with('mname')
1034
+ .with('mname')
834
1035
  expect(subject).to_not receive(:create_monitor)
835
1036
 
836
1037
  expect(subject.upsert_monitor(
@@ -848,24 +1049,29 @@ describe DogTrainer::API do
848
1049
  allow(dog).to receive(:update_monitor).with(any_args)
849
1050
  subject.instance_variable_set('@dog', dog)
850
1051
  allow(subject).to receive(:generate_messages).with(any_args)
851
- .and_return(%w(msg esc))
1052
+ .and_return(%w[msg esc])
852
1053
  allow(subject).to receive(:params_for_monitor).with(any_args)
853
- .and_return(params)
854
- allow(subject).to receive(:get_existing_monitor_by_name).with(any_args)
1054
+ .and_return(params)
1055
+ allow(subject).to receive(:get_existing_monitor_by_name)
1056
+ .with(any_args)
855
1057
  .and_return(existing)
856
1058
  allow(subject).to receive(:create_monitor).with(any_args)
857
- .and_return('12345')
1059
+ .and_return('12345')
858
1060
 
859
1061
  expect(dog).to_not receive(:update_monitor)
860
- expect(subject).to receive(:generate_messages).once
1062
+ expect(subject).to receive(:generate_messages)
1063
+ .once
861
1064
  .with('mname', '>=', 'metric alert')
862
- expect(subject).to receive(:params_for_monitor).once
1065
+ expect(subject).to receive(:params_for_monitor)
1066
+ .once
863
1067
  .with('mname', 'foo', 'my_query', 123.4, escalation_message: 'bar',
864
1068
  alert_no_data: true,
865
1069
  mon_type: 'metric alert',
866
- renotify_interval: 60)
1070
+ renotify_interval: 60,
1071
+ no_data_timeframe: 20,
1072
+ evaluation_delay: nil)
867
1073
  expect(subject).to receive(:get_existing_monitor_by_name).once
868
- .with('mname')
1074
+ .with('mname')
869
1075
  expect(subject).to_not receive(:create_monitor)
870
1076
 
871
1077
  expect(subject.upsert_monitor(
@@ -884,24 +1090,29 @@ describe DogTrainer::API do
884
1090
  allow(dog).to receive(:update_monitor).with(any_args)
885
1091
  subject.instance_variable_set('@dog', dog)
886
1092
  allow(subject).to receive(:generate_messages).with(any_args)
887
- .and_return(%w(msg esc))
1093
+ .and_return(%w[msg esc])
888
1094
  allow(subject).to receive(:params_for_monitor).with(any_args)
889
- .and_return(params)
890
- allow(subject).to receive(:get_existing_monitor_by_name).with(any_args)
1095
+ .and_return(params)
1096
+ allow(subject).to receive(:get_existing_monitor_by_name)
1097
+ .with(any_args)
891
1098
  .and_return(existing)
892
1099
  allow(subject).to receive(:create_monitor).with(any_args)
893
- .and_return('12345')
1100
+ .and_return('12345')
894
1101
 
895
1102
  expect(dog).to_not receive(:update_monitor)
896
- expect(subject).to receive(:generate_messages).once
1103
+ expect(subject).to receive(:generate_messages)
1104
+ .once
897
1105
  .with('mname', '>=', 'metric alert')
898
- expect(subject).to receive(:params_for_monitor).once
1106
+ expect(subject).to receive(:params_for_monitor)
1107
+ .once
899
1108
  .with('mname', 'msg', 'my_query', 123.4, alert_no_data: true,
900
1109
  mon_type: 'metric alert',
901
1110
  renotify_interval: 60,
902
- escalation_message: nil)
1111
+ escalation_message: nil,
1112
+ no_data_timeframe: 20,
1113
+ evaluation_delay: nil)
903
1114
  expect(subject).to receive(:get_existing_monitor_by_name).once
904
- .with('mname')
1115
+ .with('mname')
905
1116
  expect(subject).to_not receive(:create_monitor)
906
1117
 
907
1118
  expect(subject.upsert_monitor(
@@ -919,24 +1130,29 @@ describe DogTrainer::API do
919
1130
  allow(dog).to receive(:update_monitor).with(any_args)
920
1131
  subject.instance_variable_set('@dog', dog)
921
1132
  allow(subject).to receive(:generate_messages).with(any_args)
922
- .and_return(%w(msg esc))
1133
+ .and_return(%w[msg esc])
923
1134
  allow(subject).to receive(:params_for_monitor).with(any_args)
924
- .and_return(params)
925
- allow(subject).to receive(:get_existing_monitor_by_name).with(any_args)
1135
+ .and_return(params)
1136
+ allow(subject).to receive(:get_existing_monitor_by_name)
1137
+ .with(any_args)
926
1138
  .and_return(existing)
927
1139
  allow(subject).to receive(:create_monitor).with(any_args)
928
- .and_return('12345')
1140
+ .and_return('12345')
929
1141
 
930
1142
  expect(dog).to_not receive(:update_monitor)
931
- expect(subject).to receive(:generate_messages).once
1143
+ expect(subject).to receive(:generate_messages)
1144
+ .once
932
1145
  .with('mname', '>=', 'service check')
933
- expect(subject).to receive(:params_for_monitor).once
1146
+ expect(subject).to receive(:params_for_monitor)
1147
+ .once
934
1148
  .with('mname', 'foo', 'my_query', 123.4, escalation_message: 'bar',
935
1149
  alert_no_data: false,
936
1150
  mon_type: 'service check',
937
- renotify_interval: 10)
1151
+ renotify_interval: 10,
1152
+ no_data_timeframe: 123,
1153
+ evaluation_delay: 456)
938
1154
  expect(subject).to receive(:get_existing_monitor_by_name).once
939
- .with('mname')
1155
+ .with('mname')
940
1156
  expect(subject).to_not receive(:create_monitor)
941
1157
 
942
1158
  expect(subject.upsert_monitor(
@@ -948,7 +1164,9 @@ describe DogTrainer::API do
948
1164
  alert_no_data: false,
949
1165
  mon_type: 'service check',
950
1166
  message: 'foo',
951
- escalation_message: 'bar'
1167
+ escalation_message: 'bar',
1168
+ no_data_timeframe: 123,
1169
+ evaluation_delay: 456
952
1170
  )).to eq('monid')
953
1171
  end
954
1172
  end
@@ -961,7 +1179,8 @@ describe DogTrainer::API do
961
1179
  subject.instance_variable_set('@dog', dog)
962
1180
  allow(subject.logger).to receive(:error).with(any_args)
963
1181
 
964
- expect(dog).to receive(:monitor).once
1182
+ expect(dog).to receive(:monitor)
1183
+ .once
965
1184
  .with(params['type'], params['query'], params)
966
1185
  expect(subject.logger).to_not receive(:error)
967
1186
  expect(subject.create_monitor('foo', params)).to eq('monid')
@@ -974,9 +1193,11 @@ describe DogTrainer::API do
974
1193
  subject.instance_variable_set('@dog', dog)
975
1194
  allow(subject.logger).to receive(:error).with(any_args)
976
1195
 
977
- expect(dog).to receive(:monitor).once
1196
+ expect(dog).to receive(:monitor)
1197
+ .once
978
1198
  .with(params['type'], params['query'], params)
979
- expect(subject.logger).to receive(:error).once
1199
+ expect(subject.logger).to receive(:error)
1200
+ .once
980
1201
  .with("\tError creating monitor: #{res}")
981
1202
  expect(subject.create_monitor('foo', params)).to be_nil
982
1203
  end
@@ -992,7 +1213,7 @@ describe DogTrainer::API do
992
1213
  ]
993
1214
  dog = double(Dogapi::Client)
994
1215
  allow(dog).to receive(:get_all_monitors).with(any_args)
995
- .and_return(monitors)
1216
+ .and_return(monitors)
996
1217
  subject.instance_variable_set('@dog', dog)
997
1218
 
998
1219
  expect(dog).to receive(:get_all_monitors).once.with(group_states: 'all')
@@ -1009,7 +1230,7 @@ describe DogTrainer::API do
1009
1230
  ]
1010
1231
  dog = double(Dogapi::Client)
1011
1232
  allow(dog).to receive(:get_all_monitors).with(any_args)
1012
- .and_return(monitors)
1233
+ .and_return(monitors)
1013
1234
  subject.instance_variable_set('@dog', dog)
1014
1235
  subject.instance_variable_set('@monitors', monitors)
1015
1236
 
@@ -1021,7 +1242,7 @@ describe DogTrainer::API do
1021
1242
  monitors = ['200', []]
1022
1243
  dog = double(Dogapi::Client)
1023
1244
  allow(dog).to receive(:get_all_monitors).with(any_args)
1024
- .and_return(monitors)
1245
+ .and_return(monitors)
1025
1246
  subject.instance_variable_set('@dog', dog)
1026
1247
 
1027
1248
  expect(dog).to receive(:get_all_monitors).once.with(group_states: 'all')
@@ -1050,7 +1271,7 @@ describe DogTrainer::API do
1050
1271
  subject.instance_variable_set('@dog', dog)
1051
1272
 
1052
1273
  expect(dog).to receive(:mute_monitor).once
1053
- .with(12_345, end: 6_789)
1274
+ .with(12_345, end: 6_789)
1054
1275
  expect(subject).to receive(:check_dog_result).once.with(resp)
1055
1276
  subject.mute_monitor_by_id(12_345, end_timestamp: 6_789)
1056
1277
  end
@@ -1067,7 +1288,7 @@ describe DogTrainer::API do
1067
1288
  subject.instance_variable_set('@dog', dog)
1068
1289
 
1069
1290
  expect(subject).to receive(:get_existing_monitor_by_name).once
1070
- .with('mymon')
1291
+ .with('mymon')
1071
1292
  expect(dog).to receive(:mute_monitor).once.with(5_678)
1072
1293
  expect(subject).to receive(:check_dog_result).once.with(resp)
1073
1294
  subject.mute_monitor_by_name('mymon')
@@ -1083,7 +1304,7 @@ describe DogTrainer::API do
1083
1304
  subject.instance_variable_set('@dog', dog)
1084
1305
 
1085
1306
  expect(subject).to receive(:get_existing_monitor_by_name).once
1086
- .with('mymon')
1307
+ .with('mymon')
1087
1308
  expect(dog).to receive(:mute_monitor).once.with(5_678, end: 1_234)
1088
1309
  expect(subject).to receive(:check_dog_result).once.with(resp)
1089
1310
  subject.mute_monitor_by_name('mymon', end_timestamp: 1_234)
@@ -1098,7 +1319,7 @@ describe DogTrainer::API do
1098
1319
  subject.instance_variable_set('@dog', dog)
1099
1320
 
1100
1321
  expect(subject).to receive(:get_existing_monitor_by_name).once
1101
- .with('mymon')
1322
+ .with('mymon')
1102
1323
  expect(dog).to_not receive(:mute_monitor)
1103
1324
  expect(subject).to_not receive(:check_dog_result)
1104
1325
  expect { subject.mute_monitor_by_name('mymon') }
@@ -1118,9 +1339,11 @@ describe DogTrainer::API do
1118
1339
  allow(subject).to receive(:mute_monitor_by_id)
1119
1340
 
1120
1341
  expect(subject).to receive(:get_monitors).once
1121
- expect(subject).to receive(:mute_monitor_by_id).once
1342
+ expect(subject).to receive(:mute_monitor_by_id)
1343
+ .once
1122
1344
  .with(1, end_timestamp: nil)
1123
- expect(subject).to receive(:mute_monitor_by_id).once
1345
+ expect(subject).to receive(:mute_monitor_by_id)
1346
+ .once
1124
1347
  .with(4, end_timestamp: nil)
1125
1348
  subject.mute_monitors_by_regex(/monitor/)
1126
1349
  end
@@ -1135,9 +1358,11 @@ describe DogTrainer::API do
1135
1358
  allow(subject).to receive(:mute_monitor_by_id)
1136
1359
 
1137
1360
  expect(subject).to receive(:get_monitors).once
1138
- expect(subject).to receive(:mute_monitor_by_id).once
1361
+ expect(subject).to receive(:mute_monitor_by_id)
1362
+ .once
1139
1363
  .with(1, end_timestamp: nil)
1140
- expect(subject).to receive(:mute_monitor_by_id).once
1364
+ expect(subject).to receive(:mute_monitor_by_id)
1365
+ .once
1141
1366
  .with(4, end_timestamp: nil)
1142
1367
  subject.mute_monitors_by_regex('monitor')
1143
1368
  end
@@ -1152,9 +1377,11 @@ describe DogTrainer::API do
1152
1377
  allow(subject).to receive(:mute_monitor_by_id)
1153
1378
 
1154
1379
  expect(subject).to receive(:get_monitors).once
1155
- expect(subject).to receive(:mute_monitor_by_id).once
1380
+ expect(subject).to receive(:mute_monitor_by_id)
1381
+ .once
1156
1382
  .with(1, end_timestamp: 1_234)
1157
- expect(subject).to receive(:mute_monitor_by_id).once
1383
+ expect(subject).to receive(:mute_monitor_by_id)
1384
+ .once
1158
1385
  .with(4, end_timestamp: 1_234)
1159
1386
  subject.mute_monitors_by_regex('monitor', end_timestamp: 1_234)
1160
1387
  end
@@ -1180,7 +1407,7 @@ describe DogTrainer::API do
1180
1407
  subject.instance_variable_set('@dog', dog)
1181
1408
 
1182
1409
  expect(dog).to receive(:unmute_monitor).once
1183
- .with(12_345, all_scopes: true)
1410
+ .with(12_345, all_scopes: true)
1184
1411
  expect(subject).to receive(:check_dog_result).once.with(resp)
1185
1412
  subject.unmute_monitor_by_id(12_345)
1186
1413
  end
@@ -1193,9 +1420,9 @@ describe DogTrainer::API do
1193
1420
  .and_return(monitor)
1194
1421
 
1195
1422
  expect(subject).to receive(:get_existing_monitor_by_name).once
1196
- .with('mymon')
1423
+ .with('mymon')
1197
1424
  expect(subject).to receive(:unmute_monitor_by_id).once
1198
- .with(5_678)
1425
+ .with(5_678)
1199
1426
  subject.unmute_monitor_by_name('mymon')
1200
1427
  end
1201
1428
  it 'raises error if monitor cannot be found' do
@@ -1204,7 +1431,7 @@ describe DogTrainer::API do
1204
1431
  .and_return(nil)
1205
1432
 
1206
1433
  expect(subject).to receive(:get_existing_monitor_by_name).once
1207
- .with('mymon')
1434
+ .with('mymon')
1208
1435
  expect(subject).to_not receive(:unmute_monitor_by_id)
1209
1436
  expect { subject.unmute_monitor_by_name('mymon') }
1210
1437
  .to raise_error(RuntimeError,
@@ -1320,7 +1547,7 @@ describe DogTrainer::API do
1320
1547
  'title' => 'gtitle'
1321
1548
  }
1322
1549
  expect(
1323
- subject.graphdef('gtitle', %w(query1 query2 query3))
1550
+ subject.graphdef('gtitle', %w[query1 query2 query3])
1324
1551
  ).to eq(expected)
1325
1552
  end
1326
1553
  it 'adds markers if specified' do
@@ -1375,13 +1602,14 @@ describe DogTrainer::API do
1375
1602
  allow(dog).to receive(:update_dashboard).with(any_args)
1376
1603
  subject.instance_variable_set('@dog', dog)
1377
1604
  allow(subject).to receive(:get_existing_timeboard_by_name).with(any_args)
1378
- .and_return(nil)
1605
+ .and_return(nil)
1379
1606
  allow(subject.logger).to receive(:info).with(any_args)
1380
1607
  allow(subject).to receive(:check_dog_result)
1381
1608
 
1382
1609
  expect(subject).to receive(:get_existing_timeboard_by_name).once
1383
- .with('t')
1384
- expect(dog).to receive(:create_dashboard).once
1610
+ .with('t')
1611
+ expect(dog).to receive(:create_dashboard)
1612
+ .once
1385
1613
  .with(
1386
1614
  't',
1387
1615
  'created by DogTrainer RubyGem via my_repo_path',
@@ -1409,13 +1637,14 @@ describe DogTrainer::API do
1409
1637
  allow(dog).to receive(:create_dashboard).with(any_args)
1410
1638
  allow(dog).to receive(:update_dashboard).with(any_args)
1411
1639
  subject.instance_variable_set('@dog', dog)
1412
- allow(subject).to receive(:get_existing_timeboard_by_name).with(any_args)
1640
+ allow(subject).to receive(:get_existing_timeboard_by_name)
1641
+ .with(any_args)
1413
1642
  .and_return(res[1])
1414
1643
  allow(subject.logger).to receive(:info).with(any_args)
1415
1644
  allow(subject).to receive(:check_dog_result)
1416
1645
 
1417
1646
  expect(subject).to receive(:get_existing_timeboard_by_name).once
1418
- .with('t')
1647
+ .with('t')
1419
1648
  expect(dog).to_not receive(:create_dashboard)
1420
1649
  expect(dog).to_not receive(:update_dashboard)
1421
1650
  expect(subject.logger).to receive(:info).with("\tTimeboard is up-to-date")
@@ -1439,13 +1668,14 @@ describe DogTrainer::API do
1439
1668
  allow(dog).to receive(:create_dashboard).with(any_args)
1440
1669
  allow(dog).to receive(:update_dashboard).with(any_args).and_return(res)
1441
1670
  subject.instance_variable_set('@dog', dog)
1442
- allow(subject).to receive(:get_existing_timeboard_by_name).with(any_args)
1671
+ allow(subject).to receive(:get_existing_timeboard_by_name)
1672
+ .with(any_args)
1443
1673
  .and_return(res[1])
1444
1674
  allow(subject.logger).to receive(:info).with(any_args)
1445
1675
  allow(subject).to receive(:check_dog_result)
1446
1676
 
1447
1677
  expect(subject).to receive(:get_existing_timeboard_by_name).once
1448
- .with('t')
1678
+ .with('t')
1449
1679
  expect(dog).to_not receive(:create_dashboard)
1450
1680
  expect(dog).to receive(:update_dashboard).once.with(
1451
1681
  res[1]['dash']['id'],
@@ -1475,13 +1705,14 @@ describe DogTrainer::API do
1475
1705
  allow(dog).to receive(:create_dashboard).with(any_args)
1476
1706
  allow(dog).to receive(:update_dashboard).with(any_args).and_return(res)
1477
1707
  subject.instance_variable_set('@dog', dog)
1478
- allow(subject).to receive(:get_existing_timeboard_by_name).with(any_args)
1708
+ allow(subject).to receive(:get_existing_timeboard_by_name)
1709
+ .with(any_args)
1479
1710
  .and_return(res[1])
1480
1711
  allow(subject.logger).to receive(:info).with(any_args)
1481
1712
  allow(subject).to receive(:check_dog_result)
1482
1713
 
1483
1714
  expect(subject).to receive(:get_existing_timeboard_by_name).once
1484
- .with('t')
1715
+ .with('t')
1485
1716
  expect(dog).to_not receive(:create_dashboard)
1486
1717
  expect(dog).to receive(:update_dashboard).once.with(
1487
1718
  res[1]['dash']['id'],
@@ -1511,13 +1742,14 @@ describe DogTrainer::API do
1511
1742
  allow(dog).to receive(:create_dashboard).with(any_args)
1512
1743
  allow(dog).to receive(:update_dashboard).with(any_args).and_return(res)
1513
1744
  subject.instance_variable_set('@dog', dog)
1514
- allow(subject).to receive(:get_existing_timeboard_by_name).with(any_args)
1745
+ allow(subject).to receive(:get_existing_timeboard_by_name)
1746
+ .with(any_args)
1515
1747
  .and_return(res[1])
1516
1748
  allow(subject.logger).to receive(:info).with(any_args)
1517
1749
  allow(subject).to receive(:check_dog_result)
1518
1750
 
1519
1751
  expect(subject).to receive(:get_existing_timeboard_by_name).once
1520
- .with('t')
1752
+ .with('t')
1521
1753
  expect(dog).to_not receive(:create_dashboard)
1522
1754
  expect(dog).to receive(:update_dashboard).once.with(
1523
1755
  res[1]['dash']['id'],
@@ -1552,8 +1784,9 @@ describe DogTrainer::API do
1552
1784
  allow(subject.logger).to receive(:info).with(any_args)
1553
1785
 
1554
1786
  expect(subject).to receive(:get_existing_screenboard_by_name).once
1555
- .with('t')
1556
- expect(dog).to receive(:create_screenboard).once
1787
+ .with('t')
1788
+ expect(dog).to receive(:create_screenboard)
1789
+ .once
1557
1790
  .with(
1558
1791
  board_title: 't',
1559
1792
  description: 'created by DogTrainer RubyGem via my_repo_path',
@@ -1584,7 +1817,7 @@ describe DogTrainer::API do
1584
1817
  allow(subject.logger).to receive(:info).with(any_args)
1585
1818
 
1586
1819
  expect(subject).to receive(:get_existing_screenboard_by_name).once
1587
- .with('t')
1820
+ .with('t')
1588
1821
  expect(dog).to_not receive(:create_screenboard)
1589
1822
  expect(dog).to_not receive(:update_screenboard)
1590
1823
  expect(subject.logger).to receive(:info)
@@ -1612,9 +1845,10 @@ describe DogTrainer::API do
1612
1845
  allow(subject.logger).to receive(:info).with(any_args)
1613
1846
 
1614
1847
  expect(subject).to receive(:get_existing_screenboard_by_name).once
1615
- .with('t')
1848
+ .with('t')
1616
1849
  expect(dog).to_not receive(:create_screenboard)
1617
- expect(dog).to_not receive(:update_screenboard).once
1850
+ expect(dog).to_not receive(:update_screenboard)
1851
+ .once
1618
1852
  .with(
1619
1853
  'id1',
1620
1854
  board_title: 't',
@@ -1645,9 +1879,10 @@ describe DogTrainer::API do
1645
1879
  allow(subject.logger).to receive(:info).with(any_args)
1646
1880
 
1647
1881
  expect(subject).to receive(:get_existing_screenboard_by_name).once
1648
- .with('t')
1882
+ .with('t')
1649
1883
  expect(dog).to_not receive(:create_screenboard)
1650
- expect(dog).to_not receive(:update_screenboard).once
1884
+ expect(dog).to_not receive(:update_screenboard)
1885
+ .once
1651
1886
  .with(
1652
1887
  'id1',
1653
1888
  board_title: 't',
@@ -1678,9 +1913,10 @@ describe DogTrainer::API do
1678
1913
  allow(subject.logger).to receive(:info).with(any_args)
1679
1914
 
1680
1915
  expect(subject).to receive(:get_existing_screenboard_by_name).once
1681
- .with('t')
1916
+ .with('t')
1682
1917
  expect(dog).to_not receive(:create_screenboard)
1683
- expect(dog).to_not receive(:update_screenboard).once
1918
+ expect(dog).to_not receive(:update_screenboard)
1919
+ .once
1684
1920
  .with(
1685
1921
  'id1',
1686
1922
  board_title: 't',
@@ -1706,7 +1942,7 @@ describe DogTrainer::API do
1706
1942
  board = ['200', { 'foo' => 'bar', 'baz' => 'blam' }]
1707
1943
  dog = double(Dogapi::Client)
1708
1944
  allow(dog).to receive(:get_dashboards).with(any_args)
1709
- .and_return(boards)
1945
+ .and_return(boards)
1710
1946
  allow(dog).to receive(:get_dashboard).with(any_args).and_return(board)
1711
1947
  subject.instance_variable_set('@dog', dog)
1712
1948
 
@@ -1729,7 +1965,7 @@ describe DogTrainer::API do
1729
1965
  board = ['200', { 'foo' => 'bar', 'baz' => 'blam' }]
1730
1966
  dog = double(Dogapi::Client)
1731
1967
  allow(dog).to receive(:get_dashboards).with(any_args)
1732
- .and_return(boards)
1968
+ .and_return(boards)
1733
1969
  allow(dog).to receive(:get_dashboard).with(any_args).and_return(board)
1734
1970
  subject.instance_variable_set('@dog', dog)
1735
1971
  subject.instance_variable_set('@timeboards', boards)
@@ -1753,7 +1989,7 @@ describe DogTrainer::API do
1753
1989
  board = ['200', { 'foo' => 'bar', 'baz' => 'blam' }]
1754
1990
  dog = double(Dogapi::Client)
1755
1991
  allow(dog).to receive(:get_dashboards).with(any_args)
1756
- .and_return(boards)
1992
+ .and_return(boards)
1757
1993
  allow(dog).to receive(:get_dashboard).with(any_args).and_return(board)
1758
1994
  subject.instance_variable_set('@dog', dog)
1759
1995
  subject.instance_variable_set('@timeboards', boards)
@@ -1773,7 +2009,7 @@ describe DogTrainer::API do
1773
2009
  ]
1774
2010
  dog = double(Dogapi::Client)
1775
2011
  allow(dog).to receive(:get_dashboards).with(any_args)
1776
- .and_return(boards)
2012
+ .and_return(boards)
1777
2013
  allow(dog).to receive(:get_dashboard).with(any_args)
1778
2014
  subject.instance_variable_set('@dog', dog)
1779
2015
 
@@ -1797,7 +2033,7 @@ describe DogTrainer::API do
1797
2033
  board = ['200', { 'foo' => 'bar', 'baz' => 'blam' }]
1798
2034
  dog = double(Dogapi::Client)
1799
2035
  allow(dog).to receive(:get_all_screenboards).with(any_args)
1800
- .and_return(boards)
2036
+ .and_return(boards)
1801
2037
  allow(dog).to receive(:get_screenboard).with(any_args).and_return(board)
1802
2038
  subject.instance_variable_set('@dog', dog)
1803
2039
 
@@ -1820,7 +2056,7 @@ describe DogTrainer::API do
1820
2056
  board = ['200', { 'foo' => 'bar', 'baz' => 'blam' }]
1821
2057
  dog = double(Dogapi::Client)
1822
2058
  allow(dog).to receive(:get_all_screenboards).with(any_args)
1823
- .and_return(boards)
2059
+ .and_return(boards)
1824
2060
  allow(dog).to receive(:get_screenboard).with(any_args).and_return(board)
1825
2061
  subject.instance_variable_set('@dog', dog)
1826
2062
  subject.instance_variable_set('@screenboards', boards)
@@ -1844,7 +2080,7 @@ describe DogTrainer::API do
1844
2080
  board = ['200', { 'foo' => 'bar', 'baz' => 'blam' }]
1845
2081
  dog = double(Dogapi::Client)
1846
2082
  allow(dog).to receive(:get_all_screenboards).with(any_args)
1847
- .and_return(boards)
2083
+ .and_return(boards)
1848
2084
  allow(dog).to receive(:get_screenboard).with(any_args).and_return(board)
1849
2085
  subject.instance_variable_set('@dog', dog)
1850
2086
  subject.instance_variable_set('@screenboards', boards)
@@ -1864,7 +2100,7 @@ describe DogTrainer::API do
1864
2100
  ]
1865
2101
  dog = double(Dogapi::Client)
1866
2102
  allow(dog).to receive(:get_all_screenboards).with(any_args)
1867
- .and_return(boards)
2103
+ .and_return(boards)
1868
2104
  allow(dog).to receive(:get_screenboard).with(any_args)
1869
2105
  subject.instance_variable_set('@dog', dog)
1870
2106