flapjack 0.6.39 → 0.6.40

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.
Files changed (66) hide show
  1. data/.gitignore +2 -2
  2. data/Gemfile +5 -1
  3. data/README.md +3 -2
  4. data/Rakefile +2 -1
  5. data/bin/flapjack +2 -2
  6. data/bin/flapjack-nagios-receiver +2 -8
  7. data/bin/flapjack-populator +11 -11
  8. data/etc/flapjack_config.yaml.example +28 -0
  9. data/features/steps/events_steps.rb +1 -1
  10. data/features/steps/notifications_steps.rb +7 -4
  11. data/features/support/env.rb +17 -6
  12. data/flapjack.gemspec +1 -0
  13. data/lib/flapjack/api.rb +72 -28
  14. data/lib/flapjack/configuration.rb +9 -1
  15. data/lib/flapjack/coordinator.rb +138 -162
  16. data/lib/flapjack/data/contact.rb +3 -1
  17. data/lib/flapjack/data/entity.rb +10 -1
  18. data/lib/flapjack/data/entity_check.rb +19 -21
  19. data/lib/flapjack/data/event.rb +26 -27
  20. data/lib/flapjack/data/message.rb +45 -0
  21. data/lib/flapjack/data/notification.rb +49 -0
  22. data/lib/flapjack/executive.rb +53 -74
  23. data/lib/flapjack/filters/acknowledgement.rb +14 -11
  24. data/lib/flapjack/jabber.rb +84 -18
  25. data/lib/flapjack/notification/email.rb +67 -37
  26. data/lib/flapjack/notification/sms.rb +40 -28
  27. data/lib/flapjack/oobetet.rb +1 -1
  28. data/lib/flapjack/pagerduty.rb +24 -15
  29. data/lib/flapjack/patches.rb +3 -1
  30. data/lib/flapjack/pikelet.rb +51 -20
  31. data/lib/flapjack/rack_logger.rb +8 -0
  32. data/lib/flapjack/version.rb +1 -1
  33. data/lib/flapjack/web.rb +51 -27
  34. data/spec/lib/flapjack/api_spec.rb +28 -3
  35. data/spec/lib/flapjack/coordinator_spec.rb +69 -43
  36. data/spec/lib/flapjack/data/contact_spec.rb +17 -9
  37. data/spec/lib/flapjack/data/entity_check_spec.rb +0 -25
  38. data/spec/lib/flapjack/data/entity_spec.rb +4 -0
  39. data/spec/lib/flapjack/data/global_spec.rb +6 -0
  40. data/spec/lib/flapjack/data/message_spec.rb +6 -0
  41. data/spec/lib/flapjack/data/notification_spec.rb +6 -0
  42. data/spec/lib/flapjack/executive_spec.rb +2 -2
  43. data/spec/lib/flapjack/jabber_spec.rb +8 -9
  44. data/spec/lib/flapjack/pagerduty_spec.rb +53 -45
  45. data/spec/lib/flapjack/utility_spec.rb +55 -0
  46. data/spec/lib/flapjack/web_spec.rb +7 -5
  47. data/tasks/events.rake +26 -59
  48. data/tasks/profile.rake +366 -0
  49. metadata +30 -19
  50. data/lib/flapjack/notification/common.rb +0 -23
  51. data/lib/flapjack/persistence/couch.rb +0 -5
  52. data/lib/flapjack/persistence/couch/connection.rb +0 -66
  53. data/lib/flapjack/persistence/couch/couch.rb +0 -63
  54. data/lib/flapjack/persistence/data_mapper.rb +0 -3
  55. data/lib/flapjack/persistence/data_mapper/data_mapper.rb +0 -67
  56. data/lib/flapjack/persistence/data_mapper/models/check.rb +0 -90
  57. data/lib/flapjack/persistence/data_mapper/models/check_template.rb +0 -20
  58. data/lib/flapjack/persistence/data_mapper/models/event.rb +0 -19
  59. data/lib/flapjack/persistence/data_mapper/models/node.rb +0 -18
  60. data/lib/flapjack/persistence/data_mapper/models/related_check.rb +0 -15
  61. data/lib/flapjack/persistence/sqlite3.rb +0 -3
  62. data/lib/flapjack/persistence/sqlite3/sqlite3.rb +0 -166
  63. data/lib/flapjack/transports/beanstalkd.rb +0 -50
  64. data/lib/flapjack/transports/result.rb +0 -58
  65. data/lib/flapjack/worker/application.rb +0 -121
  66. data/lib/flapjack/worker/cli.rb +0 -49
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.6.39
4
+ version: 0.6.40
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -11,7 +11,7 @@ authors:
11
11
  autorequire:
