flapjack 0.6.39 → 0.6.40
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +2 -2
- data/Gemfile +5 -1
- data/README.md +3 -2
- data/Rakefile +2 -1
- data/bin/flapjack +2 -2
- data/bin/flapjack-nagios-receiver +2 -8
- data/bin/flapjack-populator +11 -11
- data/etc/flapjack_config.yaml.example +28 -0
- data/features/steps/events_steps.rb +1 -1
- data/features/steps/notifications_steps.rb +7 -4
- data/features/support/env.rb +17 -6
- data/flapjack.gemspec +1 -0
- data/lib/flapjack/api.rb +72 -28
- data/lib/flapjack/configuration.rb +9 -1
- data/lib/flapjack/coordinator.rb +138 -162
- data/lib/flapjack/data/contact.rb +3 -1
- data/lib/flapjack/data/entity.rb +10 -1
- data/lib/flapjack/data/entity_check.rb +19 -21
- data/lib/flapjack/data/event.rb +26 -27
- data/lib/flapjack/data/message.rb +45 -0
- data/lib/flapjack/data/notification.rb +49 -0
- data/lib/flapjack/executive.rb +53 -74
- data/lib/flapjack/filters/acknowledgement.rb +14 -11
- data/lib/flapjack/jabber.rb +84 -18
- data/lib/flapjack/notification/email.rb +67 -37
- data/lib/flapjack/notification/sms.rb +40 -28
- data/lib/flapjack/oobetet.rb +1 -1
- data/lib/flapjack/pagerduty.rb +24 -15
- data/lib/flapjack/patches.rb +3 -1
- data/lib/flapjack/pikelet.rb +51 -20
- data/lib/flapjack/rack_logger.rb +8 -0
- data/lib/flapjack/version.rb +1 -1
- data/lib/flapjack/web.rb +51 -27
- data/spec/lib/flapjack/api_spec.rb +28 -3
- data/spec/lib/flapjack/coordinator_spec.rb +69 -43
- data/spec/lib/flapjack/data/contact_spec.rb +17 -9
- data/spec/lib/flapjack/data/entity_check_spec.rb +0 -25
- data/spec/lib/flapjack/data/entity_spec.rb +4 -0
- data/spec/lib/flapjack/data/global_spec.rb +6 -0
- data/spec/lib/flapjack/data/message_spec.rb +6 -0
- data/spec/lib/flapjack/data/notification_spec.rb +6 -0
- data/spec/lib/flapjack/executive_spec.rb +2 -2
- data/spec/lib/flapjack/jabber_spec.rb +8 -9
- data/spec/lib/flapjack/pagerduty_spec.rb +53 -45
- data/spec/lib/flapjack/utility_spec.rb +55 -0
- data/spec/lib/flapjack/web_spec.rb +7 -5
- data/tasks/events.rake +26 -59
- data/tasks/profile.rake +366 -0
- metadata +30 -19
- data/lib/flapjack/notification/common.rb +0 -23
- data/lib/flapjack/persistence/couch.rb +0 -5
- data/lib/flapjack/persistence/couch/connection.rb +0 -66
- data/lib/flapjack/persistence/couch/couch.rb +0 -63
- data/lib/flapjack/persistence/data_mapper.rb +0 -3
- data/lib/flapjack/persistence/data_mapper/data_mapper.rb +0 -67
- data/lib/flapjack/persistence/data_mapper/models/check.rb +0 -90
- data/lib/flapjack/persistence/data_mapper/models/check_template.rb +0 -20
- data/lib/flapjack/persistence/data_mapper/models/event.rb +0 -19
- data/lib/flapjack/persistence/data_mapper/models/node.rb +0 -18
- data/lib/flapjack/persistence/data_mapper/models/related_check.rb +0 -15
- data/lib/flapjack/persistence/sqlite3.rb +0 -3
- data/lib/flapjack/persistence/sqlite3/sqlite3.rb +0 -166
- data/lib/flapjack/transports/beanstalkd.rb +0 -50
- data/lib/flapjack/transports/result.rb +0 -58
- data/lib/flapjack/worker/application.rb +0 -121
- data/lib/flapjack/worker/cli.rb +0 -49
@@ -74,30 +74,26 @@ module Flapjack
|
|
74
74
|
}
|
75
75
|
end
|
76
76
|
|
77
|
-
|
78
|
-
# 'type' => 'service',
|
79
|
-
# 'state' => state,
|
80
|
-
# 'summary' => check_output,
|
81
|
-
# 'time' => timestamp
|
82
|
-
def create_event(event)
|
83
|
-
event.merge!('entity' => @entity.name, 'check' => @check)
|
84
|
-
event['time'] = Time.now.to_i if event['time'].nil?
|
85
|
-
@redis.rpush('events', Yajl::Encoder.encode(event))
|
86
|
-
end
|
87
|
-
|
88
|
-
def create_acknowledgement(opts = {})
|
89
|
-
defaults = {
|
90
|
-
'summary' => '...'
|
91
|
-
}
|
92
|
-
options = defaults.merge(opts)
|
93
|
-
|
77
|
+
def create_acknowledgement(options = {})
|
94
78
|
event = { 'type' => 'action',
|
95
79
|
'state' => 'acknowledgement',
|
96
80
|
'summary' => options['summary'],
|
97
81
|
'duration' => options['duration'],
|
98
|
-
'acknowledgement_id' => options['acknowledgement_id']
|
82
|
+
'acknowledgement_id' => options['acknowledgement_id'],
|
83
|
+
'entity' => @entity.name,
|
84
|
+
'check' => @check
|
85
|
+
}
|
86
|
+
Flapjack::Data::Event.add(event, :redis => @redis)
|
87
|
+
end
|
88
|
+
|
89
|
+
def test_notifications(options = {})
|
90
|
+
event = { 'type' => 'action',
|
91
|
+
'state' => 'test_notifications',
|
92
|
+
'summary' => options['summary'],
|
93
|
+
'entity' => @entity.name,
|
94
|
+
'check' => @check
|
99
95
|
}
|
100
|
-
|
96
|
+
Flapjack::Data::Event.add(event, :redis => @redis)
|
101
97
|
end
|
102
98
|
|
103
99
|
# FIXME: need to add summary to summary of existing unscheduled maintenance if there is
|
@@ -425,8 +421,10 @@ module Flapjack
|
|
425
421
|
check = @check
|
426
422
|
|
427
423
|
if @logger
|
428
|
-
@logger.debug("contacts for #{@entity.id} (#{@entity.name}): " +
|
429
|
-
|
424
|
+
@logger.debug("contacts for #{@entity.id} (#{@entity.name}): " +
|
425
|
+
@redis.smembers("contacts_for:#{@entity.id}").length.to_s)
|
426
|
+
@logger.debug("contacts for #{check}: " +
|
427
|
+
@redis.smembers("contacts_for:#{check}").length.to_s)
|
430
428
|
end
|
431
429
|
|
432
430
|
union = @redis.sunion("contacts_for:#{@entity.id}", "contacts_for:#{check}")
|
data/lib/flapjack/data/event.rb
CHANGED
@@ -17,43 +17,38 @@ module Flapjack
|
|
17
17
|
# events on the queue.
|
18
18
|
#
|
19
19
|
def self.next(opts={})
|
20
|
+
raise "Redis connection not set" unless redis = opts[:redis]
|
21
|
+
|
20
22
|
defaults = { :block => true }
|
21
23
|
options = defaults.merge(opts)
|
22
|
-
block = options[:block]
|
23
24
|
|
24
25
|
# In production, we wait indefinitely for events coming from other systems.
|
25
|
-
if block
|
26
|
-
|
27
|
-
event = ::JSON.parse(raw)
|
28
|
-
self.new(event)
|
29
|
-
else
|
30
|
-
# In testing, we take care that there are no events on the queue.
|
31
|
-
raw = opts[:persistence].lpop('events')
|
32
|
-
result = nil
|
33
|
-
|
34
|
-
if raw
|
35
|
-
event = ::JSON.parse(raw)
|
36
|
-
result = self.new(event)
|
37
|
-
end
|
38
|
-
|
39
|
-
result
|
26
|
+
if options[:block]
|
27
|
+
return self.new( ::JSON.parse( redis.blpop('events', 0).last ) )
|
40
28
|
end
|
29
|
+
|
30
|
+
# In testing, we take care that there are no events on the queue.
|
31
|
+
return unless raw = redis.lpop('events')
|
32
|
+
self.new( ::JSON.parse(raw) )
|
33
|
+
end
|
34
|
+
|
35
|
+
# creates, or modifies, an event object and adds it to the events list in redis
|
36
|
+
# 'type' => 'service',
|
37
|
+
# 'state' => state,
|
38
|
+
# 'summary' => check_output,
|
39
|
+
# 'time' => timestamp
|
40
|
+
def self.add(evt, opts = {})
|
41
|
+
raise "Redis connection not set" unless redis = opts[:redis]
|
42
|
+
|
43
|
+
evt['time'] = Time.now.to_i if evt['time'].nil?
|
44
|
+
redis.rpush('events', Yajl::Encoder.encode(evt))
|
41
45
|
end
|
42
46
|
|
43
47
|
# Provide a count of the number of events on the queue to be processed.
|
44
48
|
def self.pending_count(opts = {})
|
45
|
-
opts[:
|
46
|
-
end
|
49
|
+
raise "Redis connection not set" unless redis = opts[:redis]
|
47
50
|
|
48
|
-
|
49
|
-
def self.purge_all(opts = {})
|
50
|
-
events_size = opts[:redis].llen('events')
|
51
|
-
puts "purging #{events_size} events..."
|
52
|
-
timestamp = Time.now.to_i
|
53
|
-
puts "renaming events to events.#{timestamp}"
|
54
|
-
opts[:redis].rename('events', "events.#{timestamp}")
|
55
|
-
puts "setting expiry of events.#{timestamp} to 8 hours"
|
56
|
-
opts[:redis].expire("events.#{timestamp}", (60 * 60 * 8))
|
51
|
+
redis.llen('events')
|
57
52
|
end
|
58
53
|
|
59
54
|
def initialize(attrs={})
|
@@ -125,6 +120,10 @@ module Flapjack
|
|
125
120
|
action? and state == 'acknowledgement'
|
126
121
|
end
|
127
122
|
|
123
|
+
def test_notifications?
|
124
|
+
action? and state == 'test_notifications'
|
125
|
+
end
|
126
|
+
|
128
127
|
def ok?
|
129
128
|
(state == 'ok') or (state == 'up')
|
130
129
|
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
# 'Notification' refers to the template object created when an event occurs,
|
4
|
+
# from which individual 'Message' objects are created, one for each
|
5
|
+
# contact+media recipient.
|
6
|
+
|
7
|
+
module Flapjack
|
8
|
+
module Data
|
9
|
+
class Message
|
10
|
+
|
11
|
+
attr_accessor :medium, :address, :id, :duration, :contact, :notification
|
12
|
+
|
13
|
+
def self.for_contact(opts = {})
|
14
|
+
self.new(:contact => opts[:contact])
|
15
|
+
end
|
16
|
+
|
17
|
+
def id
|
18
|
+
return @id if @id
|
19
|
+
t = Time.now
|
20
|
+
@id = self.object_id.to_i.to_s + '-' + t.to_i.to_s + '.' + t.tv_usec.to_s
|
21
|
+
end
|
22
|
+
|
23
|
+
def contents
|
24
|
+
c = {'media' => medium,
|
25
|
+
'address' => address,
|
26
|
+
'id' => id}
|
27
|
+
if contact
|
28
|
+
c.merge('contact_id' => contact.id,
|
29
|
+
'contact_first_name' => contact.first_name,
|
30
|
+
'contact_last_name' => contact.last_name)
|
31
|
+
end
|
32
|
+
c['duration'] = duration if duration
|
33
|
+
c.merge(notification.contents) if notification
|
34
|
+
end
|
35
|
+
|
36
|
+
private
|
37
|
+
|
38
|
+
def initialize(opts = {})
|
39
|
+
@contact = opts[:contact]
|
40
|
+
end
|
41
|
+
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
@@ -0,0 +1,49 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'flapjack/data/message'
|
4
|
+
|
5
|
+
module Flapjack
|
6
|
+
module Data
|
7
|
+
class Notification
|
8
|
+
|
9
|
+
attr_accessor :event, :type
|
10
|
+
|
11
|
+
def self.for_event(event, opts = {})
|
12
|
+
self.new(:event => event, :type => opts[:type])
|
13
|
+
end
|
14
|
+
|
15
|
+
def messages(opts = {})
|
16
|
+
contacts = opts[:contacts]
|
17
|
+
return [] if contacts.nil?
|
18
|
+
@messages ||= contacts.collect {|contact|
|
19
|
+
contact.media.keys.inject([]) { |ret, mk|
|
20
|
+
m = Flapjack::Data::Message.for_contact(:contact => contact)
|
21
|
+
m.notification = self
|
22
|
+
m.medium = mk
|
23
|
+
m.address = contact.media[mk]
|
24
|
+
ret << m
|
25
|
+
ret
|
26
|
+
}
|
27
|
+
}.flatten
|
28
|
+
end
|
29
|
+
|
30
|
+
def contents
|
31
|
+
@contents ||= {'event_id' => event.id,
|
32
|
+
'state' => event.state,
|
33
|
+
'summary' => event.summary,
|
34
|
+
'time' => event.time,
|
35
|
+
'notification_type' => type}
|
36
|
+
end
|
37
|
+
|
38
|
+
private
|
39
|
+
|
40
|
+
def initialize(opts = {})
|
41
|
+
raise "Event not passed" unless event = opts[:event]
|
42
|
+
@event = event
|
43
|
+
@type = opts[:type]
|
44
|
+
end
|
45
|
+
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
data/lib/flapjack/executive.rb
CHANGED
@@ -12,19 +12,25 @@ require 'flapjack/filters/detect_mass_client_failures'
|
|
12
12
|
require 'flapjack/filters/delays'
|
13
13
|
require 'flapjack/data/contact'
|
14
14
|
require 'flapjack/data/entity_check'
|
15
|
+
require 'flapjack/data/notification'
|
15
16
|
require 'flapjack/data/event'
|
16
|
-
require 'flapjack/notification/common'
|
17
17
|
require 'flapjack/notification/sms'
|
18
18
|
require 'flapjack/notification/email'
|
19
19
|
require 'flapjack/pikelet'
|
20
|
+
require 'flapjack/redis_pool'
|
20
21
|
|
21
22
|
module Flapjack
|
22
23
|
|
23
24
|
class Executive
|
24
|
-
include Flapjack::
|
25
|
+
include Flapjack::GenericPikelet
|
25
26
|
|
26
|
-
|
27
|
-
|
27
|
+
alias_method :generic_bootstrap, :bootstrap
|
28
|
+
alias_method :generic_cleanup, :cleanup
|
29
|
+
|
30
|
+
def bootstrap(opts = {})
|
31
|
+
generic_bootstrap(opts)
|
32
|
+
|
33
|
+
@redis = Flapjack::RedisPool.new(:config => opts[:redis_config], :size => 1)
|
28
34
|
|
29
35
|
@queues = {:email => @config['email_queue'],
|
30
36
|
:sms => @config['sms_queue'],
|
@@ -73,19 +79,20 @@ module Flapjack
|
|
73
79
|
@redis.hset("event_counters:#{@instance_id}", 'action', 0)
|
74
80
|
end
|
75
81
|
|
76
|
-
def
|
77
|
-
|
82
|
+
def cleanup
|
83
|
+
@redis.empty! if @redis
|
84
|
+
generic_cleanup
|
85
|
+
end
|
78
86
|
|
87
|
+
def main
|
79
88
|
@logger.info("Booting main loop.")
|
80
89
|
|
81
|
-
until should_quit?
|
90
|
+
until should_quit? && @received_shutdown
|
82
91
|
@logger.info("Waiting for event...")
|
83
|
-
event = Flapjack::Data::Event.next(:
|
92
|
+
event = Flapjack::Data::Event.next(:redis => @redis)
|
84
93
|
process_event(event) unless event.nil?
|
85
94
|
end
|
86
95
|
|
87
|
-
@redis.empty! if @redis
|
88
|
-
|
89
96
|
@logger.info("Exiting main loop.")
|
90
97
|
end
|
91
98
|
|
@@ -102,7 +109,8 @@ module Flapjack
|
|
102
109
|
private
|
103
110
|
|
104
111
|
def process_event(event)
|
105
|
-
|
112
|
+
pending = Flapjack::Data::Event.pending_count(:redis => @redis)
|
113
|
+
@logger.debug("#{pending} events waiting on the queue")
|
106
114
|
@logger.debug("Raw event received: #{event.inspect}")
|
107
115
|
time_at = event.time
|
108
116
|
time_at_str = time_at ? ", #{Time.at(time_at).to_s}" : ''
|
@@ -129,14 +137,14 @@ module Flapjack
|
|
129
137
|
end
|
130
138
|
|
131
139
|
@logger.info("#{Time.now}: Sending notifications for event #{event.id}")
|
132
|
-
|
140
|
+
send_notification_messages(event, entity_check)
|
133
141
|
end
|
134
142
|
|
135
143
|
def update_keys(event, entity_check)
|
136
144
|
result = { :skip_filters => false }
|
137
145
|
timestamp = Time.now.to_i
|
138
146
|
@event_count = @redis.hincrby('event_counters', 'all', 1)
|
139
|
-
@
|
147
|
+
@redis.hincrby("event_counters:#{@instance_id}", 'all', 1)
|
140
148
|
|
141
149
|
# FIXME skip if entity_check.nil?
|
142
150
|
|
@@ -191,16 +199,15 @@ module Flapjack
|
|
191
199
|
end
|
192
200
|
when 'shutdown'
|
193
201
|
# should this be logged as an action instead? being minimally invasive for now
|
194
|
-
result[:shutdown] = true
|
202
|
+
result[:shutdown] = @received_shutdown = true
|
195
203
|
end
|
196
204
|
|
197
205
|
result
|
198
206
|
end
|
199
207
|
|
200
208
|
# takes an event for which a notification needs to be generated, works out the type of
|
201
|
-
# notification, updates the notification history in redis,
|
202
|
-
|
203
|
-
def generate_notification(event, entity_check)
|
209
|
+
# notification, updates the notification history in redis, sends the notifications
|
210
|
+
def send_notification_messages(event, entity_check)
|
204
211
|
timestamp = Time.now.to_i
|
205
212
|
notification_type = 'unknown'
|
206
213
|
case event.type
|
@@ -215,79 +222,51 @@ module Flapjack
|
|
215
222
|
case event.state
|
216
223
|
when 'acknowledgement'
|
217
224
|
notification_type = 'acknowledgement'
|
225
|
+
when 'test_notifications'
|
226
|
+
notification_type = 'test'
|
218
227
|
end
|
219
228
|
end
|
220
229
|
@redis.set("#{event.id}:last_#{notification_type}_notification", timestamp)
|
221
230
|
@redis.rpush("#{event.id}:#{notification_type}_notifications", timestamp)
|
222
231
|
@logger.debug("Notification of type #{notification_type} is being generated for #{event.id}.")
|
223
232
|
|
224
|
-
|
225
|
-
end
|
226
|
-
|
227
|
-
# takes an event, a notification type, and an array of contacts and creates jobs in resque
|
228
|
-
# (eventually) for each notification
|
229
|
-
def send_notifications(event, notification_type, contacts)
|
230
|
-
notification = { 'event_id' => event.id,
|
231
|
-
'state' => event.state,
|
232
|
-
'summary' => event.summary,
|
233
|
-
'time' => event.time,
|
234
|
-
'notification_type' => notification_type }
|
233
|
+
contacts = entity_check.contacts
|
235
234
|
|
236
235
|
if contacts.empty?
|
237
236
|
@notifylog.info("#{Time.now.to_s} | #{event.id} | #{notification_type} | NO CONTACTS")
|
238
237
|
return
|
239
|
-
|
238
|
+
end
|
239
|
+
|
240
|
+
notification = Flapjack::Data::Notification.for_event(event, :type => notification_type)
|
240
241
|
|
241
|
-
contacts.each
|
242
|
+
notification.messages(:contacts => contacts).each do |msg|
|
243
|
+
media_type = msg.medium.to_sym
|
242
244
|
|
243
|
-
|
244
|
-
|
245
|
+
@notifylog.info("#{Time.now.to_s} | #{event.id} | " +
|
246
|
+
"#{notification_type} | #{msg.contact.id} | #{media_type.to_s} | #{msg.address}")
|
247
|
+
|
248
|
+
unless @queues[media_type]
|
249
|
+
# TODO log error
|
245
250
|
next
|
246
251
|
end
|
247
252
|
|
248
|
-
|
249
|
-
|
250
|
-
|
251
|
-
|
252
|
-
|
253
|
-
|
254
|
-
|
255
|
-
|
256
|
-
|
257
|
-
#
|
258
|
-
|
259
|
-
|
260
|
-
|
261
|
-
|
262
|
-
|
263
|
-
notif['duration'] = dur if dur
|
264
|
-
@logger.debug("send_notifications: sending notification: #{notif.inspect}")
|
265
|
-
|
266
|
-
unless @queues[media_type.to_sym]
|
267
|
-
# TODO log error
|
268
|
-
next
|
269
|
-
end
|
270
|
-
|
271
|
-
# TODO consider changing Resque jobs to use raw blpop like the others
|
272
|
-
case media_type
|
273
|
-
when "sms"
|
274
|
-
Resque.enqueue_to(@queues[:sms], Notification::Sms, notif)
|
275
|
-
when "email"
|
276
|
-
Resque.enqueue_to(@queues[:email], Notification::Email, notif)
|
277
|
-
when "jabber"
|
278
|
-
# TODO move next line up into other notif value setting above?
|
279
|
-
notif['event_count'] = @event_count if @event_count
|
280
|
-
@redis.rpush(@queues[:jabber], Yajl::Encoder.encode(notif))
|
281
|
-
when "pagerduty"
|
282
|
-
@redis.rpush(@queues[:pagerduty], Yajl::Encoder.encode(notif))
|
283
|
-
end
|
284
|
-
}
|
285
|
-
}
|
286
|
-
end
|
253
|
+
contents = msg.contents
|
254
|
+
|
255
|
+
# TODO consider changing Resque jobs to use raw blpop like the others
|
256
|
+
case media_type
|
257
|
+
when :sms
|
258
|
+
Resque.enqueue_to(@queues[:sms], Flapjack::Notification::Sms, contents)
|
259
|
+
when :email
|
260
|
+
Resque.enqueue_to(@queues[:email], Flapjack::Notification::Email, contents)
|
261
|
+
when :jabber
|
262
|
+
# TODO move next line up into other notif value setting above?
|
263
|
+
contents['event_count'] = @event_count if @event_count
|
264
|
+
@redis.rpush(@queues[:jabber], Yajl::Encoder.encode(contents))
|
265
|
+
when :pagerduty
|
266
|
+
@redis.rpush(@queues[:pagerduty], Yajl::Encoder.encode(contents))
|
267
|
+
end
|
287
268
|
|
288
|
-
|
289
|
-
def fuid
|
290
|
-
fuid = self.object_id.to_i.to_s + '-' + Time.now.to_i.to_s + '.' + Time.now.tv_usec.to_s
|
269
|
+
end
|
291
270
|
end
|
292
271
|
|
293
272
|
end
|
@@ -15,21 +15,24 @@ module Flapjack
|
|
15
15
|
timestamp = Time.now.to_i
|
16
16
|
result = false
|
17
17
|
if event.type == 'action'
|
18
|
-
if event.acknowledgement?
|
19
|
-
|
20
|
-
|
21
|
-
|
18
|
+
if event.acknowledgement?
|
19
|
+
if @persistence.zscore("failed_checks", event.id)
|
20
|
+
ec = Flapjack::Data::EntityCheck.for_event_id(event.id, :redis => @persistence)
|
21
|
+
if ec.nil?
|
22
|
+
@log.error "Filter: Acknowledgement: unknown entity for event '#{event.id}'"
|
23
|
+
else
|
24
|
+
ec.create_unscheduled_maintenance(:start_time => timestamp,
|
25
|
+
:duration => (event.duration || (4 * 60 * 60)),
|
26
|
+
:summary => event.summary)
|
27
|
+
message = "unscheduled maintenance created for #{event.id}"
|
28
|
+
end
|
22
29
|
else
|
23
|
-
|
24
|
-
|
25
|
-
:summary => event.summary)
|
26
|
-
message = "unscheduled maintenance created for #{event.id}"
|
30
|
+
result = true
|
31
|
+
@log.debug("Filter: Acknowledgement: blocking because zscore of failed_checks for #{event.id} is false") unless @persistence.zscore("failed_checks", event.id)
|
27
32
|
end
|
28
33
|
else
|
29
34
|
message = "no action taken"
|
30
|
-
result =
|
31
|
-
@log.debug("Filter: Acknowledgement: blocking because event.acknowledgement? is false") unless event.acknowledgement?
|
32
|
-
@log.debug("Filter: Acknowledgement: blocking because zscore of failed_checks for #{event.id} is false") unless @persistence.zscore("failed_checks", event.id)
|
35
|
+
result = false
|
33
36
|
end
|
34
37
|
end
|
35
38
|
@log.debug("Filter: Acknowledgement: #{result ? "block" : "pass"} (#{message})")
|