mojombo-god 0.7.7

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 (108) hide show
  1. data/History.txt +255 -0
  2. data/Manifest.txt +107 -0
  3. data/README.txt +59 -0
  4. data/Rakefile +35 -0
  5. data/bin/god +127 -0
  6. data/examples/events.god +84 -0
  7. data/examples/gravatar.god +54 -0
  8. data/examples/single.god +66 -0
  9. data/ext/god/extconf.rb +55 -0
  10. data/ext/god/kqueue_handler.c +123 -0
  11. data/ext/god/netlink_handler.c +167 -0
  12. data/init/god +42 -0
  13. data/lib/god.rb +644 -0
  14. data/lib/god/behavior.rb +52 -0
  15. data/lib/god/behaviors/clean_pid_file.rb +21 -0
  16. data/lib/god/behaviors/clean_unix_socket.rb +21 -0
  17. data/lib/god/behaviors/notify_when_flapping.rb +51 -0
  18. data/lib/god/cli/command.rb +206 -0
  19. data/lib/god/cli/run.rb +177 -0
  20. data/lib/god/cli/version.rb +23 -0
  21. data/lib/god/condition.rb +96 -0
  22. data/lib/god/conditions/always.rb +23 -0
  23. data/lib/god/conditions/complex.rb +86 -0
  24. data/lib/god/conditions/cpu_usage.rb +80 -0
  25. data/lib/god/conditions/degrading_lambda.rb +52 -0
  26. data/lib/god/conditions/disk_usage.rb +27 -0
  27. data/lib/god/conditions/flapping.rb +128 -0
  28. data/lib/god/conditions/http_response_code.rb +168 -0
  29. data/lib/god/conditions/lambda.rb +25 -0
  30. data/lib/god/conditions/memory_usage.rb +82 -0
  31. data/lib/god/conditions/process_exits.rb +72 -0
  32. data/lib/god/conditions/process_running.rb +74 -0
  33. data/lib/god/conditions/tries.rb +44 -0
  34. data/lib/god/configurable.rb +57 -0
  35. data/lib/god/contact.rb +106 -0
  36. data/lib/god/contacts/email.rb +95 -0
  37. data/lib/god/dependency_graph.rb +41 -0
  38. data/lib/god/diagnostics.rb +37 -0
  39. data/lib/god/driver.rb +108 -0
  40. data/lib/god/errors.rb +24 -0
  41. data/lib/god/event_handler.rb +111 -0
  42. data/lib/god/event_handlers/dummy_handler.rb +13 -0
  43. data/lib/god/event_handlers/kqueue_handler.rb +17 -0
  44. data/lib/god/event_handlers/netlink_handler.rb +13 -0
  45. data/lib/god/logger.rb +120 -0
  46. data/lib/god/metric.rb +59 -0
  47. data/lib/god/process.rb +325 -0
  48. data/lib/god/registry.rb +32 -0
  49. data/lib/god/simple_logger.rb +53 -0
  50. data/lib/god/socket.rb +96 -0
  51. data/lib/god/sugar.rb +47 -0
  52. data/lib/god/system/portable_poller.rb +42 -0
  53. data/lib/god/system/process.rb +42 -0
  54. data/lib/god/system/slash_proc_poller.rb +82 -0
  55. data/lib/god/task.rb +487 -0
  56. data/lib/god/timeline.rb +25 -0
  57. data/lib/god/trigger.rb +43 -0
  58. data/lib/god/watch.rb +183 -0
  59. data/test/configs/child_events/child_events.god +44 -0
  60. data/test/configs/child_events/simple_server.rb +3 -0
  61. data/test/configs/child_polls/child_polls.god +37 -0
  62. data/test/configs/child_polls/simple_server.rb +12 -0
  63. data/test/configs/complex/complex.god +59 -0
  64. data/test/configs/complex/simple_server.rb +3 -0
  65. data/test/configs/contact/contact.god +74 -0
  66. data/test/configs/contact/simple_server.rb +3 -0
  67. data/test/configs/daemon_events/daemon_events.god +37 -0
  68. data/test/configs/daemon_events/simple_server.rb +8 -0
  69. data/test/configs/daemon_events/simple_server_stop.rb +11 -0
  70. data/test/configs/daemon_polls/daemon_polls.god +17 -0
  71. data/test/configs/daemon_polls/simple_server.rb +6 -0
  72. data/test/configs/degrading_lambda/degrading_lambda.god +31 -0
  73. data/test/configs/degrading_lambda/tcp_server.rb +15 -0
  74. data/test/configs/matias/matias.god +50 -0
  75. data/test/configs/real.rb +59 -0
  76. data/test/configs/running_load/running_load.god +16 -0
  77. data/test/configs/stress/simple_server.rb +3 -0
  78. data/test/configs/stress/stress.god +15 -0
  79. data/test/configs/task/logs/.placeholder +0 -0
  80. data/test/configs/task/task.god +26 -0
  81. data/test/configs/test.rb +61 -0
  82. data/test/helper.rb +151 -0
  83. data/test/suite.rb +6 -0
  84. data/test/test_behavior.rb +21 -0
  85. data/test/test_condition.rb +50 -0
  86. data/test/test_conditions_disk_usage.rb +56 -0
  87. data/test/test_conditions_http_response_code.rb +109 -0
  88. data/test/test_conditions_process_running.rb +44 -0
  89. data/test/test_conditions_tries.rb +67 -0
  90. data/test/test_contact.rb +109 -0
  91. data/test/test_dependency_graph.rb +62 -0
  92. data/test/test_driver.rb +11 -0
  93. data/test/test_event_handler.rb +80 -0
  94. data/test/test_god.rb +598 -0
  95. data/test/test_handlers_kqueue_handler.rb +16 -0
  96. data/test/test_logger.rb +63 -0
  97. data/test/test_metric.rb +72 -0
  98. data/test/test_process.rb +246 -0
  99. data/test/test_registry.rb +15 -0
  100. data/test/test_socket.rb +42 -0
  101. data/test/test_sugar.rb +42 -0
  102. data/test/test_system_portable_poller.rb +17 -0
  103. data/test/test_system_process.rb +30 -0
  104. data/test/test_task.rb +262 -0
  105. data/test/test_timeline.rb +37 -0
  106. data/test/test_trigger.rb +59 -0
  107. data/test/test_watch.rb +279 -0
  108. metadata +186 -0
