flapjack 0.7.18 → 0.7.19

Sign up to get free protection for your applications and to get access to all the features.
Files changed (100) hide show
  1. data/CHANGELOG.md +7 -0
  2. data/bin/flapjack +3 -0
  3. data/bin/flapjack-nagios-receiver +4 -1
  4. data/bin/flapjack-netsaint-parser +2 -1
  5. data/bin/flapjack-populator +6 -3
  6. data/bin/receive-events +3 -1
  7. data/bin/simulate-failed-check +2 -1
  8. data/etc/flapjack_config.yaml.example +20 -0
  9. data/features/events.feature +1 -1
  10. data/features/events_check_names.feature +1 -1
  11. data/features/notification_rules.feature +1 -1
  12. data/features/notifications.feature +1 -1
  13. data/features/steps/events_steps.rb +18 -17
  14. data/features/steps/flapjack-netsaint-parser_steps.rb +1 -2
  15. data/features/steps/notifications_steps.rb +14 -1
  16. data/features/support/env.rb +27 -10
  17. data/flapjack.gemspec +1 -3
  18. data/lib/flapjack/coordinator.rb +30 -20
  19. data/lib/flapjack/data/contact.rb +3 -2
  20. data/lib/flapjack/data/entity.rb +3 -3
  21. data/lib/flapjack/data/entity_check.rb +116 -43
  22. data/lib/flapjack/data/event.rb +10 -10
  23. data/lib/flapjack/data/message.rb +3 -6
  24. data/lib/flapjack/data/notification.rb +122 -57
  25. data/lib/flapjack/data/notification_rule.rb +11 -11
  26. data/lib/flapjack/filters/acknowledgement.rb +2 -2
  27. data/lib/flapjack/filters/ok.rb +1 -1
  28. data/lib/flapjack/gateways/api/entity_check_presenter.rb +1 -0
  29. data/lib/flapjack/gateways/api/entity_methods.rb +4 -6
  30. data/lib/flapjack/gateways/api/rack/json_params_parser.rb +1 -1
  31. data/lib/flapjack/gateways/email.rb +3 -5
  32. data/lib/flapjack/gateways/email/{alert.html.haml → alert.html.erb} +0 -0
  33. data/lib/flapjack/gateways/jabber.rb +66 -35
  34. data/lib/flapjack/gateways/oobetet.rb +5 -7
  35. data/lib/flapjack/gateways/pagerduty.rb +7 -7
  36. data/lib/flapjack/gateways/web.rb +101 -41
  37. data/lib/flapjack/gateways/web/public/css/flapjack.css +1 -1
  38. data/lib/flapjack/gateways/web/views/{_css.haml → _css.html.erb} +2 -1
  39. data/lib/flapjack/gateways/web/views/_foot.html.erb +3 -0
  40. data/lib/flapjack/gateways/web/views/_head.html.erb +4 -0
  41. data/lib/flapjack/gateways/web/views/_nav.html.erb +9 -0
  42. data/lib/flapjack/gateways/web/views/check.html.erb +204 -0
  43. data/lib/flapjack/gateways/web/views/checks.html.erb +77 -0
  44. data/lib/flapjack/gateways/web/views/contact.html.erb +114 -0
  45. data/lib/flapjack/gateways/web/views/contacts.html.erb +42 -0
  46. data/lib/flapjack/gateways/web/views/entities.html.erb +39 -0
  47. data/lib/flapjack/gateways/web/views/entity.html.erb +67 -0
  48. data/lib/flapjack/gateways/web/views/index.html.erb +27 -0
  49. data/lib/flapjack/gateways/web/views/self_stats.html.erb +97 -0
  50. data/lib/flapjack/logger.rb +71 -23
  51. data/lib/flapjack/notifier.rb +157 -0
  52. data/lib/flapjack/patches.rb +1 -41
  53. data/lib/flapjack/pikelet.rb +4 -2
  54. data/lib/flapjack/{executive.rb → processor.rb} +32 -145
  55. data/lib/flapjack/version.rb +1 -1
  56. data/spec/lib/flapjack/coordinator_spec.rb +134 -71
  57. data/spec/lib/flapjack/data/contact_spec.rb +1 -0
  58. data/spec/lib/flapjack/data/entity_check_spec.rb +146 -30
  59. data/spec/lib/flapjack/data/entity_spec.rb +4 -4
  60. data/spec/lib/flapjack/data/event_spec.rb +4 -4
  61. data/spec/lib/flapjack/data/message_spec.rb +2 -3
  62. data/spec/lib/flapjack/data/notification_spec.rb +13 -19
  63. data/spec/lib/flapjack/gateways/api/entity_methods_spec.rb +2 -2
  64. data/spec/lib/flapjack/gateways/jabber_spec.rb +34 -0
  65. data/spec/lib/flapjack/gateways/pagerduty_spec.rb +0 -2
  66. data/spec/lib/flapjack/gateways/web/views/{check.haml_spec.rb → check.html.erb_spec.rb} +2 -2
  67. data/spec/lib/flapjack/gateways/web/views/{contact.haml_spec.rb → contact.html.erb_spec.rb} +3 -3
  68. data/spec/lib/flapjack/gateways/web/views/index.html.erb_spec.rb +14 -0
  69. data/spec/lib/flapjack/gateways/web_spec.rb +20 -8
  70. data/spec/lib/flapjack/logger_spec.rb +30 -28
  71. data/spec/lib/flapjack/notifier_spec.rb +6 -0
  72. data/spec/lib/flapjack/pikelet_spec.rb +8 -8
  73. data/spec/lib/flapjack/{executive_spec.rb → processor_spec.rb} +4 -4
  74. data/spec/spec_helper.rb +1 -13
  75. data/spec/support/erb_view_helper.rb +23 -0
  76. data/tasks/profile.rake +1 -1
  77. data/tmp/acknowledge.rb +3 -1
  78. data/tmp/create_event_ok.rb +3 -1
  79. data/tmp/create_event_unknown.rb +3 -1
  80. data/tmp/create_events_failure.rb +3 -1
  81. data/tmp/create_events_ok.rb +3 -1
  82. data/tmp/create_events_ok_fail_ack_ok.rb +3 -1
  83. data/tmp/create_events_ok_failure.rb +3 -1
  84. data/tmp/create_events_ok_failure_ack.rb +3 -1
  85. data/tmp/test_json_post.rb +5 -3
  86. data/tmp/test_notification_rules_api.rb +5 -3
  87. metadata +32 -61
  88. data/lib/flapjack/gateways/web/views/_foot.haml +0 -8
  89. data/lib/flapjack/gateways/web/views/_head.haml +0 -10
  90. data/lib/flapjack/gateways/web/views/_nav.haml +0 -14
  91. data/lib/flapjack/gateways/web/views/check.haml +0 -191
  92. data/lib/flapjack/gateways/web/views/checks.haml +0 -49
  93. data/lib/flapjack/gateways/web/views/contact.haml +0 -85
  94. data/lib/flapjack/gateways/web/views/contacts.haml +0 -30
  95. data/lib/flapjack/gateways/web/views/entities.haml +0 -28
  96. data/lib/flapjack/gateways/web/views/entity.haml +0 -50
  97. data/lib/flapjack/gateways/web/views/index.haml +0 -32
  98. data/lib/flapjack/gateways/web/views/self_stats.haml +0 -70
  99. data/spec/lib/flapjack/gateways/web/views/index.haml_spec.rb +0 -13
  100. data/spec/support/haml_view_helper.rb +0 -15
