flapjack 0.7.14 → 0.7.15

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