flapjack 0.7.18 → 0.7.19

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (100) hide show
  1. data/CHANGELOG.md +7 -0
  2. data/bin/flapjack +3 -0
  3. data/bin/flapjack-nagios-receiver +4 -1
  4. data/bin/flapjack-netsaint-parser +2 -1
  5. data/bin/flapjack-populator +6 -3
  6. data/bin/receive-events +3 -1
  7. data/bin/simulate-failed-check +2 -1
  8. data/etc/flapjack_config.yaml.example +20 -0
  9. data/features/events.feature +1 -1
  10. data/features/events_check_names.feature +1 -1
  11. data/features/notification_rules.feature +1 -1
  12. data/features/notifications.feature +1 -1
  13. data/features/steps/events_steps.rb +18 -17
  14. data/features/steps/flapjack-netsaint-parser_steps.rb +1 -2
  15. data/features/steps/notifications_steps.rb +14 -1
  16. data/features/support/env.rb +27 -10
  17. data/flapjack.gemspec +1 -3
  18. data/lib/flapjack/coordinator.rb +30 -20
  19. data/lib/flapjack/data/contact.rb +3 -2
  20. data/lib/flapjack/data/entity.rb +3 -3
  21. data/lib/flapjack/data/entity_check.rb +116 -43
  22. data/lib/flapjack/data/event.rb +10 -10
  23. data/lib/flapjack/data/message.rb +3 -6
  24. data/lib/flapjack/data/notification.rb +122 -57
  25. data/lib/flapjack/data/notification_rule.rb +11 -11
  26. data/lib/flapjack/filters/acknowledgement.rb +2 -2
  27. data/lib/flapjack/filters/ok.rb +1 -1
  28. data/lib/flapjack/gateways/api/entity_check_presenter.rb +1 -0
  29. data/lib/flapjack/gateways/api/entity_methods.rb +4 -6
  30. data/lib/flapjack/gateways/api/rack/json_params_parser.rb +1 -1
  31. data/lib/flapjack/gateways/email.rb +3 -5
  32. data/lib/flapjack/gateways/email/{alert.html.haml → alert.html.erb} +0 -0
  33. data/lib/flapjack/gateways/jabber.rb +66 -35
  34. data/lib/flapjack/gateways/oobetet.rb +5 -7
  35. data/lib/flapjack/gateways/pagerduty.rb +7 -7
  36. data/lib/flapjack/gateways/web.rb +101 -41
  37. data/lib/flapjack/gateways/web/public/css/flapjack.css +1 -1
  38. data/lib/flapjack/gateways/web/views/{_css.haml → _css.html.erb} +2 -1
  39. data/lib/flapjack/gateways/web/views/_foot.html.erb +3 -0
  40. data/lib/flapjack/gateways/web/views/_head.html.erb +4 -0
  41. data/lib/flapjack/gateways/web/views/_nav.html.erb +9 -0
  42. data/lib/flapjack/gateways/web/views/check.html.erb +204 -0
  43. data/lib/flapjack/gateways/web/views/checks.html.erb +77 -0
  44. data/lib/flapjack/gateways/web/views/contact.html.erb +114 -0
  45. data/lib/flapjack/gateways/web/views/contacts.html.erb +42 -0
  46. data/lib/flapjack/gateways/web/views/entities.html.erb +39 -0
  47. data/lib/flapjack/gateways/web/views/entity.html.erb +67 -0
  48. data/lib/flapjack/gateways/web/views/index.html.erb +27 -0
  49. data/lib/flapjack/gateways/web/views/self_stats.html.erb +97 -0
  50. data/lib/flapjack/logger.rb +71 -23
  51. data/lib/flapjack/notifier.rb +157 -0
  52. data/lib/flapjack/patches.rb +1 -41
  53. data/lib/flapjack/pikelet.rb +4 -2
  54. data/lib/flapjack/{executive.rb → processor.rb} +32 -145
  55. data/lib/flapjack/version.rb +1 -1
  56. data/spec/lib/flapjack/coordinator_spec.rb +134 -71
  57. data/spec/lib/flapjack/data/contact_spec.rb +1 -0
  58. data/spec/lib/flapjack/data/entity_check_spec.rb +146 -30
  59. data/spec/lib/flapjack/data/entity_spec.rb +4 -4
  60. data/spec/lib/flapjack/data/event_spec.rb +4 -4
  61. data/spec/lib/flapjack/data/message_spec.rb +2 -3
  62. data/spec/lib/flapjack/data/notification_spec.rb +13 -19
  63. data/spec/lib/flapjack/gateways/api/entity_methods_spec.rb +2 -2
  64. data/spec/lib/flapjack/gateways/jabber_spec.rb +34 -0
  65. data/spec/lib/flapjack/gateways/pagerduty_spec.rb +0 -2
  66. data/spec/lib/flapjack/gateways/web/views/{check.haml_spec.rb → check.html.erb_spec.rb} +2 -2
  67. data/spec/lib/flapjack/gateways/web/views/{contact.haml_spec.rb → contact.html.erb_spec.rb} +3 -3
  68. data/spec/lib/flapjack/gateways/web/views/index.html.erb_spec.rb +14 -0
  69. data/spec/lib/flapjack/gateways/web_spec.rb +20 -8
  70. data/spec/lib/flapjack/logger_spec.rb +30 -28
  71. data/spec/lib/flapjack/notifier_spec.rb +6 -0
  72. data/spec/lib/flapjack/pikelet_spec.rb +8 -8
  73. data/spec/lib/flapjack/{executive_spec.rb → processor_spec.rb} +4 -4
  74. data/spec/spec_helper.rb +1 -13
  75. data/spec/support/erb_view_helper.rb +23 -0
  76. data/tasks/profile.rake +1 -1
  77. data/tmp/acknowledge.rb +3 -1
  78. data/tmp/create_event_ok.rb +3 -1
  79. data/tmp/create_event_unknown.rb +3 -1
  80. data/tmp/create_events_failure.rb +3 -1
  81. data/tmp/create_events_ok.rb +3 -1
  82. data/tmp/create_events_ok_fail_ack_ok.rb +3 -1
  83. data/tmp/create_events_ok_failure.rb +3 -1
  84. data/tmp/create_events_ok_failure_ack.rb +3 -1
  85. data/tmp/test_json_post.rb +5 -3
  86. data/tmp/test_notification_rules_api.rb +5 -3
  87. metadata +32 -61
  88. data/lib/flapjack/gateways/web/views/_foot.haml +0 -8
  89. data/lib/flapjack/gateways/web/views/_head.haml +0 -10
  90. data/lib/flapjack/gateways/web/views/_nav.haml +0 -14
  91. data/lib/flapjack/gateways/web/views/check.haml +0 -191
  92. data/lib/flapjack/gateways/web/views/checks.haml +0 -49
  93. data/lib/flapjack/gateways/web/views/contact.haml +0 -85
  94. data/lib/flapjack/gateways/web/views/contacts.haml +0 -30
  95. data/lib/flapjack/gateways/web/views/entities.haml +0 -28
  96. data/lib/flapjack/gateways/web/views/entity.haml +0 -50
  97. data/lib/flapjack/gateways/web/views/index.haml +0 -32
  98. data/lib/flapjack/gateways/web/views/self_stats.haml +0 -70
  99. data/spec/lib/flapjack/gateways/web/views/index.haml_spec.rb +0 -13
  100. data/spec/support/haml_view_helper.rb +0 -15
