flapjack 0.5.5 → 0.6.23

Sign up to get free protection for your applications and to get access to all the features.
Files changed (167) hide show
  1. data/.gitignore +10 -0
  2. data/.rbenv-version +1 -0
  3. data/.rspec +10 -0
  4. data/Gemfile +18 -0
  5. data/Guardfile +14 -0
  6. data/README.md +152 -173
  7. data/Rakefile +53 -150
  8. data/bin/flapjack +72 -0
  9. data/bin/flapjack-nagios-receiver +111 -0
  10. data/bin/flapjack-nagios-receiver-control +15 -0
  11. data/bin/flapjack-netsaint-parser +0 -2
  12. data/bin/flapjack-populator +133 -16
  13. data/bin/install-flapjack-systemwide +2 -2
  14. data/config.ru +11 -0
  15. data/dist/etc/init.d/flapjack +46 -0
  16. data/dist/etc/init.d/flapjack-nagios-receiver +36 -0
  17. data/doc/GLOSSARY.md +19 -0
  18. data/etc/flapjack_config.yaml.example +90 -0
  19. data/features/events.feature +132 -0
  20. data/features/notifications.feature +57 -0
  21. data/features/packaging-lintian.feature +5 -3
  22. data/features/steps/events_steps.rb +164 -0
  23. data/features/steps/flapjack-importer_steps.rb +2 -5
  24. data/features/steps/flapjack-worker_steps.rb +13 -6
  25. data/features/steps/notifications_steps.rb +178 -0
  26. data/features/steps/packaging-lintian_steps.rb +14 -0
  27. data/features/steps/time_travel_steps.rb +34 -0
  28. data/features/support/env.rb +63 -36
  29. data/flapjack.gemspec +35 -186
  30. data/lib/flapjack.rb +2 -0
  31. data/lib/flapjack/api.rb +274 -0
  32. data/lib/flapjack/api/entity_check_presenter.rb +184 -0
  33. data/lib/flapjack/api/entity_presenter.rb +66 -0
  34. data/lib/flapjack/cli/worker_manager.rb +1 -2
  35. data/lib/flapjack/configuration.rb +11 -0
  36. data/lib/flapjack/coordinator.rb +288 -0
  37. data/lib/flapjack/daemonizing.rb +186 -0
  38. data/lib/flapjack/data/contact.rb +45 -0
  39. data/lib/flapjack/data/entity.rb +89 -0
  40. data/lib/flapjack/data/entity_check.rb +396 -0
  41. data/lib/flapjack/data/event.rb +144 -0
  42. data/lib/flapjack/data/notification.rb +13 -0
  43. data/lib/flapjack/executive.rb +289 -0
  44. data/lib/flapjack/filters/acknowledgement.rb +39 -0
  45. data/lib/flapjack/filters/{any_parents_failed.rb → base.rb} +6 -4
  46. data/lib/flapjack/filters/delays.rb +53 -0
  47. data/lib/flapjack/filters/detect_mass_client_failures.rb +44 -0
  48. data/lib/flapjack/filters/ok.rb +25 -5
  49. data/lib/flapjack/filters/scheduled_maintenance.rb +17 -0
  50. data/lib/flapjack/filters/unscheduled_maintenance.rb +17 -0
  51. data/lib/flapjack/jabber.rb +294 -0
  52. data/lib/flapjack/notification/common.rb +23 -0
  53. data/lib/flapjack/notification/email.rb +107 -0
  54. data/lib/flapjack/notification/email/alert.html.haml +48 -0
  55. data/lib/flapjack/notification/email/alert.text.erb +14 -0
  56. data/lib/flapjack/notification/sms.rb +42 -0
  57. data/lib/flapjack/notification/sms/messagenet.rb +49 -0
  58. data/lib/flapjack/notifier_engine.rb +4 -4
  59. data/lib/flapjack/notifiers/mailer/mailer.rb +6 -7
  60. data/lib/flapjack/notifiers/xmpp/xmpp.rb +12 -12
  61. data/lib/flapjack/pagerduty.rb +230 -0
  62. data/lib/flapjack/patches.rb +108 -19
  63. data/lib/flapjack/persistence/data_mapper/models/check.rb +5 -3
  64. data/lib/flapjack/persistence/data_mapper/models/check_template.rb +2 -0
  65. data/lib/flapjack/persistence/data_mapper/models/event.rb +2 -0
  66. data/lib/flapjack/persistence/data_mapper/models/node.rb +3 -1
  67. data/lib/flapjack/persistence/data_mapper/models/related_check.rb +3 -1
  68. data/lib/flapjack/pikelet.rb +56 -0
  69. data/lib/flapjack/transports/beanstalkd.rb +1 -1
  70. data/lib/flapjack/transports/result.rb +6 -6
  71. data/lib/flapjack/utility.rb +46 -0
  72. data/lib/flapjack/version.rb +5 -0
  73. data/lib/flapjack/web.rb +198 -0
  74. data/lib/flapjack/web/views/acknowledge.haml +55 -0
  75. data/lib/flapjack/web/views/check.haml +162 -0
  76. data/lib/flapjack/web/views/index.haml +92 -0
  77. data/lib/flapjack/web/views/self_stats.haml +56 -0
  78. data/lib/flapjack/{applications/worker.rb → worker/application.rb} +0 -0
  79. data/lib/flapjack/worker/cli.rb +49 -0
  80. data/{spec → spec.old}/check_sandbox/echo +0 -0
  81. data/{spec → spec.old}/check_sandbox/sandboxed_check +0 -0
  82. data/{spec → spec.old}/configs/flapjack-notifier-couchdb.ini +0 -0
  83. data/{spec → spec.old}/configs/flapjack-notifier.ini +0 -0
  84. data/{spec → spec.old}/configs/recipients.ini +0 -0
  85. data/{spec → spec.old}/helpers.rb +0 -0
  86. data/{spec → spec.old}/inifile_spec.rb +0 -0
  87. data/{spec → spec.old}/mock-notifiers/mock/init.rb +0 -0
  88. data/{spec → spec.old}/mock-notifiers/mock/mock.rb +0 -0
  89. data/{spec → spec.old}/notifier-directories/spoons/testmailer/init.rb +0 -0
  90. data/{spec → spec.old}/notifier_application_spec.rb +0 -0
  91. data/{spec → spec.old}/notifier_filters_spec.rb +0 -0
  92. data/{spec → spec.old}/notifier_options_multiplexer_spec.rb +0 -0
  93. data/{spec → spec.old}/notifier_options_spec.rb +0 -0
  94. data/{spec → spec.old}/notifier_spec.rb +0 -0
  95. data/{spec → spec.old}/notifiers/mailer_spec.rb +0 -0
  96. data/{spec → spec.old}/notifiers/xmpp_spec.rb +0 -0
  97. data/{spec → spec.old}/persistence/datamapper_spec.rb +0 -0
  98. data/{spec → spec.old}/persistence/mock_persistence_backend.rb +0 -0
  99. data/{spec → spec.old}/simple.ini +0 -0
  100. data/{spec → spec.old}/spec.opts +0 -0
  101. data/{spec → spec.old}/test-filters/blocker.rb +0 -0
  102. data/{spec → spec.old}/test-filters/mock.rb +0 -0
  103. data/{spec → spec.old}/transports/beanstalkd_spec.rb +0 -0
  104. data/{spec → spec.old}/transports/mock_transport.rb +0 -0
  105. data/{spec → spec.old}/worker_application_spec.rb +0 -0
  106. data/{spec → spec.old}/worker_options_spec.rb +0 -0
  107. data/spec/lib/flapjack/api/entity_check_presenter_spec.rb +117 -0
  108. data/spec/lib/flapjack/api/entity_presenter_spec.rb +92 -0
  109. data/spec/lib/flapjack/api_spec.rb +170 -0
  110. data/spec/lib/flapjack/coordinator_spec.rb +16 -0
  111. data/spec/lib/flapjack/data/entity_check_spec.rb +398 -0
  112. data/spec/lib/flapjack/data/entity_spec.rb +71 -0
  113. data/spec/lib/flapjack/data/event_spec.rb +6 -0
  114. data/spec/lib/flapjack/executive_spec.rb +59 -0
  115. data/spec/lib/flapjack/filters/acknowledgement_spec.rb +6 -0
  116. data/spec/lib/flapjack/filters/delays_spec.rb +6 -0
  117. data/spec/lib/flapjack/filters/detect_mass_client_failures_spec.rb +6 -0
  118. data/spec/lib/flapjack/filters/ok_spec.rb +6 -0
  119. data/spec/lib/flapjack/filters/scheduled_maintenance_spec.rb +6 -0
  120. data/spec/lib/flapjack/filters/unscheduled_maintenance_spec.rb +6 -0
  121. data/spec/lib/flapjack/jabber_spec.rb +150 -0
  122. data/spec/lib/flapjack/notification/email_spec.rb +6 -0
  123. data/spec/lib/flapjack/notification/sms_spec.rb +6 -0
  124. data/spec/lib/flapjack/pikelet_spec.rb +28 -0
  125. data/spec/lib/flapjack/web_spec.rb +188 -0
  126. data/spec/spec_helper.rb +44 -0
  127. data/spec/support/profile_all_formatter.rb +44 -0
  128. data/spec/support/uncolored_doc_formatter.rb +9 -0
  129. data/tasks/events.rake +85 -0
  130. data/tmp/acknowledge.rb +14 -0
  131. data/tmp/create_config_yaml.rb +16 -0
  132. data/tmp/create_events_failure.rb +33 -0
  133. data/tmp/create_events_ok.rb +33 -0
  134. data/tmp/create_events_ok_fail_ack_ok.rb +54 -0
  135. data/tmp/create_events_ok_failure.rb +40 -0
  136. data/tmp/create_events_ok_failure_ack.rb +54 -0
  137. data/tmp/dummy_entities.json +1 -0
  138. data/tmp/generate_nagios_test_hosts.rb +16 -0
  139. data/tmp/parse_config_yaml.rb +7 -0
  140. data/tmp/redis_delete_all_keys.rb +11 -0
  141. data/tmp/test_entities.json +1 -0
  142. metadata +482 -221
  143. data/TODO.md +0 -36
  144. data/VERSION +0 -1
  145. data/bin/flapjack-benchmark +0 -50
  146. data/bin/flapjack-notifier +0 -21
  147. data/bin/flapjack-notifier-manager +0 -43
  148. data/bin/flapjack-stats +0 -27
  149. data/bin/flapjack-worker +0 -13
  150. data/bin/flapjack-worker-manager +0 -35
  151. data/dist/etc/init.d/flapjack-notifier +0 -47
  152. data/dist/etc/init.d/flapjack-workers +0 -44
  153. data/features/flapjack-notifier-manager.feature +0 -19
  154. data/features/flapjack-worker-manager.feature +0 -27
  155. data/features/flapjack-worker.feature +0 -27
  156. data/features/netsaint-config-converter.feature +0 -126
  157. data/features/persistence/couch.feature +0 -105
  158. data/features/persistence/sqlite3.feature +0 -105
  159. data/features/persistence/steps/couch_steps.rb +0 -25
  160. data/features/persistence/steps/generic_steps.rb +0 -102
  161. data/features/persistence/steps/sqlite3_steps.rb +0 -13
  162. data/features/steps/flapjack-notifier-manager_steps.rb +0 -24
  163. data/features/steps/flapjack-worker-manager_steps.rb +0 -48
  164. data/lib/flapjack/applications/notifier.rb +0 -222
  165. data/lib/flapjack/cli/notifier.rb +0 -108
  166. data/lib/flapjack/cli/notifier_manager.rb +0 -86
  167. data/lib/flapjack/cli/worker.rb +0 -51
