flapjack 0.7.20 → 0.7.21
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.
- data/.gitignore +1 -0
- data/.travis.yml +3 -1
- data/CHANGELOG.md +10 -0
- data/Gemfile +1 -0
- data/bin/flapjack +11 -0
- data/bin/simulate-failed-check +5 -5
- data/features/notification_rules.feature +77 -19
- data/features/steps/events_steps.rb +15 -3
- data/lib/flapjack/coordinator.rb +3 -3
- data/lib/flapjack/data/contact.rb +1 -1
- data/lib/flapjack/data/entity.rb +12 -1
- data/lib/flapjack/data/entity_check.rb +9 -2
- data/lib/flapjack/data/event.rb +4 -4
- data/lib/flapjack/data/notification.rb +27 -20
- data/lib/flapjack/data/notification_rule.rb +26 -24
- data/lib/flapjack/data/tag.rb +5 -0
- data/lib/flapjack/gateways/api.rb +1 -1
- data/lib/flapjack/gateways/api/contact_methods.rb +3 -3
- data/lib/flapjack/gateways/email.rb +73 -46
- data/lib/flapjack/gateways/email/alert.html.erb +13 -4
- data/lib/flapjack/gateways/email/alert.text.erb +2 -2
- data/lib/flapjack/gateways/jabber.rb +22 -16
- data/lib/flapjack/gateways/pagerduty.rb +7 -3
- data/lib/flapjack/gateways/web.rb +1 -1
- data/lib/flapjack/gateways/web/views/check.html.erb +2 -2
- data/lib/flapjack/gateways/web/views/contact.html.erb +3 -3
- data/lib/flapjack/logger.rb +67 -35
- data/lib/flapjack/notifier.rb +9 -3
- data/lib/flapjack/pikelet.rb +3 -1
- data/lib/flapjack/processor.rb +34 -10
- data/lib/flapjack/version.rb +1 -1
- data/spec/lib/flapjack/coordinator_spec.rb +17 -13
- data/spec/lib/flapjack/data/contact_spec.rb +4 -3
- data/spec/lib/flapjack/data/entity_check_spec.rb +10 -0
- data/spec/lib/flapjack/data/entity_spec.rb +60 -5
- data/spec/lib/flapjack/data/event_spec.rb +4 -4
- data/spec/lib/flapjack/data/notification_rule_spec.rb +9 -2
- data/spec/lib/flapjack/data/tag_spec.rb +0 -1
- data/spec/lib/flapjack/gateways/api/contact_methods_spec.rb +1 -1
- data/spec/lib/flapjack/gateways/email_spec.rb +2 -1
- data/spec/lib/flapjack/gateways/jabber_spec.rb +5 -3
- data/spec/lib/flapjack/gateways/pagerduty_spec.rb +3 -1
- data/spec/lib/flapjack/logger_spec.rb +5 -5
- data/spec/lib/flapjack/pikelet_spec.rb +4 -2
- data/spec/lib/flapjack/processor_spec.rb +16 -7
- data/tasks/benchmarks.rake +228 -0
- data/tasks/events.rake +11 -10
- data/tasks/support/flapjack_config_benchmark.yaml +58 -0
- metadata +6 -4
@@ -180,7 +180,7 @@
|
|
180
180
|
</tr>
|
181
181
|
<% @contacts.sort_by {|c| [c.first_name, c.last_name] }.each do |contact| %>
|
182
182
|
<tr>
|
183
|
-
<td><a href="/contacts
|
183
|
+
<td><a href="/contacts/<%= contact.id %>" title="contact details"><%= h contact.name %></a></td>
|
184
184
|
<td>
|
185
185
|
<% if contact.media && !contact.media.empty? %>
|
186
186
|
<p><%= h contact.media.keys.collect(&:capitalize).join(", ") %></p>
|
@@ -201,4 +201,4 @@
|
|
201
201
|
<%= foot %>
|
202
202
|
</div>
|
203
203
|
</body>
|
204
|
-
</html>
|
204
|
+
</html>
|
@@ -86,7 +86,7 @@
|
|
86
86
|
<tr>
|
87
87
|
<th>ID</th>
|
88
88
|
<th>Entities</th>
|
89
|
-
<th>
|
89
|
+
<th>Tags</th>
|
90
90
|
<th>Warning Media</th>
|
91
91
|
<th>Critical Media</th>
|
92
92
|
<th>Time Restrictions</th>
|
@@ -95,7 +95,7 @@
|
|
95
95
|
<tr>
|
96
96
|
<td><%= h rule.id %></td>
|
97
97
|
<td><%= h( (rule.entities && !rule.entities.empty?) ? rule.entities.join(', ') : '-') %></td>
|
98
|
-
<td><%= h( (rule.
|
98
|
+
<td><%= h( (rule.tags && !rule.tags.empty?) ? rule.tags.to_a.join(', ') : '-') %></td>
|
99
99
|
<td><%= h( (rule.warning_media && !rule.warning_media.empty?) ? rule.warning_media.join(', ') : '-')%></td>
|
100
100
|
<td><%= h( (rule.critical_media && !rule.critical_media.empty?) ? rule.critical_media.join(', ') : '-') %></td>
|
101
101
|
<td><%= h(rule.time_restrictions) %></td>
|
@@ -111,4 +111,4 @@
|
|
111
111
|
<%= foot %>
|
112
112
|
</div>
|
113
113
|
</body>
|
114
|
-
</html>
|
114
|
+
</html>
|
data/lib/flapjack/logger.rb
CHANGED
@@ -1,13 +1,12 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
3
|
require 'logger'
|
4
|
+
require 'syslog'
|
4
5
|
|
5
6
|
begin
|
6
7
|
# Ruby 2.0+
|
7
8
|
require 'syslog/logger'
|
8
9
|
rescue LoadError
|
9
|
-
# Ruby 1.9
|
10
|
-
require 'syslog'
|
11
10
|
end
|
12
11
|
|
13
12
|
module Flapjack
|
@@ -16,14 +15,14 @@ module Flapjack
|
|
16
15
|
|
17
16
|
LEVELS = [:debug, :info, :warn, :error, :fatal]
|
18
17
|
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
18
|
+
SEVERITY_LABELS = %w(DEBUG INFO WARN ERROR FATAL)
|
19
|
+
|
20
|
+
SYSLOG_LEVELS = [::Syslog::Constants::LOG_DEBUG,
|
21
|
+
::Syslog::Constants::LOG_INFO,
|
22
|
+
::Syslog::Constants::LOG_WARNING,
|
23
|
+
::Syslog::Constants::LOG_ERR,
|
24
|
+
::Syslog::Constants::LOG_CRIT
|
25
|
+
]
|
27
26
|
|
28
27
|
def initialize(name, config = {})
|
29
28
|
config ||= {}
|
@@ -31,7 +30,14 @@ module Flapjack
|
|
31
30
|
@name = name
|
32
31
|
|
33
32
|
@formatter = proc do |severity, datetime, progname, msg|
|
34
|
-
|
33
|
+
t = datetime.iso8601
|
34
|
+
"#{t} [#{severity}] :: #{name} :: #{msg}\n"
|
35
|
+
end
|
36
|
+
|
37
|
+
@syslog_formatter = proc do |severity, datetime, progname, msg|
|
38
|
+
t = datetime.iso8601
|
39
|
+
l = SEVERITY_LABELS[severity]
|
40
|
+
"#{t} [#{l}] :: #{name} :: #{msg}\n"
|
35
41
|
end
|
36
42
|
|
37
43
|
@logger = ::Logger.new(STDOUT)
|
@@ -40,19 +46,15 @@ module Flapjack
|
|
40
46
|
if Syslog.const_defined?('Logger', false)
|
41
47
|
# Ruby 2.0+
|
42
48
|
@sys_logger = Syslog.const_get('Logger', false).new('flapjack')
|
43
|
-
@sys_logger.formatter = @
|
44
|
-
else
|
45
|
-
# Ruby 1.9
|
46
|
-
@syslog = Syslog.opened? ? Syslog :
|
47
|
-
Syslog.open('flapjack',
|
48
|
-
(Syslog::Constants::LOG_PID | Syslog::Constants::LOG_CONS),
|
49
|
-
Syslog::Constants::LOG_USER)
|
49
|
+
@sys_logger.formatter = @syslog_formatter
|
50
50
|
end
|
51
51
|
|
52
52
|
configure(config)
|
53
53
|
end
|
54
54
|
|
55
55
|
def configure(config)
|
56
|
+
raise "Cannot configure closed logger" if @logger.nil?
|
57
|
+
|
56
58
|
level = config['level']
|
57
59
|
|
58
60
|
# we'll let Logger spit the dummy on invalid level values -- but will
|
@@ -63,7 +65,7 @@ module Flapjack
|
|
63
65
|
|
64
66
|
err = nil
|
65
67
|
|
66
|
-
|
68
|
+
@level = begin
|
67
69
|
::Logger.const_get(level.upcase)
|
68
70
|
rescue NameError
|
69
71
|
err = "Unknown Logger severity level '#{level.upcase}', using INFO..."
|
@@ -72,32 +74,62 @@ module Flapjack
|
|
72
74
|
|
73
75
|
@logger.error(err) if err
|
74
76
|
|
75
|
-
@logger.level =
|
77
|
+
@logger.level = @level
|
76
78
|
if @sys_logger
|
77
|
-
@sys_logger.level =
|
78
|
-
elsif @syslog
|
79
|
-
Syslog.mask = Syslog::LOG_UPTO(SYSLOG_LEVELS_MAP[level.downcase.to_sym])
|
79
|
+
@sys_logger.level = @level
|
80
80
|
end
|
81
|
+
end
|
81
82
|
|
83
|
+
def close
|
84
|
+
raise "Already closed" if @logger.nil?
|
85
|
+
@logger.close
|
86
|
+
@logger = nil
|
87
|
+
if @sys_logger
|
88
|
+
@sys_logger.close
|
89
|
+
@sys_logger = nil
|
90
|
+
end
|
82
91
|
end
|
83
92
|
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
93
|
+
def add(severity, message = nil, progname = nil, &block)
|
94
|
+
raise "Cannot log with a closed logger" if @logger.nil?
|
95
|
+
@logger.add(severity, message, progname, &block)
|
96
|
+
return if severity < @level
|
97
|
+
|
98
|
+
progname ||= 'flapjack'
|
99
|
+
if message.nil?
|
100
|
+
if block_given?
|
101
|
+
message = yield
|
102
|
+
else
|
103
|
+
message = progname
|
104
|
+
progname = 'flapjack'
|
95
105
|
end
|
106
|
+
end
|
107
|
+
|
108
|
+
if @sys_logger
|
109
|
+
@sys_logger.add(severity, message, progname, &block)
|
110
|
+
else
|
111
|
+
level = SYSLOG_LEVELS[severity]
|
112
|
+
t = Time.now.iso8601
|
113
|
+
l = SEVERITY_LABELS[severity]
|
114
|
+
begin
|
115
|
+
Syslog.open('flapjack', (Syslog::Constants::LOG_PID | Syslog::Constants::LOG_CONS),
|
116
|
+
Syslog::Constants::LOG_USER)
|
117
|
+
Syslog.mask = Syslog::LOG_UPTO(level)
|
118
|
+
Syslog.log(level, "#{t} [#{l}] :: #{@name} :: %s", message)
|
119
|
+
ensure
|
120
|
+
Syslog.close
|
121
|
+
end
|
122
|
+
end
|
123
|
+
end
|
124
|
+
|
125
|
+
LEVELS.each do |level|
|
126
|
+
define_method(level) {|progname, &block|
|
127
|
+
add(::Logger.const_get(level.upcase), nil, progname, &block)
|
96
128
|
}
|
97
129
|
end
|
98
130
|
|
99
131
|
def respond_to?(sym)
|
100
|
-
(LEVELS + [:configure]).include?(sym)
|
132
|
+
(LEVELS + [:configure, :close, :add]).include?(sym)
|
101
133
|
end
|
102
134
|
|
103
135
|
end
|
data/lib/flapjack/notifier.rb
CHANGED
@@ -2,6 +2,8 @@
|
|
2
2
|
|
3
3
|
require 'active_support/time'
|
4
4
|
|
5
|
+
require 'em-hiredis'
|
6
|
+
|
5
7
|
require 'oj'
|
6
8
|
|
7
9
|
require 'flapjack/data/contact'
|
@@ -22,9 +24,9 @@ module Flapjack
|
|
22
24
|
|
23
25
|
def initialize(opts = {})
|
24
26
|
@config = opts[:config]
|
25
|
-
@redis_config = opts[:redis_config]
|
27
|
+
@redis_config = opts[:redis_config] || {}
|
26
28
|
@logger = opts[:logger]
|
27
|
-
@redis = Flapjack::RedisPool.new(:config => @redis_config, :size => 2)
|
29
|
+
@redis = Flapjack::RedisPool.new(:config => @redis_config, :size => 2)
|
28
30
|
|
29
31
|
@notifications_queue = @config['queue'] || 'notifications'
|
30
32
|
|
@@ -73,7 +75,11 @@ module Flapjack
|
|
73
75
|
# from a different fiber while the main one is blocking.
|
74
76
|
def stop
|
75
77
|
@should_quit = true
|
76
|
-
|
78
|
+
|
79
|
+
redis_uri = @redis_config[:path] ||
|
80
|
+
"redis://#{@redis_config[:host] || '127.0.0.1'}:#{@redis_config[:port] || '6379'}/#{@redis_config[:db] || '0'}"
|
81
|
+
shutdown_redis = EM::Hiredis.connect(redis_uri)
|
82
|
+
shutdown_redis.rpush(@notifications_queue, Oj.dump('type' => 'shutdown'))
|
77
83
|
end
|
78
84
|
|
79
85
|
private
|
data/lib/flapjack/pikelet.rb
CHANGED
@@ -73,6 +73,7 @@ module Flapjack
|
|
73
73
|
@config = opts[:config] || {}
|
74
74
|
@redis_config = opts[:redis_config] || {}
|
75
75
|
@boot_time = opts[:boot_time]
|
76
|
+
@coordinator = opts[:coordinator]
|
76
77
|
|
77
78
|
@logger = Flapjack::Logger.new("flapjack-#{type}", @config['logger'])
|
78
79
|
|
@@ -104,7 +105,8 @@ module Flapjack
|
|
104
105
|
def self.create(type, opts = {})
|
105
106
|
self.new(type, PIKELET_TYPES[type], :config => opts[:config],
|
106
107
|
:redis_config => opts[:redis_config],
|
107
|
-
:boot_time => opts[:boot_time]
|
108
|
+
:boot_time => opts[:boot_time],
|
109
|
+
:coordinator => opts[:coordinator])
|
108
110
|
end
|
109
111
|
|
110
112
|
def initialize(type, pikelet_klass, opts = {})
|
data/lib/flapjack/processor.rb
CHANGED
@@ -2,6 +2,8 @@
|
|
2
2
|
|
3
3
|
require 'chronic_duration'
|
4
4
|
|
5
|
+
require 'em-hiredis'
|
6
|
+
|
5
7
|
require 'flapjack/filters/acknowledgement'
|
6
8
|
require 'flapjack/filters/ok'
|
7
9
|
require 'flapjack/filters/scheduled_maintenance'
|
@@ -22,9 +24,11 @@ module Flapjack
|
|
22
24
|
|
23
25
|
def initialize(opts = {})
|
24
26
|
@config = opts[:config]
|
25
|
-
@redis_config = opts[:redis_config]
|
27
|
+
@redis_config = opts[:redis_config] || {}
|
26
28
|
@logger = opts[:logger]
|
27
|
-
@
|
29
|
+
@coordinator = opts[:coordinator]
|
30
|
+
|
31
|
+
@redis = Flapjack::RedisPool.new(:config => @redis_config, :size => 2)
|
28
32
|
|
29
33
|
@queue = @config['queue'] || 'events'
|
30
34
|
|
@@ -36,6 +40,8 @@ module Flapjack
|
|
36
40
|
ncsm_duration_conf = @config['new_check_scheduled_maintenance_duration'] || '100 years'
|
37
41
|
@ncsm_duration = ChronicDuration.parse(ncsm_duration_conf)
|
38
42
|
|
43
|
+
@exit_on_queue_empty = !! @config['exit_on_queue_empty']
|
44
|
+
|
39
45
|
options = { :logger => opts[:logger], :redis => @redis }
|
40
46
|
@filters = []
|
41
47
|
@filters << Flapjack::Filters::Ok.new(options)
|
@@ -94,7 +100,18 @@ module Flapjack
|
|
94
100
|
:redis => @redis,
|
95
101
|
:archive_events => @archive_events,
|
96
102
|
:events_archive_maxage => @events_archive_maxage,
|
97
|
-
:logger => @logger
|
103
|
+
:logger => @logger,
|
104
|
+
:block => ! @exit_on_queue_empty )
|
105
|
+
if @exit_on_queue_empty && event.nil? && Flapjack::Data::Event.pending_count(@queue, :redis => @redis)
|
106
|
+
# SHUT IT ALL DOWN!!!
|
107
|
+
@logger.warn "Shutting down as exit_on_queue_empty is true, and the queue is empty"
|
108
|
+
@should_quit = true
|
109
|
+
@coordinator.stop
|
110
|
+
# FIXME: seems the above call doesn't block until the remove_pikelets fiber exits...
|
111
|
+
EM::Synchrony.sleep(1)
|
112
|
+
exit
|
113
|
+
end
|
114
|
+
|
98
115
|
process_event(event) unless event.nil?
|
99
116
|
end
|
100
117
|
|
@@ -104,20 +121,25 @@ module Flapjack
|
|
104
121
|
# this must use a separate connection to the main Executive one, as it's running
|
105
122
|
# from a different fiber while the main one is blocking.
|
106
123
|
def stop
|
107
|
-
@should_quit
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
124
|
+
unless @should_quit
|
125
|
+
@should_quit = true
|
126
|
+
redis_uri = @redis_config[:path] ||
|
127
|
+
"redis://#{@redis_config[:host] || '127.0.0.1'}:#{@redis_config[:port] || '6379'}/#{@redis_config[:db] || '0'}"
|
128
|
+
shutdown_redis = EM::Hiredis.connect(redis_uri)
|
129
|
+
shutdown_redis.rpush('events', Oj.dump('type' => 'noop'))
|
130
|
+
end
|
112
131
|
end
|
113
132
|
|
114
133
|
private
|
115
134
|
|
116
135
|
def process_event(event)
|
117
|
-
pending = Flapjack::Data::Event.pending_count(:redis => @redis)
|
136
|
+
pending = Flapjack::Data::Event.pending_count(@queue, :redis => @redis)
|
118
137
|
@logger.debug("#{pending} events waiting on the queue")
|
119
138
|
@logger.debug("Raw event received: #{event.inspect}")
|
120
|
-
|
139
|
+
|
140
|
+
if ('noop' == event.type)
|
141
|
+
return
|
142
|
+
end
|
121
143
|
|
122
144
|
event_str = "#{event.id}, #{event.type}, #{event.state}, #{event.summary}"
|
123
145
|
event_str << ", #{Time.at(event.time).to_s}" if event.time
|
@@ -126,6 +148,8 @@ module Flapjack
|
|
126
148
|
entity_check = Flapjack::Data::EntityCheck.for_event_id(event.id, :redis => @redis)
|
127
149
|
timestamp = Time.now.to_i
|
128
150
|
|
151
|
+
event.tags = (event.tags || Flapjack::Data::TagSet.new) + entity_check.tags
|
152
|
+
|
129
153
|
should_notify = update_keys(event, entity_check, timestamp)
|
130
154
|
|
131
155
|
if !should_notify
|
data/lib/flapjack/version.rb
CHANGED
@@ -7,9 +7,9 @@ describe Flapjack::Coordinator do
|
|
7
7
|
let(:fiber) { mock(Fiber) }
|
8
8
|
let(:config) { mock(Flapjack::Configuration) }
|
9
9
|
|
10
|
-
let(:logger)
|
10
|
+
let(:logger) { mock(Flapjack::Logger) }
|
11
11
|
|
12
|
-
let!(:time)
|
12
|
+
let!(:time) { Time.now }
|
13
13
|
|
14
14
|
it "starts and stops a pikelet" do
|
15
15
|
Flapjack::Logger.should_receive(:new).and_return(logger)
|
@@ -29,7 +29,7 @@ describe Flapjack::Coordinator do
|
|
29
29
|
|
30
30
|
fc = Flapjack::Coordinator.new(config)
|
31
31
|
Flapjack::Pikelet.should_receive(:create).with('processor',
|
32
|
-
:config => cfg['processor'], :redis_config => {}, :boot_time => time).
|
32
|
+
:config => cfg['processor'], :redis_config => {}, :boot_time => time, :coordinator => fc).
|
33
33
|
and_return(processor)
|
34
34
|
|
35
35
|
fiber.should_receive(:resume)
|
@@ -63,7 +63,7 @@ describe Flapjack::Coordinator do
|
|
63
63
|
|
64
64
|
fc = Flapjack::Coordinator.new(config)
|
65
65
|
Flapjack::Pikelet.should_receive(:create).with('processor',
|
66
|
-
:config => cfg['processor'], :redis_config => {}, :boot_time => time)
|
66
|
+
:config => cfg['processor'], :redis_config => {}, :boot_time => time, :coordinator => fc)
|
67
67
|
.and_return(processor)
|
68
68
|
|
69
69
|
fiber.should_receive(:resume)
|
@@ -100,10 +100,10 @@ describe Flapjack::Coordinator do
|
|
100
100
|
|
101
101
|
fc = Flapjack::Coordinator.new(config)
|
102
102
|
Flapjack::Pikelet.should_receive(:create).with('processor',
|
103
|
-
:config => cfg['executive'], :redis_config => {}, :boot_time => time).
|
103
|
+
:config => cfg['executive'], :redis_config => {}, :boot_time => time, :coordinator => fc).
|
104
104
|
and_return(processor)
|
105
105
|
Flapjack::Pikelet.should_receive(:create).with('notifier',
|
106
|
-
:config => cfg['executive'], :redis_config => {}, :boot_time => time).
|
106
|
+
:config => cfg['executive'], :redis_config => {}, :boot_time => time, :coordinator => fc).
|
107
107
|
and_return(notifier)
|
108
108
|
|
109
109
|
fiber.should_receive(:resume)
|
@@ -138,7 +138,7 @@ describe Flapjack::Coordinator do
|
|
138
138
|
fc = Flapjack::Coordinator.new(config)
|
139
139
|
Flapjack::Pikelet.should_receive(:create).with('processor',
|
140
140
|
:config => cfg['executive'].merge(cfg['processor']),
|
141
|
-
:redis_config => {}, :boot_time => time).
|
141
|
+
:redis_config => {}, :boot_time => time, :coordinator => fc).
|
142
142
|
and_return(processor)
|
143
143
|
|
144
144
|
fiber.should_receive(:resume)
|
@@ -210,22 +210,25 @@ describe Flapjack::Coordinator do
|
|
210
210
|
processor.should_receive(:update_status)
|
211
211
|
processor.should_receive(:status).exactly(3).times.and_return('stopped')
|
212
212
|
|
213
|
+
config.should_receive(:for_redis).and_return({})
|
214
|
+
fc = Flapjack::Coordinator.new(config)
|
215
|
+
|
213
216
|
jabber = mock('jabber')
|
214
217
|
Flapjack::Pikelet.should_receive(:create).
|
215
218
|
with('jabber', :config => {"enabled" => true}, :redis_config => {},
|
216
|
-
:boot_time => time).
|
219
|
+
:boot_time => time, :coordinator => fc).
|
217
220
|
and_return(jabber)
|
218
221
|
jabber.should_receive(:start)
|
219
222
|
|
220
223
|
fiber.should_receive(:resume)
|
221
224
|
Fiber.should_receive(:new).and_yield.and_return(fiber)
|
222
225
|
|
223
|
-
config.should_receive(:for_redis).and_return({})
|
224
|
-
fc = Flapjack::Coordinator.new(config)
|
225
226
|
fc.instance_variable_set('@boot_time', time)
|
226
227
|
fc.instance_variable_set('@pikelets', [processor])
|
227
228
|
fc.reload
|
228
229
|
fc.instance_variable_get('@pikelets').should == [jabber]
|
230
|
+
|
231
|
+
|
229
232
|
end
|
230
233
|
|
231
234
|
it "reloads a pikelet config without restarting it" do
|
@@ -287,13 +290,14 @@ describe Flapjack::Coordinator do
|
|
287
290
|
new_exec = mock('new_executive')
|
288
291
|
new_exec.should_receive(:start)
|
289
292
|
|
293
|
+
config.should_receive(:for_redis).and_return({})
|
294
|
+
fc = Flapjack::Coordinator.new(config)
|
295
|
+
|
290
296
|
Flapjack::Pikelet.should_receive(:create).
|
291
297
|
with('processor', :config => new_cfg['processor'], :redis_config => {},
|
292
|
-
:boot_time => time).
|
298
|
+
:boot_time => time, :coordinator => fc).
|
293
299
|
and_return(new_exec)
|
294
300
|
|
295
|
-
config.should_receive(:for_redis).and_return({})
|
296
|
-
fc = Flapjack::Coordinator.new(config)
|
297
301
|
fc.instance_variable_set('@boot_time', time)
|
298
302
|
fc.instance_variable_set('@pikelets', [processor])
|
299
303
|
fc.reload
|