hostmon 0.0.1

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 (74) hide show
  1. data/bin/hostmon +4 -0
  2. data/examples/config.yml +14 -0
  3. data/examples/reports/bad_exit_status/cluster1/mach1/report_2012-06-28-16:49:32.yaml +11 -0
  4. data/examples/reports/bad_exit_status/cluster2/mach1/report_2012-06-14-15:06:12.yaml +11 -0
  5. data/examples/reports/bad_exit_status/cluster2/mach2/report_2012-06-14-15:06:12.yaml +11 -0
  6. data/examples/reports/foo/cluster1/mach1/report_2012-06-28-16:49:32.yaml +10 -0
  7. data/examples/reports/foo/cluster2/mach1/report_2012-06-14-15:06:12.yaml +10 -0
  8. data/examples/reports/foo/cluster2/mach2/report_2012-06-14-15:06:12.yaml +10 -0
  9. data/examples/reports/missing_prelude/cluster1/mach1/report_2012-06-28-16:49:32.yaml +12 -0
  10. data/examples/reports/missing_prelude/cluster2/mach1/report_2012-06-14-15:06:12.yaml +12 -0
  11. data/examples/reports/missing_prelude/cluster2/mach2/report_2012-06-14-15:06:12.yaml +12 -0
  12. data/examples/reports/network/config/bootproto_dhcp/cluster1/mach1/report_2012-06-28-16:49:32.yaml +10 -0
  13. data/examples/reports/network/config/bootproto_dhcp/cluster2/mach1/report_2012-06-14-15:06:12.yaml +10 -0
  14. data/examples/reports/network/config/bootproto_dhcp/cluster2/mach2/report_2012-06-14-15:06:12.yaml +10 -0
  15. data/examples/reports/network/ethernet_bonded/cluster1/mach1/report_2012-06-28-16:49:32.yaml +31 -0
  16. data/examples/reports/network/ethernet_bonded/cluster2/mach1/report_2012-06-14-15:06:12.yaml +22 -0
  17. data/examples/reports/network/ethernet_bonded/cluster2/mach2/report_2012-06-14-15:06:12.yaml +22 -0
  18. data/examples/reports/nonexec/cluster1/mach1/report_2012-06-28-16:49:32.yaml +10 -0
  19. data/examples/reports/nonexec/cluster2/mach1/report_2012-06-14-15:06:12.yaml +10 -0
  20. data/examples/reports/nonexec/cluster2/mach2/report_2012-06-14-15:06:12.yaml +10 -0
  21. data/examples/reports/yum/badcheck/cluster1/mach1/report_2012-06-28-16:49:32.yaml +13 -0
  22. data/examples/reports/yum/badcheck/cluster2/mach1/report_2012-06-14-15:06:12.yaml +13 -0
  23. data/examples/reports/yum/badcheck/cluster2/mach2/report_2012-06-14-15:06:12.yaml +13 -0
  24. data/lib/hostmon.rb +208 -0
  25. data/lib/hostmon/config.rb +47 -0
  26. data/lib/hostmon/helpers.rb +174 -0
  27. data/lib/hostmon/models.rb +4 -0
  28. data/lib/hostmon/models/base.rb +39 -0
  29. data/lib/hostmon/models/check.rb +45 -0
  30. data/lib/hostmon/models/host.rb +211 -0
  31. data/lib/hostmon/models/report.rb +108 -0
  32. data/lib/hostmon/public/css/jquery_themes/hostmon/images/ui-bg_flat_30_cccccc_40x100.png +0 -0
  33. data/lib/hostmon/public/css/jquery_themes/hostmon/images/ui-bg_flat_50_5c5c5c_40x100.png +0 -0
  34. data/lib/hostmon/public/css/jquery_themes/hostmon/images/ui-bg_glass_20_333333_1x400.png +0 -0
  35. data/lib/hostmon/public/css/jquery_themes/hostmon/images/ui-bg_glass_40_000000_1x400.png +0 -0
  36. data/lib/hostmon/public/css/jquery_themes/hostmon/images/ui-bg_glass_40_ffc73d_1x400.png +0 -0
  37. data/lib/hostmon/public/css/jquery_themes/hostmon/images/ui-bg_gloss-wave_25_333333_500x100.png +0 -0
  38. data/lib/hostmon/public/css/jquery_themes/hostmon/images/ui-bg_highlight-soft_15_000000_1x100.png +0 -0
  39. data/lib/hostmon/public/css/jquery_themes/hostmon/images/ui-bg_highlight-soft_80_eeeeee_1x100.png +0 -0
  40. data/lib/hostmon/public/css/jquery_themes/hostmon/images/ui-bg_inset-soft_30_ff4e0a_1x100.png +0 -0
  41. data/lib/hostmon/public/css/jquery_themes/hostmon/images/ui-icons_222222_256x240.png +0 -0
  42. data/lib/hostmon/public/css/jquery_themes/hostmon/images/ui-icons_4b8e0b_256x240.png +0 -0
  43. data/lib/hostmon/public/css/jquery_themes/hostmon/images/ui-icons_a83300_256x240.png +0 -0
  44. data/lib/hostmon/public/css/jquery_themes/hostmon/images/ui-icons_cccccc_256x240.png +0 -0
  45. data/lib/hostmon/public/css/jquery_themes/hostmon/images/ui-icons_ffffff_256x240.png +0 -0
  46. data/lib/hostmon/public/css/jquery_themes/hostmon/jquery-ui-1.8.16.custom.css +568 -0
  47. data/lib/hostmon/public/favicon.ico +0 -0
  48. data/lib/hostmon/public/js/cufon.js +7 -0
  49. data/lib/hostmon/public/js/gotham.font.js +40 -0
  50. data/lib/hostmon/public/js/hostmon.js +89 -0
  51. data/lib/hostmon/public/js/jquery-1.6.2.min.js +18 -0
  52. data/lib/hostmon/public/js/jquery-ui-1.8.16.custom.min.js +791 -0
  53. data/lib/hostmon/public/js/product-design.font.js +8 -0
  54. data/lib/hostmon/public/style.css +311 -0
  55. data/lib/hostmon/rubyfixes.rb +12 -0
  56. data/lib/hostmon/version.rb +3 -0
  57. data/lib/hostmon/views/check.erb +23 -0
  58. data/lib/hostmon/views/check_status.erb +16 -0
  59. data/lib/hostmon/views/cluster.erb +19 -0
  60. data/lib/hostmon/views/host.erb +15 -0
  61. data/lib/hostmon/views/host_status.erb +16 -0
  62. data/lib/hostmon/views/layout.erb +61 -0
  63. data/lib/hostmon/views/partials/check_status_selector.erb +6 -0
  64. data/lib/hostmon/views/partials/host_status_selector.erb +6 -0
  65. data/lib/hostmon/views/partials/hosts_selector.erb +9 -0
  66. data/lib/hostmon/views/partials/report.erb +7 -0
  67. data/lib/hostmon/views/partials/search.erb +18 -0
  68. data/lib/hostmon/views/partials/status_selector.erb +7 -0
  69. data/lib/hostmon/views/search_all.erb +25 -0
  70. data/lib/hostmon/views/search_checks.erb +12 -0
  71. data/lib/hostmon/views/search_host.erb +7 -0
  72. data/lib/hostmon/views/status.erb +15 -0
  73. data/lib/hostmon/views/view.erb +49 -0
  74. metadata +152 -0
