flapjack 0.7.18 → 0.7.19

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