data/.gitignore CHANGED
@@ -14,3 +14,13 @@ pkg/*
14
14
  !etc/flapjack/recipients.yaml
15
15
  spec/test.db
16
16
  features/support/tmp/*
17
+ features/support/etc/netsaint/*
18
+ log/*
19
+ vendor
20
+ .bundle
21
+ etc/flapjack_config.yaml
22
+ coverage
23
+ tmp/pids/*
24
+ tmp/spec*
25
+ flapjack-*.gem
26
+
data/.rbenv-version ADDED
@@ -0,0 +1 @@
1
+ 1.9.3-p125
data/.rspec ADDED
@@ -0,0 +1,10 @@
1
+ --color
2
+ --format Fuubar
3
+ --format html
4
+ --out tmp/spec.html
5
+ --require ./spec/support/uncolored_doc_formatter.rb
6
+ --format UncoloredDocFormatter
7
+ --out tmp/spec_doc.txt
8
+ --require ./spec/support/profile_all_formatter.rb
9
+ --format ProfileAllFormatter
10
+ --out tmp/spec_profile.txt
data/Gemfile ADDED
@@ -0,0 +1,18 @@
1
+ source :rubygems
2
+
3
+ gemspec :name => 'flapjack'
4
+
5
+ group :test do
6
+ gem 'rspec'
7
+ gem 'cucumber'
8
+ gem 'delorean'
9
+ gem 'rack-test'
10
+ gem 'resque_spec'
11
+ gem 'webmock'
12
+ gem 'guard'
13
+ gem 'guard-rspec'
14
+ gem 'guard-cucumber'
15
+ gem 'fuubar'
16
+ gem 'fuubar-cucumber'
17
+ gem 'simplecov', :require => false
18
+ end
data/Guardfile ADDED
@@ -0,0 +1,14 @@
1
+
2
+ guard 'rspec', :cli => '--format Fuubar --format html --out tmp/spec.html --require ./spec/support/uncolored_doc_formatter.rb --format UncoloredDocFormatter --out tmp/spec_doc.txt --require ./spec/support/profile_all_formatter.rb --format ProfileAllFormatter --out tmp/spec_profile.txt', :version => 2 do
3
+ watch(%r{^spec/.+_spec\.rb$})
4
+ watch(%r{^lib/(.+)\.rb$}) { |m| "spec/lib/#{m[1]}_spec.rb" }
5
+ watch('spec/spec_helper.rb') { "spec" }
6
+ end
7
+
8
+ # NB: seems to be buggy with the default --progress formatter, was
9
+ # causing failures to parse the features
10
+ guard 'cucumber', :cli => '--no-profile --color --format fuubar --strict' do
11
+ watch(%r{^features/.+\.feature$})
12
+ watch(%r{^features/support/.+$}) { 'features' }
13
+ watch(%r{^features/step_definitions/(.+)_steps\.rb$}) { |m| Dir[File.join("**/#{m[1]}.feature")][0] || 'features' }
14
+ end
data/README.md CHANGED
@@ -1,232 +1,211 @@
1
1
  Flapjack
