flapjack 0.7.14 → 0.7.15

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 (49) hide show
  1. data/CHANGELOG.md +10 -0
  2. data/etc/flapjack_config.yaml.example +1 -0
  3. data/features/events.feature +5 -0
  4. data/features/notification_rules.feature +1 -1
  5. data/features/steps/events_steps.rb +28 -13
  6. data/features/steps/notifications_steps.rb +1 -1
  7. data/lib/flapjack/coordinator.rb +3 -1
  8. data/lib/flapjack/data/contact.rb +8 -6
  9. data/lib/flapjack/data/entity_check.rb +78 -113
  10. data/lib/flapjack/data/event.rb +54 -65
  11. data/lib/flapjack/data/notification.rb +5 -1
  12. data/lib/flapjack/executive.rb +42 -38
  13. data/lib/flapjack/filters/acknowledgement.rb +5 -5
  14. data/lib/flapjack/filters/base.rb +2 -2
  15. data/lib/flapjack/filters/delays.rb +11 -11
  16. data/lib/flapjack/filters/detect_mass_client_failures.rb +8 -8
  17. data/lib/flapjack/filters/ok.rb +6 -6
  18. data/lib/flapjack/filters/scheduled_maintenance.rb +2 -2
  19. data/lib/flapjack/filters/unscheduled_maintenance.rb +3 -2
  20. data/lib/flapjack/gateways/api.rb +374 -277
  21. data/lib/flapjack/gateways/api/entity_check_presenter.rb +52 -21
  22. data/lib/flapjack/gateways/api/entity_presenter.rb +14 -9
  23. data/lib/flapjack/gateways/email.rb +7 -0
  24. data/lib/flapjack/gateways/email/alert.html.haml +13 -1
  25. data/lib/flapjack/gateways/email/alert.text.erb +5 -4
  26. data/lib/flapjack/gateways/jabber.rb +90 -34
  27. data/lib/flapjack/gateways/pagerduty.rb +6 -2
  28. data/lib/flapjack/gateways/web.rb +13 -8
  29. data/lib/flapjack/gateways/web/views/check.haml +70 -45
  30. data/lib/flapjack/gateways/web/views/checks.haml +1 -1
  31. data/lib/flapjack/gateways/web/views/entity.haml +1 -1
  32. data/lib/flapjack/patches.rb +9 -2
  33. data/lib/flapjack/pikelet.rb +14 -10
  34. data/lib/flapjack/utility.rb +10 -4
  35. data/lib/flapjack/version.rb +1 -1
  36. data/spec/lib/flapjack/coordinator_spec.rb +19 -5
  37. data/spec/lib/flapjack/data/entity_check_spec.rb +3 -30
  38. data/spec/lib/flapjack/data/event_spec.rb +96 -1
  39. data/spec/lib/flapjack/executive_spec.rb +5 -11
  40. data/spec/lib/flapjack/gateways/api/entity_check_presenter_spec.rb +22 -3
  41. data/spec/lib/flapjack/gateways/api/entity_presenter_spec.rb +30 -15
  42. data/spec/lib/flapjack/gateways/api_spec.rb +552 -186
  43. data/spec/lib/flapjack/gateways/email_spec.rb +2 -0
  44. data/spec/lib/flapjack/gateways/jabber_spec.rb +5 -4
  45. data/spec/lib/flapjack/gateways/pagerduty_spec.rb +3 -2
  46. data/spec/lib/flapjack/gateways/web_spec.rb +17 -12
  47. data/spec/lib/flapjack/pikelet_spec.rb +5 -2
  48. metadata +4 -5
  49. data/config.ru +0 -11
@@ -14,10 +14,10 @@
14
14
  = nav
15
15
  %h2 #{@check} on #{@entity}
16
16
  %h3 State: #{@check_state ? @check_state.upcase : ''}