12
12
  bindir: bin
13
13
  cert_chain: []
14
- date: 2012-10-19 00:00:00.000000000 Z
14
+ date: 2012-11-07 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: daemons
@@ -173,6 +173,22 @@ dependencies:
173
173
  - - ! '>='
174
174
  - !ruby/object:Gem::Version
175
175
  version: '0'
176
+ - !ruby/object:Gem::Dependency
177
+ name: async-rack
178
+ requirement: !ruby/object:Gem::Requirement
179
+ none: false
180
+ requirements:
181
+ - - ! '>='
182
+ - !ruby/object:Gem::Version
183
+ version: '0'
184
+ type: :runtime
185
+ prerelease: false
186
+ version_requirements: !ruby/object:Gem::Requirement
187
+ none: false
188
+ requirements:
189
+ - - ! '>='
190
+ - !ruby/object:Gem::Version
191
+ version: '0'
176
192
  - !ruby/object:Gem::Dependency
177
193
  name: rack-fiber_pool
178
194
  requirement: !ruby/object:Gem::Requirement
@@ -380,6 +396,8 @@ files:
380
396
  - lib/flapjack/data/entity_check.rb
381
397
  - lib/flapjack/data/event.rb
382
398
  - lib/flapjack/data/global.rb
399
+ - lib/flapjack/data/message.rb
400
+ - lib/flapjack/data/notification.rb
383
401
  - lib/flapjack/executive.rb
384
402
  - lib/flapjack/filters/acknowledgement.rb
385
403
  - lib/flapjack/filters/base.rb
@@ -390,7 +408,6 @@ files:
390
408
  - lib/flapjack/filters/unscheduled_maintenance.rb
391
409
  - lib/flapjack/inifile.rb
392
410
  - lib/flapjack/jabber.rb
393
- - lib/flapjack/notification/common.rb
394
411
  - lib/flapjack/notification/email.rb
395
412
  - lib/flapjack/notification/email/alert.html.haml
396
413
  - lib/flapjack/notification/email/alert.text.erb
@@ -404,22 +421,9 @@ files:
404
421
  - lib/flapjack/oobetet.rb
405
422
  - lib/flapjack/pagerduty.rb
406
423
  - lib/flapjack/patches.rb
407
- - lib/flapjack/persistence/couch.rb
408
- - lib/flapjack/persistence/couch/connection.rb
409
- - lib/flapjack/persistence/couch/couch.rb
410
- - lib/flapjack/persistence/data_mapper.rb
411
- - lib/flapjack/persistence/data_mapper/data_mapper.rb
412
- - lib/flapjack/persistence/data_mapper/models/check.rb
413
- - lib/flapjack/persistence/data_mapper/models/check_template.rb
414
- - lib/flapjack/persistence/data_mapper/models/event.rb
415
- - lib/flapjack/persistence/data_mapper/models/node.rb
416
- - lib/flapjack/persistence/data_mapper/models/related_check.rb
417
- - lib/flapjack/persistence/sqlite3.rb
418
- - lib/flapjack/persistence/sqlite3/sqlite3.rb
419
424
  - lib/flapjack/pikelet.rb
425
+ - lib/flapjack/rack_logger.rb
420
426
  - lib/flapjack/redis_pool.rb