@@ -209,6 +209,7 @@ describe Flapjack::Data::Contact, :redis => true do
209
209
  ec = Flapjack::Data::EntityCheck.for_entity_name(entity_name, 'PING', :redis => @redis)
210
210
  t = Time.now.to_i
211
211
  ec.update_state('ok', :timestamp => t, :summary => 'a')
212
+ ec.last_update = t
212
213
 
213
214
  contact = Flapjack::Data::Contact.find_by_id('362', :redis => @redis)
214
215
  eandcs = contact.entities(:checks => true)
@@ -1,7 +1,5 @@
1
1
  require 'spec_helper'
2
2
 
3
- require 'yajl/json_gem'
4
-
5
3
  require 'flapjack/data/entity'
6
4
  require 'flapjack/data/entity_check'
7
5
 
@@ -104,14 +102,24 @@ describe Flapjack::Data::EntityCheck, :redis => true do
104
102
  ec.should_not be_in_scheduled_maintenance
105
103
  end
106
104
 
105
+ it "returns its current maintenance period" do
106
+ ec = Flapjack::Data::EntityCheck.for_entity_name(name, check, :redis => @redis)
107
+ ec.current_maintenance(:scheduled => true).should be_nil
108
+
109
+ t = Time.now.to_i
110
+
111
+ ec.create_unscheduled_maintenance(t, half_an_hour, :summary => 'oops')
112
+ ec.current_maintenance.should == {:start_time => t,
113
+ :duration => half_an_hour,
114
+ :summary => 'oops'}
115
+ end
116
+
107
117
  it "creates an unscheduled maintenance period" do