17
- - if (['warning', 'critical', 'unknown'].include?(@check_state) and !(@current_unscheduled_maintenance || @current_scheduled_maintenance))
17
+ - if (['warning', 'critical', 'unknown'].include?(@check_state) and !@current_scheduled_maintenance)
18
18
  %form{:action => "/acknowledgements/#{check_path_escaped}", :method => "post", :class => "form-inline"}
19
19
  %input{:type => 'hidden', :name => 'acknowledgement_id', :value => "#{@acknowledgement_id}"}
20
- %input{:type => 'submit', :value => 'Acknowledge', :class => 'button'}
20
+ %input{:type => 'submit', :value => @current_unscheduled_maintenance ? 'Replace acknowledgment' : 'Acknowledge', :class => 'button'}
21
21
  with
22
22
  %label{:for => 'summary'}
23
23
  summary:
@@ -25,14 +25,23 @@
25
25
  %label{:for => 'duration'}
26
26
  duration:
27
27
  %input{:type => 'text', :name => 'duration', :value => ''}
28
- eg "5 hours"
28
+ e.g. "5 hours"
29
+ - current_time = (@current_unscheduled_maintenance || @current_scheduled_maintenance) ? Time.now : nil
29
30
  - if @current_unscheduled_maintenance
30
31
  %h3 (Acknowledged - #{@current_unscheduled_maintenance[:summary]})
32
+ - start = Time.at(@current_unscheduled_maintenance[:start_time])
33
+ - finish = Time.at(@current_unscheduled_maintenance[:start_time] + @current_unscheduled_maintenance[:duration])
34
+ - remain = time_period_in_words( (finish - current_time).ceil )
35
+ %p #{start} -> #{finish} (#{remain} remaining)
31
36
  %form{:action => "/end_unscheduled_maintenance/#{check_path_escaped}", :method => "post"}
32
37
  %p
33
38
  %input{:type => 'submit', :value => 'End Unscheduled Maintenance (Unacknowledge)', :class => 'button'}
34
39
  - if @current_scheduled_maintenance
35
40
  %h4 (Scheduled Maintenance - #{@current_scheduled_maintenance[:summary]})
41
+ - start = Time.at(@current_scheduled_maintenance[:start_time])
42
+ - finish = Time.at(@current_scheduled_maintenance[:start_time] + @current_scheduled_maintenance[:duration])
43
+ - remain = time_period_in_words( (finish - current_time).ceil )
44
+ %p #{start} -> #{finish} (#{remain} remaining)
36
45
  %h3 Output: #{@check_summary}
37
46
  %p #{@check_details}
38
47
  %table{:class => "table table-hover table-condensed"}
@@ -40,60 +49,62 @@
40
49
  %td Last state change:
41
50
  %td #{relative_time_ago(Time.at(@check_last_change.to_i))} ago
42
51
  %td #{Time.at(@check_last_change.to_i)}
52
+ %td  
43
53
  %tr
44
54
  %td Last update:
45
55
  %td #{relative_time_ago(Time.at(@check_last_update.to_i))} ago
46
56
  %td #{Time.at(@check_last_update.to_i)}
47
- - if @last_notifications[:critical]
48
- - last_critical_relative = relative_time_ago(Time.at(@last_notifications[:critical])) + " ago"
49
- - last_critical = Time.at(@last_notifications[:critical]).to_s
50
- - else
51
- - last_critical_relative = 'never'
52
- - last_critical = ''
57
+ %td  
58
+ - last_critical = nil
59
+ - if @last_notifications[:critical] && @last_notifications[:critical][:timestamp]
60
+ - t = Time.at(@last_notifications[:critical][:timestamp])
61
+ - last_critical = {:time => t.to_s, :relative => relative_time_ago(t) + " ago", :summary => @last_notifications[:critical][:summary]}
53
62
  %tr
54
63
  %td Last critical notification:
55
- %td= last_critical_relative
56
- %td= last_critical
57
- - if @last_notifications[:warning]
58
- - last_warning_relative = relative_time_ago(Time.at(@last_notifications[:warning])) + " ago"
59
- - last_warning = Time.at(@last_notifications[:warning]).to_s
60
- - else
61
- - last_warning_relative = 'never'
62
- - last_warning = ''
64
+ %td= last_critical ? last_critical[:relative] : 'never'
65
+ %td= last_critical ? last_critical[:time] : ''
66
+ %td= last_critical ? last_critical[:summary] : ''
67
+
68
+ - last_warning = nil
69
+ - if @last_notifications[:warning] && @last_notifications[:warning][:timestamp]
70
+ - t = Time.at(@last_notifications[:warning][:timestamp])
71
+ - last_warning = {:time => t.to_s, :relative => relative_time_ago(t) + " ago", :summary => @last_notifications[:warning][:summary]}
63
72
  %tr
64
73
  %td Last warning notification:
65
- %td= last_warning_relative
66
- %td= last_warning
67
- - if @last_notifications[:unknown]
68
- - last_unknown_relative = relative_time_ago(Time.at(@last_notifications[:unknown])) + " ago"
69
- - last_unknown = Time.at(@last_notifications[:unknown]).to_s
70
- - else
71
- - last_unknown_relative = 'never'
72
- - last_unknown = ''
74
+ %td= last_warning ? last_warning[:relative] : 'never'
75
+ %td= last_warning ? last_warning[:time] : ''
76
+ %td= last_warning ? last_warning[:summary] : ''
77
+
78
+ - last_unknown = nil
79
+ - if @last_notifications[:unknown] && @last_notifications[:unknown][:timestamp]
80
+ - t = Time.at(@last_notifications[:unknown][:timestamp])
81
+ - last_unknown = {:time => t.to_s, :relative => relative_time_ago(t) + " ago", :summary => @last_notifications[:unknown][:summary]}
73
82
  %tr
74
83
  %td Last unknown notification:
75
- %td= last_unknown_relative
76
- %td= last_unknown
77
- - if @last_notifications[:recovery]
78
- - last_recovery_relative = relative_time_ago(Time.at(@last_notifications[:recovery])) + " ago"
79
- - last_recovery = Time.at(@last_notifications[:recovery]).to_s
80
- - else
81
- - last_recovery_relative = 'never'
82
- - last_recovery = ''
84
+ %td= last_unknown ? last_unknown[:relative] : 'never'
85
+ %td= last_unknown ? last_unknown[:time] : ''
86
+ %td= last_unknown ? last_unknown[:summary] : ''
87
+
88
+ - last_recovery = nil
89
+ - if @last_notifications[:recovery] && @last_notifications[:recovery][:timestamp]
90
+ - t = Time.at(@last_notifications[:recovery][:timestamp])
91
+ - last_recovery = {:time => t.to_s, :relative => relative_time_ago(t) + " ago", :summary => @last_notifications[:recovery][:summary]}
83
92
  %tr
84
93
  %td Last recovery notification:
85
- %td= last_recovery_relative
86
- %td= last_recovery
87
- - if @last_notifications[:acknowledgement]
88
- - last_ack_relative = relative_time_ago(Time.at(@last_notifications[:acknowledgement])) + " ago"
89
- - last_ack = Time.at(@last_notifications[:acknowledgement]).to_s
90
- - else
91
- - last_ack_relative = 'never'
92
- - last_ack = ''
94
+ %td= last_recovery ? last_recovery[:relative] : 'never'
95
+ %td= last_recovery ? last_recovery[:time] : ''
96
+ %td= last_recovery ? last_recovery[:summary] : ''
97
+
98
+ - last_ack = nil
99
+ - if @last_notifications[:acknowledgement] && @last_notifications[:acknowledgement][:timestamp]
100
+ - t = Time.at(@last_notifications[:acknowledgement][:timestamp])
101
+ - last_ack = {:time => t.to_s, :relative => relative_time_ago(t) + " ago", :summary => @last_notifications[:acknowledgement][:summary]}
93
102
  %tr
94
103
  %td Last acknowledgement notification:
95
- %td= last_ack_relative
96
- %td= last_ack
104
+ %td= last_ack ? last_ack[:relative] : 'never'
105
+ %td= last_ack ? last_ack[:time] : ''
106
+ %td= last_ack ? last_ack[:summary] : ''
107
+
97
108
  %h3 Scheduled Maintenance Periods
98
109
  - if @scheduled_maintenances && !@scheduled_maintenances.empty?
99
110
  %table{:class => "table table-bordered table-hover table-condensed"}
@@ -134,12 +145,12 @@
134
145
  %label{:class => "control-label", :for => 'start_time'} Start time:
135
146
  %div{:class => "controls"}
136
147
  %input{:type => 'text', :name => 'start_time', :class => 'text', :size => '20', :maxlength => '80'}
137
- eg "today 4pm", "two hours hence", "friday 2pm", "2012-01-28 13:00"
148
+ e.g. "today 4pm", "two hours hence", "friday 2pm", "2012-01-28 13:00"
138
149
  %div{:class => "control-group"}
139
150
  %label{:class => "control-label", :for => 'duration'} Duration:
140
151
  %div{:class => "controls"}
141
152
  %input{:type => 'text', :name => 'duration', :class => 'text', :size => '20', :maxlength => '80'}
142
- eg "1 hour", "2:30:00", "three days", etc
153
+ e.g. "1 hour", "2:30:00", "three days", etc
143
154
  %div{:class => "control-group"}
144
155
  %label{:class => "control-label", :for => 'summary'} Summary:
145
156
  %div{:class => "controls"}
@@ -148,6 +159,20 @@
148
159
  %div{:class => "controls"}
149
160
  %input{:type => 'submit', :value => 'Save', :class => 'button'}
150
161
  %p Times given will be interpreted in the local timezone of #{local_timezone}
162
+
163
+ - if @state_changes && !@state_changes.empty?
164
+ %h3 Recent state changes
165
+ %table{:class => "table table-bordered table-hover table-condensed"}
166
+ %tr
167
+ %th Timestamp
168
+ %th State
169
+ %th Summary
170
+ - @state_changes.each do |sc|
171
+ %tr
172
+ %td= Time.at(sc[:timestamp]).to_s
173
+ %td= sc[:state]
174
+ %td= sc[:summary]
175
+
151
176
  %h3 Contacts
152
177
  - if @contacts && !@contacts.empty?
153
178
  %table{:class => "table table-bordered table-hover table-condensed"}
@@ -38,7 +38,7 @@
38
38
  = " (Acknowledged)" if in_unscheduled_outage
39
39
  = " (Scheduled Maintenance)" if in_scheduled_outage
40
40
  %td= relative_time_ago(Time.at(changed.to_i)) + ' ago'
41
- %td= (Time.now.to_i - updated.to_i).to_s + ' seconds ago'
41
+ %td= relative_time_ago(Time.at(updated.to_i)) + ' ago'
42
42
  - if notified && (notified > 0)
43
43
  - last_notified = relative_time_ago(Time.at(notified.to_i)) + " ago, #{notified_kind}"
44
44
  - else
@@ -36,7 +36,7 @@
36
36
  = " (Acknowledged)" if in_unscheduled_outage
37
37
  = " (Scheduled Maintenance)" if in_scheduled_outage
38
38
  %td= relative_time_ago(Time.at(changed.to_i)) + ' ago'
39
- %td= (Time.now.to_i - updated.to_i).to_s + ' seconds ago'
39
+ %td= relative_time_ago(Time.at(updated.to_i)) + ' ago'
40
40
  - if notified && (notified > 0)
41
41
  - last_notified = relative_time_ago(Time.at(notified.to_i)) + " ago, #{notified_kind}"
42
42
  - else
@@ -44,6 +44,8 @@ class Hash
44
44
  end
45
45
  end
46
46
 
47
+ # we don't want to stop the entire EM reactor when we stop a web server
48
+ # & @connections data type changed in thin 1.5.1
47
49
  module Thin
48
50
 
49
51
  # see https://github.com/flpjck/flapjack/issues/169
@@ -64,7 +66,6 @@ module Thin
64
66
  end
65
67
  end
66
68
 
67
- # we don't want to stop the entire EM reactor when we stop a web server
68
69
  module Backends
69
70
  class Base
70
71
  def stop!
@@ -72,7 +73,13 @@ module Thin
72
73
  @stopping = false
73
74
 
74
75
  # EventMachine.stop if EventMachine.reactor_running?
75
- @connections.each { |connection| connection.close_connection }
76
+
77
+ case @connections
78
+ when Array
79
+ @connections.each { |connection| connection.close_connection }
80
+ when Hash
81
+ @connections.each_value { |connection| connection.close_connection }
82
+ end
76
83
  close
77
84
  end
78
85
  end
@@ -28,7 +28,6 @@ require 'flapjack/gateways/web'
28
28
  require 'flapjack/logger'
29
29
  require 'thin/version'
30
30
 
31
-
32
31
  module Thin
33
32
  # disable Thin's loading of daemons
34
33
  # workaround for https://github.com/flpjck/flapjack/issues/133
@@ -52,12 +51,13 @@ module Flapjack
52
51
  !type_klass.nil?
53
52
  end
54
53
 
55
- def self.create(type, config = {})
54
+ def self.create(type, opts = {})
56
55
  pikelet = nil
57
56
  [Flapjack::Pikelet::Generic,
58
57
  Flapjack::Pikelet::Resque,
59
58
  Flapjack::Pikelet::Thin].each do |kl|
60
- break if pikelet = kl.create(type, config)
59
+ next unless kl::PIKELET_TYPES[type]
60
+ break if pikelet = kl.create(type, opts)
61
61
  end
62
62
  pikelet
63
63
  end
@@ -71,6 +71,7 @@ module Flapjack
71
71
 
72
72
  @config = opts[:config] || {}
73
73
  @redis_config = opts[:redis_config] || {}
74
+ @boot_time = opts[:boot_time]
74
75
 
75
76
  @logger = Flapjack::Logger.new("flapjack-#{type}", @config['logger'])
76
77
 
@@ -98,9 +99,10 @@ module Flapjack
98
99
  'pagerduty' => Flapjack::Gateways::Pagerduty,
99
100
  'oobetet' => Flapjack::Gateways::Oobetet}
100
101
 
101
- def self.create(type, config = {})
102
- return unless pikelet_klass = PIKELET_TYPES[type]
103
- self.new(type, pikelet_klass, config)
102
+ def self.create(type, opts = {})
103
+ self.new(type, PIKELET_TYPES[type], :config => opts[:config],
104
+ :redis_config => opts[:redis_config],
105
+ :boot_time => opts[:boot_time])
104
106
  end
105
107
 
106
108
  def initialize(type, pikelet_klass, opts = {})
@@ -140,8 +142,9 @@ module Flapjack
140
142
  'sms' => Flapjack::Gateways::SmsMessagenet}
