dogtrainer 0.1.1 → 0.2.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: 8e6664535d42df53717f7e3c2a08f59c1c69d898
4
- data.tar.gz: f2dbcdc8d8f59fe052494811e168c577d504ba18
3
+ metadata.gz: 82d400dbf30520efe26fd2c8e35423766df31d70
4
+ data.tar.gz: c49711ca30824470040e34c5010be7a2afee19d9
5
5
  SHA512:
6
- metadata.gz: e2f2dc0c0bde395d17d5f082f42945648ddf778ce381a0a342374c1213dc7fca11da4cdac8e47dfd6537309159a533be2095fe8f77044a9d76ea4f1f2e5b2766
7
- data.tar.gz: 5fb760fa4430b82104498e91851059f35306807954d2244f24257184879a8864d6df9c5422b1c7c5bfe3462d78093e2b1600aab7999aaa815f570effb29bf096
6
+ metadata.gz: c0bb25a6a3c4119e67338aacdcdeb700b9ad2f4cce57152290f6f1b877af203c2b8e20fbcec1751deb84011df2dad4ebecea88d66b85a57479c4d70a604e4287
7
+ data.tar.gz: ccd27b826a7ed42ee86c30882101c5e5515327196842b5c2b1a7aa98f00063870888c89236eb3f90275258c1c13a122567174b2c24bb61dafa0ba45d5702e808
@@ -1,3 +1,7 @@
1
+ Version 0.2.0
2
+
3
+ - add support to mute and unmute monitors by id, name or regex
4
+
1
5
  Version 0.1.1
2
6
 
3
7
  - add ``message`` and ``escalation_message`` options to ``DogTrainer::API.upsert_monitor``
data/README.md CHANGED
@@ -164,6 +164,54 @@ dog.upsert_monitor(
164
164
  )
