update announcement and create god-check to run a diagnostic for events
[god.git] / Announce.txt
blob47d39c3bfafed00bafd1cc26cbe8b3b55c0033f0
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/
24 WHAT IS GOD?
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.
31 DISCLAIMER
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.
36 INSTALL
38 sudo gem install god
41 FEATURES
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
50 EXAMPLE
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
55
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|
62   God.watch do |w|
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")
72     
73     w.behavior(:clean_pid_file)
75     w.start_if do |start|
76       start.condition(:process_running) do |c|
77         c.interval = 5.seconds
78         c.running = false
79       end
80     end
81     
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
86       end
87     
88       restart.condition(:cpu_usage) do |c|
89         c.above = 50.percent
90         c.times = 5
91       end
92     end
93     
94     # lifecycle
95     w.lifecycle do |on|
96       on.condition(:flapping) do |c|
97         c.to_state = [:start, :restart]
98         c.times = 5
99         c.within = 5.minute
100         c.transition = :unmonitored
101         c.retry_in = 10.minutes
102         c.retry_times = 5
103         c.retry_within = 2.hours
104       end
105     end
106   end
110 DOCS
112 Detailed documentation is available at http://god.rubyforge.org/
115 CHANGES
117 == 0.5.0 / 2007-10-05
119 * Major Enhancements
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
141 * New Conditions
142   * Flapping < TriggerCondition - trigger on state change
143   * HttpResponseCode < PollCondition - trigger on http response code or timeout (thx scott becker)
144 * New Contacts
145   * Email < Contact - notify via email (smtp)
146 * Bug Fixes
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)
154 AUTHORS
156 Tom Preston-Werner
157 Kevin Clark