141
143
 
142
144
  def self.create(type, opts = {})
143
- return unless pikelet_klass = PIKELET_TYPES[type]
144
- self.new(type, pikelet_klass, opts)
145
+ self.new(type, PIKELET_TYPES[type], :config => opts[:config],
146
+ :redis_config => opts[:redis_config],
147
+ :boot_time => opts[:boot_time])
145
148
  end
146
149
 
147
150
  def initialize(type, pikelet_klass, opts = {})
@@ -198,9 +201,10 @@ module Flapjack
198
201
  'api' => Flapjack::Gateways::API}
199
202
 
200
203
  def self.create(type, opts = {})
201
- return unless pikelet_klass = PIKELET_TYPES[type]
202
204
  ::Thin::Logging.silent = true
203
- self.new(type, pikelet_klass, :config => opts[:config], :redis_config => opts[:redis_config])
205
+ self.new(type, PIKELET_TYPES[type], :config => opts[:config],
206
+ :redis_config => opts[:redis_config],
207
+ :boot_time => opts[:boot_time])
204
208
  end
205
209
 
206
210
  def initialize(type, pikelet_klass, opts = {})
@@ -7,10 +7,10 @@ module Flapjack
7
7
  period_mm, period_ss = period.divmod(60)
8
8
  period_hh, period_mm = period_mm.divmod(60)
