flapjack 0.6.43 → 0.6.44

Sign up to get free protection for your applications and to get access to all the features.
Files changed (90) hide show
  1. data/bin/flapjack +4 -2
  2. data/bin/flapjack-nagios-receiver +4 -1
  3. data/bin/flapjack-populator +4 -1
  4. data/etc/flapjack_config.yaml.example +111 -106
  5. data/features/steps/notifications_steps.rb +6 -6
  6. data/lib/flapjack/configuration.rb +76 -24
  7. data/lib/flapjack/coordinator.rb +27 -44
  8. data/lib/flapjack/data/entity.rb +28 -7
  9. data/lib/flapjack/data/entity_check.rb +18 -20
  10. data/lib/flapjack/executive.rb +5 -4
  11. data/lib/flapjack/gateways/api.rb +391 -0
  12. data/lib/flapjack/gateways/api/entity_check_presenter.rb +185 -0
  13. data/lib/flapjack/gateways/api/entity_presenter.rb +70 -0
  14. data/lib/flapjack/gateways/base.rb +38 -0
  15. data/lib/flapjack/{notification → gateways}/email.rb +4 -5
  16. data/lib/flapjack/{notification → gateways}/email/alert.html.haml +0 -0
  17. data/lib/flapjack/{notification → gateways}/email/alert.text.erb +0 -0
  18. data/lib/flapjack/gateways/jabber.rb +387 -0
  19. data/lib/flapjack/gateways/oobetet.rb +241 -0
  20. data/lib/flapjack/gateways/pagerduty.rb +247 -0
  21. data/lib/flapjack/{notification → gateways}/sms.rb +5 -6
  22. data/lib/flapjack/{notification → gateways}/sms/messagenet.rb +1 -1
  23. data/lib/flapjack/gateways/web.rb +293 -0
  24. data/lib/flapjack/{web → gateways/web}/views/_css.haml +0 -0
  25. data/lib/flapjack/{web → gateways/web}/views/_nav.haml +0 -0
  26. data/lib/flapjack/{web → gateways/web}/views/check.haml +0 -0
  27. data/lib/flapjack/{web → gateways/web}/views/contact.haml +0 -0
  28. data/lib/flapjack/{web → gateways/web}/views/contacts.haml +0 -0
  29. data/lib/flapjack/{web → gateways/web}/views/index.haml +0 -0
  30. data/lib/flapjack/{web → gateways/web}/views/self_stats.haml +0 -0
  31. data/lib/flapjack/pikelet.rb +0 -23
  32. data/lib/flapjack/version.rb +1 -1
  33. data/spec/lib/flapjack/coordinator_spec.rb +56 -36
  34. data/spec/lib/flapjack/data/entity_spec.rb +53 -4
  35. data/spec/lib/flapjack/{api → gateways/api}/entity_check_presenter_spec.rb +10 -13
  36. data/spec/lib/flapjack/{api → gateways/api}/entity_presenter_spec.rb +10 -10
  37. data/spec/lib/flapjack/{api_spec.rb → gateways/api_spec.rb} +14 -14
  38. data/spec/lib/flapjack/gateways/email_spec.rb +6 -0
  39. data/spec/lib/flapjack/{jabber_spec.rb → gateways/jabber_spec.rb} +9 -9
  40. data/spec/lib/flapjack/{oobetet_spec.rb → gateways/oobetet_spec.rb} +10 -10
  41. data/spec/lib/flapjack/{pagerduty_spec.rb → gateways/pagerduty_spec.rb} +11 -11
  42. data/spec/lib/flapjack/gateways/sms_spec.rb +6 -0
  43. data/spec/lib/flapjack/{web_spec.rb → gateways/web_spec.rb} +4 -4
  44. metadata +46 -79
  45. data/bin/install-flapjack-systemwide +0 -58
  46. data/features/steps/flapjack-importer_steps.rb +0 -109
  47. data/features/steps/flapjack-worker_steps.rb +0 -68
  48. data/lib/flapjack/api.rb +0 -388
  49. data/lib/flapjack/api/entity_check_presenter.rb +0 -181
  50. data/lib/flapjack/api/entity_presenter.rb +0 -66
  51. data/lib/flapjack/cli/worker_manager.rb +0 -46
  52. data/lib/flapjack/inifile.rb +0 -44
  53. data/lib/flapjack/jabber.rb +0 -383
  54. data/lib/flapjack/notifier_engine.rb +0 -40
  55. data/lib/flapjack/notifiers/mailer/init.rb +0 -3
  56. data/lib/flapjack/notifiers/mailer/mailer.rb +0 -51
  57. data/lib/flapjack/notifiers/xmpp/init.rb +0 -3
  58. data/lib/flapjack/notifiers/xmpp/xmpp.rb +0 -46
  59. data/lib/flapjack/oobetet.rb +0 -240
  60. data/lib/flapjack/pagerduty.rb +0 -242
  61. data/lib/flapjack/web.rb +0 -286
  62. data/spec.old/check_sandbox/echo +0 -3
  63. data/spec.old/check_sandbox/sandboxed_check +0 -5
  64. data/spec.old/configs/flapjack-notifier-couchdb.ini +0 -25
  65. data/spec.old/configs/flapjack-notifier.ini +0 -39
  66. data/spec.old/configs/recipients.ini +0 -14
  67. data/spec.old/helpers.rb +0 -15
  68. data/spec.old/inifile_spec.rb +0 -66
  69. data/spec.old/mock-notifiers/mock/init.rb +0 -3
  70. data/spec.old/mock-notifiers/mock/mock.rb +0 -19
  71. data/spec.old/notifier-directories/spoons/testmailer/init.rb +0 -20
  72. data/spec.old/notifier_application_spec.rb +0 -222
  73. data/spec.old/notifier_filters_spec.rb +0 -52
  74. data/spec.old/notifier_options_multiplexer_spec.rb +0 -71
  75. data/spec.old/notifier_options_spec.rb +0 -115
  76. data/spec.old/notifier_spec.rb +0 -57
  77. data/spec.old/notifiers/mailer_spec.rb +0 -36
  78. data/spec.old/notifiers/xmpp_spec.rb +0 -36
  79. data/spec.old/persistence/datamapper_spec.rb +0 -74
  80. data/spec.old/persistence/mock_persistence_backend.rb +0 -26
  81. data/spec.old/simple.ini +0 -6
  82. data/spec.old/spec.opts +0 -4
  83. data/spec.old/test-filters/blocker.rb +0 -13
  84. data/spec.old/test-filters/mock.rb +0 -13
  85. data/spec.old/transports/beanstalkd_spec.rb +0 -44
  86. data/spec.old/transports/mock_transport.rb +0 -58
  87. data/spec.old/worker_application_spec.rb +0 -62
  88. data/spec.old/worker_options_spec.rb +0 -83
  89. data/spec/lib/flapjack/notification/email_spec.rb +0 -6
  90. data/spec/lib/flapjack/notification/sms_spec.rb +0 -6
