[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[mhc:01232] Re: アラーム



大原です。

From: Yoshinari Nomura <nom@xxxxxxxxxxxxxxxxxxx>
Subject: [mhc:01229] アラーム (Re: i-mhc)
Message-ID: <20010201004307X.nom@xxxxxxxxxxxxxxxxxxx>
Date: Thu, 01 Feb 2001 00:43:07 +0900

> えおっしゃる通りです。「任意のコマンド」 をどう記述するかが
> 問題ですね。HP200LX みたいに "| hoge" とかできるようにすると、
> ちょっと危ないですしね。記事毎に変えられなくてもいいのなら、
> 割と簡単だと思います。どう書けばいいでしょう?

例えば、こんなのはどうでしょう?
新しいコマンドが欲しければ、それに合わせて新しい class を作っておき、
実際に使う際には、必要なコマンドを選んで Procs に追加していく、
という感じです。

外部コマンドを起動するにしても、date や sch の引数引き渡しのために、
結局は、各コマンドに合わせて wrapper を書かないとダメそうなので、
いっそのこと、class でくるんでやった方が良いような気がします。

----
OHARA Shigeki (大原 重樹) <os@xxxxxxxxx>


#!/usr/local/bin/ruby
# -*- Ruby -*-

require 'mhc-schedule'

module MHC
  module Alarm
    module Proc

      class Mail
	def initialize(to, from = nil, smtp = 'localhost', helo = 'localhost')
	  require 'net/smtp'
	  @to = to
	  @from = (from || to)
	  @smtp_host, @helo_host = smtp, helo
	end
	def run(date, sch)
	  header  = "To: #{@to}\n"
	  header += "From: secretary-of-#{@to}\n"
	  header += "Subject: #{sch.subject}\n"
	  header += "\n"
	  body    = "#{date.to_js}\n"
	  body   += "  #{sch.time_b}\n"
	  body   += "  #{sch.subject}\n"

	  unless $debug
	    message = header + MhcKconv::tomail(body)
	    Net::SMTPSession .start(@smtp_host, 25, @helo_host) { |server|
	      server .sendmail(message, @to, [@to])
	    }
	  else
	    print MhcKconv::todisp(header + body)
	  end
	end
      end

      class Echo
	def initialize()
	end
	def run(date, sch)
	  puts sch.subject
	end
      end

    end
  end
end

Procs = [
  MHC::Alarm::Proc::Mail::new('user@xxxxxxxxxxxxx'),
  MHC::Alarm::Proc::Echo::new,
]

db    = MhcScheduleDB .new
alarm = MhcAlarm .new(db)

alarm .signal_connect('time-arrived'){|date, sch|
  Procs.each { |proc|
    proc.run(date, sch)
  }
}

alarm .check
sleep