9
9
  period_dd, period_hh = period_hh.divmod(24)
10
- ["#{period_dd} days",
11
- "#{period_hh} hours",
12
- "#{period_mm} minutes",
13
- "#{period_ss} seconds"].reject {|s| s =~ /^0 /}.join(', ')
10
+ ["#{period_dd} day#{plural_s(period_dd)}",
11
+ "#{period_hh} hour#{plural_s(period_hh)}",
12
+ "#{period_mm} minute#{plural_s(period_mm)}",
13
+ "#{period_ss} second#{plural_s(period_ss)}"].reject {|s| s =~ /^0 /}.join(', ')
14
14
  end
15
15
 
16
16
  # Returns relative time in words referencing the given date
@@ -68,5 +68,11 @@ module Flapjack
68
68
  Hash[ *( key_value_pairs.flatten(1) )]
69
69
  end
70
70
 
71
+ private
72
+
73
+ def plural_s(value)
74
+ (value == 1) ? '' : 's'
75
+ end
76
+
71
77
  end
72
78
  end
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
3
  module Flapjack
4
- VERSION = "0.7.14"
4
+ VERSION = "0.7.15"
5
5
  end
@@ -11,6 +11,8 @@ describe Flapjack::Coordinator do
11
11
  let(:stdout_out) { mock('stdout_out') }
