flapjack 0.6.38 → 0.6.39
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/.gitmodules +3 -0
- data/.travis.yml +2 -0
- data/README.md +15 -186
- data/Rakefile +11 -7
- data/bin/flapjack +9 -17
- data/bin/flapjack-nagios-receiver +19 -32
- data/bin/flapjack-populator +7 -2
- data/etc/flapjack_config.yaml.example +20 -0
- data/flapjack.gemspec +1 -3
- data/lib/flapjack/api.rb +1 -5
- data/lib/flapjack/coordinator.rb +24 -28
- data/lib/flapjack/data/contact.rb +12 -10
- data/lib/flapjack/data/entity.rb +2 -2
- data/lib/flapjack/data/entity_check.rb +0 -9
- data/lib/flapjack/data/global.rb +25 -0
- data/lib/flapjack/executive.rb +1 -0
- data/lib/flapjack/jabber.rb +11 -19
- data/lib/flapjack/oobetet.rb +34 -32
- data/lib/flapjack/pagerduty.rb +140 -140
- data/lib/flapjack/redis_pool.rb +1 -1
- data/lib/flapjack/version.rb +1 -1
- data/lib/flapjack/web/views/check.haml +1 -1
- data/spec/lib/flapjack/coordinator_spec.rb +162 -5
- data/spec/lib/flapjack/data/contact_spec.rb +34 -2
- data/spec/lib/flapjack/data/entity_spec.rb +25 -11
- data/spec/lib/flapjack/jabber_spec.rb +2 -3
- data/spec/lib/flapjack/oobetet_spec.rb +140 -0
- data/spec/lib/flapjack/pagerduty_spec.rb +177 -0
- data/spec/lib/flapjack/redis_pool_spec.rb +24 -0
- data/spec/spec_helper.rb +3 -0
- metadata +10 -40
- data/doc/CONFIGURING.md +0 -38
- data/doc/DEBUGGING.md +0 -28
- data/doc/DEVELOPING.md +0 -35
- data/doc/GLOSSARY.md +0 -19
- data/doc/INSTALL.md +0 -64
- data/doc/PACKAGING.md +0 -25
data/.gitmodules
ADDED
data/.travis.yml
CHANGED
data/README.md
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
Flapjack
|
|
2
|
-
========
|
|
1
|
+
# Flapjack
|
|
3
2
|
|
|
4
3
|
[![Travis CI Status][id_travis_img]][id_travis_link]
|
|
5
4
|
|
|
@@ -10,203 +9,33 @@ Flapjack is a highly scalable and distributed monitoring notification system.
|
|
|
10
9
|
|
|
11
10
|
Flapjack provides a scalable method for dealing with events representing changes in system state (OK -> WARNING -> CRITICAL transitions) and alerting appropriate people as necessary.
|
|
12
11
|
|
|
13
|
-
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
|
|
12
|
+
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. Flapjack's `executive` component 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.
|
|
14
13
|
|
|
15
14
|
|
|
16
|
-
|
|
17
|
-
--------------
|
|
15
|
+
## Using Flapjack
|
|
18
16
|
|
|
19
|
-
|
|
17
|
+
### Quickstart
|
|
20
18
|
|
|
21
|
-
|
|
22
|
-
* `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`
|
|
19
|
+
TODO numbered list for simplest possible Flapjack run
|
|
23
20
|
|
|
24
|
-
|
|
21
|
+
For more information, including full specification of the configuration file and the data import formats, please refer to the [Flapjack Wiki](https://github.com/ali-graham/flapjack/wiki/USING).
|
|
25
22
|
|
|
26
|
-
|
|
23
|
+
## Developing Flapjack
|
|
27
24
|
|
|
28
|
-
|
|
29
|
-
* `email_notifier` => generates email notifications (resque, mail)
|
|
30
|
-
* `sms_notifier` => generates sms notifications (resque)
|
|
31
|
-
* `jabber_gateway` => connects to an XMPP (jabber) server, sends notifications (to rooms and individuals), handles acknowledgements from jabber users and other commands (blather)
|
|
32
|
-
* `web` => web UI (sinatra, thin)
|
|
33
|
-
* `api` => HTTP API server (sinatra, thin)
|
|
25
|
+
Information on developing more Flapjack components or contributing to core Flapjack development can be found in the [Flapjack Wiki](https://github.com/ali-graham/flapjack/wiki/DEVELOPING).
|
|
34
26
|
|
|
35
|
-
|
|
27
|
+
## Documentation Submodule
|
|
36
28
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
Developing
|
|
41
|
-
----------
|
|
42
|
-
|
|
43
|
-
Clone the repository:
|
|
44
|
-
|
|
45
|
-
git clone https://auxesis@github.com/auxesis/flapjack.git
|
|
46
|
-
|
|
47
|
-
Install development dependencies:
|
|
48
|
-
|
|
49
|
-
gem install bundler
|
|
50
|
-
bundle install
|
|
51
|
-
|
|
52
|
-
Run the tests:
|
|
53
|
-
|
|
54
|
-
cucumber features/
|
|
55
|
-
rspec spec
|
|
56
|
-
|
|
57
|
-
Testing
|
|
58
|
-
-------
|
|
59
|
-
|
|
60
|
-
Feature tests live in `features/`.
|
|
61
|
-
|
|
62
|
-
To run feature tests:
|
|
63
|
-
|
|
64
|
-
$ cucumber features
|
|
65
|
-
|
|
66
|
-
There's some rspec unit tests as well, run these like so:
|
|
67
|
-
|
|
68
|
-
$ rspec spec
|
|
69
|
-
|
|
70
|
-
NB, if the cucumber tests fail with a [spurious lexing error](https://github.com/cucumber/gherkin/issues/182) on line 2 of events.feature, then try this:
|
|
71
|
-
|
|
72
|
-
$ cucumber -f fuubar features
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
Releasing
|
|
77
|
-
---------
|
|
78
|
-
|
|
79
|
-
Gem releases are handled with [Bundler](http://gembundler.com/rubygems.html).
|
|
80
|
-
|
|
81
|
-
To build the gem, run:
|
|
82
|
-
|
|
83
|
-
gem build flapjack.gemspec
|
|
84
|
-
|
|
85
|
-
Configuring
|
|
86
|
-
===========
|
|
29
|
+
We have the documentation for this project on a github wiki and also referenced as a submodule at /doc in this project. Run the following commands to populate the local doc/ directory:
|
|
87
30
|
|
|
88
31
|
```
|
|
89
|
-
|
|
32
|
+
git submodule init
|
|
33
|
+
git submodule update
|
|
90
34
|
```
|
|
91
35
|
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
The default FLAPJACK_ENV is "development" if there is no environment variable set.
|
|
95
|
-
|
|
96
|
-
Nagios config
|
|
97
|
-
-------------
|
|
98
|
-
|
|
99
|
-
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.
|
|
100
|
-
|
|
101
|
-
nagios.cfg config file changes:
|
|
102
|
-
|
|
103
|
-
```
|
|
104
|
-
# modified lines:
|
|
105
|
-
enable_notifications=0
|
|
106
|
-
host_perfdata_file=/var/cache/nagios3/event_stream.fifo
|
|
107
|
-
service_perfdata_file=/var/cache/nagios3/event_stream.fifo
|
|
108
|
-
host_perfdata_file_template=[HOSTPERFDATA]\t$TIMET$\t$HOSTNAME$\tHOST\t$HOSTSTATE$\t$HOSTEXECUTIONTIME$\t$HOSTLATENCY$\t$HOSTOUTPUT$\t$HOSTPERFDATA$
|
|
109
|
-
service_perfdata_file_template=[SERVICEPERFDATA]\t$TIMET$\t$HOSTNAME$\t$SERVICEDESC$\t$SERVICESTATE$\t$SERVICEEXECUTIONTIME$\t$SERVICELATENCY$\t$SERVICEOUTPUT$\t$SERVICEPERFDATA$
|
|
110
|
-
host_perfdata_file_mode=p
|
|
111
|
-
service_perfdata_file_mode=p
|
|
112
|
-
```
|
|
113
|
-
|
|
114
|
-
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.
|
|
115
|
-
|
|
116
|
-
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.)
|
|
117
|
-
|
|
118
|
-
Create the named pipe if it doesn't already exist:
|
|
119
|
-
|
|
120
|
-
mkfifo -m 0666 /var/cache/nagios3/event_stream.fifo
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
Running
|
|
124
|
-
=======
|
|
125
|
-
|
|
126
|
-
bin/flapjack [options]
|
|
127
|
-
|
|
128
|
-
$ flapjack --help
|
|
129
|
-
Usage: flapjack [options]
|
|
130
|
-
-c, --config [PATH] PATH to the config file to use
|
|
131
|
-
-d, --[no-]daemonize Daemonize?
|
|
132
|
-
|
|
133
|
-
The command line option for daemonize overrides whatever is set in the config file.
|
|
134
|
-
|
|
135
|
-
flapjack-nagios-receiver
|
|
136
|
-
------------------------
|
|
137
|
-
|
|
138
|
-
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:
|
|
139
|
-
|
|
140
|
-
flapjack-nagios-receiver-control start -- --config /etc/flapjack/flapjack-config.yaml --fifo /path/to/nagios/perfdata.fifo
|
|
141
|
-
flapjack-nagios-receiver-control status
|
|
142
|
-
flapjack-nagios-receiver-control restart -- --config /etc/flapjack/flapjack-config.yaml --fifo /path/to/nagios/perfdata.fifo
|
|
143
|
-
flapjack-nagios-receiver-control stop
|
|
144
|
-
|
|
145
|
-
* Bypassing daemons control script: *
|
|
146
|
-
|
|
147
|
-
Specify the path to the nagios named pipe (fifo):
|
|
148
|
-
|
|
149
|
-
flapjack-nagios-receiver --fifo /var/cache/nagios3/event_stream.fifo
|
|
150
|
-
|
|
151
|
-
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.
|
|
152
|
-
|
|
153
|
-
Importing contacts and entities
|
|
154
|
-
-------------------------------
|
|
155
|
-
|
|
156
|
-
The `flapjack-populator` script provides a mechanism for importing contacts and entities from JSON formatted import files.
|
|
157
|
-
|
|
158
|
-
bin/flapjack-populator import-contacts --from tmp/dummy_contacts.json --config /etc/flapjack/flapjack-config.yml
|
|
159
|
-
bin/flapjack-populator import-entities --from tmp/dummy_entities.json --config /etc/flapjack/flapjack-config.yml
|
|
160
|
-
|
|
161
|
-
TODO: convert the format documentation into markdown and include in the project
|
|
162
|
-
|
|
163
|
-
In lieu of actual documentation of the formats there are example files, and example ruby code which generated them, in the tmp directory.
|
|
164
|
-
|
|
165
|
-
executive
|
|
166
|
-
---------
|
|
167
|
-
|
|
168
|
-
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.
|
|
169
|
-
|
|
170
|
-
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.
|
|
171
|
-
|
|
172
|
-
Resque Workers
|
|
173
|
-
--------------
|
|
174
|
-
|
|
175
|
-
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:
|
|
176
|
-
- email_notifications
|
|
177
|
-
- sms_notifications
|
|
178
|
-
|
|
179
|
-
There'll be more of these as we add more notification mediums.
|
|
180
|
-
|
|
181
|
-
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.
|
|
182
|
-
|
|
183
|
-
One resque worker that processes both queues (but prioritises SMS above email) can be started as follows:
|
|
184
|
-
|
|
185
|
-
QUEUE=sms_notifications,email_notifications VERBOSE=1 be rake resque:work
|
|
186
|
-
|
|
187
|
-
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').
|
|
188
|
-
|
|
189
|
-
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)
|
|
190
|
-
|
|
191
|
-
Redis Database Instances
|
|
192
|
-
------------------------
|
|
193
|
-
|
|
194
|
-
We use the following redis database numbers by convention:
|
|
195
|
-
|
|
196
|
-
* 0 => production
|
|
197
|
-
* 13 => development
|
|
198
|
-
* 14 => testing
|
|
199
|
-
|
|
200
|
-
Architecture
|
|
201
|
-
------------
|
|
202
|
-
|
|
203
|
-
TODO: insert architecture diagram and notes here
|
|
204
|
-
|
|
205
|
-
Dependencies
|
|
206
|
-
------------
|
|
36
|
+
If you make changes to the documentation locally, here's how to publish them:
|
|
207
37
|
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
- Redis >= 2.4.15
|
|
38
|
+
* git add, commit and push from inside the doc subdir
|
|
39
|
+
* add, commit and push the doc dir from the root (this updates the pointer in the main git repo to the correct ref in the doc repo, we think...)
|
|
211
40
|
|
|
212
41
|
|
data/Rakefile
CHANGED
|
@@ -13,15 +13,14 @@ Dir['tasks/**/*.rake'].each { |t| load t }
|
|
|
13
13
|
|
|
14
14
|
require 'cucumber'
|
|
15
15
|
require 'cucumber/rake/task'
|
|
16
|
-
require 'colorize'
|
|
17
16
|
require 'rake/clean'
|
|
18
17
|
require 'bundler'
|
|
19
18
|
Bundler::GemHelper.install_tasks
|
|
20
19
|
|
|
21
20
|
Cucumber::Rake::Task.new(:features) do |t|
|
|
22
|
-
#t.cucumber_opts =
|
|
23
|
-
#t.cucumber_opts =
|
|
24
|
-
t.cucumber_opts =
|
|
21
|
+
#t.cucumber_opts = 'features --format pretty'
|
|
22
|
+
#t.cucumber_opts = '--format progress'
|
|
23
|
+
t.cucumber_opts = '--format fuubar'
|
|
25
24
|
end
|
|
26
25
|
|
|
27
26
|
require 'rspec/core/rake_task'
|
|
@@ -30,12 +29,18 @@ RSpec::Core::RakeTask.new(:spec)
|
|
|
30
29
|
task :default => :tests
|
|
31
30
|
|
|
32
31
|
namespace :verify do
|
|
32
|
+
|
|
33
33
|
task :uncommitted do
|
|
34
|
+
|
|
35
|
+
def red(text)
|
|
36
|
+
"\e[0;31;49m#{text}\e[0m"
|
|
37
|
+
end
|
|
38
|
+
|
|
34
39
|
uncommitted = `git ls-files -m`.split("\n")
|
|
35
40
|
if uncommitted.size > 0
|
|
36
|
-
puts
|
|
41
|
+
puts red('The following files are uncommitted:')
|
|
37
42
|
uncommitted.each do |filename|
|
|
38
|
-
puts " - #{filename}"
|
|
43
|
+
puts red(" - #{filename}")
|
|
39
44
|
end
|
|
40
45
|
exit 1
|
|
41
46
|
end
|
|
@@ -44,6 +49,5 @@ namespace :verify do
|
|
|
44
49
|
task :all => [ :uncommitted ]
|
|
45
50
|
end
|
|
46
51
|
|
|
47
|
-
# FIXME: getting that intermittent gherken lexing error so removing :features from verify list
|
|
48
52
|
task :verify => [ 'verify:all', :spec, :features]
|
|
49
53
|
task :tests => [ :spec, :features]
|
data/bin/flapjack
CHANGED
|
@@ -1,9 +1,15 @@
|
|
|
1
1
|
#!/usr/bin/env ruby
|
|
2
2
|
|
|
3
|
-
require 'yaml'
|
|
4
3
|
require 'optparse'
|
|
5
4
|
require 'ostruct'
|
|
6
5
|
|
|
6
|
+
# add lib to the default include path
|
|
7
|
+
unless $:.include?(File.dirname(__FILE__) + '/../lib/')
|
|
8
|
+
$: << File.dirname(__FILE__) + '/../lib'
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
require 'flapjack/configuration'
|
|
12
|
+
|
|
7
13
|
options = OpenStruct.new
|
|
8
14
|
options.config = File.join('etc', 'flapjack_config.yaml')
|
|
9
15
|
options.daemonize = nil
|
|
@@ -27,16 +33,7 @@ end.parse!(ARGV)
|
|
|
27
33
|
|
|
28
34
|
FLAPJACK_ENV = ENV['FLAPJACK_ENV'] || 'development'
|
|
29
35
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
if File.file?(options.config)
|
|
33
|
-
config = YAML::load_file(options.config)
|
|
34
|
-
else
|
|
35
|
-
puts "Could not find config file at '#{options.config}', you may want to specify one with the --config option"
|
|
36
|
-
exit(false)
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
config_env = config[FLAPJACK_ENV]
|
|
36
|
+
config_env = Flapjack::Configuration.new.load(options.config)
|
|
40
37
|
|
|
41
38
|
if config_env.nil? || config_env.empty?
|
|
42
39
|
puts "No config data for environment '#{FLAPJACK_ENV}' found in '#{options.config}'"
|
|
@@ -49,11 +46,6 @@ else
|
|
|
49
46
|
pid_file = options.pidfile
|
|
50
47
|
end
|
|
51
48
|
|
|
52
|
-
# add lib to the default include path
|
|
53
|
-
unless $:.include?(File.dirname(__FILE__) + '/../lib/')
|
|
54
|
-
$: << File.dirname(__FILE__) + '/../lib'
|
|
55
|
-
end
|
|
56
|
-
|
|
57
49
|
# TODO Flapjack falls over when Redis restarted -- trap errors and attempt reconnect
|
|
58
50
|
|
|
59
51
|
require 'flapjack/coordinator'
|
|
@@ -69,4 +61,4 @@ else
|
|
|
69
61
|
end
|
|
70
62
|
|
|
71
63
|
puts "Daemonising ... " if daemonize
|
|
72
|
-
coordinator.start(:daemonize => daemonize)
|
|
64
|
+
coordinator.start(:daemonize => daemonize, :signals => true)
|
|
@@ -1,11 +1,16 @@
|
|
|
1
1
|
#!/usr/bin/env ruby
|
|
2
2
|
|
|
3
|
-
require 'redis'
|
|
4
|
-
require 'json'
|
|
5
|
-
require 'yaml'
|
|
6
3
|
require 'optparse'
|
|
7
4
|
require 'ostruct'
|
|
8
|
-
require '
|
|
5
|
+
require 'redis'
|
|
6
|
+
require 'yajl/json_gem'
|
|
7
|
+
|
|
8
|
+
# add lib to the default include path
|
|
9
|
+
unless $:.include?(File.dirname(__FILE__) + '/../lib/')
|
|
10
|
+
$: << File.dirname(__FILE__) + '/../lib'
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
require 'flapjack/configuration'
|
|
9
14
|
|
|
10
15
|
options = OpenStruct.new
|
|
11
16
|
options.config = File.join('etc', 'flapjack_config.yaml')
|
|
@@ -26,18 +31,9 @@ end.parse!(ARGV)
|
|
|
26
31
|
|
|
27
32
|
FLAPJACK_ENV = ENV['FLAPJACK_ENV'] || 'development'
|
|
28
33
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
if File.file?(options.config)
|
|
32
|
-
config = YAML::load(File.open(options.config))
|
|
33
|
-
else
|
|
34
|
-
puts "Could not find config file at '#{options.config}', you may want to specify one with the --config option"
|
|
35
|
-
exit(false)
|
|
36
|
-
end
|
|
34
|
+
@config_env = Flapjack::Configuration.new.load(options.config)
|
|
37
35
|
|
|
38
|
-
config_env
|
|
39
|
-
|
|
40
|
-
if config_env.nil? || config_env.empty?
|
|
36
|
+
if @config_env.nil? || @config_env.empty?
|
|
41
37
|
puts "No config data for environment '#{FLAPJACK_ENV}' found in '#{options.config}'"
|
|
42
38
|
exit(false)
|
|
43
39
|
end
|
|
@@ -55,24 +51,13 @@ end
|
|
|
55
51
|
# host_perfdata_file_template=[HOSTPERFDATA]\t$TIMET$\t$HOSTNAME$\tHOST\t$HOSTSTATE$\t$HOSTEXECUTIONTIME$\t$HOSTLATENCY$\t$HOSTOUTPUT$\t$HOSTPERFDATA$
|
|
56
52
|
# service_perfdata_file_template=[SERVICEPERFDATA]\t$TIMET$\t$HOSTNAME$\t$SERVICEDESC$\t$SERVICESTATE$\t$SERVICEEXECUTIONTIME$\t$SERVICELATENCY$\t$SERVICEOUTPUT$\t$SERVICEPERFDATA$
|
|
57
53
|
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
if config_env.nil? || config_env.empty?
|
|
64
|
-
puts "No config data for environment '#{FLAPJACK_ENV}'"
|
|
65
|
-
exit(false)
|
|
54
|
+
def get_redis_connection(cfg)
|
|
55
|
+
opts = cfg['path'] ? {:path => cfg['path']} :
|
|
56
|
+
{:host => cfg['host'], :port => cfg['port']}
|
|
57
|
+
Redis.new(opts.merge(:db => cfg['db']))
|
|
66
58
|
end
|
|
67
59
|
|
|
68
|
-
def process_input
|
|
69
|
-
|
|
70
|
-
if @redis_path
|
|
71
|
-
redis = Redis.new(:db => @redis_db, :path => @redis_path)
|
|
72
|
-
else
|
|
73
|
-
redis = Redis.new(:db => @redis_db, :host => @redis_host, :port => @redis_port)
|
|
74
|
-
end
|
|
75
|
-
|
|
60
|
+
def process_input(redis)
|
|
76
61
|
begin
|
|
77
62
|
while line = @fifo.gets
|
|
78
63
|
skip unless line
|
|
@@ -112,8 +97,10 @@ def process_input
|
|
|
112
97
|
end
|
|
113
98
|
|
|
114
99
|
def main
|
|
100
|
+
redis = get_redis_connection(@config_env['redis'])
|
|
101
|
+
|
|
115
102
|
while true
|
|
116
|
-
process_input
|
|
103
|
+
process_input(redis)
|
|
117
104
|
puts "Whoops, restarting main loop in 10 seconds"
|
|
118
105
|
sleep 10
|
|
119
106
|
end
|
data/bin/flapjack-populator
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
#!/usr/bin/env ruby
|
|
2
2
|
|
|
3
|
-
require 'yajl/json_gem'
|
|
4
|
-
require 'redis'
|
|
5
3
|
require 'optparse'
|
|
6
4
|
require 'ostruct'
|
|
5
|
+
require 'yajl/json_gem'
|
|
6
|
+
require 'redis'
|
|
7
7
|
|
|
8
8
|
# add lib to the default include path
|
|
9
9
|
unless $:.include?(File.dirname(__FILE__) + '/../lib/')
|
|
@@ -45,6 +45,11 @@ FLAPJACK_ENV = ENV['FLAPJACK_ENV'] || 'development'
|
|
|
45
45
|
|
|
46
46
|
config_env = Flapjack::Configuration.new.load(options.config)
|
|
47
47
|
|
|
48
|
+
if config_env.nil? || config_env.empty?
|
|
49
|
+
puts "No config data for environment '#{FLAPJACK_ENV}' found in '#{options.config}'"
|
|
50
|
+
exit(false)
|
|
51
|
+
end
|
|
52
|
+
|
|
48
53
|
if options.from
|
|
49
54
|
filename = options.from
|
|
50
55
|
file = File.new(filename)
|
|
@@ -1,5 +1,25 @@
|
|
|
1
1
|
---
|
|
2
2
|
|
|
3
|
+
quickstart:
|
|
4
|
+
redis:
|
|
5
|
+
host: 127.0.0.1
|
|
6
|
+
port: 6379
|
|
7
|
+
db: 6
|
|
8
|
+
executive:
|
|
9
|
+
enabled: yes
|
|
10
|
+
email_queue: email_notifications
|
|
11
|
+
notification_log_file: log/flapjack-notification.log
|
|
12
|
+
email_notifier:
|
|
13
|
+
enabled: yes
|
|
14
|
+
queue: email_notifications
|
|
15
|
+
smtp_config:
|
|
16
|
+
address: "localhost"
|
|
17
|
+
domain: 'localhost.localdomain'
|
|
18
|
+
port: 25
|
|
19
|
+
web:
|
|
20
|
+
enabled: yes
|
|
21
|
+
port: 5080
|
|
22
|
+
|
|
3
23
|
development:
|
|
4
24
|
pid_file: tmp/pids/flapjack.pid
|
|
5
25
|
log_file: log/flapjack.log
|