2
2
  ========
3
3
 
4
- Flapjack is highly scalable and distributed monitoring system.
4
+ Flapjack is a highly scalable and distributed monitoring notification system.
5
5
 
6
- It understands the Nagios plugin format, and can easily be scaled
7
- from 1 server to 1000.
6
+ Flapjack provides a scalable method for dealing with events representing changes in system state (OK -> WARNING -> CRITICAL transitions) and alerting appropriate people as necessary.
8
7
 
9
- WARNING
10
- =======
8
+ At its core, flapjack process events received from external check execution engines, such as Nagios. Nagios provides a 'perfdata' event output channel, which writes to a named pipe. `flapjack-nagios-receiver` then reads from this named pipe, converts each line to JSON and adds them to the events queue. `executive` picks up the events and processes them - deciding when and who to notifify about problems, recoveries, acknowledgements etc. Additional check engines can be supported by adding additional receiver processes similar to the nagios receiver.
11
9
 
12
- **These install instructions are probably wrong. Follow them best you can, and
13
- please report bugs as you find them!**
14
10
 
15
- Setup dependencies (Ubuntu Hardy)
16
- ---------------------------------
11
+ What things do
12
+ --------------
17
13
 
18
- Add the following lines to `/etc/apt/sources.list`
14
+ Executables:
19
15
 
