1 Subject: [ANN] god 0.5.0 released
3 This release brings about a tremendous leap in stability and robustness. A large number of bugs have been discovered and addressed while god is being run in a production environment. We're battle testing god so you don't have to!
5 There's a number of new features that you'll want to know about:
7 * You can now define lifecycle conditions that are active during the full lifetime of a monitored process. This is especially useful for the :flapping condition that can detect when a process is being started over and over.
9 * A notification framework has been added that allows you to be notified when conditions trigger. Currently there is an :email contact type that can send over SMTP (with optional authentication). Creating your own custom contact types is also extremely simple.
11 * Watches are now a specialized subclass of Tasks. Tasks don't know anything about processes and allow you to specify arbitrary states and setup a state machine for dealing with non-process monitoring.
13 * Log output is much more human readable. It's very easy to tell exactly what's going on with your process and what conditions are triggering.
15 * The CLI tools now use a UNIX domain socket to communicate with god. This means better security by enforcing that only authorized users can interact with god.
17 * An :http_response_code condition is now included that allows you to poll a website and ensure that a response code is within bounds.
19 Updated documentation is now available on the website:
21 http://god.rubyforge.org/
26 God is an easy to configure, easy to extend monitoring framework written in Ruby.
28 Keeping your server processes and tasks running should be a simple part of your deployment process. God aims to be the simplest, most powerful monitoring application available.
33 God is still beta so I do not yet recommend you use it for mission critical tasks. We are using it at Powerset, Inc. to monitor our public facing applications, but then, we're daring fellows.
43 * Config file is written in Ruby
44 * Easily write your own custom conditions in Ruby
45 * Supports both poll and event based conditions
46 * Different poll conditions can have different intervals
47 * Easily control non-daemonized processes
52 The easiest way to understand how god will make your life better is by looking at a sample config file. The following configuration file is what I use at gravatar.com to keep the mongrels running:
54 # run with: god -c /path/to/gravatar.god
56 # This is the actual config file used to keep the mongrels of
57 # gravatar.com running.
59 RAILS_ROOT = "/Users/tom/dev/gravatar2"
61 %w{8200 8201 8202}.each do |port|
63 w.name = "gravatar2-mongrel-#{port}"
64 w.interval = 30.seconds # default
65 w.start = "mongrel_rails start -c #{RAILS_ROOT} -p #{port} \
66 -P #{RAILS_ROOT}/log/mongrel.#{port}.pid -d"
67 w.stop = "mongrel_rails stop -P #{RAILS_ROOT}/log/mongrel.#{port}.pid"
68 w.restart = "mongrel_rails restart -P #{RAILS_ROOT}/log/mongrel.#{port}.pid"
69 w.start_grace = 10.seconds
70 w.restart_grace = 10.seconds
71 w.pid_file = File.join(RAILS_ROOT, "log/mongrel.#{port}.pid")
73 w.behavior(:clean_pid_file)
76 start.condition(:process_running) do |c|
77 c.interval = 5.seconds
82 w.restart_if do |restart|
83 restart.condition(:memory_usage) do |c|
84 c.above = 150.megabytes
85 c.times = [3, 5] # 3 out of 5 intervals
88 restart.condition(:cpu_usage) do |c|
96 on.condition(:flapping) do |c|
97 c.to_state = [:start, :restart]
100 c.transition = :unmonitored
101 c.retry_in = 10.minutes
103 c.retry_within = 2.hours
112 Detailed documentation is available at http://god.rubyforge.org/
117 == 0.5.0 / 2007-10-05
120 * Implement lifecycle scoped metric to allow for cross-state conditions
121 * Add TriggerCondition for conditions that need info about state changes
122 * Implement notification system
123 * Add Tasks (a generalization of Watches) to do non-process related tasks
124 * Add example init.d file in GOD_INSTALL_DIR/init/god [scott becker]
125 * Add human readable info to conditions (and make low level log lines debug)
126 * Switch DRb to use a unix domain socket for security reasons
127 * Minor Enchancements
128 * Allow EventConditions to do transition overloading
129 * Report errors during god startup instead of failing silently
130 * Make transition block optional (default to Always condition returning true)
131 * Better usage info for `god --help`
132 * Explain what's going on when attempting to rebind to an in-use port
133 * Add -b option to god binary to auto-bind to an unused port
134 * Add `god quit` to stop god without stopping any tasks
135 * Make self-daemonized Watch commands synchronous (as they should be)
136 * Allow self-daemonized Watches to specify a log (could be useful)
137 * Check for existence of config file if specified
138 * Robustify `god load` and report errors back to the command issuer
139 * Warn when `god load` tries to set global options
140 * Add Configurable.clear method and make built-in conditions clear on entry
142 * Flapping < TriggerCondition - trigger on state change
143 * HttpResponseCode < PollCondition - trigger on http response code or timeout (thx scott becker)
145 * Email < Contact - notify via email (smtp)
147 * Fix abort not aborting problem
148 * Fix -p option not working for god binary
149 * Fix God.init not accepting block (thx _eric)
150 * Fix SIGHUP ignore (thx _eric)
151 * Fix error reporting on `god --help` (don't error report a normal SystemExit)