flapjack 0.7.22 → 0.7.25
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/CHANGELOG.md +19 -0
- data/bin/flapjack +3 -1
- data/bin/flapjack-nagios-receiver +5 -4
- data/bin/receive-events +2 -2
- data/features/events.feature +101 -95
- data/features/notification_rules.feature +36 -4
- data/features/steps/notifications_steps.rb +4 -0
- data/flapjack.gemspec +3 -2
- data/lib/flapjack/coordinator.rb +8 -6
- data/lib/flapjack/data/entity_check.rb +20 -13
- data/lib/flapjack/data/event.rb +4 -7
- data/lib/flapjack/data/notification.rb +63 -45
- data/lib/flapjack/filters/acknowledgement.rb +26 -24
- data/lib/flapjack/filters/delays.rb +46 -42
- data/lib/flapjack/filters/ok.rb +31 -34
- data/lib/flapjack/filters/scheduled_maintenance.rb +2 -2
- data/lib/flapjack/filters/unscheduled_maintenance.rb +2 -3
- data/lib/flapjack/gateways/email.rb +111 -114
- data/lib/flapjack/gateways/email/alert.html.erb +11 -11
- data/lib/flapjack/gateways/email/alert.text.erb +19 -6
- data/lib/flapjack/gateways/sms_messagenet.rb +15 -5
- data/lib/flapjack/gateways/web.rb +3 -4
- data/lib/flapjack/gateways/web/public/css/flapjack.css +0 -2
- data/lib/flapjack/gateways/web/public/img/flapjack-favicon-32-16.ico +0 -0
- data/lib/flapjack/gateways/web/public/img/flapjack-favicon-64-32-24-16.ico +0 -0
- data/lib/flapjack/gateways/web/public/img/flapjack-transparent-300.png +0 -0
- data/lib/flapjack/gateways/web/public/img/flapjack-transparent-350-400.png +0 -0
- data/lib/flapjack/gateways/web/views/_head.html.erb +1 -0
- data/lib/flapjack/gateways/web/views/index.html.erb +1 -1
- data/lib/flapjack/notifier.rb +2 -3
- data/lib/flapjack/pikelet.rb +5 -4
- data/lib/flapjack/processor.rb +39 -27
- data/lib/flapjack/version.rb +1 -1
- data/spec/lib/flapjack/data/entity_check_spec.rb +5 -0
- data/spec/lib/flapjack/data/event_spec.rb +0 -1
- data/spec/lib/flapjack/gateways/email_spec.rb +5 -9
- data/spec/lib/flapjack/gateways/sms_messagenet.spec.rb +80 -1
- data/spec/lib/flapjack/gateways/web_spec.rb +1 -1
- data/spec/lib/flapjack/pikelet_spec.rb +4 -3
- data/spec/lib/flapjack/processor_spec.rb +0 -1
- metadata +28 -11
- data/lib/flapjack/filters/detect_mass_client_failures.rb +0 -44
- data/spec/lib/flapjack/filters/detect_mass_client_failures_spec.rb +0 -6
@@ -206,7 +206,7 @@ describe Flapjack::Gateways::Web, :sinatra => true, :logger => true do
|
|
206
206
|
with(entity, 'ping', :redis => redis).and_return(entity_check)
|
207
207
|
|
208
208
|
entity_check.should_receive(:create_scheduled_maintenance).
|
209
|
-
with(
|
209
|
+
with(start_time.to_i, duration, :summary => summary)
|
210
210
|
|
211
211
|
post "/scheduled_maintenances/#{entity_name_esc}/ping?"+
|
212
212
|
"start_time=1+day+ago&duration=30+minutes&summary=wow"
|
@@ -44,14 +44,15 @@ describe Flapjack::Pikelet do
|
|
44
44
|
config.should_receive(:[]).with('logger').and_return(nil)
|
45
45
|
config.should_receive(:[]).with('queue').and_return('email_notif')
|
46
46
|
|
47
|
+
resque_redis = mock('resque_redis')
|
47
48
|
redis = mock('redis')
|
48
|
-
Flapjack::RedisPool.should_receive(:new).and_return(redis)
|
49
|
-
Resque.should_receive(:redis=).with(
|
49
|
+
Flapjack::RedisPool.should_receive(:new).twice.and_return(resque_redis, redis)
|
50
|
+
Resque.should_receive(:redis=).with(resque_redis)
|
50
51
|
|
51
52
|
Flapjack::Gateways::Email.should_receive(:instance_variable_set).
|
52
53
|
with('@config', config)
|
53
54
|
Flapjack::Gateways::Email.should_receive(:instance_variable_set).
|
54
|
-
with('@
|
55
|
+
with('@redis', redis)
|
55
56
|
Flapjack::Gateways::Email.should_receive(:instance_variable_set).
|
56
57
|
with('@logger', logger)
|
57
58
|
|
@@ -16,7 +16,6 @@ describe Flapjack::Processor, :logger => true do
|
|
16
16
|
Flapjack::Filters::Ok.should_receive(:new)
|
17
17
|
Flapjack::Filters::ScheduledMaintenance.should_receive(:new)
|
18
18
|
Flapjack::Filters::UnscheduledMaintenance.should_receive(:new)
|
19
|
-
Flapjack::Filters::DetectMassClientFailures.should_receive(:new)
|
20
19
|
Flapjack::Filters::Delays.should_receive(:new)
|
21
20
|
Flapjack::Filters::Acknowledgement.should_receive(:new)
|
22
21
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: flapjack
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.7.
|
4
|
+
version: 0.7.25
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -11,7 +11,7 @@ authors:
|
|
11
11
|
autorequire:
|
12
12
|
bindir: bin
|
13
13
|
cert_chain: []
|
14
|
-
date: 2013-
|
14
|
+
date: 2013-09-13 00:00:00.000000000 Z
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
name: dante
|
@@ -274,17 +274,17 @@ dependencies:
|
|
274
274
|
requirement: !ruby/object:Gem::Requirement
|
275
275
|
none: false
|
276
276
|
requirements:
|
277
|
-
- -
|
277
|
+
- - ~>
|
278
278
|
- !ruby/object:Gem::Version
|
279
|
-
version:
|
279
|
+
version: 3.2.14
|
280
280
|
type: :runtime
|
281
281
|
prerelease: false
|
282
282
|
version_requirements: !ruby/object:Gem::Requirement
|
283
283
|
none: false
|
284
284
|
requirements:
|
285
|
-
- -
|
285
|
+
- - ~>
|
286
286
|
- !ruby/object:Gem::Version
|
287
|
-
version:
|
287
|
+
version: 3.2.14
|
288
288
|
- !ruby/object:Gem::Dependency
|
289
289
|
name: ice_cube
|
290
290
|
requirement: !ruby/object:Gem::Requirement
|
@@ -303,6 +303,22 @@ dependencies:
|
|
303
303
|
version: '0'
|
304
304
|
- !ruby/object:Gem::Dependency
|
305
305
|
name: tzinfo
|
306
|
+
requirement: !ruby/object:Gem::Requirement
|
307
|
+
none: false
|
308
|
+
requirements:
|
309
|
+
- - ~>
|
310
|
+
- !ruby/object:Gem::Version
|
311
|
+
version: 1.0.1
|
312
|
+
type: :runtime
|
313
|
+
prerelease: false
|
314
|
+
version_requirements: !ruby/object:Gem::Requirement
|
315
|
+
none: false
|
316
|
+
requirements:
|
317
|
+
- - ~>
|
318
|
+
- !ruby/object:Gem::Version
|
319
|
+
version: 1.0.1
|
320
|
+
- !ruby/object:Gem::Dependency
|
321
|
+
name: tzinfo-data
|
306
322
|
requirement: !ruby/object:Gem::Requirement
|
307
323
|
none: false
|
308
324
|
requirements:
|
@@ -408,7 +424,6 @@ files:
|
|
408
424
|
- lib/flapjack/filters/acknowledgement.rb
|
409
425
|
- lib/flapjack/filters/base.rb
|
410
426
|
- lib/flapjack/filters/delays.rb
|
411
|
-
- lib/flapjack/filters/detect_mass_client_failures.rb
|
412
427
|
- lib/flapjack/filters/ok.rb
|
413
428
|
- lib/flapjack/filters/scheduled_maintenance.rb
|
414
429
|
- lib/flapjack/filters/unscheduled_maintenance.rb
|
@@ -429,6 +444,10 @@ files:
|
|
429
444
|
- lib/flapjack/gateways/web/public/css/bootstrap-responsive.min.css
|
430
445
|
- lib/flapjack/gateways/web/public/css/bootstrap.min.css
|
431
446
|
- lib/flapjack/gateways/web/public/css/flapjack.css
|
447
|
+
- lib/flapjack/gateways/web/public/img/flapjack-favicon-32-16.ico
|
448
|
+
- lib/flapjack/gateways/web/public/img/flapjack-favicon-64-32-24-16.ico
|
449
|
+
- lib/flapjack/gateways/web/public/img/flapjack-transparent-300.png
|
450
|
+
- lib/flapjack/gateways/web/public/img/flapjack-transparent-350-400.png
|
432
451
|
- lib/flapjack/gateways/web/public/img/flapjack_white_bg_400_353.jpeg
|
433
452
|
- lib/flapjack/gateways/web/public/img/glyphicons-halflings-white.png
|
434
453
|
- lib/flapjack/gateways/web/public/img/glyphicons-halflings.png
|
@@ -466,7 +485,6 @@ files:
|
|
466
485
|
- spec/lib/flapjack/data/tag_spec.rb
|
467
486
|
- spec/lib/flapjack/filters/acknowledgement_spec.rb
|
468
487
|
- spec/lib/flapjack/filters/delays_spec.rb
|
469
|
-
- spec/lib/flapjack/filters/detect_mass_client_failures_spec.rb
|
470
488
|
- spec/lib/flapjack/filters/ok_spec.rb
|
471
489
|
- spec/lib/flapjack/filters/scheduled_maintenance_spec.rb
|
472
490
|
- spec/lib/flapjack/filters/unscheduled_maintenance_spec.rb
|
@@ -529,7 +547,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
529
547
|
version: '0'
|
530
548
|
segments:
|
531
549
|
- 0
|
532
|
-
hash:
|
550
|
+
hash: 2327642757705601515
|
533
551
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
534
552
|
none: false
|
535
553
|
requirements:
|
@@ -538,7 +556,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
538
556
|
version: '0'
|
539
557
|
segments:
|
540
558
|
- 0
|
541
|
-
hash:
|
559
|
+
hash: 2327642757705601515
|
542
560
|
requirements: []
|
543
561
|
rubyforge_project:
|
544
562
|
rubygems_version: 1.8.23
|
@@ -570,7 +588,6 @@ test_files:
|
|
570
588
|
- spec/lib/flapjack/data/tag_spec.rb
|
571
589
|
- spec/lib/flapjack/filters/acknowledgement_spec.rb
|
572
590
|
- spec/lib/flapjack/filters/delays_spec.rb
|
573
|
-
- spec/lib/flapjack/filters/detect_mass_client_failures_spec.rb
|
574
591
|
- spec/lib/flapjack/filters/ok_spec.rb
|
575
592
|
- spec/lib/flapjack/filters/scheduled_maintenance_spec.rb
|
576
593
|
- spec/lib/flapjack/filters/unscheduled_maintenance_spec.rb
|
@@ -1,44 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
|
3
|
-
require 'flapjack/filters/base'
|
4
|
-
|
5
|
-
module Flapjack
|
6
|
-
module Filters
|
7
|
-
|
8
|
-
# * If the service event’s state is a failure, and the total number of failing client checks is
|
9
|
-
# over a threshold (e.g. 10 checks are failing), then set a meta flag noting the threshold has
|
10
|
-
# been tripped, and generate an event for this meta check
|
11
|
-
# * If the service event’s state is ok, and the meta flag is set, and the total number of
|
12
|
-
# failing client checks is less than a threshold (eg 10), then unset the flag, and generate an
|
13
|
-
# event for this meta check
|
14
|
-
class DetectMassClientFailures
|
15
|
-
include Base
|
16
|
-
|
17
|
-
def block?(event)
|
18
|
-
client_mass_fail_threshold = 10
|
19
|
-
timestamp = Time.now.to_i
|
20
|
-
|
21
|
-
if event.service?
|
22
|
-
client_fail_count = @redis.zcount("failed_checks:#{event.client}", '-inf', '+inf')
|
23
|
-
|
24
|
-
if client_fail_count >= client_mass_fail_threshold
|
25
|
-
# set the flag
|
26
|
-
# FIXME: perhaps implement this with tagging
|
27
|
-
@redis.add("mass_failed_client:#{event.client}", timestamp)
|
28
|
-
@redis.zadd("mass_failure_events_client:#{event.client}", 0, timestamp)
|
29
|
-
else
|
30
|
-
# unset the flag
|
31
|
-
start_mf = @redis.get("mass_failed_client:#{event.client}")
|
32
|
-
duration = Time.now.to_i - start_mf.to_i
|
33
|
-
@redis.del("mass_failed_client:#{event.client}")
|
34
|
-
@redis.zadd("mass_failure_events_client:#{event.client}", duration, start_mf)
|
35
|
-
end
|
36
|
-
end
|
37
|
-
|
38
|
-
result = false
|
39
|
-
@logger.debug("Filter: DetectMassClientFailures: #{result ? "block" : "pass"}")
|
40
|
-
result
|
41
|
-
end
|
42
|
-
end
|
43
|
-
end
|
44
|
-
end
|