flapjack 0.6.53 → 0.6.54

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 (53) hide show
  1. data/bin/flapjack +103 -19
  2. data/bin/flapjack-nagios-receiver +166 -52
  3. data/bin/flapper +107 -18
  4. data/etc/flapjack_config.yaml.example +16 -0
  5. data/features/events.feature +63 -0
  6. data/features/steps/events_steps.rb +5 -5
  7. data/features/steps/notifications_steps.rb +8 -6
  8. data/features/steps/time_travel_steps.rb +4 -4
  9. data/features/support/env.rb +1 -2
  10. data/flapjack.gemspec +1 -1
  11. data/lib/flapjack/configuration.rb +11 -13
  12. data/lib/flapjack/coordinator.rb +100 -220
  13. data/lib/flapjack/data/entity_check.rb +2 -2
  14. data/lib/flapjack/data/event.rb +3 -3
  15. data/lib/flapjack/executive.rb +30 -40
  16. data/lib/flapjack/filters/delays.rb +1 -1
  17. data/lib/flapjack/gateways/api.rb +6 -23
  18. data/lib/flapjack/gateways/email.rb +4 -10
  19. data/lib/flapjack/gateways/email/alert.html.haml +0 -5
  20. data/lib/flapjack/gateways/email/alert.text.erb +0 -1
  21. data/lib/flapjack/gateways/jabber.rb +80 -67
  22. data/lib/flapjack/gateways/oobetet.rb +29 -25
  23. data/lib/flapjack/gateways/pagerduty.rb +26 -45
  24. data/lib/flapjack/gateways/sms_messagenet.rb +10 -17
  25. data/lib/flapjack/gateways/web.rb +7 -21
  26. data/lib/flapjack/gateways/web/views/_css.haml +3 -0
  27. data/lib/flapjack/gateways/web/views/check.haml +1 -1
  28. data/lib/flapjack/logger.rb +57 -0
  29. data/lib/flapjack/patches.rb +0 -10
  30. data/lib/flapjack/pikelet.rb +214 -30
  31. data/lib/flapjack/redis_pool.rb +2 -17
  32. data/lib/flapjack/version.rb +1 -1
  33. data/spec/lib/flapjack/coordinator_spec.rb +116 -136
  34. data/spec/lib/flapjack/data/entity_check_spec.rb +3 -3
  35. data/spec/lib/flapjack/executive_spec.rb +33 -34
  36. data/spec/lib/flapjack/gateways/api_spec.rb +4 -2
  37. data/spec/lib/flapjack/gateways/jabber_spec.rb +39 -36
  38. data/spec/lib/flapjack/gateways/oobetet_spec.rb +14 -24
  39. data/spec/lib/flapjack/gateways/pagerduty_spec.rb +43 -45
  40. data/spec/lib/flapjack/gateways/web_spec.rb +42 -35
  41. data/spec/lib/flapjack/logger_spec.rb +32 -0
  42. data/spec/lib/flapjack/pikelet_spec.rb +124 -15
  43. data/spec/lib/flapjack/redis_pool_spec.rb +1 -3
  44. data/spec/spec_helper.rb +34 -1
  45. data/tasks/events.rake +1 -0
  46. data/tmp/create_event_ok.rb +31 -0
  47. data/tmp/create_event_unknown.rb +31 -0
  48. data/tmp/create_events_ok.rb +1 -1
  49. metadata +10 -11
  50. data/bin/flapjack-nagios-receiver-control +0 -15
  51. data/bin/flapper-control +0 -15
  52. data/lib/flapjack/daemonizing.rb +0 -186
  53. data/lib/flapjack/gateways/base.rb +0 -38
@@ -485,6 +485,9 @@ describe Flapjack::Data::EntityCheck, :redis => true do
485
485
 
486
486
  @redis.hset("check:#{name}:#{check}", 'state', 'critical')
487
487
  ec.should be_failed
488
+
489
+ @redis.hset("check:#{name}:#{check}", 'state', 'unknown')
490
+ ec.should be_failed
488
491
  end