20
- deb http://ppa.launchpad.net/ubuntu-ruby-backports/ubuntu hardy main
21
- deb http://ppa.launchpad.net/auxesis/ppa/ubuntu hardy main
16
+ * `flapjack` => starts multiple components ('pikelets') within the one ruby process as specified in the configuration file.
17
+ * `flapjack-nagios-receiver` => reads nagios check output on standard input and places them on the events queue in redis as JSON blobs. Currently unable to be run in-process with `flapjack`
22
18
 
23
- Add GPG keys for the repos:
19
+ There are more fun executables in the bin directory.
24
20
 
25
- sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 288BA53BCB7DA731
21
+ Pikelets:
26
22
 
27
- Update your package list:
23
+ * `executive` => processes events off a queue (a redis list) and decides what actions to take (alert, record state changes, etc)
24
+ * `email_notifier` => generates email notifications (resque, mail)
25
+ * `sms_notifier` => generates sms notifications (resque)
26
+ * `jabber_gateway` => connects to an XMPP (jabber) server, sends notifications (to rooms and individuals), handles acknowledgements from jabber users and other commands (blather)
27
+ * `web` => web UI (sinatra, thin)
28
+ * `api` => HTTP API server (sinatra, thin)
28
29
 
29
- sudo apt-get update
30
+ Pikelets are flapjack components which can be run within the same ruby process, or as separate processes.
30
31
 