108
118
  t = Time.now.to_i
109
119
  ec = Flapjack::Data::EntityCheck.for_entity_name(name, check, :redis => @redis)
110
- ec.create_unscheduled_maintenance(:start_time => t, :duration => half_an_hour, :summary => 'oops')
120
+ ec.create_unscheduled_maintenance(t, half_an_hour, :summary => 'oops')
111
121
 
112
- timestamp = @redis.get("#{name}:#{check}:unscheduled_maintenance")
113
- timestamp.should_not be_nil
114
- timestamp.should == t.to_s
122
+ ec.should be_in_unscheduled_maintenance
115
123
 
116
124
  umps = ec.maintenances(nil, nil, :scheduled => false)
117
125
  umps.should_not be_nil
@@ -134,11 +142,78 @@ describe Flapjack::Data::EntityCheck, :redis => true do
134
142
  summary.should == 'oops'
135
143
  end
136
144
 
145
+ it "creates an unscheduled maintenance period and ends the current one early", :time => true do
146
+ t = Time.now.to_i
147
+ later_t = t + (15 * 60)
148
+ ec = Flapjack::Data::EntityCheck.for_entity_name(name, check, :redis => @redis)
149
+ ec.create_unscheduled_maintenance(t, half_an_hour, :summary => 'oops')
150
+ Delorean.time_travel_to( Time.at(later_t) )
151
+ ec.create_unscheduled_maintenance(later_t, half_an_hour, :summary => 'spoo')
152
+
153
+ ec.should be_in_unscheduled_maintenance
154
+
155
+ umps = ec.maintenances(nil, nil, :scheduled => false)
156
+ umps.should_not be_nil
157
+ umps.should be_an(Array)
158
+ umps.should have(2).unscheduled_maintenance_periods
159
+ umps[0].should be_a(Hash)
160
+
161
+ start_time = umps[0][:start_time]
162
+ start_time.should_not be_nil
163
+ start_time.should be_an(Integer)
164
+ start_time.should == t
165
+
166
+ duration = umps[0][:duration]
167
+ duration.should_not be_nil
168
+ duration.should be_a(Float)
169
+ duration.should == (15 * 60)
170
+
171
+ start_time_curr = umps[1][:start_time]
172
+ start_time_curr.should_not be_nil
173
+ start_time_curr.should be_an(Integer)
174
+ start_time_curr.should == later_t
175
+
176
+ duration_curr = umps[1][:duration]
177
+ duration_curr.should_not be_nil
178
+ duration_curr.should be_a(Float)
179
+ duration_curr.should == half_an_hour
180
+ end
181
+
182
+ it "ends an unscheduled maintenance period" do
183
+ t = Time.now.to_i
184
+ later_t = t + (15 * 60)
185
+ ec = Flapjack::Data::EntityCheck.for_entity_name(name, check, :redis => @redis)
186
+
187
+ ec.create_unscheduled_maintenance(t, half_an_hour, :summary => 'oops')
188
+ ec.should be_in_unscheduled_maintenance
189
+
190
+ Delorean.time_travel_to( Time.at(later_t) )
191
+ ec.should be_in_unscheduled_maintenance
192
+ ec.end_unscheduled_maintenance(later_t)
193
+ ec.should_not be_in_unscheduled_maintenance
194
+
195
+ umps = ec.maintenances(nil, nil, :scheduled => false)
196
+ umps.should_not be_nil
197
+ umps.should be_an(Array)
198
+ umps.should have(1).unscheduled_maintenance_period
199
+ umps[0].should be_a(Hash)
200
+
201
+ start_time = umps[0][:start_time]
202
+ start_time.should_not be_nil
203
+ start_time.should be_an(Integer)
204
+ start_time.should == t
205
+
206
+ duration = umps[0][:duration]
207
+ duration.should_not be_nil
208
+ duration.should be_a(Float)
209
+ duration.should == (15 * 60)
210
+ end
211
+
137
212
  it "creates a scheduled maintenance period for a future time" do
