update history and manifest
[god.git] / Announce.txt
blob6b0ac0098fd00ffcfb7237b23b8f502fbd1b126a
1 Subject: [ANN] god 0.4.0 released
3 Progress on god is moving along as quick as ever. This release adds a bunch of new features and bug fixes. Most interestingly you'll find several useful new command line functions:
5   * `god status` prints out the status of each Watch
6   * `god log` shows realtime logs for a specific Watch (even if you don't have god logging to file)
7   * `god load` loads or reloads a config file into a running god instance
8   * `god terminate` stops all Watches and then stops god (useful when testing your setup)
9   
10 The logging system has been beefed up with proper timestamps and criticality levels. Log messages are more complete overall. You can also get the STDOUT/STDERR of a god-daemonized process written to a log file by specify 'w.log = <log file path>' in your Watch config.
12 If you let god daemonize your process for you, there's no need to provide a stop command. A default killing lambda will take care of gracefully (or not so gracefully if necessary) stopping your god-daemonized process.
14 The validity of your config file is checked better than previous versions to point you to the problem area of your config.
16 The bug that prevented group control from working has been fixed so you can now start/stop/etc groups of Watches.
18 Updated documentation is now available on the website:
20   http://god.rubyforge.org/
23 WHAT IS GOD?
25 God is an easy to configure, easy to extend monitoring framework written in Ruby.
27 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.
30 DISCLAIMER
32 God is still very young, I'd love to get feedback and bug reports, but I do not yet recommend you use it for mission critical tasks. I personally use it in production but then I'm a daring fellow.
35 INSTALL
37 sudo gem install god
40 FEATURES
42 * Config file is written in Ruby
43 * Easily write your own custom conditions in Ruby
44 * Supports both poll and event based conditions
45 * Different poll conditions can have different intervals
46 * Easily control non-daemonized processes
49 EXAMPLE
51 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:
53 # file:      gravatar.god
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 = "/var/www/gravatar2/current"
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 cluster::start --only #{port} \
66       -C #{RAILS_ROOT}/config/mongrel_cluster.yml"
67     w.stop = "mongrel_rails cluster::stop --only #{port} \
68       -C #{RAILS_ROOT}/config/mongrel_cluster.yml"
69     w.grace = 10.seconds
70     w.pid_file = File.join(RAILS_ROOT, "log/mongrel.#{port}.pid")
71     
72     w.behavior(:clean_pid_file)
74     w.start_if do |start|
75       start.condition(:process_running) do |c|
76         c.interval = 5.seconds
77         c.running = false
78       end
79     end
80     
81     w.restart_if do |restart|
82       restart.condition(:memory_usage) do |c|
83         c.above = 150.megabytes
84         c.times = [3, 5] # 3 out of 5 intervals
85       end
86     
87       restart.condition(:cpu_usage) do |c|
88         c.above = 50.percent
89         c.times = 5
90       end
91     end
92   end
93 end
96 DOCS
98 Detailed documentation is available at http://god.rubyforge.org/
101 CHANGES
103 == 0.4.0 / 2007-09-13
105 * Major Enhancements
106   * Add the ability for conditions to override transition state (for exceptional cases)
107   * Implement dynamic load of config files while god is running (god load <filename>)
108   * Add ability to save auto-daemonized process output to a log file
109   * Add robust default stop lambda command for auto-daemonized processes (inspired by _eric)
110   * Add status command for god binary (shows status of each watch)
111   * Create proper logger with timestamps
112   * Add log command to god binary to get real time logs for a specific watch from a running god instance
113   * Add terminate command for god binary (stop god and all watches)
114 * Minor Enhancements
115   * Enforce validity of Watches
116   * Enforce that God.init is not called after a Watch
117   * Move pid_file_directory creation and validation to God.start
118   * Remove check for at least one Watch during startup (now that dynamic loading exists)
119 * New Conditions
120   * Tries < PollCondition - triggers after the specified number of tries
121   * Add :notify_when_flapping behavior to check for oscillation [kevinclark]
122   * Add :degrading_lambda condition. [kevinclark]
123     It uses a decaying interval (1/2 rate) for 3 cycles before failing.
124 * Bug Fixes
125   * Use exit!(0) instead of exit! in god binary to exit with code 0 (instead of default -1)
126   * Command line group control fixed
127   * Fix cross-thread return problem
130 AUTHORS
132 Tom Preston-Werner
133 Kevin Clark