489
492
 
490
493
  it "returns that it has not failed" do
@@ -495,9 +498,6 @@ describe Flapjack::Data::EntityCheck, :redis => true do
495
498
 
496
499
  @redis.hset("check:#{name}:#{check}", 'state', 'acknowledgement')
497
500
  ec.should_not be_failed
498
-
499
- @redis.hset("check:#{name}:#{check}", 'state', 'unknown')
500
- ec.should_not be_failed
501
501
  end
502
502
 
503
503
  it "returns a status summary" do
@@ -1,21 +1,13 @@
1
1
  require 'spec_helper'
2
2
  require 'flapjack/executive'
3
3
 
4
- describe Flapjack::Executive, :redis => true do
4
+ describe Flapjack::Executive, :logger => true do
5
5
 
6
6
  # NB: this is only testing the public API of the Executive class, which is pretty limited.
7
7
  # (initialize, main, stop). Most test coverage for this class comes from the cucumber features.
8
8
 
9
- it "prompts the blocking redis connection to quit" do
10
- redis = mock('redis')
11
- redis.should_receive(:rpush).with('events', %q{{"type":"shutdown","host":"","service":"","state":""}})
12
-
13
- executive = Flapjack::Executive.new
14
- executive.add_shutdown_event(:redis => redis)
15
- end
16
-
17
- # TODO split out the setup stuff to a separate test
18
- it "shuts down when provided with a shutdown event" do
9
+ # TODO this does too much -- split it up
10
+ it "starts up, runs and shuts down" do
19
11
  t = Time.now.to_i
20
12
 
21
13
  Flapjack::Filters::Ok.should_receive(:new)
@@ -25,35 +17,42 @@ describe Flapjack::Executive, :redis => true do
25
17
  Flapjack::Filters::Delays.should_receive(:new)
26
18
  Flapjack::Filters::Acknowledgement.should_receive(:new)
27
19
 
20
+ redis = mock('redis')
21
+
22
+ redis.should_receive(:set).with('boot_time', a_kind_of(Integer))
23
+ redis.should_receive(:hget).with('event_counters', 'all').and_return(nil)
24
+ redis.should_receive(:hset).with('event_counters', 'all', 0)
25
+ redis.should_receive(:hset).with('event_counters', 'ok', 0)
26
+ redis.should_receive(:hset).with('event_counters', 'failure', 0)
27
+ redis.should_receive(:hset).with('event_counters', 'action', 0)
28
+
29
+ redis.should_receive(:zadd).with('executive_instances', a_kind_of(Integer), a_kind_of(String))
30
+ redis.should_receive(:hset).with(/^event_counters:/, 'all', 0)
31
+ redis.should_receive(:hset).with(/^event_counters:/, 'ok', 0)
32
+ redis.should_receive(:hset).with(/^event_counters:/, 'failure', 0)
33
+ redis.should_receive(:hset).with(/^event_counters:/, 'action', 0)
34
+
35
+ redis.should_receive(:hincrby).with('event_counters', 'all', 1)
36
+ redis.should_receive(:hincrby).with(/^event_counters:/, 'all', 1)
37
+
38
+ Flapjack::Data::Event.should_receive(:pending_count).with(:redis => redis).and_return(0)
39
+
40
+ Flapjack::RedisPool.should_receive(:new).and_return(redis)
41
+ executive = Flapjack::Executive.new(:config => {}, :logger => @logger)
42
+
28
43
  shutdown_evt = mock(Flapjack::Data::Event)
44
+ shutdown_evt.should_receive(:inspect)
29
45
  shutdown_evt.should_receive(:id).and_return('-:-')
30
46
  shutdown_evt.should_receive(:type).exactly(3).times.and_return('shutdown')
31
47
  shutdown_evt.should_receive(:state).and_return(nil)
32
48
  shutdown_evt.should_receive(:summary).and_return(nil)
33
49
  shutdown_evt.should_receive(:time).and_return(Time.now)