@@ -1,57 +0,0 @@
1
- require File.join(File.dirname(__FILE__), '..', 'lib', 'flapjack', 'notifier_engine')
2
- require File.join(File.dirname(__FILE__), '..', 'lib', 'flapjack', 'transports', 'result')
3
- require File.join(File.dirname(__FILE__), 'helpers')
4
-
5
- describe "running the notifier" do
6
-
7
- before(:each) do
8
- end
9
-
10
- it "should complain if no logger has been specified" do
11
- lambda {
12
- n = Flapjack::NotifierEngine.new
13
- }.should raise_error(RuntimeError)
14
- end
15
-
16
- it "should warn if no notifiers have been specified" do
17
- n = Flapjack::NotifierEngine.new(:log => MockLogger.new)
18
- n.log.messages.last.should =~ /no notifiers/
19
- end
20
-
21
- it "should log when adding a new notifier" do
22
- mock_notifier = mock("MockFlapjack::NotifierEngine")
23
- n = Flapjack::NotifierEngine.new(:log => MockLogger.new,
24
- :notifiers => [mock_notifier])
25
- n.log.messages.last.should =~ /using the (.+) notifier/
26
- end
27
-
28
- it "should call notify on each notifier when notifying" do
29
- mock_notifier = mock("MockFlapjack::NotifierEngine")
30
- mock_notifier.should_receive(:notify)
31
-
32
- result = Flapjack::Transport::Result.new(:result => {:check_id => 12345})
33
-
34
- n = Flapjack::NotifierEngine.new(:log => MockLogger.new,
35
- :notifiers => [mock_notifier])
36
- n.notify!(:result => result,
37
- :event => true,
38
- :recipients => [OpenStruct.new({:name => "John Doe"})])
39
- end
40
-
41
- it "should log notification on each notifier" do
42
- mock_notifier = mock("MockFlapjack::NotifierEngine")
43
- mock_notifier.stub!(:notify)
44
-
45
- result = Flapjack::Transport::Result.new(:result => {:check_id => 12345})
46
-
47
- n = Flapjack::NotifierEngine.new(:log => MockLogger.new,
48
- :notifiers => [mock_notifier])
49
- n.notify!(:result => result,
50
- :event => true,
51
- :recipients => [OpenStruct.new({:name => "John Doe"})])
52
- n.log.messages.last.should =~ /12345/
53
- n.log.messages.last.should =~ /John Doe/
54
- end
55
- end
56
-
57
-
@@ -1,36 +0,0 @@
1
- require File.join(File.dirname(__FILE__), '..', '..', 'lib', 'flapjack', 'notifiers', 'mailer', 'init')
2
- require File.join(File.dirname(__FILE__), '..', 'helpers')
3
-
4
- describe "mailing notifier" do
5
-
6
- it "should error if no from address is provided" do
7
- lambda {
8
- mailer = Flapjack::Notifiers::Mailer.new(:log => MockLogger.new)
9
- }.should raise_error(ArgumentError, /from address/)
10
- end
11
-
12
- it "should error if no recipient is provided" do
13
- mailer = Flapjack::Notifiers::Mailer.new(:from_address => "test@example.org")
14
- lambda {
15
- mailer.notify()
16
- }.should raise_error(ArgumentError, /recipient/)
17
- end
18
-
19
- it "should error if no result is provided" do
20
- mailer = Flapjack::Notifiers::Mailer.new(:from_address => "test@example.org")
21
- lambda {
22
- mailer.notify(:who => 'foo')
23
- }.should raise_error(ArgumentError, /result/)
24
- end
25
-
26
- it "should deliver mail to a recipient" do
27
- mailer = Flapjack::Notifiers::Mailer.new(:from_address => "test@example.org")
28
- response = mailer.notify(:who => OpenStruct.new(:email => "nobody@example.org"),
29
- :result => OpenStruct.new(:id => 11, :status => 2, :output => "foo"))
30
- response.status.should == '250'
31
- end
32
-
33
- it "should have a configurable server to send through"
34
- end
35
-
36
-
@@ -1,36 +0,0 @@
1
- require File.join(File.dirname(__FILE__), '..', '..', 'lib', 'flapjack', 'notifiers', 'xmpp', 'init')
2
- require File.join(File.dirname(__FILE__), '..', 'helpers')
3
-
4
- describe "xmpp notifier" do
5
-
6
- it "should error if no login details provided" do
7
- lambda {
8
- xmpp = Flapjack::Notifiers::Xmpp.new
9
- }.should raise_error(ArgumentError)
10
- end
11
-
12
- it "should error if no recipient is provided" do
13
- xmpp = Flapjack::Notifiers::Xmpp.new(:jid => "5b73a016c5c644e9bf1601a241fc27f5@jabber.org", :password => "5b73a016c5c644e9bf1601a241fc27f5")
14
- lambda {
15
- xmpp.notify(:result => 'foo')
16
- }.should raise_error(ArgumentError, /recipient/)
17
- end
18
-
19
- it "should error if no result is provided" do
20
- xmpp = Flapjack::Notifiers::Xmpp.new(:jid => "5b73a016c5c644e9bf1601a241fc27f5@jabber.org", :password => "5b73a016c5c644e9bf1601a241fc27f5")
21
- lambda {
22
- xmpp.notify(:who => 'foo')
23
- }.should raise_error(ArgumentError, /result/)
24
- end
25
-
26
- it "should deliver message to a recipient" do
27
- xmpp = Flapjack::Notifiers::Xmpp.new(:jid => "5b73a016c5c644e9bf1601a241fc27f5@jabber.org", :password => "5b73a016c5c644e9bf1601a241fc27f5")
28
- lambda {
29
- response = xmpp.notify(:who => OpenStruct.new(:jid => "5b73a016c5c644e9bf1601a241fc27f5@jabber.org"),
30
- :result => OpenStruct.new(:id => 11, :status => 2, :output => "foo"))
31
- }.should_not raise_error
32
- end
33
-
34
- end
35
-
36
-
@@ -1,74 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- require File.join(File.dirname(__FILE__), '..', '..', 'lib', 'flapjack', 'applications', 'notifier')
4
- require File.join(File.dirname(__FILE__), '..', '..', 'lib', 'flapjack', 'persistence', 'data_mapper')
5
- require File.join(File.dirname(__FILE__), '..', '..', 'lib', 'flapjack', 'transports', 'result')
6
- require File.join(File.dirname(__FILE__), '..', 'helpers')
7
- require 'tmpdir'
8
-
9
- describe "datamapper persistence backend" do
10
-
11
- it "should query its parent's statuses" do
12
- backend_options = { :uri => "sqlite3://#{Dir.mktmpdir}/flapjack.db", :log => MockLogger.new }
13
- DataMapper.setup(:default, backend_options[:uri])
14
- DataMapper.auto_migrate!
15
-
16
- bad = Check.new(:command => "exit 1", :name => "bad")
17
- bad.save.should be_true
18
-
19
- good = Check.new(:command => "exit 0", :name => "good")
20
- good.save.should be_true
21
-
22
- relation = RelatedCheck.new(:parent_check => bad, :child_check => good)
23
- relation.save.should be_true
24
-
25
- # the bad check doesn't have failing parents
26
- raw_result = {:check_id => bad.id, :retval => 2}
27
- result = Flapjack::Transport::Result.new(:result => raw_result)
28
-
29
- backend = Flapjack::Persistence::DataMapper.new(backend_options)
30
- backend.any_parents_failed?(result).should be_false
31
-
32
- bad.status = 2
33
- bad.save
34
-
35
- # the good check has a failing parent (bad)
36
- raw_result = {:check_id => good.id, :retval => 0}
37
- result = Flapjack::Transport::Result.new(:result => raw_result)
38
- backend.any_parents_failed?(result).should be_true
39
- end
40
-
41
- it "should persist a result" do
42
- backend_options = { :uri => "sqlite3://#{Dir.mktmpdir}/flapjack.db", :log => MockLogger.new }
43
- DataMapper.setup(:default, backend_options[:uri])
44
- DataMapper.auto_migrate!
45
-
46
- backend = Flapjack::Persistence::DataMapper.new(backend_options)
47
-
48
- check = Check.new(:command => "exit 0", :name => "good")
49
- check.save.should be_true
50
-
51
- raw_result = {:check_id => check.id, :retval => 2}
52
- result = Flapjack::Transport::Result.new(:result => raw_result)
53
-
54
- backend.save(result).should be_true
55
- end
56
-
57
- it "should create an event" do
58
- backend_options = { :uri => "sqlite3://#{Dir.mktmpdir}/flapjack.db", :log => MockLogger.new }
59
- DataMapper.setup(:default, backend_options[:uri])
60
- DataMapper.auto_migrate!
61
-
62
- backend = Flapjack::Persistence::DataMapper.new(backend_options)
63
-
64
- check = Check.new(:command => "exit 0", :name => "good")
65
- check.save.should be_true
66
-
67
- raw_result = {:check_id => check.id, :retval => 2}
68
- result = Flapjack::Transport::Result.new(:result => raw_result)
69
-
70
- backend.create_event(result).should be_true
71
- end
72
-
73
- end
74
-
@@ -1,26 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
-
4
- module Flapjack
5
- module Persistence
6
- class MockPersistenceBackend
7
- def initialize(options={})
8
- @options = options
9
- @config = OpenStruct.new(@options)
10
- @queue = []
11
- @log = @config.log
12
- end
13
-
14
- # log if the method is called (essentially, these are dodgy mocks)
15
- %w(any_parents_failed? save create_event).each do |method|
16
- class_eval <<-HERE
17
- def #{method}(*args)
18
- @log.info("method #{method} was called on MockPersistenceBackend")
19
- end
20
- HERE
21
- end
22
-
23
- end
24
- end
25
- end
26
-
data/spec.old/simple.ini DELETED
@@ -1,6 +0,0 @@
1
- [forks]
2
- hello = world
3
- [spoons]
4
- foo = bar
5
- [splades]
6
- bar = baz
data/spec.old/spec.opts DELETED
@@ -1,4 +0,0 @@
1
- --color
2
- --format
3
- progress
4
- --diff
@@ -1,13 +0,0 @@
1
- module Flapjack
2
- module Filters
3
- class Blocker
4
- def initialize(opts={})
5
- @log = opts[:log]
6
- end
7
-
8
- def block?(result)
9
- true
10
- end
11
- end
12
- end
13
- end
@@ -1,13 +0,0 @@
1
- module Flapjack
2
- module Filters
3
- class Mock
4
- def initialize(opts={})
5
- @log = opts[:log]
6
- end
7
-
8
- def block?(result)
9
- false
10
- end
11
- end
12
- end
13
- end
@@ -1,44 +0,0 @@
1
- require File.join(File.dirname(__FILE__), '..', '..', 'lib', 'flapjack', 'applications', 'notifier')
2
- require File.join(File.dirname(__FILE__), '..', 'helpers')
3
- require 'beanstalk-client'
4
-
5
- describe "notifier application" do
6
-
7
- before(:each) do
8
- lambda {
9
- begin
10
- @beanstalk = Beanstalk::Connection.new('localhost:11300', 'results')
11
- rescue => e
12
- # give helpful error messages to people unfamiliar with the test suite
13
- puts
14
- puts "You need to have an instance of beanstalkd running locally to run these tests!"
15
- puts
16
- raise
17
- end
18
- }.should_not raise_error
19
- end
20
-
21
- it "should handle good, bad, and ugly test result" do
22
- [ {:output => "", :id => 1, :retval => 0},
23
- {:output => "", :id => 2, :retval => 1},
24
- {:output => "", :id => 3, :retval => 2} ].each do |result|
25
- @beanstalk.yput(result)
26
- end
27
-
28
- options = { :notifiers => {},
29
- :filters => [],
30
- :log => MockLogger.new,
31
- :transport => {:backend => :beanstalkd},
32
- :persistence => {:backend => :mock_persistence_backend,
33
- :basedir => File.join(File.dirname(__FILE__), '..', 'persistence')}}
34
- app = Flapjack::Notifier::Application.run(options)
35
-
36
- 3.times do |n|
37
- lambda {
38
- app.process_result
39
- }.should_not raise_error
40
- end
41
- end
42
-
43
- end
44
-
@@ -1,58 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
-
4
- module Flapjack
5
- module Transport
6
- class MockTransport
7
- def initialize(options={})
8
- @options = options
9
- @config = OpenStruct.new(@options)
10
- @queue = []
11
- @log = @config.log
12
- end
13
-
14
- %w(delete put).each do |method|
15
- class_eval <<-HERE
16
- def #{method}(*args)
17
- @log.info("method #{method} was called on MockTransport")
18
- end
19
- HERE
20
- end
21
-
22
- # exactly the same as above, just returns a real object
23
- def next
24
- @log.info("method next was called on MockTransport")
25
- MockResult.new(@options)
26
- end
27
-
28
-
29
- end
30
- end
31
- end
32
-
33
- module Flapjack
34
- module Transport
35
- class MockResult
36
- def initialize(options={})
37
- @options = options
38
- @config = OpenStruct.new(@options)
39
- @log = @config.log
40
- end
41
-
42
- # log if the method is called (essentially, these are dodgy mocks)
43
- %w(warning? critical? any_parents_failed? save check_id frequency).each do |method|
44
- class_eval <<-HERE
45
- def #{method}(*args)
46
- @log.info("method #{method} was called on MockResult")
47
- end
48
- HERE
49
- end
50
-
51
- # exactly the same as above, just returns a real object
52
- def command(*args)
53
- @log.info("method command was called on MockResult")
54
- "echo foo"
55
- end
56
- end
57
- end
58
- end
@@ -1,62 +0,0 @@
1
- require File.join(File.dirname(__FILE__), '..', 'lib', 'flapjack', 'applications', 'worker')
2
- require File.join(File.dirname(__FILE__), 'helpers')
3
-
4
- describe "worker application" do
5
-
6
- it "should have a simple booting interface " do
7
- options = {:log => MockLogger.new}
8
- app = Flapjack::Worker::Application.run(options)
9
- end
10
-
11
- it "should load beanstalkd as the default transport" do
12
- options = {:log => MockLogger.new}
13
- app = Flapjack::Worker::Application.run(options)
14
-
15
- app.log.messages.find {|msg| msg =~ /loading.+beanstalkd.+transport/i}.should_not be_nil
16
- end
17
-
18
- it "should setup two transports (checks + results)" do
19
- options = {:log => MockLogger.new}
20
- app = Flapjack::Worker::Application.run(options)
21
-
22
- app.log.messages.find_all {|msg| msg =~ /loading.+beanstalkd.+transport/i}.size.should == 2
23
- app.log.messages.find {|msg| msg =~ /loading.+beanstalkd.+transport.+checks/i}.should be_true
24
- app.log.messages.find {|msg| msg =~ /loading.+beanstalkd.+transport.+results/i}.should be_true
25
- end
26
-
27
- it "should load a transport as specified in options" do
28
- options = {:log => MockLogger.new, :transport => {:backend => :beanstalkd}}
29
- app = Flapjack::Worker::Application.run(options)
30
-
31
- app.log.messages.find {|msg| msg =~ /loading.+beanstalkd.+transport/i}.should_not be_nil
32
- end
33
-
34
- it "should error if the specified transport dosen't exist" do
35
- options = {:log => MockLogger.new, :transport => {:backend => :nonexistant}}
36
- lambda {
37
- app = Flapjack::Worker::Application.run(options)
38
- }.should raise_error
39
- end
40
-
41
- it "should execute checks in a sandbox"
42
-
43
- it "should use a limited interface for dealing with transports" do
44
- options = { :log => MockLogger.new,
45
- :transport => {:backend => :mock_transport,
46
- :basedir => File.join(File.dirname(__FILE__), 'transports')} }
47
- app = Flapjack::Worker::Application.run(options)
48
- app.process_check
49
-
50
- # check allowed methods were called
51
- allowed_methods = %w(next)
52
- allowed_methods.each do |method|
53
- app.log.messages.find {|msg| msg =~ /#{method} was called/}.should_not be_nil
54
- end
55
-
56
- # check no other methods were called
57
- called_methods = app.log.messages.find_all {|msg| msg =~ /^method .+ was called on MockTransport$/i }.map {|msg| msg.split(' ')[1]}
58
- (allowed_methods - called_methods).size.should == 0
59
- end
60
-
61
-
62
- end