165
165
  ```
166
166
 
167
+ ##### Muting and Unmuting monitors
168
+
169
+ Mute a single monitor by ID number (12345):
170
+
171
+ ```ruby
172
+ dog.mute_monitor_by_id(12345)
173
+ ```
174
+
175
+ Mute a single monitor by ID number (12345) for one hour:
176
+
177
+ ```ruby
178
+ ts = Time.now + 3600
179
+ dog.mute_monitor_by_id(12345, end_timestamp: ts.to_i)
180
+ ```
181
+
182
+ Unmute a single monitor by ID number (12345):
183
+
184
+ ```ruby
185
+ dog.unmute_monitor_by_id(12345)
186
+ ```
187
+
188
+ Mute a single monitor by name for one hour:
189
+
190
+ ```ruby
191
+ ts = Time.now + 3600
192
+ dog.mute_monitor_by_name('my whole monitor name', end_timestamp: ts.to_i)
193
+ ```
194
+
195
+ Unmute a single monitor by name:
196
+
197
+ ```ruby
198
+ dog.unmute_monitor_by_name('my whole monitor name')
199
+ ```
200
+
201
+ Mute all monitors matching regex /ELB/ for one hour (this also accepts a String
202
+ in addition to Regexp objects):
203
+
204
+ ```ruby
205
+ ts = Time.now + 3600
206
+ dog.mute_monitors_by_regex(/ELB/, end_timestamp: ts.to_i)
207
+ ```
208
+
209
+ Unmute all monitors matching /foo/ (provided as a String instead of Regexp):
210
+
211
+ ```ruby
212
+ dog.unmute_monitors_by_regex('foo')
213
+ ```
214
+
167
215
  #### Boards
168
216
 
169
217
  Create a TimeBoard with a handful of graphs about the "MY_ELB_NAME" ELB,
@@ -322,19 +322,156 @@ module DogTrainer
322
322
  #
323
323
  # @param mon_name [String] name of the monitor to return
324
324
  def get_existing_monitor_by_name(mon_name)
325
+ get_monitors.each do |mon|
326
+ return mon if mon['name'] == mon_name
327
+ end
328
+ nil
329
+ end
330
+
331
+ # Get all monitors from DataDog, caching them in an instance variable.
332
+ def get_monitors
325
333
  if @monitors.nil?
326
334
  @monitors = @dog.get_all_monitors(group_states: 'all')
327
335
  logger.info "Found #{@monitors[1].length} existing monitors in DataDog"
328
336
  if @monitors[1].empty?
329
- logger.error 'ERROR: Docker API call returned no existing monitors.' \
330
- ' Something is wrong.'
331
- exit 1
337
+ raise 'ERROR: DataDog API call returned no existing monitors. ' \
338
+ 'Something is wrong.'
332
339
  end
333
340
  end
334
- @monitors[1].each do |mon|
335
- return mon if mon['name'] == mon_name
341
+ @monitors[1]
342
+ end
343
+
344
+ # Mute the monitor identified by the specified unique ID, with an optional
345
+ # duration.
346
+ #
347
+ # @example mute monitor 12345 indefinitely
348
+ # dog = DogTrainer::API.new(api_key, app_key, notify_to)
349
+ # dog.mute_monitor_by_id(12345)
350
+ #
351
+ # @example mute monitor 12345 until 2016-09-17 01:39:52-00:00
352
+ # dog = DogTrainer::API.new(api_key, app_key, notify_to)
353
+ # dog.mute_monitor_by_id(12345, end_timestamp: 1474076393)
354
+ #
355
+ # @param mon_id [Integer] ID of the monitor to mute
356
+ # @param [Hash] options
357
+ # @option options [Integer] :end_timestamp optional timestamp
358
+ # for when the mute should end; Integer POSIX timestamp.
359
+ def mute_monitor_by_id(mon_id, options = { end_timestamp: nil })
360
+ if options.fetch(:end_timestamp, nil).nil?
361
+ logger.info "Muting monitor by ID #{mon_id}"
362
+ @dog.mute_monitor(mon_id)
363
+ else
364
+ end_ts = options[:end_timestamp]
365
+ logger.info "Muting monitor by ID #{mon_id} until #{end_ts}"
366
+ @dog.mute_monitor(mon_id, end: end_ts)
367
+ end
368
+ end
369
+
370
+ # Mute the monitor identified by the specified name, with an optional
371
+ # duration.
372
+ #
373
+ # @example mute monitor named 'My Monitor' indefinitely
374
+ # dog = DogTrainer::API.new(api_key, app_key, notify_to)
375
+ # dog.mute_monitor_by_name('My Monitor')
376
+ #
377
+ # @example mute monitor named 'My Monitor' until 2016-09-17 01:39:52-00:00
378
+ # dog = DogTrainer::API.new(api_key, app_key, notify_to)
379
+ # dog.mute_monitor_by_name('My Monitor', end_timestamp: 1474076393)
380
+ #
381
+ # @param mon_name [String] name of the monitor to mute
382
+ # @param [Hash] options
383
+ # @option options [Integer] :end_timestamp optional timestamp
384
+ # for when the mute should end; Integer POSIX timestamp.
385
+ # @raise [RuntimeError] raised if the specified monitor name can't be found
386
+ def mute_monitor_by_name(mon_name, options = { end_timestamp: nil })
387
+ mon = get_existing_monitor_by_name(mon_name)
388
+ raise "ERROR: Could not find monitor with name #{mon_name}" if mon.nil?
389
+ if options.fetch(:end_timestamp, nil).nil?
390
+ logger.info "Muting monitor by name #{mon_name} (#{mon['id']})"
391
+ @dog.mute_monitor(mon['id'])
392
+ else
393
+ end_ts = options[:end_timestamp]
394
+ logger.info "Muting monitor by name #{mon_name} (#{mon['id']}) " \
395
+ "until #{end_ts}"
396
+ @dog.mute_monitor(mon['id'], end: end_ts)
397
+ end
398
+ end
399
+
400
+ # Mute all monitors with names matching the specified regex, with an
401
+ # optional duration.
402
+ #
403
+ # @example mute monitors with names matching /myapp/ indefinitely
404
+ # dog = DogTrainer::API.new(api_key, app_key, notify_to)
405
+ # dog.mute_monitor_by_regex(/myapp/)
406
+ #
407
+ # @example mute monitors with names containing 'foo' indefinitely
408
+ # dog = DogTrainer::API.new(api_key, app_key, notify_to)
409
+ # dog.mute_monitor_by_regex('foo')
410
+ #
411
+ # @example mute monitors with names matching /myapp/ until 2016-09-17
412
+ # 01:39:52-00:00
413
+ # dog = DogTrainer::API.new(api_key, app_key, notify_to)
414
+ # dog.mute_monitor_by_regex(/myapp/, end_timestamp: 1474076393)
415
+ #
416
+ # @param mon_name_regex [String] or [Regexp] regex to match monitor names
417
+ # against
418
+ # @param [Hash] options
419
+ # @option options [Integer] :end_timestamp optional timestamp
420
+ # for when the mute should end; Integer POSIX timestamp.
421
+ def mute_monitors_by_regex(mon_name_regex, options = { end_timestamp: nil })
422
+ if mon_name_regex.class != Regexp
423
+ mon_name_regex = Regexp.new(mon_name_regex)
424
+ end
425
+ if options.fetch(:end_timestamp, nil).nil?
426
+ logger.info "Muting monitors by regex #{mon_name_regex.source}"
427
+ end_ts = nil
428
+ else
429
+ logger.info "Muting monitors by regex #{mon_name_regex.source} " \
430
+ "until #{end_ts}"
431
+ end_ts = options[:end_timestamp]
432
+ end
433
+ logger.debug "Searching for monitors matching: #{mon_name_regex.source}"
434
+ get_monitors.each do |mon|
435
+ if mon['name'] =~ mon_name_regex
436
+ logger.info "Muting monitor '#{mon['name']}' (#{mon['id']})"
437
+ mute_monitor_by_id(mon['id'], end_timestamp: end_ts)
438
+ end
439
+ end
440
+ end
441
+
442
+ # Unute the monitor identified by the specified unique ID.
443
+ #
444
+ # @param mon_id [Integer] ID of the monitor to mute
445
+ def unmute_monitor_by_id(mon_id)
446
+ logger.info "Unmuting monitor by ID #{mon_id}"
447
+ @dog.unmute_monitor(mon_id, all_scopes: true)
448
+ end
449
+
450
+ # Unmute the monitor identified by the specified name.
451
+ #
452
+ # @param mon_name [String] name of the monitor to mute
453
+ # @raise [RuntimeError] raised if the specified monitor name can't be found
454
+ def unmute_monitor_by_name(mon_name)
455
+ mon = get_existing_monitor_by_name(mon_name)
456
+ logger.info "Unmuting monitor by name #{mon_name}"
457
+ raise "ERROR: Could not find monitor with name #{mon_name}" if mon.nil?
458
+ unmute_monitor_by_id(mon['id'])
459
+ end
460
+
461
+ # Unmute all monitors with names matching the specified regex.
462
+ #
463
+ # @param mon_name_regex [String] regex to match monitor names against
464
+ def unmute_monitors_by_regex(mon_name_regex)
465
+ if mon_name_regex.class != Regexp
466
+ mon_name_regex = Regexp.new(mon_name_regex)
467
+ end
468
+ logger.info "Unmuting monitors by regex #{mon_name_regex.source}"
469
+ get_monitors.each do |mon|
470
+ if mon['name'] =~ mon_name_regex
471
+ logger.info "Unmuting monitor '#{mon['name']}' (#{mon['id']})"
472
+ unmute_monitor_by_id(mon['id'])
473
+ end
336
474
  end
337
- nil
338
475
  end
339
476
 
340
477
  ###########################################
@@ -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.1.1'.freeze
3
+ VERSION = '0.2.0'.freeze
4
4
  end
@@ -948,7 +948,7 @@ describe DogTrainer::API do
948
948
  expect(subject.create_monitor('foo', params)).to be_nil
949
949
  end
950
950
  end
951
- describe '#get_existing_monitor_by_name' do
951
+ describe '#get_monitors' do
952
952
  it 'retrieves monitors if they are not cached' do
953
953
  monitors = [
954
954
  '200',
@@ -963,8 +963,7 @@ describe DogTrainer::API do
963
963
  subject.instance_variable_set('@dog', dog)
964
964
 
965
965
  expect(dog).to receive(:get_all_monitors).once.with(group_states: 'all')
966
- expect(subject.get_existing_monitor_by_name('bar'))
967
- .to eq('name' => 'bar', 'foo' => 'baz')
966
+ expect(subject.get_monitors).to eq(monitors[1])
968
967
  expect(subject.instance_variable_get('@monitors')).to eq(monitors)
969
968
  end
970
969
  it 'does not retrieve monitors if they are cached' do
@@ -982,25 +981,250 @@ describe DogTrainer::API do
982
981
  subject.instance_variable_set('@monitors', monitors)
983
982
 
984
983
  expect(dog).to_not receive(:get_all_monitors)
985
- expect(subject.get_existing_monitor_by_name('bar'))
986
- .to eq('name' => 'bar', 'foo' => 'baz')
984
+ expect(subject.get_monitors).to eq(monitors[1])
987
985
  expect(subject.instance_variable_get('@monitors')).to eq(monitors)
988
986
  end
989
- it 'exits if no monitors can be found' do
987
+ it 'raises if monitors list is empty' do
990
988
  monitors = ['200', []]
991
989
  dog = double(Dogapi::Client)
992
990
  allow(dog).to receive(:get_all_monitors).with(any_args)
993
991
  .and_return(monitors)
994
992
  subject.instance_variable_set('@dog', dog)
995
- allow(subject.logger).to receive(:error).with(any_args)
996
993
 
997
- expect(dog).to receive(:get_all_monitors).once
998
- .with(group_states: 'all')
999
- expect(subject.logger).to receive(:error).once
1000
- .with('ERROR: Docker API call returned no existing monitors. ' \
1001
- 'Something is wrong.')
1002
- expect { subject.get_existing_monitor_by_name('bar') }
1003
- .to raise_error(SystemExit)
994
+ expect(dog).to receive(:get_all_monitors).once.with(group_states: 'all')
995
+ expect { subject.get_monitors }
996
+ .to raise_error(RuntimeError, 'ERROR: DataDog API call returned no ' \
997
+ 'existing monitors. Something is wrong.')
998
+ end
999
+ end
1000
+ describe '#mute_monitor_by_id' do
1001
+ it 'calls dog.mute_monitor with id' do
1002
+ dog = double(Dogapi::Client)
1003
+ allow(dog).to receive(:mute_monitor).with(any_args)
1004
+ subject.instance_variable_set('@dog', dog)
1005
+
1006
+ expect(dog).to receive(:mute_monitor).once.with(12_345)
1007
+ subject.mute_monitor_by_id(12_345)
1008
+ end
1009
+ it 'calls dog.mute_monitor with id and timestamp if specified' do
1010
+ dog = double(Dogapi::Client)
1011
+ allow(dog).to receive(:mute_monitor).with(any_args)
1012
+ subject.instance_variable_set('@dog', dog)
1013
+
1014
+ expect(dog).to receive(:mute_monitor).once
1015
+ .with(12_345, end: 6_789)
1016
+ subject.mute_monitor_by_id(12_345, end_timestamp: 6_789)
1017
+ end
1018
+ end
1019
+ describe '#mute_monitor_by_name' do
1020
+ it 'calls dog.mute_monitor with id' do
1021
+ monitor = { 'id' => 5_678 }
1022
+ dog = double(Dogapi::Client)
1023
+ allow(dog).to receive(:mute_monitor).with(any_args)
1024
+ allow(subject).to receive(:get_existing_monitor_by_name)
1025
+ .and_return(monitor)
1026
+ subject.instance_variable_set('@dog', dog)
1027
+
1028
+ expect(subject).to receive(:get_existing_monitor_by_name).once
1029
+ .with('mymon')
1030
+ expect(dog).to receive(:mute_monitor).once.with(5_678)
1031
+ subject.mute_monitor_by_name('mymon')
1032
+ end
1033
+ it 'calls dog.mute_monitor with id and timestamp if specified' do
1034
+ monitor = { 'id' => 5_678 }
1035
+ dog = double(Dogapi::Client)
1036
+ allow(dog).to receive(:mute_monitor).with(any_args)
1037
+ allow(subject).to receive(:get_existing_monitor_by_name)
1038
+ .and_return(monitor)
1039
+ subject.instance_variable_set('@dog', dog)
1040
+
1041
+ expect(subject).to receive(:get_existing_monitor_by_name).once
1042
+ .with('mymon')
1043
+ expect(dog).to receive(:mute_monitor).once.with(5_678, end: 1_234)
1044
+ subject.mute_monitor_by_name('mymon', end_timestamp: 1_234)
1045
+ end
1046
+ it 'raises error if monitor cannot be found' do
1047
+ dog = double(Dogapi::Client)
1048
+ allow(dog).to receive(:mute_monitor).with(any_args)
1049
+ allow(subject).to receive(:get_existing_monitor_by_name)
1050
+ .and_return(nil)
1051
+ subject.instance_variable_set('@dog', dog)
1052
+
1053
+ expect(subject).to receive(:get_existing_monitor_by_name).once
1054
+ .with('mymon')
1055
+ expect(dog).to_not receive(:mute_monitor)
1056
+ expect { subject.mute_monitor_by_name('mymon') }
1057
+ .to raise_error(RuntimeError,
1058
+ 'ERROR: Could not find monitor with name mymon')
1059
+ end
1060
+ end
1061
+ describe '#mute_monitors_by_regex' do
1062
+ it 'mutes all matching monitors when passed a regex' do
1063
+ monitors = [
1064
+ { 'name' => 'mymonitor', 'id' => 1 },
1065
+ { 'name' => 'foo', 'id' => 2 },
1066
+ { 'name' => 'bar', 'id' => 3 },
1067
+ { 'name' => 'other monitor foo', 'id' => 4 }
1068
+ ]
1069
+ allow(subject).to receive(:get_monitors).and_return(monitors)
1070
+ allow(subject).to receive(:mute_monitor_by_id)
1071
+
1072
+ expect(subject).to receive(:get_monitors).once
1073
+ expect(subject).to receive(:mute_monitor_by_id).once
1074
+ .with(1, end_timestamp: nil)
1075
+ expect(subject).to receive(:mute_monitor_by_id).once
1076
+ .with(4, end_timestamp: nil)
1077
+ subject.mute_monitors_by_regex(/monitor/)
1078
+ end
1079
+ it 'mutes all matching monitors when passed a string' do
1080
+ monitors = [
1081
+ { 'name' => 'mymonitor', 'id' => 1 },
1082
+ { 'name' => 'foo', 'id' => 2 },
1083
+ { 'name' => 'bar', 'id' => 3 },
1084
+ { 'name' => 'other monitor foo', 'id' => 4 }
1085
+ ]
1086
+ allow(subject).to receive(:get_monitors).and_return(monitors)
1087
+ allow(subject).to receive(:mute_monitor_by_id)
1088
+
1089
+ expect(subject).to receive(:get_monitors).once
1090
+ expect(subject).to receive(:mute_monitor_by_id).once
1091
+ .with(1, end_timestamp: nil)
1092
+ expect(subject).to receive(:mute_monitor_by_id).once
1093
+ .with(4, end_timestamp: nil)
1094
+ subject.mute_monitors_by_regex('monitor')
1095
+ end
1096
+ it 'mutes all monitors with an end_timestamp if specified' do
1097
+ monitors = [
1098
+ { 'name' => 'mymonitor', 'id' => 1 },
1099
+ { 'name' => 'foo', 'id' => 2 },
1100
+ { 'name' => 'bar', 'id' => 3 },
1101
+ { 'name' => 'other monitor foo', 'id' => 4 }
1102
+ ]
1103
+ allow(subject).to receive(:get_monitors).and_return(monitors)
1104
+ allow(subject).to receive(:mute_monitor_by_id)
1105
+
1106
+ expect(subject).to receive(:get_monitors).once
1107
+ expect(subject).to receive(:mute_monitor_by_id).once
1108
+ .with(1, end_timestamp: 1_234)
1109
+ expect(subject).to receive(:mute_monitor_by_id).once
1110
+ .with(4, end_timestamp: 1_234)
1111
+ subject.mute_monitors_by_regex('monitor', end_timestamp: 1_234)
1112
+ end
1113
+ it 'does not mute any monitors if there are no matches' do
1114
+ monitors = [
1115
+ { 'name' => 'foo', 'id' => 2 },
1116
+ { 'name' => 'bar', 'id' => 3 }
1117
+ ]
1118
+ allow(subject).to receive(:get_monitors).and_return(monitors)
1119
+ allow(subject).to receive(:mute_monitor_by_id)
1120
+
1121
+ expect(subject).to receive(:get_monitors).once
1122
+ expect(subject).to_not receive(:mute_monitor_by_id)
1123
+ subject.mute_monitors_by_regex('monitor')
1124
+ end
1125
+ end
1126
+ describe '#unmute_monitor_by_id' do
1127
+ it 'calls dog.unmute_monitor with id' do
1128
+ dog = double(Dogapi::Client)
1129
+ allow(dog).to receive(:unmute_monitor).with(any_args)
1130
+ subject.instance_variable_set('@dog', dog)
1131
+
1132
+ expect(dog).to receive(:unmute_monitor).once
1133
+ .with(12_345, all_scopes: true)
1134
+ subject.unmute_monitor_by_id(12_345)
1135
+ end
1136
+ end
1137
+ describe '#unmute_monitor_by_name' do
1138
+ it 'calls dog.unmute_monitor with id' do
1139
+ monitor = { 'id' => 5_678 }
1140
+ allow(subject).to receive(:unmute_monitor_by_id).with(any_args)
1141
+ allow(subject).to receive(:get_existing_monitor_by_name)
1142
+ .and_return(monitor)
1143
+
1144
+ expect(subject).to receive(:get_existing_monitor_by_name).once
1145
+ .with('mymon')
1146
+ expect(subject).to receive(:unmute_monitor_by_id).once
1147
+ .with(5_678)
1148
+ subject.unmute_monitor_by_name('mymon')
1149
+ end
1150
+ it 'raises error if monitor cannot be found' do
1151
+ allow(subject).to receive(:unmute_monitor_by_id).with(any_args)
1152
+ allow(subject).to receive(:get_existing_monitor_by_name)
1153
+ .and_return(nil)
1154
+
1155
+ expect(subject).to receive(:get_existing_monitor_by_name).once
1156
+ .with('mymon')
1157
+ expect(subject).to_not receive(:unmute_monitor_by_id)
1158
+ expect { subject.unmute_monitor_by_name('mymon') }
1159
+ .to raise_error(RuntimeError,
1160
+ 'ERROR: Could not find monitor with name mymon')
1161
+ end
1162
+ end
1163
+ describe '#unmute_monitors_by_regex' do
1164
+ it 'unmutes all matching monitors when passed a regex' do
1165
+ monitors = [
1166
+ { 'name' => 'mymonitor', 'id' => 1 },
1167
+ { 'name' => 'foo', 'id' => 2 },
1168
+ { 'name' => 'bar', 'id' => 3 },
1169
+ { 'name' => 'other monitor foo', 'id' => 4 }
1170
+ ]
1171
+ allow(subject).to receive(:get_monitors).and_return(monitors)
1172
+ allow(subject).to receive(:unmute_monitor_by_id)
1173
+
1174
+ expect(subject).to receive(:get_monitors).once
1175
+ expect(subject).to receive(:unmute_monitor_by_id).once.with(1)
1176
+ expect(subject).to receive(:unmute_monitor_by_id).once.with(4)
1177
+ subject.unmute_monitors_by_regex(/monitor/)
1178
+ end
1179
+ it 'unmutes all matching monitors when passed a string' do
1180
+ monitors = [
1181
+ { 'name' => 'mymonitor', 'id' => 1 },
1182
+ { 'name' => 'foo', 'id' => 2 },
1183
+ { 'name' => 'bar', 'id' => 3 },
1184
+ { 'name' => 'other monitor foo', 'id' => 4 }
1185
+ ]
1186
+ allow(subject).to receive(:get_monitors).and_return(monitors)
1187
+ allow(subject).to receive(:unmute_monitor_by_id)
1188
+
1189
+ expect(subject).to receive(:get_monitors).once
1190
+ expect(subject).to receive(:unmute_monitor_by_id).once.with(1)
1191
+ expect(subject).to receive(:unmute_monitor_by_id).once.with(4)
1192
+ subject.unmute_monitors_by_regex('monitor')
1193
+ end
1194
+ it 'does not unmute any monitors if there are no matches' do
1195
+ monitors = [
1196
+ { 'name' => 'foo', 'id' => 2 },
1197
+ { 'name' => 'bar', 'id' => 3 }
1198
+ ]
1199
+ allow(subject).to receive(:get_monitors).and_return(monitors)
1200
+ allow(subject).to receive(:unmute_monitor_by_id)
1201
+
1202
+ expect(subject).to receive(:get_monitors).once
1203
+ expect(subject).to_not receive(:unmute_monitor_by_id)
1204
+ subject.unmute_monitors_by_regex('monitor')
1205
+ end
1206
+ end
1207
+ describe '#get_existing_monitor_by_name' do
1208
+ it 'returns the monitor if it exists' do
1209
+ monitors = [
1210
+ '200',
1211
+ [
1212
+ { 'name' => 'foo', 'foo' => 'bar' },
1213
+ { 'name' => 'bar', 'foo' => 'baz' }
1214
+ ]
1215
+ ]
1216
+ allow(subject).to receive(:get_monitors).and_return(monitors[1])
1217
+
1218
+ expect(subject).to receive(:get_monitors).once
1219
+ expect(subject.get_existing_monitor_by_name('bar'))
1220
+ .to eq('name' => 'bar', 'foo' => 'baz')
1221
+ end
1222
+ it 'returns nil if no monitors can be found' do
1223
+ monitors = ['200', []]
1224
+ allow(subject).to receive(:get_monitors).and_return(monitors[1])
1225
+
1226
+ expect(subject).to receive(:get_monitors).once
1227
+ expect(subject.get_existing_monitor_by_name('bar')).to be_nil
1004
1228
  end
1005
1229
  end
1006
1230
  describe '#graphdef' do
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dogtrainer
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - jantman
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-09-02 00:00:00.000000000 Z
11
+ date: 2016-09-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: dogapi