138
213
  t = Time.now.to_i
139
214
  ec = Flapjack::Data::EntityCheck.for_entity_name(name, check, :redis => @redis)
140
- ec.create_scheduled_maintenance(:start_time => t + (60 * 60),
141
- :duration => half_an_hour, :summary => "30 minutes")
215
+ ec.create_scheduled_maintenance(t + (60 * 60),
216
+ half_an_hour, :summary => "30 minutes")
142
217
 
143
218
  smps = ec.maintenances(nil, nil, :scheduled => true)
144
219
  smps.should_not be_nil
@@ -161,8 +236,8 @@ describe Flapjack::Data::EntityCheck, :redis => true do
161
236
  it "creates a scheduled maintenance period covering the current time" do
162
237
  t = Time.now.to_i
163
238
  ec = Flapjack::Data::EntityCheck.for_entity_name(name, check, :redis => @redis)
164
- ec.create_scheduled_maintenance(:start_time => t - (60 * 60),
165
- :duration => 2 * (60 * 60), :summary => "2 hours")
239
+ ec.create_scheduled_maintenance(t - (60 * 60),
240
+ 2 * (60 * 60), :summary => "2 hours")
166
241
 
167
242
  smps = ec.maintenances(nil, nil, :scheduled => true)
168
243
  smps.should_not be_nil
@@ -184,8 +259,8 @@ describe Flapjack::Data::EntityCheck, :redis => true do
184
259
  it "removes a scheduled maintenance period for a future time" do
185
260
  t = Time.now.to_i
186
261
  ec = Flapjack::Data::EntityCheck.for_entity_name(name, check, :redis => @redis)
187
- ec.create_scheduled_maintenance(:start_time => t + (60 * 60),
188
- :duration => 2 * (60 * 60), :summary => "2 hours")
262
+ ec.create_scheduled_maintenance(t + (60 * 60),
263
+ 2 * (60 * 60), :summary => "2 hours")
189
264
 
190
265
  ec.end_scheduled_maintenance(t + (60 * 60))
191
266
 
@@ -200,8 +275,8 @@ describe Flapjack::Data::EntityCheck, :redis => true do
200
275
  it "shortens a scheduled maintenance period covering a current time", :time => true do
201
276
  t = Time.now.to_i
202
277
  ec = Flapjack::Data::EntityCheck.for_entity_name(name, check, :redis => @redis)
203
- ec.create_scheduled_maintenance(:start_time => t + (60 * 60),
204
- :duration => 2 * (60 * 60), :summary => "2 hours")
278
+ ec.create_scheduled_maintenance(t + (60 * 60),
279
+ 2 * (60 * 60), :summary => "2 hours")
205
280
 
206
281
  Delorean.time_travel_to( Time.at(t + (90 * 60)) )
207
282
 
@@ -218,8 +293,8 @@ describe Flapjack::Data::EntityCheck, :redis => true do
218
293
  it "does not alter or remove a scheduled maintenance period covering a past time", :time => true do
219
294
  t = Time.now.to_i
220
295
  ec = Flapjack::Data::EntityCheck.for_entity_name(name, check, :redis => @redis)
