god 0.2.0 → 0.3.0
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.
- data/History.txt +26 -2
- data/Manifest.txt +19 -5
- data/Rakefile +7 -2
- data/bin/god +131 -11
- data/examples/events.god +52 -0
- data/examples/gravatar.god +29 -35
- data/ext/god/extconf.rb +49 -2
- data/ext/god/kqueue_handler.c +2 -2
- data/ext/god/netlink_handler.c +17 -4
- data/lib/god.rb +127 -25
- data/lib/god/behavior.rb +8 -3
- data/lib/god/behaviors/clean_pid_file.rb +2 -8
- data/lib/god/condition.rb +6 -5
- data/lib/god/conditions/cpu_usage.rb +4 -4
- data/lib/god/conditions/lambda.rb +19 -0
- data/lib/god/conditions/memory_usage.rb +4 -4
- data/lib/god/conditions/process_exits.rb +5 -7
- data/lib/god/conditions/process_running.rb +4 -4
- data/lib/god/errors.rb +3 -0
- data/lib/god/event_handler.rb +28 -3
- data/lib/god/event_handlers/dummy_handler.rb +13 -0
- data/lib/god/event_handlers/kqueue_handler.rb +2 -0
- data/lib/god/event_handlers/netlink_handler.rb +2 -0
- data/lib/god/hub.rb +40 -23
- data/lib/god/metric.rb +4 -4
- data/lib/god/process.rb +105 -0
- data/lib/god/registry.rb +28 -0
- data/lib/god/server.rb +3 -4
- data/lib/god/sugar.rb +47 -0
- data/lib/god/system/process.rb +1 -2
- data/lib/god/timer.rb +13 -6
- data/lib/god/watch.rb +61 -29
- data/test/configs/child_events/child_events.god +25 -0
- data/test/configs/child_events/simple_server.rb +3 -0
- data/test/configs/child_polls/child_polls.god +15 -0
- data/test/configs/child_polls/simple_server.rb +3 -0
- data/test/configs/daemon_events/daemon_events.god +30 -0
- data/test/configs/daemon_events/simple_server.rb +6 -0
- data/test/configs/real.rb +47 -49
- data/test/configs/test.rb +52 -62
- data/test/helper.rb +44 -14
- data/test/test_behavior.rb +10 -2
- data/test/test_condition.rb +19 -3
- data/test/test_conditions_process_running.rb +42 -0
- data/test/test_event_handler.rb +73 -0
- data/test/test_god.rb +206 -9
- data/test/test_handlers_kqueue_handler.rb +12 -0
- data/test/test_hub.rb +157 -0
- data/test/test_metric.rb +30 -2
- data/test/test_process.rb +84 -0
- data/test/test_registry.rb +14 -0
- data/test/test_server.rb +3 -2
- data/test/test_sugar.rb +42 -0
- data/test/test_system_process.rb +1 -1
- data/test/test_timer.rb +8 -1
- data/test/test_watch.rb +137 -2
- metadata +28 -17
- data/examples/local.god +0 -60
- data/ext/god/Makefile +0 -149
- data/lib/god/base.rb +0 -13
- data/lib/god/meddle.rb +0 -38
- data/test/test_meddle.rb +0 -46
metadata
CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.9.2
|
|
3
3
|
specification_version: 1
|
4
4
|
name: god
|
5
5
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 0.
|
7
|
-
date: 2007-
|
6
|
+
version: 0.3.0
|
7
|
+
date: 2007-08-17 00:00:00 -07:00
|
8
8
|
summary: Like monit, only awesome
|
9
9
|
require_paths:
|
10
10
|
- lib
|
@@ -35,46 +35,60 @@ files:
|
|
35
35
|
- README.txt
|
36
36
|
- Rakefile
|
37
37
|
- bin/god
|
38
|
+
- examples/events.god
|
38
39
|
- examples/gravatar.god
|
39
|
-
- examples/local.god
|
40
|
-
- ext/god/Makefile
|
41
40
|
- ext/god/extconf.rb
|
42
41
|
- ext/god/kqueue_handler.c
|
43
42
|
- ext/god/netlink_handler.c
|
44
43
|
- lib/god.rb
|
45
|
-
- lib/god/base.rb
|
46
44
|
- lib/god/behavior.rb
|
47
45
|
- lib/god/behaviors/clean_pid_file.rb
|
48
46
|
- lib/god/condition.rb
|
49
47
|
- lib/god/conditions/always.rb
|
50
48
|
- lib/god/conditions/cpu_usage.rb
|
49
|
+
- lib/god/conditions/lambda.rb
|
51
50
|
- lib/god/conditions/memory_usage.rb
|
52
51
|
- lib/god/conditions/process_exits.rb
|
53
52
|
- lib/god/conditions/process_running.rb
|
54
53
|
- lib/god/conditions/timeline.rb
|
55
54
|
- lib/god/errors.rb
|
56
55
|
- lib/god/event_handler.rb
|
56
|
+
- lib/god/event_handlers/dummy_handler.rb
|
57
57
|
- lib/god/event_handlers/kqueue_handler.rb
|
58
58
|
- lib/god/event_handlers/netlink_handler.rb
|
59
59
|
- lib/god/hub.rb
|
60
|
-
- lib/god/meddle.rb
|
61
60
|
- lib/god/metric.rb
|
61
|
+
- lib/god/process.rb
|
62
|
+
- lib/god/registry.rb
|
62
63
|
- lib/god/reporter.rb
|
63
64
|
- lib/god/server.rb
|
65
|
+
- lib/god/sugar.rb
|
64
66
|
- lib/god/system/process.rb
|
65
67
|
- lib/god/timer.rb
|
66
68
|
- lib/god/watch.rb
|
69
|
+
- test/configs/child_events/child_events.god
|
70
|
+
- test/configs/child_events/simple_server.rb
|
71
|
+
- test/configs/child_polls/child_polls.god
|
72
|
+
- test/configs/child_polls/simple_server.rb
|
73
|
+
- test/configs/daemon_events/daemon_events.god
|
74
|
+
- test/configs/daemon_events/simple_server.rb
|
67
75
|
- test/configs/real.rb
|
68
76
|
- test/configs/test.rb
|
69
77
|
- test/helper.rb
|
70
78
|
- test/suite.rb
|
71
79
|
- test/test_behavior.rb
|
72
80
|
- test/test_condition.rb
|
81
|
+
- test/test_conditions_process_running.rb
|
82
|
+
- test/test_event_handler.rb
|
73
83
|
- test/test_god.rb
|
74
|
-
- test/
|
84
|
+
- test/test_handlers_kqueue_handler.rb
|
85
|
+
- test/test_hub.rb
|
75
86
|
- test/test_metric.rb
|
87
|
+
- test/test_process.rb
|
88
|
+
- test/test_registry.rb
|
76
89
|
- test/test_reporter.rb
|
77
90
|
- test/test_server.rb
|
91
|
+
- test/test_sugar.rb
|
78
92
|
- test/test_system_process.rb
|
79
93
|
- test/test_timeline.rb
|
80
94
|
- test/test_timer.rb
|
@@ -82,11 +96,17 @@ files:
|
|
82
96
|
test_files:
|
83
97
|
- test/test_behavior.rb
|
84
98
|
- test/test_condition.rb
|
99
|
+
- test/test_conditions_process_running.rb
|
100
|
+
- test/test_event_handler.rb
|
85
101
|
- test/test_god.rb
|
86
|
-
- test/
|
102
|
+
- test/test_handlers_kqueue_handler.rb
|
103
|
+
- test/test_hub.rb
|
87
104
|
- test/test_metric.rb
|
105
|
+
- test/test_process.rb
|
106
|
+
- test/test_registry.rb
|
88
107
|
- test/test_reporter.rb
|
89
108
|
- test/test_server.rb
|
109
|
+
- test/test_sugar.rb
|
90
110
|
- test/test_system_process.rb
|
91
111
|
- test/test_timeline.rb
|
92
112
|
- test/test_timer.rb
|
@@ -105,15 +125,6 @@ extensions:
|
|
105
125
|
requirements: []
|
106
126
|
|
107
127
|
dependencies:
|
108
|
-
- !ruby/object:Gem::Dependency
|
109
|
-
name: daemons
|
110
|
-
version_requirement:
|
111
|
-
version_requirements: !ruby/object:Gem::Version::Requirement
|
112
|
-
requirements:
|
113
|
-
- - ">="
|
114
|
-
- !ruby/object:Gem::Version
|
115
|
-
version: 1.0.7
|
116
|
-
version:
|
117
128
|
- !ruby/object:Gem::Dependency
|
118
129
|
name: hoe
|
119
130
|
version_requirement:
|
data/examples/local.god
DELETED
@@ -1,60 +0,0 @@
|
|
1
|
-
# This example shows how you might keep a local development Rails server up
|
2
|
-
# and running on your Mac.
|
3
|
-
|
4
|
-
# Run with:
|
5
|
-
# god start -c /path/to/local.god
|
6
|
-
|
7
|
-
RAILS_ROOT = "/Users/tom/dev/powerset/querytopia"
|
8
|
-
|
9
|
-
God.meddle do |god|
|
10
|
-
god.watch do |w|
|
11
|
-
w.name = "local-3000"
|
12
|
-
w.interval = 5 # seconds
|
13
|
-
w.start = "mongrel_rails start -P ./log/mongrel.pid -c #{RAILS_ROOT} -d"
|
14
|
-
w.stop = "mongrel_rails stop -P ./log/mongrel.pid -c #{RAILS_ROOT}"
|
15
|
-
w.grace = 5
|
16
|
-
|
17
|
-
pid_file = File.join(RAILS_ROOT, "log/mongrel.pid")
|
18
|
-
|
19
|
-
# clean pid files before start if necessary
|
20
|
-
w.behavior(:clean_pid_file) do |b|
|
21
|
-
b.pid_file = pid_file
|
22
|
-
end
|
23
|
-
|
24
|
-
# start if process is not running
|
25
|
-
w.start_if do |start|
|
26
|
-
start.condition(:process_exits) do |c|
|
27
|
-
c.pid_file = pid_file
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
|
-
# restart if memory or cpu is too high
|
32
|
-
w.restart_if do |restart|
|
33
|
-
restart.condition(:memory_usage) do |c|
|
34
|
-
c.pid_file = pid_file
|
35
|
-
c.above = (50 * 1024) # 50mb
|
36
|
-
c.times = [3, 5]
|
37
|
-
end
|
38
|
-
|
39
|
-
restart.condition(:cpu_usage) do |c|
|
40
|
-
c.pid_file = pid_file
|
41
|
-
c.above = 10 # percent
|
42
|
-
c.times = [3, 5]
|
43
|
-
end
|
44
|
-
end
|
45
|
-
end
|
46
|
-
|
47
|
-
# clear old session files
|
48
|
-
god.watch do |w|
|
49
|
-
w.name = "local-session-cleanup"
|
50
|
-
w.interval = 60 # seconds
|
51
|
-
w.cwd = File.join(RAILS_ROOT, 'tmp/sessions')
|
52
|
-
w.start = lambda do
|
53
|
-
Dir['ruby_sess.*'].select { |f| File.mtime(f) < Time.now - (7 * 24 * 60 * 60) }.each { |f| File.delete(f) }
|
54
|
-
end
|
55
|
-
|
56
|
-
w.start_if do |start|
|
57
|
-
start.condition(:always)
|
58
|
-
end
|
59
|
-
end
|
60
|
-
end
|
data/ext/god/Makefile
DELETED
@@ -1,149 +0,0 @@
|
|
1
|
-
|
2
|
-
SHELL = /bin/sh
|
3
|
-
|
4
|
-
#### Start of system configuration section. ####
|
5
|
-
|
6
|
-
srcdir = .
|
7
|
-
topdir = /usr/local/lib/ruby/1.8/i686-darwin8.9.1
|
8
|
-
hdrdir = $(topdir)
|
9
|
-
VPATH = $(srcdir):$(topdir):$(hdrdir)
|
10
|
-
prefix = $(DESTDIR)/usr/local
|
11
|
-
exec_prefix = $(prefix)
|
12
|
-
sitedir = $(DESTDIR)/p/libdata/ruby
|
13
|
-
rubylibdir = $(libdir)/ruby/$(ruby_version)
|
14
|
-
docdir = $(datarootdir)/doc/$(PACKAGE)
|
15
|
-
dvidir = $(docdir)
|
16
|
-
datarootdir = $(prefix)/share
|
17
|
-
archdir = $(rubylibdir)/$(arch)
|
18
|
-
sbindir = $(exec_prefix)/sbin
|
19
|
-
psdir = $(docdir)
|
20
|
-
localedir = $(datarootdir)/locale
|
21
|
-
htmldir = $(docdir)
|
22
|
-
datadir = $(datarootdir)
|
23
|
-
includedir = $(prefix)/include
|
24
|
-
infodir = $(datarootdir)/info
|
25
|
-
sysconfdir = $(prefix)/etc
|
26
|
-
mandir = $(datarootdir)/man
|
27
|
-
libdir = $(exec_prefix)/lib
|
28
|
-
sharedstatedir = $(prefix)/com
|
29
|
-
oldincludedir = $(DESTDIR)/usr/include
|
30
|
-
pdfdir = $(docdir)
|
31
|
-
sitearchdir = $(sitelibdir)/$(sitearch)
|
32
|
-
bindir = $(exec_prefix)/bin
|
33
|
-
localstatedir = $(prefix)/var
|
34
|
-
sitelibdir = $(sitedir)/$(ruby_version)
|
35
|
-
libexecdir = $(exec_prefix)/libexec
|
36
|
-
|
37
|
-
CC = gcc
|
38
|
-
LIBRUBY = $(LIBRUBY_A)
|
39
|
-
LIBRUBY_A = lib$(RUBY_SO_NAME)-static.a
|
40
|
-
LIBRUBYARG_SHARED =
|
41
|
-
LIBRUBYARG_STATIC = -l$(RUBY_SO_NAME)-static
|
42
|
-
|
43
|
-
RUBY_EXTCONF_H =
|
44
|
-
CFLAGS = -fno-common -g -O2 -pipe -fno-common
|
45
|
-
INCFLAGS = -I. -I$(topdir) -I$(hdrdir) -I$(srcdir)
|
46
|
-
CPPFLAGS =
|
47
|
-
CXXFLAGS = $(CFLAGS)
|
48
|
-
DLDFLAGS =
|
49
|
-
LDSHARED = cc -dynamic -bundle -undefined suppress -flat_namespace
|
50
|
-
AR = ar
|
51
|
-
EXEEXT =
|
52
|
-
|
53
|
-
RUBY_INSTALL_NAME = ruby
|
54
|
-
RUBY_SO_NAME = ruby
|
55
|
-
arch = i686-darwin8.9.1
|
56
|
-
sitearch = i686-darwin8.9.1
|
57
|
-
ruby_version = 1.8
|
58
|
-
ruby = /usr/local/bin/ruby
|
59
|
-
RUBY = $(ruby)
|
60
|
-
RM = rm -f
|
61
|
-
MAKEDIRS = mkdir -p
|
62
|
-
INSTALL = /usr/bin/install -c
|
63
|
-
INSTALL_PROG = $(INSTALL) -m 0755
|
64
|
-
INSTALL_DATA = $(INSTALL) -m 644
|
65
|
-
COPY = cp
|
66
|
-
|
67
|
-
#### End of system configuration section. ####
|
68
|
-
|
69
|
-
preload =
|
70
|
-
|
71
|
-
libpath = $(libdir)
|
72
|
-
LIBPATH = -L"$(libdir)"
|
73
|
-
DEFFILE =
|
74
|
-
|
75
|
-
CLEANFILES =
|
76
|
-
DISTCLEANFILES =
|
77
|
-
|
78
|
-
extout =
|
79
|
-
extout_prefix =
|
80
|
-
target_prefix =
|
81
|
-
LOCAL_LIBS =
|
82
|
-
LIBS = -lpthread -ldl -lobjc
|
83
|
-
SRCS = kqueue_handler.c netlink_handler.c
|
84
|
-
OBJS = kqueue_handler.o netlink_handler.o
|
85
|
-
TARGET = kqueue_handler_ext
|
86
|
-
DLLIB = $(TARGET).bundle
|
87
|
-
EXTSTATIC =
|
88
|
-
STATIC_LIB =
|
89
|
-
|
90
|
-
RUBYCOMMONDIR = $(sitedir)$(target_prefix)
|
91
|
-
RUBYLIBDIR = $(sitelibdir)$(target_prefix)
|
92
|
-
RUBYARCHDIR = $(sitearchdir)$(target_prefix)
|
93
|
-
|
94
|
-
TARGET_SO = $(DLLIB)
|
95
|
-
CLEANLIBS = $(TARGET).bundle $(TARGET).il? $(TARGET).tds $(TARGET).map
|
96
|
-
CLEANOBJS = *.o *.a *.s[ol] *.pdb *.exp *.bak
|
97
|
-
|
98
|
-
all: $(DLLIB)
|
99
|
-
static: $(STATIC_LIB)
|
100
|
-
|
101
|
-
clean:
|
102
|
-
@-$(RM) $(CLEANLIBS) $(CLEANOBJS) $(CLEANFILES)
|
103
|
-
|
104
|
-
distclean: clean
|
105
|
-
@-$(RM) Makefile $(RUBY_EXTCONF_H) conftest.* mkmf.log
|
106
|
-
@-$(RM) core ruby$(EXEEXT) *~ $(DISTCLEANFILES)
|
107
|
-
|
108
|
-
realclean: distclean
|
109
|
-
install: install-so install-rb
|
110
|
-
|
111
|
-
install-so: $(RUBYARCHDIR)
|
112
|
-
install-so: $(RUBYARCHDIR)/$(DLLIB)
|
113
|
-
$(RUBYARCHDIR)/$(DLLIB): $(DLLIB)
|
114
|
-
$(INSTALL_PROG) $(DLLIB) $(RUBYARCHDIR)
|
115
|
-
install-rb: pre-install-rb install-rb-default
|
116
|
-
install-rb-default: pre-install-rb-default
|
117
|
-
pre-install-rb: Makefile
|
118
|
-
pre-install-rb-default: Makefile
|
119
|
-
$(RUBYARCHDIR):
|
120
|
-
$(MAKEDIRS) $@
|
121
|
-
|
122
|
-
site-install: site-install-so site-install-rb
|
123
|
-
site-install-so: install-so
|
124
|
-
site-install-rb: install-rb
|
125
|
-
|
126
|
-
.SUFFIXES: .c .m .cc .cxx .cpp .C .o
|
127
|
-
|
128
|
-
.cc.o:
|
129
|
-
$(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) -c $<
|
130
|
-
|
131
|
-
.cxx.o:
|
132
|
-
$(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) -c $<
|
133
|
-
|
134
|
-
.cpp.o:
|
135
|
-
$(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) -c $<
|
136
|
-
|
137
|
-
.C.o:
|
138
|
-
$(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) -c $<
|
139
|
-
|
140
|
-
.c.o:
|
141
|
-
$(CC) $(INCFLAGS) $(CPPFLAGS) $(CFLAGS) -c $<
|
142
|
-
|
143
|
-
$(DLLIB): $(OBJS)
|
144
|
-
@-$(RM) $@
|
145
|
-
$(LDSHARED) $(DLDFLAGS) $(LIBPATH) -o $@ $(OBJS) $(LOCAL_LIBS) $(LIBS)
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
$(OBJS): ruby.h defines.h
|
data/lib/god/base.rb
DELETED
data/lib/god/meddle.rb
DELETED
@@ -1,38 +0,0 @@
|
|
1
|
-
module God
|
2
|
-
|
3
|
-
class Meddle < Base
|
4
|
-
# drb
|
5
|
-
attr_accessor :server
|
6
|
-
|
7
|
-
# api
|
8
|
-
attr_accessor :watches
|
9
|
-
|
10
|
-
# Create a new instance that is ready for use by a configuration file
|
11
|
-
def initialize(options = {})
|
12
|
-
self.watches = []
|
13
|
-
self.server = Server.new(self, options[:host], options[:port])
|
14
|
-
end
|
15
|
-
|
16
|
-
# Instantiate a new, empty Watch object and pass it to the mandatory
|
17
|
-
# block. The attributes of the watch will be set by the configuration
|
18
|
-
# file.
|
19
|
-
def watch
|
20
|
-
w = Watch.new(self)
|
21
|
-
yield(w)
|
22
|
-
|
23
|
-
# ensure the new watch has a unique name
|
24
|
-
unless @watches.select { |x| x.name == w.name }.empty?
|
25
|
-
abort "Duplicate Watch with name '#{w.name}'"
|
26
|
-
end
|
27
|
-
|
28
|
-
# add to list of watches
|
29
|
-
@watches << w
|
30
|
-
end
|
31
|
-
|
32
|
-
# Schedule all poll conditions and register all condition events
|
33
|
-
def monitor
|
34
|
-
@watches.each { |w| w.monitor }
|
35
|
-
end
|
36
|
-
end
|
37
|
-
|
38
|
-
end
|
data/test/test_meddle.rb
DELETED
@@ -1,46 +0,0 @@
|
|
1
|
-
require File.dirname(__FILE__) + '/helper'
|
2
|
-
|
3
|
-
class TestMeddle < Test::Unit::TestCase
|
4
|
-
def setup
|
5
|
-
Server.stubs(:new).returns(true)
|
6
|
-
@meddle = Meddle.new
|
7
|
-
end
|
8
|
-
|
9
|
-
def test_should_initialize_watches_to_empty_array
|
10
|
-
assert_equal [], @meddle.watches
|
11
|
-
end
|
12
|
-
|
13
|
-
def test_watches_should_get_stored
|
14
|
-
watch = nil
|
15
|
-
@meddle.watch { |w| watch = w }
|
16
|
-
|
17
|
-
assert_equal 1, @meddle.watches.size
|
18
|
-
assert_equal watch, @meddle.watches.first
|
19
|
-
end
|
20
|
-
|
21
|
-
def test_should_kick_off_a_server_instance
|
22
|
-
Server.expects(:new).returns(true)
|
23
|
-
Meddle.new
|
24
|
-
end
|
25
|
-
|
26
|
-
def test_should_take_an_options_hash
|
27
|
-
Server.expects(:new)
|
28
|
-
Meddle.new(:port => 5555)
|
29
|
-
end
|
30
|
-
|
31
|
-
def test_should_allow_multiple_watches
|
32
|
-
@meddle.watch { |w| w.name = 'foo' }
|
33
|
-
|
34
|
-
assert_nothing_raised do
|
35
|
-
@meddle.watch { |w| w.name = 'bar' }
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
def test_should_disallow_duplicate_watch_names
|
40
|
-
@meddle.watch { |w| w.name = 'foo' }
|
41
|
-
|
42
|
-
assert_raise AbortCalledError do
|
43
|
-
@meddle.watch { |w| w.name = 'foo' }
|
44
|
-
end
|
45
|
-
end
|
46
|
-
end
|