flapjack 0.6.53 → 0.6.54

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 (53) hide show
  1. data/bin/flapjack +103 -19
  2. data/bin/flapjack-nagios-receiver +166 -52
  3. data/bin/flapper +107 -18
  4. data/etc/flapjack_config.yaml.example +16 -0
  5. data/features/events.feature +63 -0
  6. data/features/steps/events_steps.rb +5 -5
  7. data/features/steps/notifications_steps.rb +8 -6
  8. data/features/steps/time_travel_steps.rb +4 -4
  9. data/features/support/env.rb +1 -2
  10. data/flapjack.gemspec +1 -1
  11. data/lib/flapjack/configuration.rb +11 -13
  12. data/lib/flapjack/coordinator.rb +100 -220
  13. data/lib/flapjack/data/entity_check.rb +2 -2
  14. data/lib/flapjack/data/event.rb +3 -3
  15. data/lib/flapjack/executive.rb +30 -40
  16. data/lib/flapjack/filters/delays.rb +1 -1
  17. data/lib/flapjack/gateways/api.rb +6 -23
  18. data/lib/flapjack/gateways/email.rb +4 -10
  19. data/lib/flapjack/gateways/email/alert.html.haml +0 -5
  20. data/lib/flapjack/gateways/email/alert.text.erb +0 -1
  21. data/lib/flapjack/gateways/jabber.rb +80 -67
  22. data/lib/flapjack/gateways/oobetet.rb +29 -25
  23. data/lib/flapjack/gateways/pagerduty.rb +26 -45
  24. data/lib/flapjack/gateways/sms_messagenet.rb +10 -17
  25. data/lib/flapjack/gateways/web.rb +7 -21
  26. data/lib/flapjack/gateways/web/views/_css.haml +3 -0
  27. data/lib/flapjack/gateways/web/views/check.haml +1 -1
  28. data/lib/flapjack/logger.rb +57 -0
  29. data/lib/flapjack/patches.rb +0 -10
  30. data/lib/flapjack/pikelet.rb +214 -30
  31. data/lib/flapjack/redis_pool.rb +2 -17
  32. data/lib/flapjack/version.rb +1 -1
  33. data/spec/lib/flapjack/coordinator_spec.rb +116 -136
  34. data/spec/lib/flapjack/data/entity_check_spec.rb +3 -3
  35. data/spec/lib/flapjack/executive_spec.rb +33 -34
  36. data/spec/lib/flapjack/gateways/api_spec.rb +4 -2
  37. data/spec/lib/flapjack/gateways/jabber_spec.rb +39 -36
  38. data/spec/lib/flapjack/gateways/oobetet_spec.rb +14 -24
  39. data/spec/lib/flapjack/gateways/pagerduty_spec.rb +43 -45
  40. data/spec/lib/flapjack/gateways/web_spec.rb +42 -35
  41. data/spec/lib/flapjack/logger_spec.rb +32 -0
  42. data/spec/lib/flapjack/pikelet_spec.rb +124 -15
  43. data/spec/lib/flapjack/redis_pool_spec.rb +1 -3
  44. data/spec/spec_helper.rb +34 -1
  45. data/tasks/events.rake +1 -0
  46. data/tmp/create_event_ok.rb +31 -0
  47. data/tmp/create_event_unknown.rb +31 -0
  48. data/tmp/create_events_ok.rb +1 -1
  49. metadata +10 -11
  50. data/bin/flapjack-nagios-receiver-control +0 -15
  51. data/bin/flapper-control +0 -15
  52. data/lib/flapjack/daemonizing.rb +0 -186
  53. data/lib/flapjack/gateways/base.rb +0 -38
@@ -17,6 +17,7 @@ namespace :events do
17
17
 
18
18
  FLAPJACK_ENV = ENV['FLAPJACK_ENV'] || 'development'
19
19
  config_file = File.join('etc', 'flapjack_config.yaml')
