flapjack 0.7.18 → 0.7.19

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 (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,7 +1,9 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- require "httparty"
4
- require "json"
3
+ require 'httparty'
4
+
5
+ require 'oj'
6
+ Oj.default_options = { :indent => 0, :mode => :strict }
5
7
 
6
8
  class Foo
7
9
 
@@ -153,7 +155,7 @@ class Foo
153
155
  do_post(url, data)
154
156
  end
155
157
 
156
- rule = JSON.parse(get('/contacts/21/notification_rules').body).last
158
+ rule = Oj.load(get('/contacts/21/notification_rules').body).last
157
159
  rule_id = rule['id']
158
160
  raise RuntimeError unless rule_id
159
161
  puts "****** NOTIFICATION RULE ID TO PICK ON (PUT, DELETE) IS: #{rule_id} ******"
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.18
4
+ version: 0.7.19
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-07-05 00:00:00.000000000 Z
14
+ date: 2013-07-17 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: dante
@@ -30,23 +30,7 @@ dependencies:
30
30
  - !ruby/object:Gem::Version
31
31
  version: '0'
32
32
  - !ruby/object:Gem::Dependency
33
- name: log4r
34
- requirement: !ruby/object:Gem::Requirement
35
- none: false
36
- requirements:
37
- - - ! '>='
38
- - !ruby/object:Gem::Version
39
- version: '0'
40
- type: :runtime
41
- prerelease: false
42
- version_requirements: !ruby/object:Gem::Requirement
43
- none: false
44
- requirements:
45
- - - ! '>='
46
- - !ruby/object:Gem::Version
47
- version: '0'
48
- - !ruby/object:Gem::Dependency
49
- name: yajl-ruby
33
+ name: oj
50
34
  requirement: !ruby/object:Gem::Requirement
51
35
  none: false
52
36
  requirements:
@@ -205,22 +189,6 @@ dependencies:
205
189
  - - ! '>='
206
190
  - !ruby/object:Gem::Version
207
191
  version: '0'
208
- - !ruby/object:Gem::Dependency
209
- name: haml
210
- requirement: !ruby/object:Gem::Requirement
211
- none: false
212
- requirements:
213
- - - ! '>='
214
- - !ruby/object:Gem::Version
215
- version: '0'
216
- type: :runtime
217
- prerelease: false
218
- version_requirements: !ruby/object:Gem::Requirement
219
- none: false
220
- requirements:
221
- - - ! '>='
222
- - !ruby/object:Gem::Version
223
- version: '0'
224
192
  - !ruby/object:Gem::Dependency
225
193
  name: thin
226
194
  requirement: !ruby/object:Gem::Requirement
@@ -437,7 +405,6 @@ files:
437
405
  - lib/flapjack/data/notification_rule.rb
438
406
  - lib/flapjack/data/tag.rb
439
407
  - lib/flapjack/data/tag_set.rb
440
- - lib/flapjack/executive.rb
441
408
  - lib/flapjack/filters/acknowledgement.rb
442
409
  - lib/flapjack/filters/base.rb
443
410
  - lib/flapjack/filters/delays.rb
@@ -452,7 +419,7 @@ files:
452
419
  - lib/flapjack/gateways/api/entity_presenter.rb
453
420
  - lib/flapjack/gateways/api/rack/json_params_parser.rb
454
421
  - lib/flapjack/gateways/email.rb
455
- - lib/flapjack/gateways/email/alert.html.haml
422
+ - lib/flapjack/gateways/email/alert.html.erb
456
423
  - lib/flapjack/gateways/email/alert.text.erb
457
424
  - lib/flapjack/gateways/jabber.rb
458
425
  - lib/flapjack/gateways/oobetet.rb
@@ -466,21 +433,23 @@ files:
466
433
  - lib/flapjack/gateways/web/public/img/glyphicons-halflings-white.png
467
434
  - lib/flapjack/gateways/web/public/img/glyphicons-halflings.png
468
435
  - lib/flapjack/gateways/web/public/js/bootstrap.min.js
469
- - lib/flapjack/gateways/web/views/_css.haml
470
- - lib/flapjack/gateways/web/views/_foot.haml
471
- - lib/flapjack/gateways/web/views/_head.haml
472
- - lib/flapjack/gateways/web/views/_nav.haml
473
- - lib/flapjack/gateways/web/views/check.haml
474
- - lib/flapjack/gateways/web/views/checks.haml
475
- - lib/flapjack/gateways/web/views/contact.haml
476
- - lib/flapjack/gateways/web/views/contacts.haml
477
- - lib/flapjack/gateways/web/views/entities.haml
478
- - lib/flapjack/gateways/web/views/entity.haml
479
- - lib/flapjack/gateways/web/views/index.haml
480
- - lib/flapjack/gateways/web/views/self_stats.haml
436
+ - lib/flapjack/gateways/web/views/_css.html.erb
437
+ - lib/flapjack/gateways/web/views/_foot.html.erb
438
+ - lib/flapjack/gateways/web/views/_head.html.erb
439
+ - lib/flapjack/gateways/web/views/_nav.html.erb
440
+ - lib/flapjack/gateways/web/views/check.html.erb
441
+ - lib/flapjack/gateways/web/views/checks.html.erb
442
+ - lib/flapjack/gateways/web/views/contact.html.erb
443
+ - lib/flapjack/gateways/web/views/contacts.html.erb
444
+ - lib/flapjack/gateways/web/views/entities.html.erb
445
+ - lib/flapjack/gateways/web/views/entity.html.erb
446
+ - lib/flapjack/gateways/web/views/index.html.erb
447
+ - lib/flapjack/gateways/web/views/self_stats.html.erb
481
448
  - lib/flapjack/logger.rb
449
+ - lib/flapjack/notifier.rb
482
450
  - lib/flapjack/patches.rb
483
451
  - lib/flapjack/pikelet.rb
452
+ - lib/flapjack/processor.rb
484
453
  - lib/flapjack/rack_logger.rb
485
454
  - lib/flapjack/redis_pool.rb
486
455
  - lib/flapjack/utility.rb
@@ -495,7 +464,6 @@ files:
495
464
  - spec/lib/flapjack/data/notification_rule_spec.rb
496
465
  - spec/lib/flapjack/data/notification_spec.rb
497
466
  - spec/lib/flapjack/data/tag_spec.rb
498
- - spec/lib/flapjack/executive_spec.rb
499
467
  - spec/lib/flapjack/filters/acknowledgement_spec.rb
500
468
  - spec/lib/flapjack/filters/delays_spec.rb
501
469
  - spec/lib/flapjack/filters/detect_mass_client_failures_spec.rb
@@ -512,16 +480,18 @@ files:
512
480
  - spec/lib/flapjack/gateways/oobetet_spec.rb
513
481
  - spec/lib/flapjack/gateways/pagerduty_spec.rb
514
482
  - spec/lib/flapjack/gateways/sms_messagenet.spec.rb
515
- - spec/lib/flapjack/gateways/web/views/check.haml_spec.rb
516
- - spec/lib/flapjack/gateways/web/views/contact.haml_spec.rb
517
- - spec/lib/flapjack/gateways/web/views/index.haml_spec.rb
483
+ - spec/lib/flapjack/gateways/web/views/check.html.erb_spec.rb
484
+ - spec/lib/flapjack/gateways/web/views/contact.html.erb_spec.rb
485
+ - spec/lib/flapjack/gateways/web/views/index.html.erb_spec.rb
518
486
  - spec/lib/flapjack/gateways/web_spec.rb
519
487
  - spec/lib/flapjack/logger_spec.rb
488
+ - spec/lib/flapjack/notifier_spec.rb
520
489
  - spec/lib/flapjack/pikelet_spec.rb
490
+ - spec/lib/flapjack/processor_spec.rb
521
491
  - spec/lib/flapjack/redis_pool_spec.rb
522
492
  - spec/lib/flapjack/utility_spec.rb
523
493
  - spec/spec_helper.rb
524
- - spec/support/haml_view_helper.rb
494
+ - spec/support/erb_view_helper.rb
525
495
  - spec/support/profile_all_formatter.rb
526
496
  - spec/support/uncolored_doc_formatter.rb
527
497
  - tasks/events.rake
@@ -557,7 +527,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
557
527
  version: '0'
558
528
  segments:
559
529
  - 0
560
- hash: -3760765416681204020
530
+ hash: -4516922423453420301
561
531
  required_rubygems_version: !ruby/object:Gem::Requirement
562
532
  none: false
563
533
  requirements:
@@ -566,7 +536,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
566
536
  version: '0'
567
537
  segments:
568
538
  - 0
569
- hash: -3760765416681204020
539
+ hash: -4516922423453420301
570
540
  requirements: []
571
541
  rubyforge_project:
572
542
  rubygems_version: 1.8.23
@@ -596,7 +566,6 @@ test_files:
596
566
  - spec/lib/flapjack/data/notification_rule_spec.rb
597
567
  - spec/lib/flapjack/data/notification_spec.rb
598
568
  - spec/lib/flapjack/data/tag_spec.rb
599
- - spec/lib/flapjack/executive_spec.rb
600
569
  - spec/lib/flapjack/filters/acknowledgement_spec.rb
601
570
  - spec/lib/flapjack/filters/delays_spec.rb
602
571
  - spec/lib/flapjack/filters/detect_mass_client_failures_spec.rb
@@ -613,15 +582,17 @@ test_files:
613
582
  - spec/lib/flapjack/gateways/oobetet_spec.rb
614
583
  - spec/lib/flapjack/gateways/pagerduty_spec.rb
615
584
  - spec/lib/flapjack/gateways/sms_messagenet.spec.rb
616
- - spec/lib/flapjack/gateways/web/views/check.haml_spec.rb
617
- - spec/lib/flapjack/gateways/web/views/contact.haml_spec.rb
618
- - spec/lib/flapjack/gateways/web/views/index.haml_spec.rb
585
+ - spec/lib/flapjack/gateways/web/views/check.html.erb_spec.rb
586
+ - spec/lib/flapjack/gateways/web/views/contact.html.erb_spec.rb
587
+ - spec/lib/flapjack/gateways/web/views/index.html.erb_spec.rb
619
588
  - spec/lib/flapjack/gateways/web_spec.rb
620
589
  - spec/lib/flapjack/logger_spec.rb
590
+ - spec/lib/flapjack/notifier_spec.rb
621
591
  - spec/lib/flapjack/pikelet_spec.rb
592
+ - spec/lib/flapjack/processor_spec.rb
622
593
  - spec/lib/flapjack/redis_pool_spec.rb
623
594
  - spec/lib/flapjack/utility_spec.rb
624
595
  - spec/spec_helper.rb
625
- - spec/support/haml_view_helper.rb
596
+ - spec/support/erb_view_helper.rb
626
597
  - spec/support/profile_all_formatter.rb
627
598
  - spec/support/uncolored_doc_formatter.rb
@@ -1,8 +0,0 @@
1
- %div{:class => "container"}
2
- %p{:class => "muted credit"}
3
- = "Flapjack version #{::Flapjack::VERSION} | "
4
- %a{:href => 'http://flapjack-project.com'}
5
- Flapjack Project
6
- = " | "
7
- %a{:href => 'https://github.com/flpjck/flapjack'}
8
- Flapjack on Github
@@ -1,10 +0,0 @@
1
- %meta{:name => 'viewport',
2
- :content => 'width=device-width, initial-scale=1.0'}
3
- %link{:rel => 'stylesheet',
4
- :href => '/css/bootstrap.min.css',
5
- :media => 'screen'}
6
- %link{:rel => 'stylesheet',
7
- :href => '/css/flapjack.css',
8
- :media => 'screen'}
9
- %link{:rel => 'stylesheet',
10
- :href => '/css/bootstrap-responsive.min.css'}
@@ -1,14 +0,0 @@
1
- %p
2
- %a(title='' href='/') Summary
3
- |
4
- %a(title='' href='/entities_all') All Entities
5
- |
6
- %a(title='' href='/entities_failing') Failing Entities
7
- |
8
- %a(title='' href='/checks_all') All Checks
9
- |
10
- %a(title='' href='/checks_failing') Failing Checks
11
- |
12
- %a(title='' href='/contacts') Contacts
13
- |
14
- %a(title='' href='/self_stats') Internal Statistics
@@ -1,191 +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
- - check_path_escaped = URI.escape(@entity, ' #&;/=?') << '/' << URI.escape(@check, ' #&;/=?')
6
- - current_time = Time.now
7
- %html
8
- %head
9
- %title Flapjack - Check: #{@entity}:#{@check}
10
- = head
11
- %body
12
- %div#wrap
13
- %div{:class => "container"}
14
- %div{:class => "page-header"}
15
- = nav
16
- %h2 #{@check} on #{@entity}
17
- %h3 State: #{@check_state ? @check_state.upcase : ''}
18
- - if (['warning', 'critical', 'unknown'].include?(@check_state) and !@current_scheduled_maintenance)
19
- %form{:action => "/acknowledgements/#{check_path_escaped}", :method => "post", :class => "form-inline"}
20
- %input{:type => 'hidden', :name => 'acknowledgement_id', :value => "#{@acknowledgement_id}"}
21
- %input{:type => 'submit', :value => @current_unscheduled_maintenance ? 'Replace acknowledgment' : 'Acknowledge', :class => 'button'}
22
- with
23
- %label{:for => 'summary'}
24
- summary:
25
- %input{:type => 'text', :name => 'summary', :value => ''}
26
- %label{:for => 'duration'}
27
- duration:
28
- %input{:type => 'text', :name => 'duration', :value => ''}
29
- e.g. "5 hours"
30
- - if @current_unscheduled_maintenance
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} -&gt; #{finish} (#{remain} remaining)
36
- %form{:action => "/end_unscheduled_maintenance/#{check_path_escaped}", :method => "post"}
37
- %p
38
- %input{:type => 'submit', :value => 'End Unscheduled Maintenance (Unacknowledge)', :class => 'button'}
39
- - if @current_scheduled_maintenance
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} -&gt; #{finish} (#{remain} remaining)
45
- %h3 Output: #{@check_summary}
46
- %p #{@check_details}
47
- %table{:class => "table table-hover table-condensed"}
48
- %tr
49
- %td Last state change:
50
- %td #{relative_time_ago(Time.at(@check_last_change.to_i))} ago
51
- %td #{Time.at(@check_last_change.to_i)}
52
- %td &nbsp;
53
- %tr
54
- %td Last update:
55
- %td #{relative_time_ago(Time.at(@check_last_update.to_i))} ago
56
- %td #{Time.at(@check_last_update.to_i)}
57
- %td &nbsp;
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]}
62
- %tr
63
- %td Last critical notification:
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]}
72
- %tr
73
- %td Last warning notification:
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]}
82
- %tr
83
- %td Last unknown notification:
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]}
92
- %tr
93
- %td Last recovery notification:
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]}
102
- %tr
103
- %td Last acknowledgement notification:
104
- %td= last_ack ? last_ack[:relative] : 'never'
105
- %td= last_ack ? last_ack[:time] : ''
106
- %td= last_ack ? last_ack[:summary] : ''
107
-
108
- %h3 Scheduled Maintenance Periods
109
- - if @scheduled_maintenances && !@scheduled_maintenances.empty?
110
- %table{:class => "table table-bordered table-hover table-condensed"}
111
- %tr
112
- %th Start
113
- %th End
114
- %th Duration
115
- %th Summary
116
- %th Actions
117
- - @scheduled_maintenances.sort_by {|s| s[:start_time]}.each do |scheduled_maintenance|
118
- - start_time = scheduled_maintenance[:start_time]
119
- - end_time = scheduled_maintenance[:end_time]
120
- - duration = scheduled_maintenance[:duration]
121
- - summary = scheduled_maintenance[:summary]
122
- %tr
123
- %td= Time.at(start_time).to_s
124
- %td= Time.at(end_time).to_s
125
- %td= ChronicDuration.output(duration)
126
- %td= summary
127
- %td
128
- - if end_time > current_time.to_i
129
- - label = (start_time > current_time.to_i) ? 'Delete' : 'End Now'
130
- %form{ :action => "/scheduled_maintenances/#{check_path_escaped}", :method => "post"}
131
- %input{:type => 'hidden', :name => '_method', :value => 'delete'}
132
- %input{:type => 'hidden', :name => 'start_time', :value => start_time}
133
- %input{:type => 'submit', :value => label, :class => 'button'}
134
- - else
135
- %p No maintenance is scheduled
136
- %h4 Add Scheduled Maintenance
137
- %form{:action => "/scheduled_maintenances/#{check_path_escaped}", :method => "post", :class => "form-horizontal"}
138
- %div{:class => "control-group"}
139
- %label{:class => "control-label", :for => 'start_time'} Start time:
140
- %div{:class => "controls"}
141
- %input{:type => 'text', :name => 'start_time', :class => 'text', :size => '20', :maxlength => '80'}
142
- e.g. "today 4pm", "two hours hence", "friday 2pm", "2012-01-28 13:00"
143
- %div{:class => "control-group"}
144
- %label{:class => "control-label", :for => 'duration'} Duration:
145
- %div{:class => "controls"}
146
- %input{:type => 'text', :name => 'duration', :class => 'text', :size => '20', :maxlength => '80'}
147
- e.g. "1 hour", "2:30:00", "three days", etc
148
- %div{:class => "control-group"}
149
- %label{:class => "control-label", :for => 'summary'} Summary:
150
- %div{:class => "controls"}
151
- %input{:type => 'text', :name => 'summary', :class => 'text', :size => '80', :maxlength => '160'}
152
- %div{:class => "control-group"}
153
- %div{:class => "controls"}
154
- %input{:type => 'submit', :value => 'Save', :class => 'button'}
155
- %p Times given will be interpreted in the local timezone of #{local_timezone}
156
-
157
- - if @state_changes && !@state_changes.empty?
158
- %h3 Recent state changes
159
- %table{:class => "table table-bordered table-hover table-condensed"}
160
- %tr
161
- %th Timestamp
162
- %th State
163
- %th Summary
164
- - @state_changes.each do |sc|
165
- %tr
166
- %td= Time.at(sc[:timestamp]).to_s
167
- %td= sc[:state]
168
- %td= sc[:summary]
169
-
170
- %h3 Contacts
171
- - if @contacts && !@contacts.empty?
172
- %table{:class => "table table-bordered table-hover table-condensed"}
173
- %tr
174
- %th Name
175
- %th Media
176
- - @contacts.sort_by {|c| [c.first_name, c.last_name] }.each do |contact|
177
- %tr
178
- %td
179
- - link = "/contacts/#{contact.id}"
180
- %a(title='contact details' href=link) #{contact.name}
181
- %td
182
- - if contact.media && !contact.media.empty?
183
- %p= contact.media.keys.collect(&:capitalize).join(", ")
184
- - else
185
- %p No media
186
- - else
187
- %p No contacts
188
- %div#push
189
- %div#footer
190
- = foot
191
-
@@ -1,49 +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} Checks
8
- = head
9
- %body
10
- %div#wrap
11
- %div{:class => "container"}
12
- %div{:class => "page-header"}
13
- = nav
14
- %h2 #{@adjective.capitalize} Checks
15
- %p #{@count_failing_checks} failing out of #{@count_all_checks}
16
- %table{:class => "table table-bordered table-hover table-condensed"}
17
- %tr
18
- %th Entity
19
- %th Check
20
- %th State
21
- %th Last State Change
22
- %th Last Update
23
- %th Last Notification
24
- - @states.each do |entity, check, status, changed, updated, in_unscheduled_outage, in_scheduled_outage, notified_kind, notified|
25
- - colour_class = status
26
- - case status
27
- - when 'critical', 'unknown'
28
- - colour_class = 'error'
29
- - when 'ok', 'up'
30
- - colour_class = 'success'
31
- %tr{:class => colour_class}
32
- %td= entity
33
- %td
34
- - link = "/check?entity=" + CGI.escape(entity) + "&check=" + CGI.escape(check)
35
- %a(title='check detail' href=link) #{check}
36
- %td{:class => status}
37
- = status.upcase
38
- = " (Acknowledged)" if in_unscheduled_outage
39
- = " (Scheduled Maintenance)" if in_scheduled_outage
40
- %td= relative_time_ago(Time.at(changed.to_i)) + ' ago'
41
- %td= relative_time_ago(Time.at(updated.to_i)) + ' ago'
42
- - if notified && (notified > 0)
43
- - last_notified = relative_time_ago(Time.at(notified.to_i)) + " ago, #{notified_kind}"
44
- - else
45
- - last_notified = 'never'
46
- %td= last_notified
47
- %div#push
48
- %div#footer
49
- = foot