12
12
  let(:syslog_out) { mock('syslog_out') }
13
13
 
14
+ let!(:time) { Time.now }
15
+
14
16
  def setup_logger
15
17
  formatter = mock('Formatter')
16
18
  Log4r::PatternFormatter.should_receive(:new).with(
@@ -41,9 +43,12 @@ describe Flapjack::Coordinator do
41
43
  executive.should_receive(:update_status)
42
44
  executive.should_receive(:status).exactly(3).times.and_return('stopped')
43
45
 
46
+ Time.should_receive(:now).and_return(time)
47
+
44
48
  fc = Flapjack::Coordinator.new(config)
45
49
  Flapjack::Pikelet.should_receive(:create).with('executive',
46
- :config => cfg['executive'], :redis_config => {}).and_return(executive)
50
+ :config => cfg['executive'], :redis_config => {}, :boot_time => time).
51
+ and_return(executive)
47
52
 
48
53
  fiber.should_receive(:resume)
49
54
  Fiber.should_receive(:new).and_yield.and_return(fiber)
@@ -69,9 +74,12 @@ describe Flapjack::Coordinator do
69
74
  executive.should_receive(:update_status)
70
75
  executive.should_receive(:status).exactly(3).times.and_return('stopped')
71
76
 
77
+ Time.should_receive(:now).and_return(time)
78
+
72
79
  fc = Flapjack::Coordinator.new(config)