34
- Flapjack::Data::Event.should_receive(:next).and_return(shutdown_evt)
35
-
36
- executive = Flapjack::Executive.new
37
- Flapjack::RedisPool.should_receive(:new).and_return(@redis)
38
- executive.bootstrap(:config => {})
39
- @redis.should_receive(:empty!)
40
-
41
- # hacky, but the behaviour it's mimicking (shutdown from another thread) isn't
42
- # conducive to nice tests
43
- executive.stub(:should_quit?).and_return(false, true)
44
- executive.main
45
- executive.cleanup
46
-
47
- # TODO these will need to be made relative to the running instance,
48
- # and a list of the running instances maintained somewhere
49
- boot_time = @redis.get('boot_time')
50
- boot_time.should_not be_nil
51
- boot_time.to_i.should >= t
52
-
53
- @redis.hget('event_counters', 'all').should == 1.to_s
54
- @redis.hget('event_counters', 'ok').should == 0.to_s
55
- @redis.hget('event_counters', 'failure').should == 0.to_s
56
- @redis.hget('event_counters', 'action').should == 0.to_s
50
+ Flapjack::Data::Event.should_receive(:next) {
51
+ executive.instance_variable_set('@should_quit', true)
52
+ shutdown_evt
53
+ }
54
+
55
+ executive.start
57
56
  end
58
57
 
59
58
  end
@@ -1,7 +1,7 @@
1
1
  require 'spec_helper'
2
2
  require 'flapjack/gateways/api'
3
3
 
4
- describe 'Flapjack::Gateways::API', :sinatra => true do
4
+ describe 'Flapjack::Gateways::API', :sinatra => true, :logger => true do
5
5
 
6
6
  def app
7
7
  Flapjack::Gateways::API
@@ -21,7 +21,9 @@ describe 'Flapjack::Gateways::API', :sinatra => true do
21
21
 
22
22
  before(:each) do
23
23
  Flapjack::RedisPool.should_receive(:new).and_return(redis)
24
- Flapjack::Gateways::API.bootstrap(:config => {})
24
+ Flapjack::Gateways::API.instance_variable_set('@config', {})
25
+ Flapjack::Gateways::API.instance_variable_set('@logger', @logger)
26
+ Flapjack::Gateways::API.start
25
27
  end
26
28
 
27
29
  it "returns a list of checks for an entity" do
@@ -1,7 +1,7 @@
1
1
  require 'spec_helper'
2
2
  require 'flapjack/gateways/jabber'
3
3
 
4
- describe Flapjack::Gateways::Jabber do
4
+ describe Flapjack::Gateways::Jabber, :logger => true do
5
5
 