@@ -0,0 +1,4 @@
1
+ #!/usr/bin/env ruby
2
+ require 'hostmon'
3
+
4
+ Hostmon::App.run!
@@ -0,0 +1,14 @@
1
+ ---
2
+ :main:
3
+ :report_dir: "./reports" # where read from and store reports, relative to # this file
4
+ # :saved_reports: 1
5
+
6
+ :bugzilla:
7
+ :bugzilla_url: "https://bugzilla.mozilla.org/enter_bug.cgi?alias=&assigned_to=nobody%40mozilla.org&blocked=&bug_file_loc=http%3A%2F%2F&bug_severity=normal&bug_status=NEW&cf_blocking_191=---&cf_blocking_192=---&cf_blocking_20=---&cf_blocking_fennec=---&cf_crash_signature=&cf_status_191=---&cf_status_192=---&cf_status_20=---&cf_status_firefox5=---&cf_status_firefox6=---&cf_status_firefox7=---&cf_status_firefox8=---&cf_tracking_firefox5=---&cf_tracking_firefox6=---&cf_tracking_firefox7=---&cf_tracking_firefox8=---&component=Operations%3A%20Metrics%2FMonitoring&contenttypeentry=&contenttypemethod=autodetect&contenttypeselection=text%2Fplain&data=&dependson=&description=&flag_type-325=X&flag_type-37=X&flag_type-4=X&flag_type-607=X&flag_type-708=X&flag_type-720=X&flag_type-721=X&flag_type-737=X&form_name=enter_bug&groups=services-infra&maketemplate=Remember%20values%20as%20bookmarkable%20template&op_sys=Linux&priority=--&product=Mozilla%20Services&qa_contact=operations%40services.bugs&rep_platform=x86_64&requestee_type-325=&requestee_type-4=&requestee_type-607=&status_whiteboard=&target_milestone=---&version=unspecified"
8
+ :bugzilla_search_url: "https://bugzilla.mozilla.org/buglist.cgi?list_id=1127320&resolution=---&resolution=DUPLICATE&query_format=advanced&short_desc_type=allwords&component=Operations%3A%20Metrics%2FMonitoring&product=Mozilla%20Services"
9
+ :hostlint_url: "localhost:9998"
10
+
11
+ # :amqp:
12
+ # :host: localhost
13
+ # :vhost: /
14
+ # :exchange: hostlint
@@ -0,0 +1,11 @@
1
+ ---
2
+ :status:
3
+ - :CHECK_OK
4
+ - :FAILED_BAD_EXIT_STATUS
5
+ :stdout: ""
6
+ :stderr: ""
7
+ :exit_status: 1
8
+ :timestamp: Thu Jun 28 16:49:32 -0700 2012
9
+ :cluster: cluster1
10
+ :host: mach1
11
+ :name: bad_exit_status
@@ -0,0 +1,11 @@
1
+ ---
2
+ :status:
3
+ - :CHECK_OK
4
+ - :FAILED_BAD_EXIT_STATUS
5
+ :stdout: ''
6
+ :stderr: ''
7
+ :cluster: cluster2
8
+ :exit_status: 1
9
+ :name: bad_exit_status
10
+ :timestamp: Thu Jun 14 15:06:12 -0700 2012
11
+ :host: mach1
@@ -0,0 +1,11 @@
1
+ ---
2
+ :status:
3
+ - :CHECK_OK
4
+ - :FAILED_BAD_EXIT_STATUS
5
+ :stdout: ''
6
+ :stderr: ''
7
+ :cluster: cluster2
8
+ :exit_status: 1
9
+ :name: bad_exit_status
10
+ :timestamp: Thu Jun 14 15:06:12 -0700 2012
11
+ :host: mach2
@@ -0,0 +1,10 @@
1
+ ---
2
+ :status:
3
+ - :CHECK_OK
4
+ :stdout: ""
5
+ :stderr: ""
6
+ :exit_status: 0
7
+ :timestamp: Thu Jun 28 16:49:32 -0700 2012
8
+ :cluster: cluster1
9
+ :host: mach1
10
+ :name: foo
@@ -0,0 +1,10 @@
1
+ ---
2
+ :status:
3
+ - :CHECK_OK
4
+ :stdout: ''
5
+ :stderr: ''
6
+ :cluster: cluster2
7
+ :exit_status: 0
8
+ :name: foo
9
+ :timestamp: Thu Jun 14 15:06:12 -0700 2012
10
+ :host: mach1
@@ -0,0 +1,10 @@
1
+ ---
2
+ :status:
3
+ - :CHECK_OK
4
+ :stdout: ''
5
+ :stderr: ''
6
+ :cluster: cluster2
7
+ :exit_status: 0
8
+ :name: foo
9
+ :timestamp: Thu Jun 14 15:06:12 -0700 2012
10
+ :host: mach2
@@ -0,0 +1,12 @@
1
+ ---
2
+ :status:
3
+ - :FAILED_MISSING_PRELUDE
4
+ :stdout: |
5
+ this should fail because the prelude is missing
6
+
7
+ :stderr: ""
8
+ :exit_status: 0
9
+ :timestamp: Thu Jun 28 16:49:32 -0700 2012
10
+ :cluster: cluster1
11
+ :host: mach1
12
+ :name: missing_prelude
@@ -0,0 +1,12 @@
1
+ ---
2
+ :status:
3
+ - :FAILED_MISSING_PRELUDE
4
+ :stdout: ! 'this should fail because the prelude is missing
5
+
6
+ '
7
+ :stderr: ''
8
+ :cluster: cluster2
9
+ :exit_status: 0
10
+ :name: missing_prelude
11
+ :timestamp: Thu Jun 14 15:06:12 -0700 2012
12
+ :host: mach1
@@ -0,0 +1,12 @@
1
+ ---
2
+ :status:
3
+ - :FAILED_MISSING_PRELUDE
4
+ :stdout: ! 'this should fail because the prelude is missing
5
+
6
+ '
7
+ :stderr: ''
8
+ :cluster: cluster2
9
+ :exit_status: 0
10
+ :name: missing_prelude
11
+ :timestamp: Thu Jun 14 15:06:12 -0700 2012
12
+ :host: mach2
@@ -0,0 +1,10 @@
1
+ ---
2
+ :status:
3
+ - :CHECK_OK
4
+ :stdout: ""
5
+ :stderr: ""
6
+ :exit_status: 0
7
+ :timestamp: Thu Jun 28 16:49:32 -0700 2012
8
+ :cluster: cluster1
9
+ :host: mach1
10
+ :name: network.config.bootproto_dhcp
@@ -0,0 +1,10 @@
1
+ ---
2
+ :status:
3
+ - :CHECK_OK
4
+ :stdout: ''
5
+ :stderr: ''
6
+ :cluster: cluster2
7
+ :exit_status: 0
8
+ :name: network.config.bootproto_dhcp
9
+ :timestamp: Thu Jun 14 15:06:12 -0700 2012
10
+ :host: mach1
@@ -0,0 +1,10 @@
1
+ ---
2
+ :status:
3
+ - :CHECK_OK
4
+ :stdout: ''
5
+ :stderr: ''
6
+ :cluster: cluster2
7
+ :exit_status: 0
8
+ :name: network.config.bootproto_dhcp
9
+ :timestamp: Thu Jun 14 15:06:12 -0700 2012
10
+ :host: mach2
@@ -0,0 +1,31 @@
1
+ ---
2
+ :status:
3
+ - :CHECK_FAILED
4
+ :stdout: |
5
+ output of ifconfig:
6
+ lo: flags=73<UP,LOOPBACK,RUNNING> mtu 16436
7
+ inet 127.0.0.1 netmask 255.0.0.0
8
+ inet6 ::1 prefixlen 128 scopeid 0x10<host>
9
+ \ loop txqueuelen 0 (Local Loopback)
10
+ RX packets 2592342 bytes 411323230 (392.2 MiB)
11
+ RX errors 0 dropped 0 overruns 0 frame 0
12
+ TX packets 2592342 bytes 411323230 (392.2 MiB)
13
+ TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
14
+
15
+ p128p1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> \ mtu 1500
16
+ inet 10.250.3.163 netmask 255.255.248.0 broadcast 10.250.7.255
17
+ \ inet6 2620:101:8003:200:a6ba:dbff:fefd:fe71 prefixlen 64 scopeid 0x0<global>
18
+ \ inet6 fe80::a6ba:dbff:fefd:fe71 prefixlen 64 scopeid 0x20<link>
19
+ ether a4:ba:db:fd:fe:71 txqueuelen 1000 (Ethernet)
20
+ RX packets 15272170 bytes 2840450940 (2.6 GiB)
21
+ RX errors 0 dropped 7 overruns 0 frame 0
22
+ TX packets 312785 bytes 39125389 (37.3 MiB)
23
+ TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
24
+ device interrupt 16
25
+
26
+ :stderr: ""
27
+ :exit_status: 0
28
+ :timestamp: Thu Jun 28 16:49:32 -0700 2012
29
+ :cluster: cluster1
30
+ :host: mach1
31
+ :name: network.ethernet_bonded
@@ -0,0 +1,22 @@
1
+ ---
2
+ :status:
3
+ - :CHECK_FAILED
4
+ :stdout: ! "output of ifconfig:\nlo: flags=73<UP,LOOPBACK,RUNNING> mtu 16436\n inet
5
+ 127.0.0.1 netmask 255.0.0.0\n inet6 ::1 prefixlen 128 scopeid 0x10<host>\n
6
+ \ loop txqueuelen 0 (Local Loopback)\n RX packets 2651014 bytes
7
+ 410810736 (391.7 MiB)\n RX errors 0 dropped 0 overruns 0 frame 0\n TX
8
+ packets 2651014 bytes 410810736 (391.7 MiB)\n TX errors 0 dropped 0 overruns
9
+ 0 carrier 0 collisions 0\n\np128p1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>
10
+ \ mtu 1500\n inet 10.250.3.163 netmask 255.255.248.0 broadcast 10.250.7.255\n
11
+ \ inet6 2620:101:8003:200:a6ba:dbff:fefd:fe71 prefixlen 64 scopeid 0x0<global>\n
12
+ \ inet6 fe80::a6ba:dbff:fefd:fe71 prefixlen 64 scopeid 0x20<link>\n ether
13
+ a4:ba:db:fd:fe:71 txqueuelen 1000 (Ethernet)\n RX packets 16682970 bytes
14
+ 3053667650 (2.8 GiB)\n RX errors 0 dropped 1 overruns 0 frame 0\n TX
15
+ packets 306643 bytes 40247466 (38.3 MiB)\n TX errors 0 dropped 0 overruns
16
+ 0 carrier 0 collisions 0\n device interrupt 16 \n"
17
+ :stderr: ''
18
+ :cluster: cluster2
19
+ :exit_status: 0
20
+ :name: network.ethernet_bonded
21
+ :timestamp: Thu Jun 14 15:06:12 -0700 2012
22
+ :host: mach1
@@ -0,0 +1,22 @@
1
+ ---
2
+ :status:
3
+ - :CHECK_OK
4
+ :stdout: ! "output of ifconfig:\nlo: flags=73<UP,LOOPBACK,RUNNING> mtu 16436\n inet
5
+ 127.0.0.1 netmask 255.0.0.0\n inet6 ::1 prefixlen 128 scopeid 0x10<host>\n
6
+ \ loop txqueuelen 0 (Local Loopback)\n RX packets 2651014 bytes
7
+ 410810736 (391.7 MiB)\n RX errors 0 dropped 0 overruns 0 frame 0\n TX
8
+ packets 2651014 bytes 410810736 (391.7 MiB)\n TX errors 0 dropped 0 overruns
9
+ 0 carrier 0 collisions 0\n\np128p1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>
10
+ \ mtu 1500\n inet 10.250.3.163 netmask 255.255.248.0 broadcast 10.250.7.255\n
11
+ \ inet6 2620:101:8003:200:a6ba:dbff:fefd:fe71 prefixlen 64 scopeid 0x0<global>\n
12
+ \ inet6 fe80::a6ba:dbff:fefd:fe71 prefixlen 64 scopeid 0x20<link>\n ether
13
+ a4:ba:db:fd:fe:71 txqueuelen 1000 (Ethernet)\n RX packets 16682970 bytes
14
+ 3053667650 (2.8 GiB)\n RX errors 0 dropped 1 overruns 0 frame 0\n TX
15
+ packets 306643 bytes 40247466 (38.3 MiB)\n TX errors 0 dropped 0 overruns
16
+ 0 carrier 0 collisions 0\n device interrupt 16 \n"
17
+ :stderr: ''
18
+ :cluster: cluster2
19
+ :exit_status: 0
20
+ :name: network.ethernet_bonded
21
+ :timestamp: Thu Jun 14 15:06:12 -0700 2012
22
+ :host: mach2
@@ -0,0 +1,10 @@
1
+ ---
2
+ :status:
3
+ - :FAILED_SKIPPED
4
+ :stdout: ""
5
+ :stderr: ""
6
+ :exit_status:
7
+ :timestamp: Thu Jun 28 16:49:32 -0700 2012
8
+ :cluster: cluster1
9
+ :host: mach1
10
+ :name: nonexec
@@ -0,0 +1,10 @@
1
+ ---
2
+ :status:
3
+ - :FAILED_SKIPPED
4
+ :stdout: ''
5
+ :stderr: ''
6
+ :cluster: cluster2
7
+ :exit_status:
8
+ :name: nonexec
9
+ :timestamp: Thu Jun 14 15:06:12 -0700 2012
10
+ :host: mach1
@@ -0,0 +1,10 @@
1
+ ---
2
+ :status:
3
+ - :FAILED_SKIPPED
4
+ :stdout: ''
5
+ :stderr: ''
6
+ :cluster: cluster2
7
+ :exit_status:
8
+ :name: nonexec
9
+ :timestamp: Thu Jun 14 15:06:12 -0700 2012
10
+ :host: mach2
@@ -0,0 +1,13 @@
1
+ ---
2
+ :status:
3
+ - :CHECK_OK
4
+ - :FAILED_STDERR_NONEMPTY
5
+ :stdout: ""
6
+ :stderr: |
7
+ standard error
8
+
9
+ :exit_status: 0
10
+ :timestamp: Thu Jun 28 16:49:32 -0700 2012
11
+ :cluster: cluster1
12
+ :host: mach1
13
+ :name: yum.badcheck
@@ -0,0 +1,13 @@
1
+ ---
2
+ :status:
3
+ - :CHECK_OK
4
+ - :FAILED_STDERR_NONEMPTY
5
+ :stdout: ''
6
+ :stderr: ! 'standard error
7
+
8
+ '
9
+ :cluster: cluster2
10
+ :exit_status: 0
11
+ :name: yum.badcheck
12
+ :timestamp: Thu Jun 14 15:06:12 -0700 2012
13
+ :host: mach1
@@ -0,0 +1,13 @@
1
+ ---
2
+ :status:
3
+ - :CHECK_OK
4
+ - :FAILED_STDERR_NONEMPTY
5
+ :stdout: ''
6
+ :stderr: ! 'standard error
7
+
8
+ '
9
+ :cluster: cluster2
10
+ :exit_status: 0
11
+ :name: yum.badcheck
12
+ :timestamp: Thu Jun 14 15:06:12 -0700 2012
13
+ :host: mach2
@@ -0,0 +1,208 @@
1
+ require "erb"
2
+ require "rack"
3
+ require "sinatra/base"
4
+ require "open-uri"
5
+ require "yaml"
6
+ require "thread"
7
+ require "set"
8
+ require "fileutils"
9
+ require "digest/sha1"
10
+ require "bunny"
11
+ require "pathname"
12
+ require "pp"
13
+
14
+ require "hostmon/version"
15
+ require "hostmon/models"
16
+ require "hostmon/config"
17
+ require "hostmon/helpers"
18
+ require "hostmon/models"
19
+ require "hostmon/rubyfixes"
20
+ require "bunny"
21
+
22
+ # should really be using queues (thread-safe according to pickaxe)
23
+
24
+ module Hostmon
25
+ class App < Sinatra::Base
26
+ include Hostmon::Models
27
+ helpers Hostmon::Helpers
28
+ set :config, Hostmon::Config.new
29
+ set :port, config.global_config[:port]
30
+ set :run, true
31
+ set :root, File.expand_path('../hostmon', __FILE__)
32
+ set :static, true
33
+ set :logging, true
34
+
35
+ confd = Pathname.new(config.conf_file).dirname.realpath
36
+ reportd = Pathname.new(config.report_dir)
37
+ if reportd.relative?
38
+ reportd = File.join(confd, reportd)
39
+ end
40
+
41
+ Host.saved_reports = config.global_config[:saved_reports]
42
+ Report.report_base = reportd
43
+
44
+ # timestamp order is relevant when loading reports from disk (but not amqp)
45
+ Dir.glob(File.join(reportd, "/**/*.yaml")).sort do |a, b|
46
+ Time.parse(a) <=> Time.parse(b)
47
+ end.each do |f|
48
+ puts "load #{f}"
49
+ # YAML::load_documents doesn't work in 1.8.7
50
+ stream = YAML::load_stream(File.read(f))
51
+ stream.documents.each do |check|
52
+ Report.new(check)
53
+ end
54
+ end
55
+
56
+ # spin off the amqp thread
57
+ # rescue errors and bail "correctly"
58
+ amqp = Bunny.new(config.amqp_config)
59
+ amqp.start
60
+ queue = amqp.queue("hostlint-#{Process.pid}", :auto_delete => true)
61
+ exchange = amqp.exchange(config.amqp_config[:exchange]||"hostlint",
62
+ :type => :topic,
63
+ :durable => true)
64
+ queue.bind(exchange)
65
+ Thread.new do
66
+ begin
67
+ queue.subscribe do |msg|
68
+ puts "processing amqp report"
69
+ Report.new(YAML.load(msg[:payload]))
70
+ end
71
+ rescue Bunny::ServerDownError, Bunny::ConnectionError
72
+ # TODO: implement reconnect
73
+ throw
74
+ end # begin
75
+ end # Thread.new
76
+
77
+ before do
78
+ @request_time = Time.now
79
+ end
80
+
81
+ get '/' do
82
+ @title = "Overview"
83
+ erb :view
84
+ end
85
+
86
+ get '/check/:check/?' do
87
+ unless check = Check.find(params[:check])
88
+ # could probably do better than raise an exception
89
+ raise "check not found #{params[:check]}"
90
+ end
91
+ @title = "check :: #{params[:check]}"
92
+ @check = check
93
+
94
+ @statuses = [[Host::OK, "passing"],
95
+ [Host::FAIL, "failing"],
96
+ [Host::EXEC_FAIL, "failing to run"],
97
+ [nil, "all"]]
98
+
99
+ erb :check
100
+ end
101
+
102
+ get '/check/:check/:status/?' do
103
+ unless check = Check.find(params[:check])
104
+ # could probably do better than raise an exception
105
+ raise "check not found #{params[:check]}"
106
+ end
107
+ @title1 = "check :: #{params[:check]} :: "
108
+ @check = check
109
+
110
+ @status = params[:status]
111
+ unless Host.statuses.member?(@status)
112
+ raise "unknown status #{@status}"
113
+ end
114
+
115
+ @statuses = [[Host::OK, "passing"],
116
+ [Host::FAIL, "failing"],
117
+ [Host::EXEC_FAIL, "failing to run"],
118
+ ["", "all"]]
119
+ case @status
120
+ when Host::OK
121
+ @subtitle = "passing"
122
+ @method = :hosts_ok
123
+ when Host::FAIL
124
+ @subtitle = "failing"
125
+ @method = :hosts_failing
126
+ when Host::EXEC_FAIL
127
+ @subtitle = "failing to run"
128
+ @method = :hosts_check_failing
129
+ end
130
+ @title = @title1 + @subtitle
131
+ erb :check_status
132
+ end
133
+
134
+ # fixme dup
135
+ get '/host/:cluster/:host/?' do
136
+ @title = "#{params[:cluster]} :: host :: #{params[:host]}"
137
+ @host = Host.find_by_name_and_cluster(params[:host], params[:cluster])
138
+
139
+ @statuses = [[Host::FAIL, @host.failing, "failing", "checks failing"],
140
+ [Host::OK, @host.succeeding, "succeeding", "checks passing"],
141
+ [Host::EXEC_FAIL, @host.checks_failing, "failing to run", "checks failing to run"],
142
+ [nil, [], "all", "all"]]
143
+ erb :host
144
+ end
145
+
146
+ get '/host/:cluster/:host/:status?/?' do
147
+ @title = "#{params[:cluster]} :: host :: #{params[:host]} :: FIXME"
148
+ @host = Host.find_by_name_and_cluster(params[:host], params[:cluster])
149
+ raise "unknown host #{params[:host]}" unless @host
150
+ @status = params[:status]
151
+ raise "unknown status #{@status}" unless Host.statuses.member?(@status)
152
+
153
+
154
+ @statuses = [[Host::FAIL, @host.failing, "failing", "checks failing"],
155
+ [Host::OK, @host.succeeding, "succeeding", "checks passing"],
156
+ [Host::EXEC_FAIL, @host.checks_failing, "failing to run", "checks failing to run"],
157
+ [nil, [], "all", "all"]]
158
+
159
+ if @status
160
+ @statuses2 = @statuses.select {|s| s.first == @status}
161
+ end
162
+
163
+ erb :host_status
164
+ end
165
+
166
+ # get '/host/:cluster/:host/:check/?' do
167
+ # "fixme"
168
+ # end
169
+
170
+ get '/cluster/:cluster/?' do
171
+ @title = "cluster :: #{params[:cluster]}"
172
+ erb :cluster
173
+ end
174
+
175
+ get '/status/:status/?' do
176
+ @status = params[:status]
177
+ unless Host.statuses.member?(@status)
178
+ raise "unknown status #{@status}"
179
+ end
180
+
181
+ case @status
182
+ when Host::OK
183
+ @title = "checks passing"
184
+ @method = :hosts_ok
185
+ when Host::FAIL
186
+ @title = "checks failing"
187
+ @method = :hosts_failing
188
+ when Host::EXEC_FAIL
189
+ @title = "checks failing to run"
190
+ @method = :hosts_check_failing
191
+ end
192
+ erb :status
193
+ end
194
+
195
+ get '/search' do
196
+ regexp = Regexp.new(params["keyword"], Regexp::IGNORECASE)
197
+ case params["cat"]
198
+ when "0" # all
199
+ when "1" # hosts
200
+ when "2" # checks
201
+ when "3" # failing
202
+ when "4" # succeeding
203
+ end
204
+ regexp.to_s
205
+ end
206
+
207
+ end
208
+ end