@@ -1,85 +0,0 @@
1
- !!! 5
2
- - nav = render_haml('_nav.haml', self)
3
- - head = render_haml('_head.haml', self)
4
- - foot = render_haml('_foot.haml', self)
5
- %html
6
- %head
7
- %title Flapjack - #{@contact.name} (contact)
8
- = head
9
- %body
10
- %div#wrap
11
- %div{:class => "container"}
12
- %div{:class => "page-header"}
13
- = nav
14
- %h2= @contact.name
15
- %h3= "Contact Media"
16
- - if @contact.media && !@contact.media.empty?
17
- %table{:class => "table table-bordered table-hover table-condensed"}
18
- %tr
19
- %th Media
20
- %th Address
21
- %th Interval
22
- - @contact.media.each_pair do |mk, mv|
23
- %tr
24
- - if 'pagerduty'.eql?(mk)
25
- %td PagerDuty
26
- %td
27
- - @pagerduty_credentials.each_pair do |pk, pv|
28
- - if 'password'.eql?(pk)
29
- %p= "#{pk}: ..."
30
- - else
31
- %p= "#{pk}: #{pv}"
32
- %td -
33
- - else
34
- %td #{mk.capitalize}
35
- %td #{mv}
36
- %td
37
- - if interval = @contact.media_intervals[mk]
38
- #{@contact.media_intervals[mk]} seconds
39
- - else
40
- no custom interval
41
- - else
42
- %p No media
43
- %h3= "Entities and Checks"
44
- - if @entities_and_checks && !@entities_and_checks.empty?
45
- %table{:class => "table table-bordered table-hover table-condensed"}
46
- %tr
47
- %th Entity
48
- %th Checks
49
- - @entities_and_checks.each do |ec|
50
- - entity = ec[:entity]
51
- - checks = ec[:checks]
52
- %tr
53
- %td
54
- - link = "/entity/#{CGI.escape(entity.name)}"
55
- %a(title='entity status' href=link) #{entity.name}
56
- %td
57
- - checks.each do |check|
58
- - link = "/check?entity=#{CGI.escape(entity.name)}&check=#{CGI.escape(check)}"
59
- %a(title='check status' href=link) #{check}
60
- - else
61
- %p No entities
62
- %h3= "Notification Rules"
63
- - rules = @contact.notification_rules
64
- - if rules && rules.length > 0
65
- %table{:class => "table table-bordered table-hover table-condensed"}
66
- %tr
67
- %th ID
68
- %th Entities
69
- %th Entity Tags
70
- %th Warning Media
71
- %th Critical Media
72
- %th Time Restrictions
73
- - rules.each do |r|
74
- %tr
75
- %td #{r.id}
76
- %td #{r.entities.join(', ')}
77
- %td #{r.entity_tags ? r.entity_tags.join(', ') : ''}
78
- %td #{r.warning_media.join(', ')}
79
- %td #{r.critical_media.join(', ')}
80
- %td #{r.time_restrictions}
81
- - else
82
- %p No notification rules
83
- %div#push
84
- %div#footer
85
- = foot
@@ -1,30 +0,0 @@
1
- !!! 5
2
- - nav = render_haml('_nav.haml', self)
3
- - head = render_haml('_head.haml', self)
4
- - foot = render_haml('_foot.haml', self)
5
- %html
6
- %head
7
- %title Flapjack - Contacts
8
- = head
9
- %body
10
- %div#wrap
11
- %div{:class => "container"}
12
- %div{:class => "page-header"}
13
- = nav
14
- %h2 Contacts
15
- - if @contacts && !@contacts.empty?
16
- %table{:class => "table table-bordered table-hover table-condensed"}
17
- %tr
18
- %th Name
19
- %th Email
20
- - @contacts.sort_by {|c| [c.first_name, c.last_name] }.each do |contact|
21
- %tr
22
- %td
23
- - link = "/contacts/#{contact.id}"
24
- %a(title='contact details' href=link) #{contact.name}
25
- %td= contact.email
26
- - else
27
- %p No contacts
28
- %div#push
29
- %div#footer
30
- = foot
@@ -1,28 +0,0 @@
1
- !!! 5
2
- - nav = render_haml('_nav.haml', self)
3
- - head = render_haml('_head.haml', self)
4
- - foot = render_haml('_foot.haml', self)
5
- %html
6
- %head
7
- %title Flapjack - #{@adjective.capitalize} Entities
8
- = head
9
- %body
10
- %div#wrap
11
- %div{:class => "container"}
12
- %div{:class => "page-header"}
13
- = nav
14
- %h2 #{@adjective.capitalize} Entities
15
- %p #{@count_failing_entities} failing out of #{@count_all_entities}
16
- %table{:class => "table table-bordered table-hover table-condensed"}
17
- - if @entities.length > 0
18
- - @entities.sort.each do |entity|
19
- %tr
20
- %td
21
- - link = "/entity/#{CGI.escape(entity)}"
22
- %a{:href => link}
23
- #{entity}
24
- - else
25
- %p No check output has been processed yet, so there's no entities we can show you here.
26
- %div#push
27
- %div#footer
28
- = foot
@@ -1,50 +0,0 @@
1
- !!! 5
2
- - nav = render_haml('_nav.haml', self)
3
- - head = render_haml('_head.haml', self)
4
- - foot = render_haml('_foot.haml', self)
5
- %html
6
- %head
7
- %title Flapjack - #{@entity} (entity)
8
- = head
9
- %body
10
- %div#wrap
11
- %div{:class => "container"}
12
- %div{:class => "page-header"}
13
- = nav
14
- %h2 #{@entity}
15
- - if @states.length > 0
16
- %table{:class => "table table-bordered table-hover table-condensed"}
17
- %tr
18
- %th Check
19
- %th State
20
- %th Last State Change
21
- %th Last Update
22
- %th Last Notification
23
- - @states.each do |entity, check, status, changed, updated, in_unscheduled_outage, in_scheduled_outage, notified_kind, notified|
24
- - colour_class = status
25
- - case status
26
- - when 'critical', 'unknown'
27
- - colour_class = 'error'
28
- - when 'ok', 'up'
29
- - colour_class = 'success'
30
- %tr{:class => colour_class}
31
- %td
32
- - link = "/check?entity=" + CGI.escape(entity) + "&check=" + CGI.escape(check)
33
- %a(title='check detail' href=link) #{check}
34
- %td
35
- = status.upcase
36
- = " (Acknowledged)" if in_unscheduled_outage
37
- = " (Scheduled Maintenance)" if in_scheduled_outage
38
- %td= relative_time_ago(Time.at(changed.to_i)) + ' ago'
39
- %td= relative_time_ago(Time.at(updated.to_i)) + ' ago'
40
- - if notified && (notified > 0)
41
- - last_notified = relative_time_ago(Time.at(notified.to_i)) + " ago, #{notified_kind}"
42
- - else
43
- - last_notified = 'never'
44
- %td= last_notified
45
- - else
46
- %div#foo
47
- %p This entity has no check output associated with it
48
- %div#push
49
- %div#footer
50
- = foot
@@ -1,32 +0,0 @@
1
- !!! 5
2
- - nav = render_haml('_nav.haml', self)
3
- - head = render_haml('_head.haml', self)
4
- - foot = render_haml('_foot.haml', self)
5
- %html
6
- %head
7
- %title Flapjack - Summary
8
- = head
9
- %body
10
- %div#wrap
11
- %div{:class => "container"}
12
- %div{:class => "page-header"}
13
- = nav
14
- %h2 Summary
15
- %h4
16
- %a(title='failing entities' href='/entities_failing')
17
- #{@count_failing_entities}
18
- out of
19
- %a(title='all entities' href='/entities_all')
20
- #{@count_all_entities}
21
- entities have failing checks
22
- %h4
23
- %a(title='failing checks' href='/checks_failing')
24
- #{@count_failing_checks}
25
- out of
26
- %a(title='all checks' href='/checks_all')
27
- #{@count_all_checks}
28
- checks are failing
29
- %img{:src => '/img/flapjack_white_bg_400_353.jpeg', :height => 353, :width => 400}
30
- %div#push
31
- %div#footer
32
- = foot
@@ -1,70 +0,0 @@
1
- !!! 5
2
- - nav = render_haml('_nav.haml', self)
3
- - head = render_haml('_head.haml', self)
4
- - foot = render_haml('_foot.haml', self)
5
- %html
6
- %head
7
- %title Flapjack - Internal Statistics
8
- = head
9
- %body
10
- %div#wrap
11
- %div{:class => "container"}
12
- %div{:class => "page-header"}
13
- = nav
14
- %h2 Internal Statistics
15
- %table{:class => "table table-bordered table-hover table-condensed"}
16
- %tr
17
- %td Events queued:
18
- %td= @events_queued
19
- %tr
20
- %td Number of entities:
21
- %td= @count_all_entities
22
- %tr
23
- %td Number of failing entities:
24
- %td= @count_failing_entities
25
- %tr
26
- %td Number of checks:
27
- %td= @count_all_checks
28
- %tr
29
- %td Number of failing checks:
30
- %td= @count_failing_checks
31
- %tr
32
- %td Events processed (all time)
33
- %td #{@event_counters['all']} (ok: #{@event_counters['ok']}, failure: #{@event_counters['failure']}, action: #{@event_counters['action']})
34
- %tr
35
- %td Events processed (this instance)
36
- %td #{@event_counters_instance['all']} (ok: #{@event_counters_instance['ok']}, failure: #{@event_counters_instance['failure']}, action: #{@event_counters_instance['action']})
37
- %tr
38
- %td Average rate (this instance)
39
- %td #{@event_rate_all} events per second
40
- %tr
41
- %td Total keys in redis
42
- %td #{@dbsize}
43
- %tr
44
- %td Uptime
45
- %td= @uptime_string
46
- %tr
47
- %td Boot time
48
- %td= @boot_time
49
- %tr
50
- %td Current time
51
- %td= Time.now
52
- %h4
53
- Executive Instances:
54
- %table{:class => "table table-bordered table-hover"}
55
- %tr
56
- %th Hostname
57
- %th PID
58
- %th Started
59
- - @executive_instances.each do |i|
60
- - hostname, pid = i[0].split(':')
61
- - started = "#{relative_time_ago(Time.at(i[1].to_i))} ago"
62
- %tr
63
- %td= hostname
64
- %td= pid
65
- %td= started
66
- %p
67
- %a{:href => 'self_stats.json'} Instrument as JSON
68
- %div#push
69
- %div#footer
70
- = foot
@@ -1,13 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe 'web/views/checks.haml', :haml_view => true do
4
-
5
- it "should escape unsafe check characters in URI parameters" do
6
- @states = [['abc-xyz-01', 'Disk / Utilisation', '-', '-', '-', false, false, nil, nil]]
7
- @adjective = "all"
8
-
9
- page = render_haml('checks.haml', self)
10
- page.should match(%r{\?entity=abc-xyz-01&check=Disk\+%2F\+Utilisation})
11
- end
12
-
13
- end
@@ -1,15 +0,0 @@
1
- require 'haml'
2
- require 'flapjack/utility'
3
-
4
- module HamlViewHelper
5
-
6
- TEMPLATE_PATH = File.dirname(__FILE__) +
7
- '/../../lib/flapjack/gateways/web/views/'
8
-
9
- include Flapjack::Utility
10
-
11
- def render_haml(file, scope)
12
- Haml::Engine.new(File.read(TEMPLATE_PATH + file)).render(scope)
13
- end
14
-
15
- end