421
- - lib/flapjack/transports/beanstalkd.rb
422
- - lib/flapjack/transports/result.rb
423
427
  - lib/flapjack/utility.rb
424
428
  - lib/flapjack/version.rb
425
429
  - lib/flapjack/web.rb
@@ -430,8 +434,6 @@ files:
430
434
  - lib/flapjack/web/views/contacts.haml
431
435
  - lib/flapjack/web/views/index.haml
432
436
  - lib/flapjack/web/views/self_stats.haml
433
- - lib/flapjack/worker/application.rb
434
- - lib/flapjack/worker/cli.rb
435
437
  - spec.old/check_sandbox/echo
436
438
  - spec.old/check_sandbox/sandboxed_check
437
439
  - spec.old/configs/flapjack-notifier-couchdb.ini
@@ -467,6 +469,9 @@ files:
467
469
  - spec/lib/flapjack/data/entity_check_spec.rb
468
470
  - spec/lib/flapjack/data/entity_spec.rb
469
471
  - spec/lib/flapjack/data/event_spec.rb
472
+ - spec/lib/flapjack/data/global_spec.rb
473
+ - spec/lib/flapjack/data/message_spec.rb
474
+ - spec/lib/flapjack/data/notification_spec.rb
470
475
  - spec/lib/flapjack/executive_spec.rb
471
476
  - spec/lib/flapjack/filters/acknowledgement_spec.rb
472
477
  - spec/lib/flapjack/filters/delays_spec.rb
@@ -481,11 +486,13 @@ files:
481
486
  - spec/lib/flapjack/pagerduty_spec.rb
482
487
  - spec/lib/flapjack/pikelet_spec.rb
483
488
  - spec/lib/flapjack/redis_pool_spec.rb
489
+ - spec/lib/flapjack/utility_spec.rb
484
490
  - spec/lib/flapjack/web_spec.rb
485
491
  - spec/spec_helper.rb
486
492
  - spec/support/profile_all_formatter.rb
487
493
  - spec/support/uncolored_doc_formatter.rb
488
494
  - tasks/events.rake
495
+ - tasks/profile.rake
489
496
  - tmp/acknowledge.rb
490
497
  - tmp/create_config_yaml.rb
491
498
  - tmp/create_events_failure.rb
@@ -543,6 +550,9 @@ test_files:
543
550
  - spec/lib/flapjack/data/entity_check_spec.rb
544
551
  - spec/lib/flapjack/data/entity_spec.rb
545
552
  - spec/lib/flapjack/data/event_spec.rb
553
+ - spec/lib/flapjack/data/global_spec.rb
554
+ - spec/lib/flapjack/data/message_spec.rb
555
+ - spec/lib/flapjack/data/notification_spec.rb
546
556
  - spec/lib/flapjack/executive_spec.rb
547
557
  - spec/lib/flapjack/filters/acknowledgement_spec.rb
548
558
  - spec/lib/flapjack/filters/delays_spec.rb
@@ -557,6 +567,7 @@ test_files:
557
567
  - spec/lib/flapjack/pagerduty_spec.rb
558
568
  - spec/lib/flapjack/pikelet_spec.rb
559
569
  - spec/lib/flapjack/redis_pool_spec.rb
570
+ - spec/lib/flapjack/utility_spec.rb
560
571
  - spec/lib/flapjack/web_spec.rb
561
572
  - spec/spec_helper.rb
562
573
  - spec/support/profile_all_formatter.rb