73
80
  Flapjack::Pikelet.should_receive(:create).with('executive',
74
- :config => cfg['executive'], :redis_config => {}).and_return(executive)
81
+ :config => cfg['executive'], :redis_config => {}, :boot_time => time)
82
+ .and_return(executive)
75
83
 
76
84
  fiber.should_receive(:resume)
77
85
  Fiber.should_receive(:new).and_yield.and_return(fiber)
@@ -140,8 +148,10 @@ describe Flapjack::Coordinator do
140
148
  executive.should_receive(:status).exactly(3).times.and_return('stopped')
141
149
 
142
150
  jabber = mock('jabber')
143
- Flapjack::Pikelet.should_receive(:create).with('jabber',
144
- :config => {"enabled" => "yes"}, :redis_config => {}).and_return(jabber)
151
+ Flapjack::Pikelet.should_receive(:create).
152
+ with('jabber', :config => {"enabled" => "yes"}, :redis_config => {},
153
+ :boot_time => time).
154
+ and_return(jabber)
145
155
  jabber.should_receive(:start)
146
156
 
147
157
  fiber.should_receive(:resume)
@@ -149,6 +159,7 @@ describe Flapjack::Coordinator do
149
159
 
150
160
  config.should_receive(:for_redis).and_return({})
151
161
  fc = Flapjack::Coordinator.new(config)