221
- ec.create_scheduled_maintenance(:start_time => t + (60 * 60),
222
- :duration => 2 * (60 * 60), :summary => "2 hours")
296
+ ec.create_scheduled_maintenance(t + (60 * 60),
297
+ 2 * (60 * 60), :summary => "2 hours")
223
298
 
224
299
  Delorean.time_travel_to( Time.at(t + (6 * (60 * 60)) ))
225
300
 
@@ -239,10 +314,10 @@ describe Flapjack::Data::EntityCheck, :redis => true do
239
314
  three_hours_ago = t - (60 * 60 * 3)
240
315
 
241
316
  ec = Flapjack::Data::EntityCheck.for_entity_name(name, check, :redis => @redis)
242
- ec.create_scheduled_maintenance(:start_time => five_hours_ago,
243
- :duration => half_an_hour, :summary => "first")
244
- ec.create_scheduled_maintenance(:start_time => three_hours_ago,
245
- :duration => half_an_hour, :summary => "second")
317
+ ec.create_scheduled_maintenance(five_hours_ago, half_an_hour,
318
+ :summary => "first")
319
+ ec.create_scheduled_maintenance(three_hours_ago, half_an_hour,
320
+ :summary => "second")
246
321
 
247
322
  smp = ec.maintenances(nil, nil, :scheduled => true)
248
323
  smp.should_not be_nil
@@ -264,10 +339,10 @@ describe Flapjack::Data::EntityCheck, :redis => true do
264
339
  three_hours_ago = t - (60 * 60 * 3)
265
340
 
266
341
  ec = Flapjack::Data::EntityCheck.for_entity_name(name, check, :redis => @redis)
267
- ec.create_unscheduled_maintenance(:start_time => five_hours_ago,
268
- :duration => half_an_hour, :summary => "first")
269
- ec.create_unscheduled_maintenance(:start_time => three_hours_ago,
270
- :duration => half_an_hour, :summary => "second")
342
+ ec.create_unscheduled_maintenance(five_hours_ago,
343
+ half_an_hour, :summary => "first")
344
+ ec.create_unscheduled_maintenance(three_hours_ago,
345
+ half_an_hour, :summary => "second")
271
346
 
272
347
  ump = ec.maintenances(nil, nil, :scheduled => false)
273
348
  ump.should_not be_nil
@@ -305,6 +380,47 @@ describe Flapjack::Data::EntityCheck, :redis => true do
305
380
  state.should == 'critical'
306
381
  end
307
382
 
383
+ it "updates enabled checks" do
384
+ ts = Time.now.to_i
385
+ ec = Flapjack::Data::EntityCheck.for_entity_name(name, check, :redis => @redis)
386
+ ec.last_update = ts
387
+
388
+ saved_check_ts = @redis.zscore("current_checks:#{name}", check)
389
+ saved_check_ts.should_not be_nil
390
+ saved_check_ts.should == ts
391
+ saved_entity_ts = @redis.zscore("current_entities", name)
392
+ saved_entity_ts.should_not be_nil
393
+ saved_entity_ts.should == ts
394
+ end
395
+
396
+ it "exposes that it is enabled" do
397
+ @redis.zadd("current_checks:#{name}", Time.now.to_i, check)
398
+ @redis.zadd("current_entities", Time.now.to_i, name)
399
+ ec = Flapjack::Data::EntityCheck.for_entity_name(name, check, :redis => @redis)
400
+
401
+ e = ec.enabled?
402
+ e.should be_true
403
+ end
404
+
405
+ it "exposes that it is disabled" do
406
+ ec = Flapjack::Data::EntityCheck.for_entity_name(name, check, :redis => @redis)
407
+
408
+ e = ec.enabled?
409
+ e.should be_false
410
+ end
411
+
412
+ it "disables checks" do
413
+ @redis.zadd("current_checks:#{name}", Time.now.to_i, check)
414
+ @redis.zadd("current_entities", Time.now.to_i, name)
415
+ ec = Flapjack::Data::EntityCheck.for_entity_name(name, check, :redis => @redis)
416
+ ec.disable!
417
+
418
+ saved_check_ts = @redis.zscore("current_checks:#{name}", check)
419
+ saved_entity_ts = @redis.zscore("current_entities", name)
420
+ saved_check_ts.should be_nil
421
+ saved_entity_ts.should be_nil
422
+ end
423
+
308
424
  it "does not update state with invalid value" do