@@ -1,23 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- require 'flapjack/pikelet'
4
-
5
- module Flapjack
6
- module Notification
7
-
8
- module Common
9
-
10
- include Flapjack::Pikelet
11
-
12
- # TODO to make this testable, work out a supported way to make the passed redis connection
13
- # use the test db
14
- def perform(notification)
15
- bootstrap
16
- @logger.debug "Woo, got a notification to send out: #{notification.inspect}"
17
- dispatch(notification, :logger => @logger, :redis => ::Resque.redis)
18
- end
19
-
20
- end
21
- end
22
- end
23
-
@@ -1,5 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- require File.join(File.dirname(__FILE__), 'couch', 'couch')
4
- require File.join(File.dirname(__FILE__), 'couch', 'connection')
5
-
@@ -1,66 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- module Flapjack
4
- module Persistence
5
- class Couch
6
- class Connection
7
- class << self
8
- attr_accessor :host, :port
9
- def setup(options={})
10
- @host = options[:host]
11
- @port = options[:port]
12
- @database = options[:database]
13
- end
14
-
15
- def get(id)
16
- uri = "/#{@database}/#{id}"
17
- req = ::Net::HTTP::Get.new(uri)
18
- request(req)
19
- end
20
-
21
- def post(options={})
22
- document = options[:document]
23
- uri = "/#{@database}/"
24
-
25
- req = ::Net::HTTP::Post.new(uri)
26
- req["content-type"] = "application/json"
27
- req.body = document.to_json
28
-
29
- request(req)
30
- end
31
-
32
- def put(options={})
33
- document = options[:document]
34
- uri = "/#{@database}/#{(options[:document]["id"] || options[:document]["_id"])}"
35
-
36
- req = ::Net::HTTP::Put.new(uri)
37
- req["content-type"] = "application/json"
38
- req.body = document.to_json
39
-
40
- request(req)
41
- end
42
-
43
- def delete(options={})
44
- document = options[:document]
45
-
46
- uri = "/#{@database}/#{(options[:document]["id"] || options[:document]["_id"])}"
47
-
48
- req = ::Net::HTTP::Put.new(uri)
49
- req["content-type"] = "application/json"
50
- req.body = document.to_json
51
-
52
- request(req)
53
- end
54
-
55
- def request(request)
56
- response = Net::HTTP.start(@host, @port) {|http| http.request(request)}
57
-
58
- @parser = Yajl::Parser.new
59
- hash = @parser.parse(response.body)
60
- end
61
- end
62
- end
63
- end # class Couch
64
- end # module Persistence
65
- end # module Flapjack
66
-
@@ -1,63 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- require 'net/http'
4
- require 'yajl/json_gem'
5
-
6
- module Flapjack
7
- module Persistence
8
- class Couch
9
-
10
- attr_accessor :config
11
-
12
- def initialize(options={})
13
- @options = options
14
- @config = OpenStruct.new(options)
15
- @log = @config.log
16
-
17
- Flapjack::Persistence::Couch::Connection.setup(@options)
18
- end
19
-
20
- def any_parents_failed?(id)
21
- id == "1" ? false : true
22
- end
23
-
24
- def save_check(attrs)
25
- true
26
- end
27
-
28
- def get_check(id)
29
- id == "4" ? nil : true
30
- end
31
-
32
- def delete_check(id)
33
- true
34
- end
35
-
36
- def all_checks
37
- [true, true, true]
38
- end
39
-
40
- def save_check_relationship(attrs)
41
- true
42
- end
43
-
44
- def create_event(result)
45
- true
46
- end
47
-
48
- def all_events_for(id)
49
- [true, true, true]
50
- end
51
-
52
- def all_events
53
- [true, true, true]
54
- end
55
-
56
- def all_check_relationships
57
- [true, true, true]
58
- end
59
-
60
- end # class Couch
61
- end # module Persistence
62
- end # module Flapjack
63
-
@@ -1,3 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- require File.join(File.dirname(__FILE__), 'data_mapper', 'data_mapper')
@@ -1,67 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- require 'dm-core'
4
- require 'dm-validations'
5
- require 'dm-types'
6
- require 'dm-timestamps'
7
-
8
- Dir.glob(File.join(File.dirname(__FILE__), 'models', '*.rb')).each do |model|
9
- require model
10
- end
11
-
12
- module Flapjack
13
- module Persistence
14
- class DataMapper
15
- def initialize(options={})
16
- @options = options
17
- @config = OpenStruct.new(options)
18
- @log = @config.log
19
- connect
20
- end
21
-
22
- def any_parents_failed?(result)
23
- check = Check.get(result.check_id)
24
- if check
25
- check.worst_parent_status != 0
26
- else
27
- @log.warning("Check with id #{result.check_id} doesn't exist!")
28
- false # this will notify
29
- end
30
- end
31
-
32
- def save(result)
33
- check = Check.get(result.check_id)
34
- if check
35
- check.status = result.status
36
- check.save
37
- else
38
- @log.warning("Check with id #{result.check_id} doesn't exist!")
39
- true
40
- end
41
- end
42
-
43
- def create_event(result)
44
- event = Event.new(:check_id => result.check_id)
45
- event.save
46
- end
47
-
48
- private
49
- def connect
50
- raise ArgumentError, "Database URI wasn't specified" unless @config.uri
51
- ::DataMapper.setup(:default, @config.uri)
52
- validate_structure
53
- end
54
-
55
- def validate_structure
56
- begin
57
- ::DataMapper.repository(:default).adapter.execute("SELECT 'id' FROM 'checks';")
58
- rescue Sqlite3Error => e
59
- @log.warning("The specified database doesn't appear to have any structure!")
60
- @log.warning("Exiting.")
61
- raise
62
- end
63
- end
64
- end
65
- end
66
- end
67
-
@@ -1,90 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- class Check
4
- include DataMapper::Resource
5
-
6
- timestamps :at
7
-
8
- has n, :related_checks, :child_key => [:child_id, :parent_id]
9
- has n, :events
10
-
11
- #has n, :parent_checks, :through => :related_checks,
12
- # :child_key => :child_id, :class_name => "Check"
13
- #has n, :child_checks, :through => :related_checks,
14
- # :child_key => :parent_id, :class_name => "Check"
15
-
16
- belongs_to :node
17
- belongs_to :check_template
18
-
19
- property :id, Serial, :key => true
20
- property :command, Text, :nullable => false
21
- property :params, Yaml
22
- property :name, String, :nullable => false
23
- property :enabled, Boolean, :default => false
24
- property :status, Integer, :default => 0
25
-
26
- # dm-timestamps
27
- property :created_at, DateTime
28
- property :updated_at, DateTime
29
- property :deleted_at, ParanoidDateTime
30
-
31
- # copy command onto check
32
- before :valid? do
33
- if self.check_template && self.command.blank?
34
- self.command = self.check_template.command
35
- self.name = self.check_template.name
36
- self.params = (self.check_template.params || {})
37
- end
38
- end
39
-
40
- def parameters_and_values
41
- names = parameter_names_from_command
42
- hash = {}
43
- names.each { |name| hash[name] = params ? params[name] : "" }
44
- hash["$FQDN"] = self.node_fqdn # pkey of node check belongs to
45
- hash
46
- end
47
-
48
- def parameter_names_from_command
49
- self.command.split.grep(/\$\w/)
50
- end
51
-
52
- def executed_command
53
- c = self.command
54
- parameters_and_values.each_pair do |param, value|
55
- value = value.to_s
56
- c.gsub!(param, value)
57
- end
58
- return c
59
- end
60
-
61
- # FIXME: this should work through related checks association, but doesn't
62
- def parent_checks
63
- RelatedCheck.all(:child_id => self.id).map {|rc| rc.parent_check}
64
- end
65
-
66
- def child_checks
67
- RelatedCheck.all(:parent_id => self.id).map {|rc| rc.child_check}
68
- end
69
-
70
- def worst_parent_status
71
- if parent_checks.size > 0
72
- self.parent_checks.map { |parent| parent.status }.sort.pop
73
- else
74
- 0
75
- end
76
- end
77
-
78
-
79
- def pretty_print_status
80
- case self.status
81
- when 0
82
- "good"
83
- when 1
84
- "bad"
85
- when 2
86
- "ugly"
87
- end
88
- end
89
-
90
- end