6
6
  let(:config) { {'queue' => 'jabber_notifications',
7
7
  'server' => 'example.com',
@@ -18,9 +18,8 @@ describe Flapjack::Gateways::Jabber do
18
18
  it "hooks up event handlers to the appropriate methods" do
19
19
  Socket.should_receive(:gethostname).and_return('thismachine')
20
20
 
21
- fj = Flapjack::Gateways::Jabber.new
22
21
  Flapjack::RedisPool.should_receive(:new)
23
- fj.bootstrap(:config => config)
22
+ fj = Flapjack::Gateways::Jabber.new(:config => config, :logger => @logger)
24
23
 
25
24
  EventMachine::Synchrony.should_receive(:next_tick).exactly(4).times.and_yield
26
25
 
@@ -40,11 +39,12 @@ describe Flapjack::Gateways::Jabber do
40
39
  end
41
40
 
42
41
  it "joins a chat room after connecting" do
43
- fj = Flapjack::Gateways::Jabber.new
44
- Flapjack::RedisPool.should_receive(:new).twice
45
- fj.bootstrap(:config => config)
42
+ Flapjack::RedisPool.should_receive(:new)
46
43
 
44
+ fj = Flapjack::Gateways::Jabber.new(:config => config, :logger => @logger)
47
45
  fj.should_receive(:connected?).and_return(true)
46
+
47
+ EventMachine::Synchrony.should_receive(:next_tick).and_yield
48
48
  fj.should_receive(:write).with(an_instance_of(Blather::Stanza::Presence))
49
49
  fj.should_receive(:write).with(an_instance_of(Blather::Stanza::Message))
50
50
 
@@ -72,11 +72,10 @@ describe Flapjack::Gateways::Jabber do
72
72
  with('main-example.com:ping', :redis => redis).
73
73
  and_return(entity_check)
74
74
 
75
- fj = Flapjack::Gateways::Jabber.new
76
- Flapjack::RedisPool.should_receive(:new)
77
- fj.bootstrap(:config => config)
78
- fj.instance_variable_set('@redis_handler', redis)
75
+ Flapjack::RedisPool.should_receive(:new).and_return(redis)
76
+ fj = Flapjack::Gateways::Jabber.new(:config => config, :logger => @logger)
79
77
 
78
+ EventMachine::Synchrony.should_receive(:next_tick).and_yield
80
79
  fj.should_receive(:connected?).and_return(true)
81
80
  fj.should_receive(:write).with(an_instance_of(Blather::Stanza::Message))
82
81
 
@@ -89,10 +88,10 @@ describe Flapjack::Gateways::Jabber do
89
88
  from.should_receive(:stripped).and_return('sender')
90
89
  stanza.should_receive(:from).and_return(from)
91
90
 
92
- fj = Flapjack::Gateways::Jabber.new
93
91
  Flapjack::RedisPool.should_receive(:new)
94
- fj.bootstrap(:config => config)
92
+ fj = Flapjack::Gateways::Jabber.new(:config => config, :logger => @logger)
95
93
 
94
+ EventMachine::Synchrony.should_receive(:next_tick).and_yield
96
95
  fj.should_receive(:connected?).and_return(true)
97
96
  fj.should_receive(:write).with(an_instance_of(Blather::Stanza::Message))
98
97
 
@@ -100,12 +99,16 @@ describe Flapjack::Gateways::Jabber do
100
99
  end
101
100
 
102
101
  it "reconnects when disconnected (if not quitting)" do
103
- fj = Flapjack::Gateways::Jabber.new
104
102
  Flapjack::RedisPool.should_receive(:new)
105
- fj.bootstrap(:config => config)
103
+ fj = Flapjack::Gateways::Jabber.new(:config => config, :logger => @logger)
106
104
 
107
- EventMachine::Timer.should_receive(:new).with(1).and_yield
108
- fj.should_receive(:connect)
105
+ attempts = 0
106
+
107
+ EventMachine::Synchrony.should_receive(:sleep).with(2).exactly(3).times
108
+ fj.should_receive(:connect).exactly(4).times.and_return {
109
+ attempts +=1
110
+ raise StandardError.new unless attempts > 3
111
+ }
109
112
 
110
113
  ret = fj.on_disconnect(stanza)
111
114
  ret.should be_true
@@ -115,43 +118,43 @@ describe Flapjack::Gateways::Jabber do
115
118
  redis = mock('redis')
116
119
  redis.should_receive(:rpush).with('jabber_notifications', %q{{"notification_type":"shutdown"}})
117
120
 
118
- fj = Flapjack::Gateways::Jabber.new
119
- Flapjack::RedisPool.should_receive(:new)
120
- fj.bootstrap(:config => config)
121
+ Flapjack::RedisPool.should_receive(:new).and_return(redis)
122
+ fj = Flapjack::Gateways::Jabber.new(:config => config, :logger => @logger)
121
123
 
122
- fj.add_shutdown_event(:redis => redis)
124
+ fj.stop
123
125
  end
124
126
 
125
127
  it "runs a blocking loop listening for notifications" do
126
- timer_1 = mock('timer_1')
127
- timer_2 = mock('timer_2')
128
- timer_1.should_receive(:cancel)
129
- timer_2.should_receive(:cancel)
130
- EM::Synchrony.should_receive(:add_periodic_timer).with(30).and_return(timer_1)
131
- EM::Synchrony.should_receive(:add_periodic_timer).with(60).and_return(timer_2)
128
+ timer = mock('timer')
129
+ timer.should_receive(:cancel)
130
+ EM::Synchrony.should_receive(:add_periodic_timer).with(60).and_return(timer)
132
131
 
133
132
  redis = mock('redis')
134
- redis.should_receive(:empty!)
135
133
 
136
- fj = Flapjack::Gateways::Jabber.new
137
134
  Flapjack::RedisPool.should_receive(:new).and_return(redis)
138
- fj.bootstrap(:config => config)
135
+ fj = Flapjack::Gateways::Jabber.new(:config => config, :logger => @logger)
139
136
  fj.should_receive(:register_handler).exactly(4).times
140
137
 
141
138
  fj.should_receive(:connect)
142
139
  fj.should_receive(:connected?).exactly(3).times.and_return(true)
143
- fj.should_receive(:should_quit?).exactly(4).times.and_return(false, false, true)
144
- redis.should_receive(:blpop).twice.and_return(
145
- ["jabber_notifications", %q{{"notification_type":"problem","event_id":"main-example.com:ping","state":"critical","summary":"!!!"}}],
146
- ["jabber_notifications", %q{{"notification_type":"shutdown"}}]
147
- )
140
+
141
+ blpop_count = 0
142
+
143
+ redis.should_receive(:blpop).twice {
144
+ blpop_count += 1
145
+ if blpop_count == 1
146
+ ["jabber_notifications", %q{{"notification_type":"problem","event_id":"main-example.com:ping","state":"critical","summary":"!!!"}}]
147
+ else
148
+ fj.instance_variable_set('@should_quit', true)
149
+ ["jabber_notifications", %q{{"notification_type":"shutdown"}}]
150
+ end
151
+ }
148
152
 
149
153
  EventMachine::Synchrony.should_receive(:next_tick).twice.and_yield
150
154
  fj.should_receive(:write).with(an_instance_of(Blather::Stanza::Message))
151
155
  fj.should_receive(:close)
152
156
 
153
- fj.main
154
- fj.cleanup
157
+ fj.start
155
158
  end
156
159
 
157
160
  end
@@ -1,7 +1,7 @@
1
1
  require 'spec_helper'
2
2
  require 'flapjack/gateways/oobetet'
3
3
 
4
- describe Flapjack::Gateways::Oobetet do
4
+ describe Flapjack::Gateways::Oobetet, :logger => true do
5
5
 
6
6
  let(:config) { {'server' => 'example.com',
7
7
  'port' => '5222',
@@ -19,8 +19,7 @@ describe Flapjack::Gateways::Oobetet do
19
19
  it "raises an error if a required config setting is not set" do
20
20
  Socket.should_receive(:gethostname).and_return('thismachine')
21
21
 
22
- fo = Flapjack::Gateways::Oobetet.new
23
- fo.bootstrap(:config => config.delete('watched_check'))
22
+ fo = Flapjack::Gateways::Oobetet.new(:config => config.delete('watched_check'), :logger => @logger)
24
23
 
25
24
  lambda {
26
25
  fo.setup
@@ -28,8 +27,7 @@ describe Flapjack::Gateways::Oobetet do
28
27
  end
29
28
 
30
29
  it "hooks up event handlers to the appropriate methods" do
31
- fo = Flapjack::Gateways::Oobetet.new
32
- fo.bootstrap(:config => config)
30
+ fo = Flapjack::Gateways::Oobetet.new(:config => config, :logger => @logger)
33
31
 
34
32
  EventMachine::Synchrony.should_receive(:next_tick).exactly(3).times.and_yield
35
33
 
@@ -46,8 +44,7 @@ describe Flapjack::Gateways::Oobetet do
46
44
  end
47
45
 
48
46
  it "joins a chat room after connecting" do
49
- fo = Flapjack::Gateways::Oobetet.new
50
- fo.bootstrap(:config => config)
47
+ fo = Flapjack::Gateways::Oobetet.new(:config => config, :logger => @logger)
51
48
 
52
49
  fo.should_receive(:write).with(an_instance_of(Blather::Stanza::Presence))
53
50
  fo.should_receive(:write).with(an_instance_of(Blather::Stanza::Message))
@@ -56,8 +53,7 @@ describe Flapjack::Gateways::Oobetet do
56
53
  end
57
54
 
58
55
  it "reconnects when disconnected (if not quitting)" do
59
- fo = Flapjack::Gateways::Oobetet.new
60
- fo.bootstrap(:config => config)
56
+ fo = Flapjack::Gateways::Oobetet.new(:config => config, :logger => @logger)
61
57
 
62
58
  EventMachine::Timer.should_receive(:new).with(1).and_yield
63
59
  fo.should_receive(:connect)
@@ -67,9 +63,7 @@ describe Flapjack::Gateways::Oobetet do
67
63
  end
68
64
 
69
65
  it "records times of a problem status messages" do
70
- fo = Flapjack::Gateways::Oobetet.new
71
- fo.bootstrap(:config => config)
72
-
66
+ fo = Flapjack::Gateways::Oobetet.new(:config => config, :logger => @logger)
73
67
  fo.setup
74
68
 
75
69
  t = Time.now
@@ -85,9 +79,7 @@ describe Flapjack::Gateways::Oobetet do
85
79
  end
86
80
 
87
81
  it "records times of a recovery status messages" do
88
- fo = Flapjack::Gateways::Oobetet.new
89
- fo.bootstrap(:config => config)
90
-
82
+ fo = Flapjack::Gateways::Oobetet.new(:config => config, :logger => @logger)
91
83
  fo.setup
92
84
 
93
85
  t = Time.now
@@ -103,9 +95,7 @@ describe Flapjack::Gateways::Oobetet do
103
95
  end
104
96
 
105
97
  it "records times of an acknowledgement status messages" do
106
- fo = Flapjack::Gateways::Oobetet.new
107
- fo.bootstrap(:config => config)
108
-
98
+ fo = Flapjack::Gateways::Oobetet.new(:config => config, :logger => @logger)
109
99
  fo.setup
110
100
 
111
101
  t = Time.now
@@ -125,16 +115,16 @@ describe Flapjack::Gateways::Oobetet do
125
115
  timer.should_receive(:cancel)
126
116
  EM::Synchrony.should_receive(:add_periodic_timer).with(60).and_return(timer)
127
117
 
128
- fo = Flapjack::Gateways::Oobetet.new
129
- fo.bootstrap(:config => config)
118
+ fo = Flapjack::Gateways::Oobetet.new(:config => config, :logger => @logger)
130
119
  fo.should_receive(:register_handler).exactly(3).times
131
-
132
120
  fo.should_receive(:connect)
133
- fo.should_receive(:should_quit?).twice.and_return(false, true)
134
121
 
135
- EM::Synchrony.should_receive(:sleep).with(10)
122
+ EM::Synchrony.should_receive(:sleep).with(10) {
123
+ fo.instance_variable_set('@should_quit', true)
124
+ nil
125
+ }
136
126
 
137
- fo.main
127
+ fo.start
138
128
  end
139
129
 
140
130
  end
@@ -4,39 +4,40 @@ require 'yajl/json_gem'
4
4
 
5
5
  require 'flapjack/gateways/pagerduty'
6
6
 
7
- describe Flapjack::Gateways::Pagerduty, :redis => true do
7
+ describe Flapjack::Gateways::Pagerduty, :logger => true do
8
8
 
9
9
  let(:config) { {'queue' => 'pagerduty_notifications'} }
10
10
 
11
11
  let(:time) { Time.new }
12
12
 
13
+ let(:redis) { mock('redis') }
14
+
13
15
  it "prompts the blocking redis connection to quit" do
14
- redis = mock('redis')
15
16
  redis.should_receive(:rpush).with(config['queue'], %q{{"notification_type":"shutdown"}})
16
17
 
17
- fp = Flapjack::Gateways::Pagerduty.new
18
- Flapjack::RedisPool.should_receive(:new)
19
- fp.bootstrap(:config => config)
20
- fp.add_shutdown_event(:redis => redis)
18
+ Flapjack::RedisPool.should_receive(:new).and_return(redis)
19
+ fp = Flapjack::Gateways::Pagerduty.new(:config => config, :logger => @logger)
20
+ fp.stop
21
21
  end
22
22
 
23
23
  it "doesn't look for acknowledgements if this search is already running" do
24
- @redis.set(Flapjack::Gateways::Pagerduty::SEM_PAGERDUTY_ACKS_RUNNING, 'true')
25
-
26
- fp = Flapjack::Gateways::Pagerduty.new
27
- Flapjack::RedisPool.should_receive(:new)
28
- fp.bootstrap(:config => config)
29
- fp.instance_variable_set("@redis_timer", @redis)
24
+ redis.should_receive(:get).with('sem_pagerduty_acks_running').and_return('true')
25
+ Flapjack::RedisPool.should_receive(:new).and_return(redis)
26
+ fp = Flapjack::Gateways::Pagerduty.new(:config => config, :logger => @logger)
30
27
 
31
28
  fp.should_not_receive(:find_pagerduty_acknowledgements)
32
29
  fp.find_pagerduty_acknowledgements_if_safe
33
30
  end
34
31
 
35
32
  it "looks for acknowledgements if the search is not already running" do
36
- fp = Flapjack::Gateways::Pagerduty.new
37
- Flapjack::RedisPool.should_receive(:new)
38
- fp.bootstrap(:config => config)
39
- fp.instance_variable_set("@redis_timer", @redis)
33
+ redis.should_receive(:get).with('sem_pagerduty_acks_running').and_return(nil)
34
+ redis.should_receive(:set).with('sem_pagerduty_acks_running', 'true')
35
+ redis.should_receive(:expire).with('sem_pagerduty_acks_running', 300)
36
+
37
+ redis.should_receive(:del).with('sem_pagerduty_acks_running')
38
+
39
+ Flapjack::RedisPool.should_receive(:new).and_return(redis)
40
+ fp = Flapjack::Gateways::Pagerduty.new(:config => config, :logger => @logger)
40
41
 
41
42
  fp.should_receive(:find_pagerduty_acknowledgements)
42
43
  fp.find_pagerduty_acknowledgements_if_safe
@@ -71,11 +72,11 @@ describe Flapjack::Gateways::Pagerduty, :redis => true do
71
72
  with(:headers => {'Authorization'=>['flapjack', 'password123']}).
72
73
  to_return(:status => 200, :body => response.to_json, :headers => {})
73
74
 
74
- EM.synchrony do
75
- fp = Flapjack::Gateways::Pagerduty.new
76
- Flapjack::RedisPool.should_receive(:new)
77
- fp.bootstrap(:config => config)
75
+ Flapjack::RedisPool.should_receive(:new).and_return(redis)
76
+ fp = Flapjack::Gateways::Pagerduty.new(:config => config, :logger => @logger)
77
+
78
78
 
79
+ EM.synchrony do
79
80
  result = fp.send(:pagerduty_acknowledged?, 'subdomain' => 'flpjck', 'username' => 'flapjack',
80
81
  'password' => 'password123', 'check' => check)
81
82
 
@@ -86,12 +87,12 @@ describe Flapjack::Gateways::Pagerduty, :redis => true do
86
87
  result[:pg_acknowledged_by]['id'].should == 'ABCDEFG'
87
88
  EM.stop
88
89
  end
90
+
89
91
  end
90
92
 
91
93
  it "creates acknowledgements when pagerduty acknowledgements are found" do
92
- fp = Flapjack::Gateways::Pagerduty.new
93
- Flapjack::RedisPool.should_receive(:new)
94
- fp.bootstrap(:config => config)
94
+ Flapjack::RedisPool.should_receive(:new).and_return(redis)
95
+ fp = Flapjack::Gateways::Pagerduty.new(:config => config, :logger => @logger)
95
96
 
96
97
  contact = mock('contact')
97
98
  contact.should_receive(:pagerduty_credentials).and_return({
@@ -119,25 +120,27 @@ describe Flapjack::Gateways::Pagerduty, :redis => true do
119
120
  timer.should_receive(:cancel)
120
121
  EM::Synchrony.should_receive(:add_periodic_timer).with(10).and_return(timer)
121
122
 
122
- redis = mock('redis')
123
123
  redis.should_receive(:del).with('sem_pagerduty_acks_running')
124
- redis.should_receive(:empty!)
125
124
 
126
- fp = Flapjack::Gateways::Pagerduty.new
127
125
  Flapjack::RedisPool.should_receive(:new).and_return(redis)
128
- fp.bootstrap(:config => config)
126
+ fp = Flapjack::Gateways::Pagerduty.new(:config => config, :logger => @logger)
127
+
128
+ blpop_count = 0
129
129
 
130
- fp.should_receive(:should_quit?).exactly(3).times.and_return(false, false, true)
131
- redis.should_receive(:blpop).twice.and_return(
132
- ["pagerduty_notifications", %q{{"notification_type":"problem","event_id":"main-example.com:ping","state":"critical","summary":"!!!"}}],
133
- ["pagerduty_notifications", %q{{"notification_type":"shutdown"}}]
134
- )
130
+ redis.should_receive(:blpop).twice {
131
+ blpop_count += 1
132
+ if blpop_count == 1
133
+ ["pagerduty_notifications", %q{{"notification_type":"problem","event_id":"main-example.com:ping","state":"critical","summary":"!!!"}}]
134
+ else
135
+ fp.instance_variable_set('@should_quit', true)
136
+ ["pagerduty_notifications", %q{{"notification_type":"shutdown"}}]
137
+ end
138
+ }
135
139
 
136
140
  fp.should_receive(:test_pagerduty_connection).and_return(true)
137
141
  fp.should_receive(:send_pagerduty_event)
138
142
 
139
- fp.main
140
- fp.cleanup
143
+ fp.start
141
144
  end
142
145
 
143
146
  it "tests the pagerduty connection" do
@@ -150,14 +153,12 @@ describe Flapjack::Gateways::Pagerduty, :redis => true do
150
153
  stub_request(:post, "https://events.pagerduty.com/generic/2010-04-15/create_event.json").
151
154
  with(:body => body).to_return(:status => 200, :body => '{"status":"success"}', :headers => {})
152
155
 
153
- EM.synchrony do
154
- fp = Flapjack::Gateways::Pagerduty.new
155
- Flapjack::RedisPool.should_receive(:new)
156
- fp.bootstrap(:config => config)
156
+ Flapjack::RedisPool.should_receive(:new).and_return(redis)
157
+ fp = Flapjack::Gateways::Pagerduty.new(:config => config, :logger => @logger)
157
158
 
159
+ EM.synchrony do
158
160
  ret = fp.send(:test_pagerduty_connection)
159
161
  ret.should be_true
160
-
161
162
  EM.stop
162
163
  end
163
164
  end
@@ -172,16 +173,13 @@ describe Flapjack::Gateways::Pagerduty, :redis => true do
172
173
  stub_request(:post, "https://events.pagerduty.com/generic/2010-04-15/create_event.json").
173
174
  with(:body => body).to_return(:status => 200, :body => "", :headers => {})
174
175
 
175
- EM.synchrony do
176
-
177
- fp = Flapjack::Gateways::Pagerduty.new
178
- Flapjack::RedisPool.should_receive(:new)
179
- fp.bootstrap(:config => config)
176
+ Flapjack::RedisPool.should_receive(:new).and_return(redis)
177
+ fp = Flapjack::Gateways::Pagerduty.new(:config => config, :logger => @logger)
180
178
 
179
+ EM.synchrony do
181
180
  ret = fp.send(:send_pagerduty_event, evt)
182
181
  ret.should_not be_nil
183
182
  ret.should == [200, nil]
184
-
185
183
  EM.stop
186
184
  end
187
185
  end