31
- Install Ruby dependencies:
32
+ The simplest configuration will have one `flapjack` process running executive, web, and some notification gateways, and one `flapjack-nagios-receiver` process receiving events from Nagios and placing them on the events queue for processing by executive.
32
33
 
33
- sudo apt-get install build-essential libsqlite3-dev
34
34
 
35
- Install rubygems + beanstalkd:
35
+ Developing
36
+ ----------
36
37
 
37
- sudo apt-get install rubygems beanstalkd
38
+ Clone the repository:
38
39
 
39
- Set `ENABLED=1` in `/etc/default/beanstalkd`.
40
+ git clone https://auxesis@github.com/auxesis/flapjack.git
40
41
 
41
- Start beanstalkd:
42
+ Install development dependencies:
42
43
 
43
- sudo /etc/init.d/beanstalkd start
44
+ gem install bundler
45
+ bundle install
44
46
 
47
+ Run the tests:
45
48
 
46
- Setup dependencies (everyone else)
47
- ----------------------------------
49
+ cucumber features/
50
+ rspec spec
48
51
 
49
- Install the following software through your package manager or from source:
52
+ Testing
53
+ -------
50
54
 
51
- - beanstalkd (from http://xph.us/software/beanstalkd/)
52
- - libevent (from http://monkey.org/~provos/libevent/)
55
+ Feature tests live in `features/`.
53
56
 
57
+ To run feature tests:
54
58
 
55
- Installation
56
- ------------
59
+ $ cucumber features
57
60
 
61
+ There's some rspec unit tests as well, run these like so:
58
62
 
59
- Add the Gemcutter RubyGems server to your Gem sources:
63
+ $ rspec spec
60
64
 
61
- sudo gem sources -a http://gemcutter.org
65
+ NB, if the cucumber tests fail with a spurious lexing error on line 2 of events.feature, then try this:
62
66
 
63
- Install the Flapjack gem:
67
+ $ cucumber -f fuubar features
64
68
 
65
- sudo gem install flapjack
66
69
 
67
- Then run the magic configuration script to set up init scripts:
68
70
 
69
- sudo install-flapjack-systemwide
71
+ Releasing
72
+ ---------
70
73
 
71
- The script will prompt you if it wants to do anything destructive.
74
+ Gem releases are handled with [Bundler](http://gembundler.com/rubygems.html).
72
75
 
76
+ To build the gem, run:
73
77
 
74
- Running
75
- -------
78
+ gem build flapjack.gemspec
76
79
 
77
- Make sure beanstalkd is running.
78
-
79
- You'll want to set up `/etc/flapjack/recipients.conf` so notifications can be sent via
80
- `flapjack-notifier`:
81
-
82
- [John Doe]
83
- email = johndoe@example.org
84
- jid = john@example.org
85
- phone = +61 400 111 222
86
- pager = 61400111222
87
-
88
- [Jane Doe]
89
- email = janedoe@example.org
90
- jid = jane@example.org
91
- phone = +61 222 333 111
92
- pager = 61222333111
93
-
94
- You also need to set up `/etc/flapjack/notifier.conf`:
95
-
96
- # top level
97
- [notifier]
98
- notifier-directories = /usr/lib/flapjack/notifiers/ /path/to/my/notifiers
99
- notifiers = mailer, xmpp
100
-
101
- # persistence layers
102
- [persistence]
103
- backend = data_mapper
104
- uri = sqlite3:///tmp/flapjack.db
105
-
106
- # message transports
107
- [transport]
108
- backend = beanstalkd
109
- host = localhost
110
- port = 11300
111
-
112
- # notifiers
113
- [mailer-notifier]
114
- from_address = foo@bar.com
115
-
116
- [xmpp-notifier]
117
- jid = foo@bar.com
118
- password = barfoo
119
-
120
- # filters
121
- [filters]
122
- chain = ok, downtime, any_parents_failed
123
-
124
-
125
- Start up a cluster of workers:
126
-
127
- flapjack-worker-manager start
128
-
129
- This will spin up 5 workers in the background. You can specify how many workers
130
- to start:
131
-
132
- flapjack-worker-manager start --workers=10
133
-
134
- Each of the `flapjack-worker`s will output to syslog (check in /var/log/messages).
135
-
136
- Start up the notifier:
137
-
138
- flapjack-notifier-manager start --recipients /etc/flapjack/recipients.conf
139
-
140
- Currently there are email and XMPP notifiers.
141
-
142
- You'll want to get a copy of (http://github.com/auxesis/flapjack-admin/)[flapjack-admin]
143
- to set up some checks, then run its populator to get them into Flapjack.
144
-
145
- What things do
146
- --------------
80
+ Configuring
81
+ ===========
147
82
 
148
- * `flapjack-worker` => executes checks, reports results
149
- * `flapjack-worker-manager` => starts/stops a cluster of `flapjack-worker`
150
- * `flapjack-notifier` => gets results, notifies people if necessary
151
- * `flapjack-stats` => gets stats from beanstalkd tubes (useful for benchmarks + performance analysis)
152
- * `flapjack-benchmark` => benchmarks various persistence/transport backend combinations
83
+ ```
84
+ cp etc/flapjack-config.yaml.example etc/flapjack-config.yaml
85
+ ```
153
86
 
87
+ Edit the configuration to suit (redis connection, smtp server, jabber server, sms gateway, etc)
154
88
 
155
- init scripts
156
- ------------
89
+ The default FLAPJACK_ENV is "development" if there is no environment variable set.
157
90
 
158
- You can use the provided init scripts to start Flapjack on boot.
91
+ Nagios config
92
+ -------------
159
93
 
160
- To start:
94
+ You need a Nagios prior to version 3.3 as this breaks perfdata output for checks which don't generate performance data (stuff after a | in the check output). We are developing and running against Nagios version 3.2.3 with success.
161
95
 
162
- /etc/init.d/flapjack-workers start
163
- /etc/init.d/flapjack-notifier start
96
+ nagios.cfg config file changes:
164
97
 
165
- To set Flapjack to start on boot (Ubuntu):
98
+ ```
99
+ # modified lines:
100
+ enable_notifications=0
101
+ host_perfdata_file=/var/cache/nagios3/event_stream.fifo
102
+ service_perfdata_file=/var/cache/nagios3/event_stream.fifo
103
+ host_perfdata_file_template=[HOSTPERFDATA]\t$TIMET$\t$HOSTNAME$\tHOST\t$HOSTSTATE$\t$HOSTEXECUTIONTIME$\t$HOSTLATENCY$\t$HOSTOUTPUT$\t$HOSTPERFDATA$
104
+ service_perfdata_file_template=[SERVICEPERFDATA]\t$TIMET$\t$HOSTNAME$\t$SERVICEDESC$\t$SERVICESTATE$\t$SERVICEEXECUTIONTIME$\t$SERVICELATENCY$\t$SERVICEOUTPUT$\t$SERVICEPERFDATA$
105
+ host_perfdata_file_mode=p
106
+ service_perfdata_file_mode=p
107
+ ```
166
108
 
167
- sudo update-rc.d flapjack-workers defaults
168
- sudo update-rc.d flapjack-notifier defaults
109
+ What we're doing here is telling Nagios to generate a line of output for every host and service check into a named pipe. The template lines must be as above so that `flapjack-nagios-receiver` knows what to expect.
169
110
 
170
- Config for the init scripts can be found in `/etc/defaults`.
111
+ All hosts and services (or templates that they use) will need to have process_perf_data enabled on them. (This is a real misnomer, it doesn't mean the performance data will be processed, just that it will be fed to the perfdata output channel, a named pipe in our case.)
171
112
 
113
+ Create the named pipe if it doesn't already exist:
172
114
 
115
+ mkfifo -m 0666 /var/cache/nagios3/event_stream.fifo
173
116
 
174
- Testing
175
- -------
176
117
 
177
- Tests are in `spec/` and `features/`.
118
+ Running
119
+ =======
120
+
121
+ bin/flapjack [options]
122
+
123
+ $ flapjack --help
124
+ Usage: flapjack [options]
125
+ -c, --config [PATH] PATH to the config file to use
126
+ -d, --[no-]daemonize Daemonize?
127
+
128
+ The command line option for daemonize overrides whatever is set in the config file.
129
+
130
+ flapjack-nagios-receiver
131
+ ------------------------
132
+
133
+ There is a control script that uses [Daemons](http://daemons.rubyforge.org/) to start, stop, restart, show status etc of the flapjack-nagios-receiver process. Options after -- are passed through to flapjack-nagios-receiver. Run it like so:
134
+
135
+ flapjack-nagios-receiver-control start -- --config /etc/flapjack/flapjack-config.yaml /path/to/nagios/perfdata.fifo
136
+ flapjack-nagios-receiver-control status
137
+ flapjack-nagios-receiver-control restart -- --config /etc/flapjack/flapjack-config.yaml /path/to/nagios/perfdata.fifo
138
+ flapjack-nagios-receiver-control stop
139
+
140
+ * Bypassing daemons control script: *
141
+
142
+ This process needs to be started with the nagios perfdata named pipe attached to its STDIN like so:
143
+
144
+ flapjack-nagios-receiver < /var/cache/nagios3/event_stream.fifo
145
+
146
+ Or the path to the fifo can just be given as an argument, thanks to the magical powers of ARGV:
147
+
148
+ flapjack-nagios-receiver /var/cache/nagios3/event_stream.fifo
178
149
 
179
- To run tests:
150
+ Now as nagios feeds check execution results into the perfdata named pipe, flapjack-nagios-receiver will convert them to JSON encoded ruby objects and insert them into the *events* queue.
180
151
 
181
- $ rake spec
182
- $ rake cucumber
152
+ Importing contacts and entities
153
+ -------------------------------
183
154
 
155
+ The `flapjack-populator` script provides a mechanism for importing contacts and entities from JSON formatted import files.
156
+
157
+ bin/flapjack-populator import-contacts --from tmp/dummy_contacts.json --config /etc/flapjack/flapjack-config.yml
158
+ bin/flapjack-populator import-entities --from tmp/dummy_entities.json --config /etc/flapjack/flapjack-config.yml
159
+
160
+ TODO: convert the format documentation into markdown and include in the project
161
+
162
+ In lieu of actual documentation of the formats there are example files, and example ruby code which generated them, in the tmp directory.
163
+
164
+ executive
165
+ ---------
166
+
167
+ Flapjack executive processes events from the 'events' list in redis. It does a blocking read on redis so new events are picked off the events list and processed as soon as they created.
168
+
169
+ When executive decides somebody ought to be notified (for a problem, recovery, or acknowledgement or what-have-you) it looks up contact information and then creates a notification job on one of the notification queues (eg sms_notifications) in rescue, or via the jabber_notifications redis list which is processed by the jabber_gateway.
170
+
171
+ Resque Workers
172
+ --------------
173
+
174
+ We're using [Resque](https://github.com/defunkt/resque) to queue email and sms notifications generated by flapjack-executive. The queues are named as follows:
175
+ - email_notifications
176
+ - sms_notifications
177
+
178
+ There'll be more of these as we add more notification mediums.
179
+
180
+ Note that using the flapjack-config.yaml file you can have flapjack start the resque workers in-process. Or you can run them standalone with the `rake resque:work` command as follows.
181
+
182
+ One resque worker that processes both queues (but prioritises SMS above email) can be started as follows:
183
+
184
+ QUEUE=sms_notifications,email_notifications VERBOSE=1 be rake resque:work
185
+
186
+ resque sets the command name so grep'ing ps output for `rake` or `ruby` will NOT find resque processes. Search instead for `resque`. (and remember the 'q').
187
+
188
+ To background it you can add `BACKGROUND=yes`. Excellent documentation is available in [Resque's README](https://github.com/defunkt/resque/blob/master/README.markdown)
189
+
190
+ Redis Database Instances
191
+ ------------------------
192
+
193
+ We use the following redis database numbers by convention:
194
+
195
+ * 0 => production
196
+ * 13 => development
197
+ * 14 => testing
184
198
 
185
199
  Architecture
186
200
  ------------
187
201
 
188
- ------------------- -------------------
189
- | web interface / | | visualisation / |
190
- | dsl / flat file | | reporting |
191
- ------------------- -------------------
192
- | |
193
- \ /
194
- \ /
195
- ---------------
196
- | persistence |
197
- ---------------
198
- |
199
- -------------------------------
200
- | |
201
- | |
202
- | |
203
- ------------- ------------
204
- | populator |--- -----| notifier |
205
- ------------- | | ------------
206
- | |
207
- --------------
208
- | beanstalkd |
209
- --------------
210
- |
211
- -----------------------------------
212
- | | |
213
- ---------- ---------- ----------
214
- | worker | | worker | | worker |
215
- ---------- ---------- ----------
216
-
217
-
218
- - populator determines checks that need to occur, and puts checks onto `jobs` tube
219
- - populator fetches jobs from a database
220
- - populator can be swapped out to get checks from a dsl or flat files
221
- - workers pop a check off the beanstalk, perform check, put result onto `results` tube,
222
- re-add check to `jobs` tube with a delay.
223
- - notifier pops results off `results` tube, notifies as necessary
202
+ TODO: insert architecture diagram and notes here
203
+
204
+ Dependencies
205
+ ------------
206
+
207
+ Apart from a bundle of gems (see flapjack.gemspec for runtime gems, and Gemfile for additional gems required for testing):
208
+ - Ruby >= 1.9
209
+ - Redis >= 2.4.15
224
210
 
225
- Releasing
226
- ---------
227
211
 
228
- 1. bump version number + release date in gemspec
229
- 1. create a new tag with `git tag -a -m "releasing 0.9" 0.9`
230
- 1. push to github with `git push --tags`
231
- 1. create a new gem with `rake build`
232
- 1. push gem to Gemcutter with `rake push`