@@ -0,0 +1,279 @@
1
+ require File.dirname(__FILE__) + '/helper'
2
+
3
+ class TestWatch < Test::Unit::TestCase
4
+ def setup
5
+ God.internal_init
6
+ @watch = Watch.new
7
+ @watch.name = 'foo'
8
+ @watch.start = lambda { }
9
+ @watch.stop = lambda { }
10
+ @watch.prepare
11
+ end
12
+
13
+ # new
14
+
15
+ def test_new_should_have_no_behaviors
16
+ assert_equal [], @watch.behaviors
17
+ end
18
+
19
+ def test_new_should_have_no_metrics
20
+ Watch::VALID_STATES.each do |state|
21
+ assert_equal [], @watch.metrics[state]
22
+ end
23
+ end
24
+
25
+ def test_new_should_have_standard_attributes
26
+ assert_nothing_raised do
27
+ @watch.name = 'foo'
28
+ @watch.start = 'start'
29
+ @watch.stop = 'stop'
30
+ @watch.restart = 'restart'
31
+ @watch.interval = 30
32
+ @watch.grace = 5
33
+ end
34
+ end
35
+
36
+ def test_new_should_have_unmonitored_state
37
+ assert_equal :unmonitored, @watch.state
38
+ end
39
+
40
+ # valid?
41
+
42
+ def test_valid?
43
+ God::Process.any_instance.expects(:valid?)
44
+ @watch.valid?
45
+ end
46
+
47
+ # behavior
48
+
49
+ def test_behavior_should_record_behavior
50
+ beh = nil
51
+ @watch.behavior(:fake_behavior) { |b| beh = b }
52
+ assert_equal 1, @watch.behaviors.size
53
+ assert_equal beh, @watch.behaviors.first
54
+ end
55
+
56
+ def test_invalid_behavior_should_abort
57
+ assert_abort do
58
+ @watch.behavior(:invalid)
59
+ end
60
+ end
61
+
62
+ # transition
63
+
64
+ def test_transition_should_abort_on_invalid_start_state
65
+ assert_abort do
66
+ @watch.transition(:foo, :bar)
67
+ end
68
+ end
69
+
70
+ def test_transition_should_accept_all_valid_start_states
71
+ assert_nothing_raised do
72
+ Watch::VALID_STATES.each do |state|
73
+ @watch.transition(state, :bar) { }
74
+ end
75
+ end
76
+ end
77
+
78
+ def test_transition_should_create_and_record_a_metric_for_the_given_start_state
79
+ @watch.transition(:init, :start) { }
80
+ assert_equal 1, @watch.metrics[:init].size
81
+ end
82
+
83
+ # lifecycle
84
+
85
+ def test_lifecycle_should_create_and_record_a_metric_for_nil_start_state
86
+ @watch.lifecycle { }
87
+ assert_equal 1, @watch.metrics[nil].size
88
+ end
89
+
90
+ # start_if
91
+
92
+ def test_start_if_should_place_a_metric_on_up_state
93
+ @watch.start_if { }
94
+ assert_equal 1, @watch.metrics[:up].size
95
+ end
96
+
97
+ # restart_if
98
+
99
+ def test_restart_if_should_place_a_metric_on_up_state
100
+ @watch.restart_if { }
101
+ assert_equal 1, @watch.metrics[:up].size
102
+ end
103
+
104
+ # monitor
105
+
106
+ def test_monitor_should_move_to_init_if_available
107
+ @watch.instance_eval do
108
+ transition(:init, :up) { }
109
+ end
110
+ @watch.expects(:move).with(:init)
111
+ @watch.monitor
112
+ end
113
+
114
+ def test_monitor_should_move_to_up_if_no_init_available
115
+ @watch.expects(:move).with(:up)
116
+ @watch.monitor
117
+ end
118
+
119
+ # unmonitor
120
+
121
+ def test_unmonitor_should_move_to_nil
122
+ @watch.expects(:move).with(:unmonitored)
123
+ @watch.unmonitor
124
+ end
125
+
126
+ # move
127
+
128
+ def test_move_should_not_clean_up_if_from_state_is_nil
129
+ Thread.current.stubs(:==).returns(true)
130
+ @watch.driver.expects(:message).never
131
+
132
+ metric = nil
133
+
134
+ @watch.instance_eval do
135
+ transition(:init, :up) do |on|
136
+ metric = on
137
+ on.condition(:process_running) do |c|
138
+ c.running = true
139
+ c.interval = 10
140
+ end
141
+ end
142
+ end
143
+
144
+ metric.expects(:disable).never
145
+
146
+ no_stdout { @watch.move(:init) }
147
+ end
148
+
149
+ def test_move_should_clean_up_from_state_if_not_nil
150
+ Thread.current.stubs(:==).returns(true)
151
+ @watch.driver.expects(:message).never
152
+
153
+ metric = nil
154
+
155
+ @watch.instance_eval do
156
+ transition(:init, :up) do |on|
157
+ metric = on
158
+ on.condition(:process_running) do |c|
159
+ c.running = true
160
+ c.interval = 10
161
+ end
162
+ end
163
+ end
164
+
165
+ no_stdout { @watch.move(:init) }
166
+
167
+ metric.expects(:disable)
168
+
169
+ no_stdout { @watch.move(:up) }
170
+ end
171
+
172
+ def test_move_should_call_action
173
+ Thread.current.stubs(:==).returns(true)
174
+ @watch.driver.expects(:message).never
175
+
176
+ @watch.expects(:action).with(:start)
177
+
178
+ no_stdout { @watch.move(:start) }
179
+ end
180
+
181
+ def test_move_should_move_to_up_state_if_no_start_or_restart_metric
182
+ Thread.current.stubs(:==).returns(true)
183
+ @watch.driver.expects(:message).never
184
+
185
+ [:start, :restart].each do |state|
186
+ @watch.expects(:action)
187
+ no_stdout { @watch.move(state) }
188
+ assert_equal :up, @watch.state
189
+ end
190
+ end
191
+
192
+ def test_move_should_enable_destination_metric
193
+ Thread.current.stubs(:==).returns(true)
194
+ @watch.driver.expects(:message).never
195
+
196
+ metric = nil
197
+
198
+ @watch.instance_eval do
199
+ transition(:init, :up) do |on|
200
+ metric = on
201
+ on.condition(:process_running) do |c|
202
+ c.running = true
203
+ c.interval = 10
204
+ end
205
+ end
206
+ end
207
+
208
+ metric.expects(:enable)
209
+
210
+ no_stdout { @watch.move(:init) }
211
+ end
212
+
213
+ # action
214
+
215
+ def test_action_should_pass_start_and_stop_actions_to_call_action
216
+ Thread.current.stubs(:==).returns(true)
217
+ @watch.driver.expects(:message).never
218
+
219
+ c = Conditions::FakePollCondition.new
220
+ [:start, :stop].each do |cmd|
221
+ @watch.expects(:call_action).with(c, cmd)
222
+ @watch.action(cmd, c)
223
+ end
224
+ end
225
+
226
+ def test_action_should_do_stop_then_start_if_no_restart_command
227
+ Thread.current.stubs(:==).returns(true)
228
+ @watch.driver.expects(:message).never
229
+
230
+ c = Conditions::FakePollCondition.new
231
+ @watch.expects(:call_action).with(c, :stop)
232
+ @watch.expects(:call_action).with(c, :start)
233
+ @watch.action(:restart, c)
234
+ end
235
+
236
+ def test_action_should_restart_to_call_action_if_present
237
+ Thread.current.stubs(:==).returns(true)
238
+ @watch.driver.expects(:message).never
239
+
240
+ @watch.restart = lambda { }
241
+ c = Conditions::FakePollCondition.new
242
+ @watch.expects(:call_action).with(c, :restart)
243
+ @watch.action(:restart, c)
244
+ end
245
+
246
+ # call_action
247
+
248
+ def test_call_action
249
+ c = Conditions::FakePollCondition.new
250
+ God::Process.any_instance.expects(:call_action).with(:start)
251
+ no_stdout { @watch.call_action(c, :start) }
252
+ end
253
+
254
+ def test_call_action_should_call_before_start_when_behavior_has_that
255
+ @watch.behavior(:fake_behavior)
256
+ c = Conditions::FakePollCondition.new
257
+ God::Process.any_instance.expects(:call_action).with(:start)
258
+ Behaviors::FakeBehavior.any_instance.expects(:before_start)
259
+ no_stdout { @watch.call_action(c, :start) }
260
+ end
261
+
262
+ def test_call_action_should_call_after_start_when_behavior_has_that
263
+ @watch.behavior(:fake_behavior)
264
+ c = Conditions::FakePollCondition.new
265
+ God::Process.any_instance.expects(:call_action).with(:start)
266
+ Behaviors::FakeBehavior.any_instance.expects(:after_start)
267
+ no_stdout { @watch.call_action(c, :start) }
268
+ end
269
+
270
+ # canonical_hash_form
271
+
272
+ def test_canonical_hash_form_should_convert_symbol_to_hash
273
+ assert_equal({true => :foo}, @watch.canonical_hash_form(:foo))
274
+ end
275
+
276
+ def test_canonical_hash_form_should_convert_hash_to_hash
277
+ assert_equal({true => :foo}, @watch.canonical_hash_form(true => :foo))
278
+ end
279
+ end
metadata ADDED
@@ -0,0 +1,186 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: mojombo-god
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.7.7
5
+ platform: ruby
6
+ authors:
7
+ - Tom Preston-Werner
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2008-06-23 00:00:00 -07:00
13
+ default_executable: god
14
+ dependencies: []
15
+
16
+ description: God is an easy to configure, easy to extend monitoring framework written in Ruby.
17
+ email: tom@rubyisawesome.com
18
+ executables:
19
+ - god
20
+ extensions:
21
+ - ext/god/extconf.rb
22
+ extra_rdoc_files:
23
+ - History.txt
24
+ - Manifest.txt
25
+ - README.txt
26
+ files:
27
+ - History.txt
28
+ - Manifest.txt
29
+ - README.txt
30
+ - Rakefile
31
+ - bin/god
32
+ - examples/events.god
33
+ - examples/gravatar.god
34
+ - examples/single.god
35
+ - ext/god/extconf.rb
36
+ - ext/god/kqueue_handler.c
37
+ - ext/god/netlink_handler.c
38
+ - init/god
39
+ - lib/god.rb
40
+ - lib/god/behavior.rb
41
+ - lib/god/behaviors/clean_pid_file.rb
42
+ - lib/god/behaviors/clean_unix_socket.rb
43
+ - lib/god/behaviors/notify_when_flapping.rb
44
+ - lib/god/cli/command.rb
45
+ - lib/god/cli/run.rb
46
+ - lib/god/cli/version.rb
47
+ - lib/god/condition.rb
48
+ - lib/god/conditions/always.rb
49
+ - lib/god/conditions/complex.rb
50
+ - lib/god/conditions/cpu_usage.rb
51
+ - lib/god/conditions/degrading_lambda.rb
52
+ - lib/god/conditions/disk_usage.rb
53
+ - lib/god/conditions/flapping.rb
54
+ - lib/god/conditions/http_response_code.rb
55
+ - lib/god/conditions/lambda.rb
56
+ - lib/god/conditions/memory_usage.rb
57
+ - lib/god/conditions/process_exits.rb
58
+ - lib/god/conditions/process_running.rb
59
+ - lib/god/conditions/tries.rb
60
+ - lib/god/configurable.rb
61
+ - lib/god/contact.rb
62
+ - lib/god/contacts/email.rb
63
+ - lib/god/dependency_graph.rb
64
+ - lib/god/diagnostics.rb
65
+ - lib/god/driver.rb
66
+ - lib/god/errors.rb
67
+ - lib/god/event_handler.rb
68
+ - lib/god/event_handlers/dummy_handler.rb
69
+ - lib/god/event_handlers/kqueue_handler.rb
70
+ - lib/god/event_handlers/netlink_handler.rb
71
+ - lib/god/logger.rb
72
+ - lib/god/metric.rb
73
+ - lib/god/process.rb
74
+ - lib/god/registry.rb
75
+ - lib/god/simple_logger.rb
76
+ - lib/god/socket.rb
77
+ - lib/god/sugar.rb
78
+ - lib/god/system/portable_poller.rb
79
+ - lib/god/system/process.rb
80
+ - lib/god/system/slash_proc_poller.rb
81
+ - lib/god/task.rb
82
+ - lib/god/timeline.rb
83
+ - lib/god/trigger.rb
84
+ - lib/god/watch.rb
85
+ - test/configs/child_events/child_events.god
86
+ - test/configs/child_events/simple_server.rb
87
+ - test/configs/child_polls/child_polls.god
88
+ - test/configs/child_polls/simple_server.rb
89
+ - test/configs/complex/complex.god
90
+ - test/configs/complex/simple_server.rb
91
+ - test/configs/contact/contact.god
92
+ - test/configs/contact/simple_server.rb
93
+ - test/configs/daemon_events/daemon_events.god
94
+ - test/configs/daemon_events/simple_server.rb
95
+ - test/configs/daemon_events/simple_server_stop.rb
96
+ - test/configs/daemon_polls/daemon_polls.god
97
+ - test/configs/daemon_polls/simple_server.rb
98
+ - test/configs/degrading_lambda/degrading_lambda.god
99
+ - test/configs/degrading_lambda/tcp_server.rb
100
+ - test/configs/matias/matias.god
101
+ - test/configs/real.rb
102
+ - test/configs/running_load/running_load.god
103
+ - test/configs/stress/simple_server.rb
104
+ - test/configs/stress/stress.god
105
+ - test/configs/task/logs/.placeholder
106
+ - test/configs/task/task.god
107
+ - test/configs/test.rb
108
+ - test/helper.rb
109
+ - test/suite.rb
110
+ - test/test_behavior.rb
111
+ - test/test_condition.rb
112
+ - test/test_conditions_disk_usage.rb
113
+ - test/test_conditions_http_response_code.rb
114
+ - test/test_conditions_process_running.rb
115
+ - test/test_conditions_tries.rb
116
+ - test/test_contact.rb
117
+ - test/test_dependency_graph.rb
118
+ - test/test_driver.rb
119
+ - test/test_event_handler.rb
120
+ - test/test_god.rb
121
+ - test/test_handlers_kqueue_handler.rb
122
+ - test/test_logger.rb
123
+ - test/test_metric.rb
124
+ - test/test_process.rb
125
+ - test/test_registry.rb
126
+ - test/test_socket.rb
127
+ - test/test_sugar.rb
128
+ - test/test_system_portable_poller.rb
129
+ - test/test_system_process.rb
130
+ - test/test_task.rb
131
+ - test/test_timeline.rb
132
+ - test/test_trigger.rb
133
+ - test/test_watch.rb
134
+ has_rdoc: true
135
+ homepage: http://god.rubyforge.org/
136
+ post_install_message:
137
+ rdoc_options:
138
+ - --main
139
+ - README.txt
140
+ require_paths:
141
+ - lib
142
+ - ext
143
+ required_ruby_version: !ruby/object:Gem::Requirement
144
+ requirements:
145
+ - - ">="
146
+ - !ruby/object:Gem::Version
147
+ version: "0"
148
+ version:
149
+ required_rubygems_version: !ruby/object:Gem::Requirement
150
+ requirements:
151
+ - - ">="
152
+ - !ruby/object:Gem::Version
153
+ version: "0"
154
+ version:
155
+ requirements: []
156
+
157
+ rubyforge_project: god
158
+ rubygems_version: 1.2.0
159
+ signing_key:
160
+ specification_version: 2
161
+ summary: Like monit, only awesome
162
+ test_files:
163
+ - test/test_process.rb
164
+ - test/test_watch.rb
165
+ - test/test_system_portable_poller.rb
166
+ - test/test_conditions_tries.rb
167
+ - test/test_task.rb
168
+ - test/test_condition.rb
169
+ - test/test_timeline.rb
170
+ - test/test_logger.rb
171
+ - test/test_conditions_process_running.rb
172
+ - test/test_handlers_kqueue_handler.rb
173
+ - test/test_conditions_disk_usage.rb
174
+ - test/test_event_handler.rb
175
+ - test/test_driver.rb
176
+ - test/test_dependency_graph.rb
177
+ - test/test_metric.rb
178
+ - test/test_registry.rb
179
+ - test/test_behavior.rb
180
+ - test/test_socket.rb
181
+ - test/test_sugar.rb
182
+ - test/test_trigger.rb
183
+ - test/test_conditions_http_response_code.rb
184
+ - test/test_god.rb
185
+ - test/test_system_process.rb
186
+ - test/test_contact.rb