309
425
  @redis.hset("check:#{name}:#{check}", 'state', 'ok')
310
426
 
@@ -386,12 +502,12 @@ describe Flapjack::Data::EntityCheck, :redis => true do
386
502
 
387
503
  t = Time.now.to_i
388
504
 
389
- ec.create_scheduled_maintenance(:start_time => time_before(t, 180),
390
- :duration => half_an_hour, :summary => "a")
391
- ec.create_scheduled_maintenance(:start_time => time_before(t, 120),
392
- :duration => half_an_hour, :summary => "b")
393
- ec.create_scheduled_maintenance(:start_time => time_before(t, 60),
394
- :duration => half_an_hour, :summary => "c")
505
+ ec.create_scheduled_maintenance(time_before(t, 180),
506
+ half_an_hour, :summary => "a")
507
+ ec.create_scheduled_maintenance(time_before(t, 120),
508
+ half_an_hour, :summary => "b")
509
+ ec.create_scheduled_maintenance(time_before(t, 60),
510
+ half_an_hour, :summary => "c")
395
511
 
396
512
  sched_maint_periods = ec.maintenances(time_before(t, 150), t,
397
513
  :scheduled => true)
@@ -90,8 +90,8 @@ describe Flapjack::Data::Entity, :redis => true do
90
90
  'name' => name},
91
91
  :redis => @redis)
92
92
 
93
- @redis.hset("check:#{name}:ping", 'state', 'OK')
94
- @redis.hset("check:#{name}:ssh", 'state', 'OK')
93
+ @redis.zadd("current_checks:#{name}", Time.now.to_i, "ping")
94
+ @redis.zadd("current_checks:#{name}", Time.now.to_i, "ssh")
95
95
 
96
96
  entity = Flapjack::Data::Entity.find_by_name(name, :redis => @redis)
97
97
  check_list = entity.check_list
@@ -108,8 +108,8 @@ describe Flapjack::Data::Entity, :redis => true do
108
108
  'contacts' => []},
109
109
  :redis => @redis)
110
110
 
111
- @redis.hset("check:#{name}:ping", 'state', 'OK')
112
- @redis.hset("check:#{name}:ssh", 'state', 'OK')
111
+ @redis.zadd("current_checks:#{name}", Time.now.to_i, "ping")
112
+ @redis.zadd("current_checks:#{name}", Time.now.to_i, "ssh")
113
113
 
114
114
  entity = Flapjack::Data::Entity.find_by_id(5000, :redis => @redis)
115
115
  check_count = entity.check_count
@@ -26,14 +26,14 @@ describe Flapjack::Data::Event do
26
26
  mock_redis.should_receive(:brpoplpush).with('events', /^events_archive:/, 0).and_return(event_data.to_json)
27
27
  mock_redis.should_receive(:expire)
28
28
 
29
- result = Flapjack::Data::Event.next(:block => true, :archive_events => true, :redis => mock_redis)
29
+ result = Flapjack::Data::Event.next('events', :block => true, :archive_events => true, :redis => mock_redis)
30
30
  result.should be_an_instance_of(Flapjack::Data::Event)
31
31
  end
32
32
 
33
33
  it "returns the next event (blocking, not archiving)" do
34
34
  mock_redis.should_receive(:brpop).with('events', 0).and_return(['events', event_data.to_json])
35
35
 
36
- result = Flapjack::Data::Event.next(:block => true, :archive_events => false, :redis => mock_redis)
36
+ result = Flapjack::Data::Event.next('events', :block => true, :archive_events => false, :redis => mock_redis)
37
37
  result.should be_an_instance_of(Flapjack::Data::Event)
38
38
  end
