flapjack 0.4.11 → 0.4.12
Sign up to get free protection for your applications and to get access to all the features.
- data/TODO.md +37 -10
- data/flapjack.gemspec +7 -7
- data/lib/flapjack/cli/notifier.rb +6 -5
- data/lib/flapjack/notifier.rb +4 -3
- data/lib/flapjack/notifiers/mailer/mailer.rb +13 -7
- data/lib/flapjack/notifiers/xmpp/xmpp.rb +10 -6
- metadata +11 -11
data/TODO.md
CHANGED
@@ -1,5 +1,21 @@
|
|
1
1
|
* create events for failed checks
|
2
|
-
|
2
|
+
|
3
|
+
* rethink Notifier/NotifierCLI split
|
4
|
+
Notifier + NotifierCLI are tightly coupled, which makes it difficult to refactor
|
5
|
+
follow Puppet's lead with Puppet::Application (NotifierCLI translates to Flapjack::Notifier::Application)
|
6
|
+
implement simple interface application interface => Flapjack::Notifier::Application.run(options)
|
7
|
+
|
8
|
+
|
9
|
+
* reduce notifier dependencies (e.g. xmpp4r over xmpp4r-simple)
|
10
|
+
* make notification/escalation logic pluggable (to reduce packaging dependencies)
|
11
|
+
|
12
|
+
* release Flapjack as a distribution-consumable tarball
|
13
|
+
* automate building of release tarball that optionally pulls in dependencies
|
14
|
+
* add lintian-like checks for verifying packagability (see http://pkg-ruby-extras.alioth.debian.org/upstream-devs.html)
|
15
|
+
|
16
|
+
* build benchmarks for flapjack-{worker,notifier}
|
17
|
+
|
18
|
+
* setup wiki.flapjack-project.com
|
3
19
|
* documentation!
|
4
20
|
* user
|
5
21
|
* developer
|
@@ -7,20 +23,31 @@
|
|
7
23
|
* scaling guide
|
8
24
|
* integrating with collectd guide
|
9
25
|
* writing custom populators guide
|
10
|
-
* build benchmarks for flapjack-{worker,notifier}
|
11
26
|
* write puppet manifests
|
12
|
-
|
13
|
-
*
|
14
|
-
* build packages for gem dependencies
|
27
|
+
|
28
|
+
* build option to specify notifier(s) directory
|
15
29
|
* sandbox flapjack-worker
|
16
30
|
* provide config option for specifying sandbox dir
|
31
|
+
|
17
32
|
* provide common interface for loading checks into beanstalk (extract from populator)
|
18
|
-
*
|
19
|
-
|
20
|
-
(logging to rrd, retreiving values, executing check)
|
33
|
+
* make message queueing interface more abstract (support for AMQP/RabbitMQ)
|
34
|
+
|
21
35
|
* write zeroconf/avahi notifier
|
22
36
|
* write growl notifier
|
23
|
-
* write way to customise notifier messages (email body, xmpp format)
|
24
37
|
* write sms notifier
|
25
|
-
*
|
38
|
+
* write way to customise notifier messages (email body, xmpp format)
|
39
|
+
|
26
40
|
* http://www.kitchensoap.com/2009/10/05/meanwhile-more-meta-metrics/
|
41
|
+
|
42
|
+
* write beanstalkd.yreserve to simplify code
|
43
|
+
* write beanstalkd.jput, beanstalkd.jreserve for native json api
|
44
|
+
|
45
|
+
* add support to worker and notifier for multiple beanstalkds
|
46
|
+
|
47
|
+
* write check generator
|
48
|
+
* include a collection of common functions
|
49
|
+
(logging to rrd, retreiving values, executing check)
|
50
|
+
* patch beanstalk-client to recognise DRAINING status
|
51
|
+
|
52
|
+
|
53
|
+
|
data/flapjack.gemspec
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
s.name = 'flapjack'
|
3
|
-
s.version = '0.4.
|
4
|
-
s.date = '2009-
|
3
|
+
s.version = '0.4.12'
|
4
|
+
s.date = '2009-11-22'
|
5
5
|
|
6
6
|
s.summary = "a scalable and distributed monitoring system"
|
7
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."
|
@@ -11,11 +11,11 @@ Gem::Specification.new do |s|
|
|
11
11
|
s.homepage = 'http://flapjack-project.com'
|
12
12
|
s.has_rdoc = false
|
13
13
|
|
14
|
-
s.add_dependency('daemons', '
|
15
|
-
s.add_dependency('beanstalk-client', '
|
16
|
-
s.add_dependency('log4r', '
|
17
|
-
s.add_dependency('xmpp4r
|
18
|
-
s.add_dependency('
|
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', '= 0.5')
|
18
|
+
s.add_dependency('tmail', '= 1.2.3.1')
|
19
19
|
s.add_dependency('dm-core', '= 0.9.11')
|
20
20
|
s.add_dependency('dm-timestamps', '= 0.9.11')
|
21
21
|
s.add_dependency('dm-types', '= 0.9.11')
|
@@ -224,13 +224,14 @@ module Flapjack
|
|
224
224
|
if any_parents_warning_or_critical?(result)
|
225
225
|
@log.info("Not notifying on check '#{result.id}' as parent is failing.")
|
226
226
|
else
|
227
|
+
@log.info("Creating event for check '#{result.id}'")
|
228
|
+
# FIXME: this will be a performance hit
|
229
|
+
event = ::Event.new(:check_id => result.id)
|
230
|
+
raise unless event.save
|
231
|
+
|
227
232
|
@log.info("Notifying on check '#{result.id}'")
|
228
|
-
@notifier.notify!(result)
|
233
|
+
@notifier.notify!(result, event)
|
229
234
|
end
|
230
|
-
|
231
|
-
@log.info("Creating event for check '#{result.id}'")
|
232
|
-
event = Event.new(:check_id => result.id)
|
233
|
-
raise unless event.save
|
234
235
|
end
|
235
236
|
|
236
237
|
@log.info("Storing status of check in database")
|
data/lib/flapjack/notifier.rb
CHANGED
@@ -22,12 +22,13 @@ module Flapjack
|
|
22
22
|
@log.warning("there are no notifiers")
|
23
23
|
end
|
24
24
|
end
|
25
|
-
|
26
|
-
|
25
|
+
|
26
|
+
# FIXME: use opts={} convention
|
27
|
+
def notify!(result, event)
|
27
28
|
@notifiers.each do |n|
|
28
29
|
@recipients.each do |recipient|
|
29
30
|
@log.info("Notifying #{recipient.name} via #{n.class} about check #{result.id}")
|
30
|
-
n.notify(:result => result, :who => recipient)
|
31
|
+
n.notify(:result => result, :who => recipient, :event => event)
|
31
32
|
end
|
32
33
|
end
|
33
34
|
end
|
@@ -2,7 +2,8 @@
|
|
2
2
|
|
3
3
|
require 'rubygems'
|
4
4
|
require 'net/smtp'
|
5
|
-
require '
|
5
|
+
require 'tmail'
|
6
|
+
require 'log4r'
|
6
7
|
|
7
8
|
module Flapjack
|
8
9
|
module Notifiers
|
@@ -10,20 +11,25 @@ module Flapjack
|
|
10
11
|
class Mailer
|
11
12
|
|
12
13
|
def initialize(opts={})
|
13
|
-
|
14
|
+
if opts[:from_address]
|
15
|
+
@from_address = opts[:from_address]
|
16
|
+
else
|
17
|
+
raise ArgumentError, "from address must be provided"
|
18
|
+
end
|
14
19
|
@website_uri = opts[:website_uri] ? opts[:website_uri].gsub(/\/$/, '') : "http://#{`hostname`}"
|
15
20
|
@log = opts[:logger]
|
16
|
-
@log ||= Log4r::Logger.new("notifier")
|
21
|
+
@log ||= ::Log4r::Logger.new("notifier")
|
17
22
|
end
|
18
23
|
|
19
24
|
def notify(opts={})
|
20
|
-
raise unless
|
25
|
+
raise ArgumentError, "a recipient was not specified" unless opts[:who]
|
26
|
+
raise ArgumentError, "a result was not specified" unless opts[:result]
|
21
27
|
|
22
|
-
mail =
|
28
|
+
mail = TMail::Mail.new
|
23
29
|
mail.to = opts[:who].email
|
24
30
|
mail.from = @from_address
|
25
31
|
mail.subject = "Check: #{opts[:result].id}, Status: #{opts[:result].status}"
|
26
|
-
mail.
|
32
|
+
mail.body = <<-DESC
|
27
33
|
Check #{opts[:result].id} returned the status "#{opts[:result].status}".
|
28
34
|
|
29
35
|
Here was the output:
|
@@ -35,7 +41,7 @@ module Flapjack
|
|
35
41
|
|
36
42
|
begin
|
37
43
|
Net::SMTP.start('localhost') do |smtp|
|
38
|
-
smtp.sendmail(mail.to_s, mail.from, mail.to)
|
44
|
+
return smtp.sendmail(mail.to_s, mail.from, mail.to)
|
39
45
|
end
|
40
46
|
rescue Errno::ECONNREFUSED
|
41
47
|
@log.error("Couldn't establish connection to mail server!")
|
@@ -1,6 +1,6 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
|
-
require 'xmpp4r
|
3
|
+
require 'xmpp4r'
|
4
4
|
|
5
5
|
module Flapjack
|
6
6
|
module Notifiers
|
@@ -16,7 +16,9 @@ module Flapjack
|
|
16
16
|
end
|
17
17
|
|
18
18
|
begin
|
19
|
-
@xmpp = Jabber::
|
19
|
+
@xmpp = Jabber::Client.new(@jid)
|
20
|
+
@xmpp.connect
|
21
|
+
@xmpp.auth(@password)
|
20
22
|
rescue SocketError => e
|
21
23
|
@log.error("XMPP: #{e.message}")
|
22
24
|
end
|
@@ -25,14 +27,16 @@ module Flapjack
|
|
25
27
|
|
26
28
|
def notify(opts={})
|
27
29
|
|
28
|
-
raise unless opts[:who]
|
30
|
+
raise ArgumentError, "a recipient was not specified" unless opts[:who]
|
31
|
+
raise ArgumentError, "a result was not specified" unless opts[:result]
|
29
32
|
|
30
|
-
|
33
|
+
text = <<-DESC
|
31
34
|
Check #{opts[:result].id} returned the status "#{opts[:result].status}".
|
32
35
|
http://localhost:4000/checks/#{opts[:result].id}
|
33
36
|
DESC
|
34
|
-
|
35
|
-
|
37
|
+
|
38
|
+
message = Jabber::Message.new(opts[:who].jid, text)
|
39
|
+
@xmpp.send(message)
|
36
40
|
|
37
41
|
end
|
38
42
|
|
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.4.
|
4
|
+
version: 0.4.12
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Lindsay Holmwood
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-
|
12
|
+
date: 2009-11-22 00:00:00 +01:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -18,7 +18,7 @@ dependencies:
|
|
18
18
|
version_requirement:
|
19
19
|
version_requirements: !ruby/object:Gem::Requirement
|
20
20
|
requirements:
|
21
|
-
- - "
|
21
|
+
- - "="
|
22
22
|
- !ruby/object:Gem::Version
|
23
23
|
version: 1.0.10
|
24
24
|
version:
|
@@ -28,7 +28,7 @@ dependencies:
|
|
28
28
|
version_requirement:
|
29
29
|
version_requirements: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - "
|
31
|
+
- - "="
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: 1.0.2
|
34
34
|
version:
|
@@ -38,29 +38,29 @@ dependencies:
|
|
38
38
|
version_requirement:
|
39
39
|
version_requirements: !ruby/object:Gem::Requirement
|
40
40
|
requirements:
|
41
|
-
- - "
|
41
|
+
- - "="
|
42
42
|
- !ruby/object:Gem::Version
|
43
43
|
version: 1.0.5
|
44
44
|
version:
|
45
45
|
- !ruby/object:Gem::Dependency
|
46
|
-
name: xmpp4r
|
46
|
+
name: xmpp4r
|
47
47
|
type: :runtime
|
48
48
|
version_requirement:
|
49
49
|
version_requirements: !ruby/object:Gem::Requirement
|
50
50
|
requirements:
|
51
|
-
- - "
|
51
|
+
- - "="
|
52
52
|
- !ruby/object:Gem::Version
|
53
|
-
version: 0.
|
53
|
+
version: "0.5"
|
54
54
|
version:
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
|
-
name:
|
56
|
+
name: tmail
|
57
57
|
type: :runtime
|
58
58
|
version_requirement:
|
59
59
|
version_requirements: !ruby/object:Gem::Requirement
|
60
60
|
requirements:
|
61
|
-
- - "
|
61
|
+
- - "="
|
62
62
|
- !ruby/object:Gem::Version
|
63
|
-
version: 1.
|
63
|
+
version: 1.2.3.1
|
64
64
|
version:
|
65
65
|
- !ruby/object:Gem::Dependency
|
66
66
|
name: dm-core
|