20
+
20
21
  config = Flapjack::Configuration.new
21
22
  config.load( config_file )
22
23
 
@@ -0,0 +1,31 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'redis'
4
+ require 'json'
5
+
6
+ #id = "%.2d" % (1..10).to_a[rand(9)]
7
+
8
+ events = []
9
+
10
+ events << {
11
+ 'entity' => "client1-localhost-test-1",
12
+ 'check' => 'foo',
13
+ 'type' => 'service',
14
+ 'state' => 'ok',
15
+ }.to_json
16
+
17
+ redis = Redis.new(:db => 13)
18
+
19
+ events.each {|event|
20
+ redis.rpush 'events', event
21
+ }
22
+
23
+ puts "#{Time.now} - finished loading up events"
24
+ previous_events_size = redis.llen 'events'
25
+ while previous_events_size > 0
26
+ sleep 1
27
+ events_size = redis.llen 'events'
28
+ throughput = previous_events_size - events_size
29
+ previous_events_size = events_size
30
+ puts "#{Time.now} - #{events_size} (#{throughput})"
31
+ end
@@ -0,0 +1,31 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'redis'
4
+ require 'json'
5
+
6
+ #id = "%.2d" % (1..10).to_a[rand(9)]
7
+
8
+ events = []
9
+
10
+ events << {
11
+ 'entity' => "client1-localhost-test-1",
12
+ 'check' => 'foo',
13
+ 'type' => 'service',
14
+ 'state' => 'unknown',
15
+ }.to_json
16
+
17
+ redis = Redis.new(:db => 13)
18
+
19
+ events.each {|event|
20
+ redis.rpush 'events', event
21
+ }
22
+
23
+ puts "#{Time.now} - finished loading up events"
24
+ previous_events_size = redis.llen 'events'
25
+ while previous_events_size > 0
26
+ sleep 1
27
+ events_size = redis.llen 'events'
28
+ throughput = previous_events_size - events_size
29
+ previous_events_size = events_size
30
+ puts "#{Time.now} - #{events_size} (#{throughput})"
31
+ end
@@ -14,7 +14,7 @@ events << {
14
14
  'state' => 'ok',
15
15
  }.to_json
16
16
 
17
- redis = Redis.new
17
+ redis = Redis.new(:db => 13)
18
18
 
19
19
  4000.times do