39
39
 
@@ -41,14 +41,14 @@ describe Flapjack::Data::Event do
41
41
  mock_redis.should_receive(:rpoplpush).with('events', /^events_archive:/).and_return(event_data.to_json)
42
42
  mock_redis.should_receive(:expire)
43
43
 
44
- result = Flapjack::Data::Event.next(:block => false, :archive_events => true, :redis => mock_redis)
44
+ result = Flapjack::Data::Event.next('events', :block => false, :archive_events => true, :redis => mock_redis)
45
45
  result.should be_an_instance_of(Flapjack::Data::Event)
46
46
  end
47
47
 
48
48
  it "returns the next event (non-blocking, not archiving)" do
49
49
  mock_redis.should_receive(:rpop).with('events').and_return(event_data.to_json)
50
50
 
51
- result = Flapjack::Data::Event.next(:block => false, :archive_events => false, :redis => mock_redis)
51
+ result = Flapjack::Data::Event.next('events', :block => false, :archive_events => false, :redis => mock_redis)
52
52
  result.should be_an_instance_of(Flapjack::Data::Event)
53
53
  end
54
54
 
@@ -14,14 +14,13 @@ describe Flapjack::Data::Message do
14
14
 
15
15
  it "returns its contained data" do
16
16
  message = Flapjack::Data::Message.for_contact(contact, :medium => 'email',
17
- :address => 'jja@example.com', :notification_contents => {'notification' => 'contents'})
17
+ :address => 'jja@example.com')
18
18
 
19
19
  contact.should_receive(:id).and_return('23')
20
20
  contact.should_receive(:first_name).and_return('James')
21
21
  contact.should_receive(:last_name).and_return('Jameson')
22
22
 