162
+ fc.instance_variable_set('@boot_time', time)
152
163
  fc.instance_variable_set('@pikelets', [executive])
153
164
  fc.reload
154
165
  fc.instance_variable_get('@pikelets').should == [jabber]
@@ -178,6 +189,7 @@ describe Flapjack::Coordinator do
178
189
 
179
190
  config.should_receive(:for_redis).and_return({})
180
191
  fc = Flapjack::Coordinator.new(config)
192
+ fc.instance_variable_set('@boot_time', time)
181
193
  fc.instance_variable_set('@pikelets', [executive])
182
194
  fc.reload
183
195
  fc.instance_variable_get('@pikelets').should == [executive]
@@ -213,11 +225,13 @@ describe Flapjack::Coordinator do
213
225
  new_exec.should_receive(:start)
214
226
 
215
227
  Flapjack::Pikelet.should_receive(:create).
216
- with('executive', :config => new_cfg['executive'], :redis_config => {}).
228
+ with('executive', :config => new_cfg['executive'], :redis_config => {},
229
+ :boot_time => time).
217
230
  and_return(new_exec)
218
231
 
219
232
  config.should_receive(:for_redis).and_return({})
220
233
  fc = Flapjack::Coordinator.new(config)
234
+ fc.instance_variable_set('@boot_time', time)
221
235
  fc.instance_variable_set('@pikelets', [executive])
222
236
  fc.reload
223
237
  fc.instance_variable_get('@pikelets').should == [new_exec]
@@ -354,33 +354,6 @@ describe Flapjack::Data::EntityCheck, :redis => true do
354
354
 
355
355
  end
356
356
 
357
- it "creates an acknowledgement" do
358
- ec = Flapjack::Data::EntityCheck.for_entity_name(name, check, :redis => @redis)
359
- t = Time.now.to_i
360
- ec.create_acknowledgement('summary' => 'looking now',
361
- 'time' => t,
362
- 'acknowledgement_id' => '75',
363
- 'duration' => 40 * 60)
364
- event_json = @redis.rpop('events')
365
- event_json.should_not be_nil
366
- event = nil
367
- expect {
368
- event = JSON.parse(event_json)
369
- }.not_to raise_error
370
- event.should_not be_nil
371
- event.should be_a(Hash)
372
- event.should == {
373
- 'entity' => name,
374
- 'check' => check,
375
- 'type' => 'action',
376
- 'state' => 'acknowledgement',
377
- 'summary' => 'looking now',
378
- 'time' => t,
379
- 'acknowledgement_id' => '75',
380
- 'duration' => 2400
381
- }
382
- end
383
-
384
357
  it "returns its state" do
385
358
  @redis.hset("check:#{name}:#{check}", 'state', 'ok')
386
359
 
@@ -520,9 +493,9 @@ describe Flapjack::Data::EntityCheck, :redis => true do
520
493
  @redis.set("#{name}:#{check}:last_recovery_notification", t)
521
494
 
522
495
  ec = Flapjack::Data::EntityCheck.for_entity_name(name, check, :redis => @redis)
523
- ec.last_problem_notification.should == t - 30
524
- ec.last_acknowledgement_notification.should == t - 15
525
- ec.last_recovery_notification.should == t
496
+ ec.last_notification_for_state(:problem)[:timestamp].should == t - 30
497
+ ec.last_notification_for_state(:acknowledgement)[:timestamp].should == t - 15
498
+ ec.last_notification_for_state(:recovery)[:timestamp].should == t
526
499
  end
527
500
 
528
501
  it "finds all related contacts" do