20
20
  events.each {|event|
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.53
4
+ version: 0.6.54
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -11,10 +11,10 @@ authors:
11
11
  autorequire:
12
12
  bindir: bin
13
13
  cert_chain: []
14
- date: 2012-12-09 00:00:00.000000000 Z
14
+ date: 2012-12-27 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
- name: daemons
17
+ name: dante
18
18
  requirement: !ruby/object:Gem::Requirement
19
19
  none: false
20
20
  requirements:
@@ -308,11 +308,9 @@ email: lindsay@holmwood.id.au
308
308
  executables:
309
309
  - flapjack
310
310
  - flapjack-nagios-receiver
311
- - flapjack-nagios-receiver-control
312
311
  - flapjack-netsaint-parser
313
312
  - flapjack-populator
314
313
  - flapper
315
- - flapper-control
316
314
  extensions: []
317
315
  extra_rdoc_files: []
318
316
  files:
@@ -328,11 +326,9 @@ files:
328
326
  - Rakefile
329
327
  - bin/flapjack
330
328
  - bin/flapjack-nagios-receiver
331
- - bin/flapjack-nagios-receiver-control
332
329
  - bin/flapjack-netsaint-parser
333
330
  - bin/flapjack-populator
334
331
  - bin/flapper
335
- - bin/flapper-control
336
332
  - config.ru
337
333
  - dist/etc/default/flapjack-notifier
338
334
  - dist/etc/default/flapjack-workers
@@ -366,7 +362,6 @@ files:
366
362
  - lib/flapjack/checks/ping
367
363
  - lib/flapjack/configuration.rb
368
364
  - lib/flapjack/coordinator.rb
369
- - lib/flapjack/daemonizing.rb
370
365
  - lib/flapjack/data/contact.rb
371
366
  - lib/flapjack/data/entity.rb
372
367
  - lib/flapjack/data/entity_check.rb
@@ -386,7 +381,6 @@ files:
386
381
  - lib/flapjack/gateways/api.rb
387
382
  - lib/flapjack/gateways/api/entity_check_presenter.rb
388
383
  - lib/flapjack/gateways/api/entity_presenter.rb
389
- - lib/flapjack/gateways/base.rb
390
384
  - lib/flapjack/gateways/email.rb
391
385
  - lib/flapjack/gateways/email/alert.html.haml
392
386
  - lib/flapjack/gateways/email/alert.text.erb
@@ -402,6 +396,7 @@ files:
402
396
  - lib/flapjack/gateways/web/views/contacts.haml
403
397
  - lib/flapjack/gateways/web/views/index.haml
404
398
  - lib/flapjack/gateways/web/views/self_stats.haml
399
+ - lib/flapjack/logger.rb
405
400
  - lib/flapjack/patches.rb
406
401
  - lib/flapjack/pikelet.rb
407
402
  - lib/flapjack/rack_logger.rb
@@ -436,6 +431,7 @@ files:
436
431
  - spec/lib/flapjack/gateways/web/views/contact.haml_spec.rb
437
432
  - spec/lib/flapjack/gateways/web/views/index.haml_spec.rb
438
433
  - spec/lib/flapjack/gateways/web_spec.rb
434
+ - spec/lib/flapjack/logger_spec.rb
439
435
  - spec/lib/flapjack/pikelet_spec.rb
440
436
  - spec/lib/flapjack/redis_pool_spec.rb
441
437
  - spec/lib/flapjack/utility_spec.rb
@@ -447,6 +443,8 @@ files:
447
443
  - tasks/profile.rake
448
444
  - tmp/acknowledge.rb
449
445
  - tmp/create_config_yaml.rb
446
+ - tmp/create_event_ok.rb
447
+ - tmp/create_event_unknown.rb
450
448
  - tmp/create_events_failure.rb
451
449
  - tmp/create_events_ok.rb
452
450
  - tmp/create_events_ok_fail_ack_ok.rb
@@ -471,7 +469,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
471
469
  version: '0'
472
470
  segments:
473
471
  - 0
474
- hash: 1088091798367271549
472
+ hash: -3074875956567986285
475
473
  required_rubygems_version: !ruby/object:Gem::Requirement
476
474
  none: false
477
475
  requirements:
@@ -480,7 +478,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
480
478
  version: '0'
481
479
  segments:
482
480
  - 0
483
- hash: 1088091798367271549
481
+ hash: -3074875956567986285
484
482
  requirements: []
485
483
  rubyforge_project:
486
484
  rubygems_version: 1.8.23
@@ -526,6 +524,7 @@ test_files:
526
524
  - spec/lib/flapjack/gateways/web/views/contact.haml_spec.rb
527
525
  - spec/lib/flapjack/gateways/web/views/index.haml_spec.rb
528
526
  - spec/lib/flapjack/gateways/web_spec.rb
527
+ - spec/lib/flapjack/logger_spec.rb
529
528
  - spec/lib/flapjack/pikelet_spec.rb
530
529
  - spec/lib/flapjack/redis_pool_spec.rb
531
530
  - spec/lib/flapjack/utility_spec.rb
@@ -1,15 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- require 'daemons'
4
- opts = {
5
- :app_name => 'flapjack-nagios-receiver',
6
- :dir_mode => :normal,
7
- :dir => '/var/run/flapjack',
8
- :multiple => false,
9
- :backtrace => true,
10
- :monitor => false,
11
- :log_dir => '/var/log/flapjack',
12
- :log_output => true,
13
- }
14
- Daemons.run(File.join(File.dirname(__FILE__) ,'flapjack-nagios-receiver'), opts)
15
-
@@ -1,15 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- require 'daemons'
4
- opts = {
5
- :app_name => 'flapper',
6
- :dir_mode => :normal,
7
- :dir => '/var/run/flapjack',
8
- :multiple => false,
9
- :backtrace => true,
10
- :monitor => false,
11
- :log_dir => '/var/log/flapjack',
12
- :log_output => true,
13
- }
14
- Daemons.run(File.join(File.dirname(__FILE__) ,'flapper'), opts)
15
-
@@ -1,186 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- # Copied from thin.
4
-
5
- require 'etc'
6
- require 'daemons' unless RUBY_PLATFORM =~ /mswin/
7
-
8
- module Process
9
- # Returns +true+ the process identified by +pid+ is running.
10
- def running?(pid)
11
- Process.getpgid(pid) != -1
12
- rescue Errno::EPERM
13
- true
14
- rescue Errno::ESRCH
15
- false
16
- end
17
- module_function :running?
18
- end
19
-
20
- module Flapjack
21
- # Raised when the pid file already exist starting as a daemon.
22
- class PidFileExist < RuntimeError; end
23
-
24
- # Module included in classes that can be turned into a daemon.
25
- # Handle stuff like:
26
- # * storing the PID in a file
27
- # * redirecting output to the log file
28
- # * changing process privileges
29
- # * killing the process gracefully
30
- module Daemonizable
31
- attr_accessor :pid_file, :log_file
32
-
33
- def self.included(base)
34
- base.extend ClassMethods
35
- end
36
-
37
- def pid
38
- File.exist?(pid_file) ? open(pid_file).read.to_i : nil
39
- end
40
-
41
- # Turns the current script into a daemon process that detaches from the console.
42
- def daemonize
43
- raise PlatformNotSupported, 'Daemonizing is not supported on Windows' if RUBY_PLATFORM =~ /mswin/
44
- raise ArgumentError, 'You must specify a pid_file to daemonize' unless @pid_file
45
-
46
- remove_stale_pid_file
47
-
48
- pwd = Dir.pwd # Current directory is changed during daemonization, so store it
49
-
50
- # HACK we need to create the directory before daemonization to prevent a bug under 1.9
51
- # ignoring all signals when the directory is created after daemonization.
52
- FileUtils.mkdir_p File.dirname(@pid_file)
53
- FileUtils.mkdir_p File.dirname(@log_file)
54
-
55
- Daemonize.daemonize(File.expand_path(@log_file), 'flapjack server')
56
-
57
- Dir.chdir(pwd)
58
-
59
- write_pid_file
60
-
61
- self.after_daemonize if self.respond_to? :after_daemonize
62
-
63
- at_exit do
64
- puts ">> Exiting!"
65
- remove_pid_file
66
- end
67
- end
68
-
69
- # Change privileges of the process
70
- # to the specified user and group.
71
- def change_privilege(user, group=user)
72
- puts ">> Changing process privilege to #{user}:#{group}"
73
-
74
- uid, gid = Process.euid, Process.egid
75
- target_uid = Etc.getpwnam(user).uid
76
- target_gid = Etc.getgrnam(group).gid
77
-
78
- if uid != target_uid || gid != target_gid
79
- # Change process ownership
80
- Process.initgroups(user, target_gid)
81
- Process::GID.change_privilege(target_gid)
82
- Process::UID.change_privilege(target_uid)
83
- end
84
- rescue Errno::EPERM => e
85
- puts "Couldn't change user and group to #{user}:#{group}: #{e}"
86
- end
87
-
88
- # Register a proc to be called to restart the server.
89
- def on_restart(&block)
90
- @on_restart = block
91
- end
92
-
93
- # Restart the server.
94
- def restart
95
- if @on_restart
96
- puts '>> Restarting ...'
97
- stop
98
- remove_pid_file
99
- @on_restart.call
100
- exit!
101
- end
102
- end
103
-
104
- module ClassMethods
105
- # Send a QUIT or INT (if timeout is +0+) signal the process which
106
- # PID is stored in +pid_file+.
107
- # If the process is still running after +timeout+, KILL signal is
108
- # sent.
109
- def kill(pid_file, timeout=60)
110
- if timeout == 0
111
- send_signal('INT', pid_file, timeout)
112
- else
113
- send_signal('QUIT', pid_file, timeout)
114
- end
115
- end
116
-
117
- # Restart the server by sending HUP signal.
118
- def restart(pid_file)
119
- send_signal('HUP', pid_file)
120
- end
121
-
122
- # Send a +signal+ to the process which PID is stored in +pid_file+.
123
- def send_signal(signal, pid_file, timeout=60)
124
- if pid = read_pid_file(pid_file)
125
- puts "Sending #{signal} signal to process #{pid} ... "
126
- Process.kill(signal, pid)
127
- Timeout.timeout(timeout) do
128
- sleep 0.1 while Process.running?(pid)
129
- end
130
- else
131
- puts "Can't stop process, no PID found in #{pid_file}"
132
- end
133
- rescue Timeout::Error
134
- puts "Timeout!"
135
- force_kill pid_file
136
- rescue Interrupt
137
- force_kill pid_file
138
- rescue Errno::ESRCH # No such process
139
- puts "process not found!"
140
- force_kill pid_file
141
- end
142
-
143
- def force_kill(pid_file)
144
- if pid = read_pid_file(pid_file)
145
- puts "Sending KILL signal to process #{pid} ... "
146
- Process.kill("KILL", pid)
147
- File.delete(pid_file) if File.exist?(pid_file)
148
- else
149
- puts "Can't stop process, no PID found in #{pid_file}"
150
- end
151
- end
152
-
153
- def read_pid_file(file)
154
- if File.file?(file) && pid = File.read(file)
155
- pid.to_i
156
- else
157
- nil
158
- end
159
- end
160
- end
161
-
162
- protected
163
- def remove_pid_file
164
- File.delete(@pid_file) if @pid_file && File.exists?(@pid_file)
165
- end
166
-
167
- def write_pid_file
168
- puts ">> Writing PID to #{@pid_file}"
169
- open(@pid_file,"w") { |f| f.write(Process.pid) }
170
- File.chmod(0644, @pid_file)
171
- end
172
-
173
- # If PID file is stale, remove it.
174
- def remove_stale_pid_file
175
- if File.exist?(@pid_file)
176
- if pid && Process.running?(pid)
177
- raise PidFileExist, "#{@pid_file} already exists, seems like it's already running (process ID: #{pid}). " +
178
- "Stop the process or delete #{@pid_file}."
179
- else
180
- puts ">> Deleting stale PID file #{@pid_file}"
181
- remove_pid_file
182
- end
183
- end
184
- end
185
- end
186
- end
@@ -1,38 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- require 'flapjack/pikelet'
4
-
5
- module Flapjack
6
- module Gateways
7
-
8
- module Generic
9
- include Flapjack::GenericPikelet
10
- end
11
-
12
- module Resque
13
- include Flapjack::Pikelet
14
- end
15
-
16
- module Thin
17
- include Flapjack::Pikelet
18
-
19
- attr_accessor :port
20
-
21
- alias_method :orig_bootstrap, :bootstrap
22
-
23
- def bootstrap(opts = {})
24
- return if @bootstrapped
25
-
26
- if config = opts[:config]
27
- @port = config['port'] ? config['port'].to_i : nil
28
- @port = 3001 if (@port.nil? || @port <= 0 || @port > 65535)
29
- end
30
-
31
- orig_bootstrap(opts)
32
- end
33
-
34
- end
35
-
36
- end
37
-
38
- end