23
- message.contents.should include('notification' => 'contents',
24
- 'contact_id' => '23',
23
+ message.contents.should include('contact_id' => '23',
25
24
  'contact_first_name' => 'James',
26
25
  'contact_last_name' => 'Jameson',
27
26
  'media' => 'email',
@@ -9,33 +9,27 @@ describe Flapjack::Data::Notification, :redis => true, :logger => true do
9
9
 
10
10
  let(:timezone) { mock('timezone') }
11
11
 
12
- it "generates a notification for an event" do
13
- notification = Flapjack::Data::Notification.for_event(event, :type => 'problem',
14
- :max_notified_severity => nil, :contacts => [contact],
15
- :default_timezone => timezone, :logger => @logger)
16
- notification.should_not be_nil
17
- notification.event.should == event
18
- notification.type.should == 'problem'
19
- end
12
+ it "generates a notification for an event" # do
13
+ # notification = Flapjack::Data::Notification.for_event(event, :type => 'problem',
14
+ # :max_notified_severity => nil, :contacts => [contact],
15
+ # :default_timezone => timezone, :logger => @logger)
16
+ # notification.should_not be_nil
17
+ # notification.event.should == event
18
+ # notification.type.should == 'problem'
19
+ # end
20
20
 
21
21
  it "generates messages for contacts" do
22
- notification = Flapjack::Data::Notification.for_event(event, :type => 'problem',
23
- :max_notified_severity => nil, :contacts => [contact],
24
- :default_timezone => timezone, :logger => @logger)
22
+ # TODO sensible default values for notification, check that they're passed
23
+ # in message.notification_contents
24
+ notification = Flapjack::Data::Notification.new
25
25
 
26
26
  contact.should_receive(:id).and_return('23')
27
27
  contact.should_receive(:notification_rules).and_return([])
28
28
  contact.should_receive(:media).and_return('email' => 'example@example.com',
29
29
  'sms' => '0123456789')
30
30
 
31
- event.should_receive(:id).and_return('abc-123.com:ping')
32
- event.should_receive(:state).and_return('critical')
33
- event.should_receive(:summary).and_return('Shiny & happy')
34
- event.should_receive(:details).and_return('Really Shiny & happy')
35
- event.should_receive(:time).and_return(Time.now.to_i)
36
- event.should_receive(:duration).and_return(nil)
37
-
38
- messages = notification.messages
31
+ messages = notification.messages([contact], :default_timezone => timezone,
32
+ :logger => @logger)
39
33
  messages.should_not be_nil
40
34
  messages.should have(2).items
41
35
 
@@ -376,7 +376,7 @@ describe 'Flapjack::Gateways::API::EntityMethods', :sinatra => true, :logger =>
376
376
 
377
377
  it "deletes an unscheduled maintenance period for an entity check" do
378
378
  end_time = Time.now + (60 * 60) # an hour from now
379
- entity_check.should_receive(:end_unscheduled_maintenance).with(:end_time => end_time.to_i)
379
+ entity_check.should_receive(:end_unscheduled_maintenance).with(end_time.to_i)
380
380
 
381
381
  Flapjack::Data::EntityCheck.should_receive(:for_entity).
382
382
  with(entity, check, :redis => redis).and_return(entity_check)
@@ -396,7 +396,7 @@ describe 'Flapjack::Gateways::API::EntityMethods', :sinatra => true, :logger =>
396
396
  Flapjack::Data::EntityCheck.should_receive(:for_entity).
397
397
  with(entity, check, :redis => redis).and_return(entity_check)
398
398
  entity_check.should_receive(:create_scheduled_maintenance).
399
- with(:summary => 'test', :duration => duration, :start_time => start.getutc.to_i)
399
+ with(start.getutc.to_i, duration, :summary => 'test')
400
400
 
401
401
  post "/scheduled_maintenances/#{entity_name_esc}/#{check}?" +
402
402
  "start_time=#{CGI.escape(start.iso8601)}&summary=test&duration=#{duration}"
@@ -83,6 +83,40 @@ describe Flapjack::Gateways::Jabber, :logger => true do
83
83
  fj.on_groupchat(stanza)
84
84
  end
85
85
 
86
+ it "strips XML tags from the received message" do
87
+ stanza.should_receive(:body).
88
+ and_return('flapjack: tell me about <span style="text-decoration: underline;">' +
89
+ '<a href="http://example.org/">example.org</a></span>')
90
+
91
+ from = mock('from')
92
+ from.should_receive(:stripped).and_return('sender')
93
+ stanza.should_receive(:from).and_return(from)
94
+
95
+ redis = mock('redis')
96
+ entity = mock(Flapjack::Data::Entity)
97
+ entity.should_receive(:check_list).and_return(['ping'])
98
+
99
+ Flapjack::Data::Entity.should_receive(:find_by_name).with('example.org',
100
+ :redis => redis).and_return(entity)
101
+
102
+ entity_check = mock(Flapjack::Data::EntityCheck)
103
+ entity_check.should_receive(:current_maintenance).with(:scheduled => true).and_return(nil)
104
+ entity_check.should_receive(:current_maintenance).with(:unscheduled => true).and_return(nil)
105
+ entity_check.should_receive(:check).and_return('ping')
106
+
107
+ Flapjack::Data::EntityCheck.should_receive(:for_entity).with(entity, 'ping',
108
+ :redis => redis).and_return(entity_check)
109
+
110
+ Flapjack::RedisPool.should_receive(:new).and_return(redis)
111
+ fj = Flapjack::Gateways::Jabber.new(:config => config, :logger => @logger)
112
+
113
+ EventMachine::Synchrony.should_receive(:next_tick).and_yield
114
+ fj.should_receive(:connected?).and_return(true)
115
+ fj.should_receive(:write).with(an_instance_of(Blather::Stanza::Message))
116
+
117
+ fj.on_groupchat(stanza)
118
+ end
119
+
86
120
  it "receives a message it doesn't understand" do
87
121
  stanza.should_receive(:body).once.and_return('flapjack: hello!')
88
122
  from = mock('from')
@@ -1,7 +1,5 @@
1
1
  require 'spec_helper'
2
2
 
3
- require 'yajl/json_gem'
4
-
5
3
  require 'flapjack/gateways/pagerduty'
6
4
 
7
5
  describe Flapjack::Gateways::Pagerduty, :logger => true do