Skip to content

Instantly share code, notes, and snippets.

@kakutani
Created January 7, 2011 00:56
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kakutani/768928 to your computer and use it in GitHub Desktop.
Save kakutani/768928 to your computer and use it in GitHub Desktop.
module Depot
class EmailNotifier < Bluepill::Trigger
def initialize(process, options = {})
@to_address = options.delete(:to_address)
@from_address = options.delete(:from_address)
@notify_on = options.delete(:notify_on)
@rails_env = options.delete(:rails_env)
super
end
def notify(transition)
if @notify_on.include?(transition.to_name) && transited?(transition)
IO.popen('/usr/sbin/sendmail -i -t', 'w') do |x|
x.puts "From: #{@from_address}"
x.puts "To: #{@to_address}"
subject = "Bluepill(#{@rails_env}): #{process.name}, #{transition.from} => #{transition.to}"
if transition.to_name == :unmonitored
subject = "!URGENT! #{subject}"
else
subject = "[Notice] #{subject}"
end
x.puts "Subject: #{subject}"
x.print "\n"
x.puts "In #{@rails_env}, #{process.name} went from #{transition.from_name} => #{transition.to_name} at #{Time.now.strftime('%Y-%m-%d %H:%M:%S %Z')}"
end
@logger.info("notified via email")
end
rescue => ex
@logger.warning("something wrong in email_notifier: #{ex.message}")
@logger.warning(ex.backtrace)
end
def transited?(trans)
trans.to_name != trans.from_name
end
end
end
@kakutani
Copy link
Author

kakutani commented Jan 7, 2011

process.checks(:email_notifier,
  :rails_env => 'production',
  :from_address => 'you@example.com',
  :to_address => 'me@example.com',
  :notify_on => [:up, :down, :starting, :unmonitored])

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment