flapjack 0.4.10
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/LICENCE +20 -0
- data/README.md +205 -0
- data/Rakefile +84 -0
- data/TODO.md +26 -0
- data/bin/flapjack-notifier +46 -0
- data/bin/flapjack-notifier-manager +45 -0
- data/bin/flapjack-stats +22 -0
- data/bin/flapjack-worker +36 -0
- data/bin/flapjack-worker-manager +35 -0
- data/bin/install-flapjack-systemwide +58 -0
- data/doc/CONFIGURING.md +38 -0
- data/doc/DEVELOPING.md +35 -0
- data/doc/INSTALL.md +64 -0
- data/etc/default/flapjack-notifier +15 -0
- data/etc/default/flapjack-workers +17 -0
- data/etc/flapjack/flapjack-notifier.yaml.example +8 -0
- data/etc/flapjack/recipients.yaml.example +10 -0
- data/etc/init.d/flapjack-notifier +47 -0
- data/etc/init.d/flapjack-workers +44 -0
- data/flapjack.gemspec +31 -0
- data/lib/flapjack/checks/http_content +15 -0
- data/lib/flapjack/cli/notifier.rb +245 -0
- data/lib/flapjack/cli/notifier_manager.rb +86 -0
- data/lib/flapjack/cli/worker.rb +136 -0
- data/lib/flapjack/cli/worker_manager.rb +47 -0
- data/lib/flapjack/database.rb +10 -0
- data/lib/flapjack/models/check.rb +92 -0
- data/lib/flapjack/models/check_template.rb +18 -0
- data/lib/flapjack/models/node.rb +16 -0
- data/lib/flapjack/models/related_check.rb +13 -0
- data/lib/flapjack/notifier.rb +35 -0
- data/lib/flapjack/notifiers/mailer/init.rb +3 -0
- data/lib/flapjack/notifiers/mailer/mailer.rb +47 -0
- data/lib/flapjack/notifiers/xmpp/init.rb +3 -0
- data/lib/flapjack/notifiers/xmpp/xmpp.rb +42 -0
- data/lib/flapjack/patches.rb +26 -0
- data/lib/flapjack/result.rb +47 -0
- metadata +205 -0
data/bin/flapjack-worker
ADDED
@@ -0,0 +1,36 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
$: << File.dirname(__FILE__) + '/../lib' unless $:.include?(File.dirname(__FILE__) + '/../lib/')
|
4
|
+
|
5
|
+
require 'rubygems'
|
6
|
+
require 'log4r'
|
7
|
+
require 'log4r/outputter/syslogoutputter'
|
8
|
+
require 'flapjack/cli/worker'
|
9
|
+
|
10
|
+
at_exit do
|
11
|
+
puts "Shutting down"
|
12
|
+
end
|
13
|
+
|
14
|
+
trap("INT") do
|
15
|
+
puts "Caught shutdown signal, cleaning up."
|
16
|
+
exit
|
17
|
+
end
|
18
|
+
|
19
|
+
@options = Flapjack::WorkerOptions.parse(ARGV)
|
20
|
+
@worker = Flapjack::Worker.new(:host => @options.host,
|
21
|
+
:port => @options.port,
|
22
|
+
:checks_directory => @options.check_directory)
|
23
|
+
|
24
|
+
begin
|
25
|
+
@worker.process_loop
|
26
|
+
rescue Beanstalk::NotConnected
|
27
|
+
puts "Couldn't connect to the beanstalk!"
|
28
|
+
|
29
|
+
timeout = 5
|
30
|
+
puts "Retrying in #{timeout} seconds"
|
31
|
+
sleep timeout
|
32
|
+
|
33
|
+
puts "Retrying..."
|
34
|
+
retry
|
35
|
+
end
|
36
|
+
|
@@ -0,0 +1,35 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
$: << File.dirname(__FILE__) + '/../lib' unless $:.include?(File.dirname(__FILE__) + '/../lib/')
|
4
|
+
|
5
|
+
require 'rubygems'
|
6
|
+
require 'daemons'
|
7
|
+
require 'fileutils'
|
8
|
+
require 'flapjack/cli/worker_manager'
|
9
|
+
require 'flapjack/patches' # for Daemons
|
10
|
+
|
11
|
+
# reassign ARGV so we don't mess with it directly
|
12
|
+
args = ARGV
|
13
|
+
args << '--help' if args.size == 0
|
14
|
+
options = WorkerManagerOptions.parse(args)
|
15
|
+
|
16
|
+
worker_path = File.join(File.dirname(__FILE__), 'flapjack-worker')
|
17
|
+
|
18
|
+
# set up pid dir
|
19
|
+
pid_dir = "/var/run/flapjack"
|
20
|
+
FileUtils.mkdir_p(pid_dir)
|
21
|
+
|
22
|
+
# spin up a number of workers (5 is the default).
|
23
|
+
options.workers.times do |n|
|
24
|
+
# we fork for each worker, as Daemons.run backgrounds this script.
|
25
|
+
fork do
|
26
|
+
Daemons.run(worker_path,
|
27
|
+
:ARGV => (args + %w(-- -b localhost)),
|
28
|
+
:multiple => true,
|
29
|
+
:dir_mode => :normal,
|
30
|
+
:dir => pid_dir)
|
31
|
+
end
|
32
|
+
# so we don't try and stop the daemon multiple times
|
33
|
+
break if ARGV[0] == "stop"
|
34
|
+
end
|
35
|
+
|
@@ -0,0 +1,58 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
# 28 05 2009
|
4
|
+
# Lindsay Holmwood <lindsay@holmwood.id.au>
|
5
|
+
#
|
6
|
+
# Copies various scripts to appropriate places so Flapjack can be
|
7
|
+
# started as a daemon.
|
8
|
+
#
|
9
|
+
# I abhor these sort of scripts. It's only a stopgap until Flapjack
|
10
|
+
# gets packaged properly.
|
11
|
+
#
|
12
|
+
# If you would like to package, please let me know! Patches welcome.
|
13
|
+
#
|
14
|
+
|
15
|
+
unless ENV["USERNAME"] == "root"
|
16
|
+
puts 'You need to be root to run this script'
|
17
|
+
exit 1
|
18
|
+
end
|
19
|
+
|
20
|
+
# prompt/warn the user what is about to happen
|
21
|
+
puts "This script sets up Flapjack to run as a daemon. Specifically it: "
|
22
|
+
puts
|
23
|
+
puts " * installs init scripts and configs into /etc"
|
24
|
+
puts " * sets up /var/run/flapjack "
|
25
|
+
puts " * sets Flapjack to run on boot"
|
26
|
+
puts
|
27
|
+
puts "It will prompt you if it wants to overwrite an existing file."
|
28
|
+
puts
|
29
|
+
print "Do you want to continue? [y/n] "
|
30
|
+
continue = gets.strip
|
31
|
+
puts
|
32
|
+
|
33
|
+
unless continue == "y"
|
34
|
+
puts "Exiting."
|
35
|
+
exit
|
36
|
+
end
|
37
|
+
|
38
|
+
# setup
|
39
|
+
system("mkdir -p /var/run/flapjack")
|
40
|
+
system("chmod a+rw /var/run/flapjack")
|
41
|
+
|
42
|
+
etc_path=`gem contents auxesis-flapjack |grep etc`.split.first.gsub(/etc\/.+/, 'etc').strip
|
43
|
+
system("cp -aiv #{etc_path}/* /etc")
|
44
|
+
|
45
|
+
# set sequence number to 50 so beanstalkd has a chance to boot
|
46
|
+
system("update-rc.d flapjack-workers defaults 50")
|
47
|
+
system("update-rc.d flapjack-notifier defaults 50")
|
48
|
+
|
49
|
+
puts
|
50
|
+
puts "Setup complete!"
|
51
|
+
puts
|
52
|
+
puts "You will want to customise:"
|
53
|
+
puts " * /etc/flapjack/recipients.yaml"
|
54
|
+
puts " * /etc/flapjack/flapjack-notifier.yaml"
|
55
|
+
puts
|
56
|
+
puts ".examples of these files exist in /etc/flapjack/'
|
57
|
+
|
58
|
+
|
data/doc/CONFIGURING.md
ADDED
@@ -0,0 +1,38 @@
|
|
1
|
+
### Configuring ###
|
2
|
+
|
3
|
+
You can configure who receives notifications from `flapjack-notifier`
|
4
|
+
in `/etc/flapjack/recipients.yaml`:
|
5
|
+
|
6
|
+
---
|
7
|
+
- :name: Jane Doe
|
8
|
+
:email: "jane@doe.com"
|
9
|
+
:phone: "+61 444 222 111"
|
10
|
+
:pager: "61444222111"
|
11
|
+
:jid: "jane@doe.com"
|
12
|
+
|
13
|
+
Then you can configure how people are notified in `/etc/flapjack/flapjack-notifier.yaml`:
|
14
|
+
|
15
|
+
---
|
16
|
+
:notifiers:
|
17
|
+
:mailer:
|
18
|
+
:from_address: notifications@my-domain.com
|
19
|
+
:xmpp:
|
20
|
+
:jid: notifications@my-domain.com
|
21
|
+
:password: foo
|
22
|
+
:database_uri: "sqlite3:///var/lib/flapjack/flapjack.db"
|
23
|
+
|
24
|
+
Currently there are email and XMPP notifiers.
|
25
|
+
|
26
|
+
The `database_uri` setting must point to the database `flapjack-admin` backs
|
27
|
+
onto. This can be SQLite3, MySQL, or PostgreSQL:
|
28
|
+
|
29
|
+
:database_uri: "mysql://user:password@localhost/flapjack_production"
|
30
|
+
# or
|
31
|
+
:database_uri: "postgres://me:spoons@db.mydomain.com/flapjack_production"
|
32
|
+
|
33
|
+
Now you need to restart the notifier:
|
34
|
+
|
35
|
+
flapjack-notifier-manager restart --recipients /etc/flapjack/recipients.yaml \
|
36
|
+
--config /etc/flapjack/flapjack-notifier.yaml
|
37
|
+
|
38
|
+
|
data/doc/DEVELOPING.md
ADDED
@@ -0,0 +1,35 @@
|
|
1
|
+
Developing
|
2
|
+
----------
|
3
|
+
|
4
|
+
You can write your own notifiers and place them in `lib/flapjack/notifiers/`.
|
5
|
+
|
6
|
+
Your notifier just needs to implement the `notify` method, and take in a hash:
|
7
|
+
|
8
|
+
class Sms
|
9
|
+
def initialize(opts={})
|
10
|
+
# you may want to set from address here
|
11
|
+
@from = (opts[:from] || "0431 112 233")
|
12
|
+
end
|
13
|
+
|
14
|
+
def notify(opts={})
|
15
|
+
who = opts[:who]
|
16
|
+
result = opts[:result]
|
17
|
+
# sms to your hearts content
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
|
22
|
+
Testing
|
23
|
+
-------
|
24
|
+
|
25
|
+
Flapjack is, and will continue to be, well tested. Monitoring is like continuous
|
26
|
+
integration for production apps, so why shouldn't your monitoring system have tests?
|
27
|
+
|
28
|
+
Testing is done with rspec, and tests live in `spec/`.
|
29
|
+
|
30
|
+
To run the tests, check out the code and run:
|
31
|
+
|
32
|
+
$ rake spec
|
33
|
+
|
34
|
+
|
35
|
+
|
data/doc/INSTALL.md
ADDED
@@ -0,0 +1,64 @@
|
|
1
|
+
Dependencies
|
2
|
+
------------
|
3
|
+
|
4
|
+
Before installing Flapjack you will need to setup some dependencies.
|
5
|
+
|
6
|
+
### Setup dependencies (Ubuntu Hardy) ###
|
7
|
+
|
8
|
+
Add the following lines to `/etc/apt/sources.list`
|
9
|
+
|
10
|
+
deb http://ppa.launchpad.net/ubuntu-ruby-backports/ubuntu hardy main
|
11
|
+
deb http://ppa.launchpad.net/auxesis/ppa/ubuntu hardy main
|
12
|
+
|
13
|
+
Add GPG keys for the repos:
|
14
|
+
|
15
|
+
sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 288BA53BCB7DA731
|
16
|
+
|
17
|
+
Update your package list:
|
18
|
+
|
19
|
+
sudo apt-get update
|
20
|
+
|
21
|
+
Install Ruby dependencies:
|
22
|
+
|
23
|
+
sudo apt-get install build-essential libsqlite3-dev
|
24
|
+
|
25
|
+
Install rubygems + beanstalkd:
|
26
|
+
|
27
|
+
sudo apt-get install rubygems beanstalkd
|
28
|
+
|
29
|
+
Set `ENABLED=1` in `/etc/default/beanstalkd`.
|
30
|
+
|
31
|
+
Start beanstalkd:
|
32
|
+
|
33
|
+
sudo /etc/init.d/beanstalkd start
|
34
|
+
|
35
|
+
|
36
|
+
### Setup dependencies (everyone else) ###
|
37
|
+
|
38
|
+
Install the following software through your package manager or from source:
|
39
|
+
|
40
|
+
- beanstalkd (from [http://xph.us/software/beanstalkd/](http://xph.us/software/beanstalkd/))
|
41
|
+
- libevent (from [http://monkey.org/~provos/libevent/](http://monkey.org/~provos/libevent/))
|
42
|
+
- latest RubyGems (from [http://rubyforge.org/projects/rubygems/](http://rubyforge.org/projects/rubygems/))
|
43
|
+
|
44
|
+
|
45
|
+
## Installation ##
|
46
|
+
|
47
|
+
Add GitHub's RubyGems server to your Gem sources:
|
48
|
+
|
49
|
+
sudo gem sources -a http://gems.github.com
|
50
|
+
|
51
|
+
Install the Flapjack gem:
|
52
|
+
|
53
|
+
sudo gem install auxesis-flapjack
|
54
|
+
|
55
|
+
Then run the magic configuration script to set up init scripts:
|
56
|
+
|
57
|
+
sudo install-flapjack-systemwide
|
58
|
+
|
59
|
+
The script will prompt you if it wants to do anything destructive.
|
60
|
+
|
61
|
+
## Packages ##
|
62
|
+
|
63
|
+
We want to provide native packages for Flapjack (`.deb`, `.rpm`, `.ebuild`). If
|
64
|
+
you'd like to contribute please let us know!
|
@@ -0,0 +1,15 @@
|
|
1
|
+
# Defaults for flapjack-notifier initscript
|
2
|
+
# sourced by /etc/init.d/flapjack-notifier
|
3
|
+
|
4
|
+
# set enabled to 1 if you want the init script to start flapjack-notifier
|
5
|
+
ENABLED=1
|
6
|
+
|
7
|
+
# recipients file
|
8
|
+
RECIPIENTS=/etc/flapjack/recipients.yaml
|
9
|
+
|
10
|
+
# address beanstalkd is bound to
|
11
|
+
BEANSTALKD_ADDR=localhost
|
12
|
+
|
13
|
+
# port beanstalk is listening on
|
14
|
+
BEANSTALKD_PORT=11300
|
15
|
+
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# Defaults for flapjack-workers initscript
|
2
|
+
# sourced by /etc/init.d/flapjack-workers
|
3
|
+
|
4
|
+
# set enabled to 1 if you want the init script to start flapjack-workers
|
5
|
+
ENABLED=1
|
6
|
+
|
7
|
+
# address beanstalkd is bound to
|
8
|
+
BEANSTALKD_ADDR=localhost
|
9
|
+
|
10
|
+
# port beanstalk is listening on
|
11
|
+
BEANSTALKD_PORT=11300
|
12
|
+
|
13
|
+
# number of workers to spin up
|
14
|
+
WORKERS=5
|
15
|
+
|
16
|
+
# location of the checks
|
17
|
+
CHECKS_DIRECTORY=/usr/lib/flapjack/checks
|
@@ -0,0 +1,47 @@
|
|
1
|
+
#!/bin/bash
|
2
|
+
#
|
3
|
+
# Copyright (c) 2009 Lindsay Holmwood <lindsay@holmwood.id.au>
|
4
|
+
#
|
5
|
+
# flapjack-notifier
|
6
|
+
# Boots flapjack-notifier, check executors for Flapjack.
|
7
|
+
#
|
8
|
+
|
9
|
+
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local:/usr/local/sbin:/usr/local/bin
|
10
|
+
|
11
|
+
if [ -f /etc/default/flapjack-notifier ]; then
|
12
|
+
. /etc/default/flapjack-notifier
|
13
|
+
fi
|
14
|
+
|
15
|
+
# Default return value
|
16
|
+
RETVAL=0
|
17
|
+
|
18
|
+
if [ ! $(which flapjack-notifier-manager) ]; then
|
19
|
+
echo "Error: flapjack-notifier-manager isn't on your path."
|
20
|
+
echo "Refusing to start!"
|
21
|
+
exit 1
|
22
|
+
fi
|
23
|
+
|
24
|
+
# Evaluate command
|
25
|
+
case "$1" in
|
26
|
+
start)
|
27
|
+
flapjack-notifier-manager start --recipients $RECIPIENTS \
|
28
|
+
--port $BEANSTALKD_PORT --beanstalk $BEANSTALKD_ADDR
|
29
|
+
RETVAL=$?
|
30
|
+
;;
|
31
|
+
stop)
|
32
|
+
flapjack-notifier-manager stop --recipients $RECIPIENTS \
|
33
|
+
--port $BEANSTALKD_PORT --beanstalk $BEANSTALKD_ADDR
|
34
|
+
RETVAL=$?
|
35
|
+
;;
|
36
|
+
restart)
|
37
|
+
flapjack-notifier-manager restart --recipients $RECIPIENTS \
|
38
|
+
--port $BEANSTALKD_PORT --beanstalk $BEANSTALKD_ADDR
|
39
|
+
RETVAL=$?
|
40
|
+
;;
|
41
|
+
*)
|
42
|
+
echo "Usage: flapjack-notifier {start|stop|restart}"
|
43
|
+
exit 1
|
44
|
+
;;
|
45
|
+
esac
|
46
|
+
|
47
|
+
exit $RETVAL
|
@@ -0,0 +1,44 @@
|
|
1
|
+
#!/bin/bash
|
2
|
+
#
|
3
|
+
# Copyright (c) 2009 Lindsay Holmwood <lindsay@holmwood.id.au>
|
4
|
+
#
|
5
|
+
# flapjack-workers
|
6
|
+
# Boots flapjack-workers, check executors for Flapjack.
|
7
|
+
#
|
8
|
+
|
9
|
+
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local:/usr/local/sbin:/usr/local/bin
|
10
|
+
|
11
|
+
if [ -f /etc/default/flapjack-workers ]; then
|
12
|
+
. /etc/default/flapjack-workers
|
13
|
+
fi
|
14
|
+
|
15
|
+
# Default return value
|
16
|
+
RETVAL=0
|
17
|
+
|
18
|
+
if [ ! $(which flapjack-worker-manager) ]; then
|
19
|
+
echo "flapjack-worker-manager isn't on your path."
|
20
|
+
echo "Refusing to start."
|
21
|
+
exit 1
|
22
|
+
fi
|
23
|
+
|
24
|
+
# Evaluate command
|
25
|
+
case "$1" in
|
26
|
+
start)
|
27
|
+
flapjack-worker-manager start --workers $WORKERS --checks-directory $CHECKS_DIRECTORY
|
28
|
+
RETVAL=$?
|
29
|
+
;;
|
30
|
+
stop)
|
31
|
+
flapjack-worker-manager stop
|
32
|
+
RETVAL=$?
|
33
|
+
;;
|
34
|
+
restart)
|
35
|
+
flapjack-worker-manager restart --workers $WORKERS
|
36
|
+
RETVAL=$?
|
37
|
+
;;
|
38
|
+
*)
|
39
|
+
echo "Usage: flapjack-workers {start|stop|restart}"
|
40
|
+
exit 1
|
41
|
+
;;
|
42
|
+
esac
|
43
|
+
|
44
|
+
exit $RETVAL
|
data/flapjack.gemspec
ADDED
@@ -0,0 +1,31 @@
|
|
1
|
+
Gem::Specification.new do |s|
|
2
|
+
s.name = 'flapjack'
|
3
|
+
s.version = '0.4.10'
|
4
|
+
s.date = '2009-07-16'
|
5
|
+
|
6
|
+
s.summary = "a scalable and distributed monitoring system"
|
7
|
+
s.description = "Flapjack is highly scalable and distributed monitoring system. It understands the Nagios plugin format, and can easily be scaled from 1 server to 1000."
|
8
|
+
|
9
|
+
s.authors = ['Lindsay Holmwood']
|
10
|
+
s.email = 'lindsay@holmwood.id.au'
|
11
|
+
s.homepage = 'http://flapjack-project.com'
|
12
|
+
s.has_rdoc = false
|
13
|
+
|
14
|
+
s.add_dependency('daemons', '>= 1.0.10')
|
15
|
+
s.add_dependency('beanstalk-client', '>= 1.0.2')
|
16
|
+
s.add_dependency('log4r', '>= 1.0.5')
|
17
|
+
s.add_dependency('xmpp4r-simple', '>= 0.8.8')
|
18
|
+
s.add_dependency('mailfactory', '>= 1.4.0')
|
19
|
+
s.add_dependency('dm-core', '>= 0.9.11')
|
20
|
+
s.add_dependency('dm-timestamps', '>= 0.9.11')
|
21
|
+
s.add_dependency('dm-types', '>= 0.9.11')
|
22
|
+
s.add_dependency('dm-validations', '>= 0.9.11')
|
23
|
+
s.add_dependency('data_objects', '>= 0.9.12')
|
24
|
+
s.add_dependency('do_sqlite3', '>= 0.9.12')
|
25
|
+
|
26
|
+
s.bindir = "bin"
|
27
|
+
s.executables = ["flapjack-notifier", "flapjack-notifier-manager", "flapjack-stats", "flapjack-worker", "flapjack-worker-manager", "install-flapjack-systemwide"]
|
28
|
+
s.files = ["LICENCE", "README.md", "Rakefile", "TODO.md", "bin/flapjack-notifier", "bin/flapjack-notifier-manager", "bin/flapjack-stats", "bin/flapjack-worker", "bin/flapjack-worker-manager", "bin/install-flapjack-systemwide", "doc/CONFIGURING.md", "doc/DEVELOPING.md", "doc/INSTALL.md", "etc/default/flapjack-notifier", "etc/default/flapjack-workers", "etc/flapjack/flapjack-notifier.yaml.example", "etc/flapjack/recipients.yaml.example", "etc/init.d/flapjack-notifier", "etc/init.d/flapjack-workers", "flapjack.gemspec", "lib/flapjack/checks/http_content", "lib/flapjack/cli/notifier.rb", "lib/flapjack/cli/notifier_manager.rb", "lib/flapjack/cli/worker.rb", "lib/flapjack/cli/worker_manager.rb", "lib/flapjack/database.rb", "lib/flapjack/models/check.rb", "lib/flapjack/models/check_template.rb", "lib/flapjack/models/node.rb", "lib/flapjack/models/related_check.rb", "lib/flapjack/notifier.rb", "lib/flapjack/notifiers/mailer/init.rb", "lib/flapjack/notifiers/mailer/mailer.rb", "lib/flapjack/notifiers/xmpp/init.rb", "lib/flapjack/notifiers/xmpp/xmpp.rb", "lib/flapjack/patches.rb", "lib/flapjack/result.rb"]
|
29
|
+
end
|
30
|
+
|
31
|
+
|