« 3年間の運用まとめ | トップページ | com.sun.image.codec の置き換え »

2011年2月 3日 (木)

ORCL0030CheckServer

OpenDolphin で CLAIM 送信した後,送った CLAIM の処理が終了したことを知らせるサーバを ruby で作った。CLAIM 処理が完了すると,ORCA サーバのシステムログに

Feb 24 12:22:22 orca panda/dbstub[3720]: module ORCL0030: /var/tmp/claim_rcv_0

というログが出るのを検出して知らせるといういかにも素人くさい方法。CLAIM 処理終了が確認できるので,CLAIM 処理が終わる前にORCAの「中途終了」ボタンを押してしまって,「中途終了データはありません」と言われなくてすむようになる。

ORCA サーバでの立ち上げ方法。11792 は適当な空きポート。

$ sudo tail -f -n0 /var/log/syslog | ruby ORCL0030CheckServer.rb 11792

ORCL0030CheckServer.rb

#!/usr/bin/ruby
require "socket"
require "timeout"

default_port = "11792"
if ARGV.length == 0
  port = default_port
else
  port = ARGV.shift
end

ACK = 0x06.chr

# receive ACK from client
class GetAck
  def initialize(s)
    @sock = s
  end
  def get
    begin
      timeout(1) {
        while ACK != @sock.read(1); end
      }
      return true
    rescue Timeout::Error
    end
  end
end

# send ORCL0030 to client
class SendOrcl
  def initialize(s)
    @sock = s
  end
  def send
    ack = GetAck.new(@sock)
    max = 5
    str = "ORCL0030"
    for i in 1..max do
      begin
        @sock.puts(str)
        break if ack.get
      rescue Errno::EPIPE
        $stdout.puts("retry: " + i.to_s)
        sleep 1
      end
    end
    return i < max
  end
end

# クライアントと接続したスレッドを保持する配列
thr = []   

# stdin を監視するスレッド
Thread.start() {
  while line = $stdin.gets
    line.chop!
    if /ORCL0030.*claim_rcv/ =~ line
      for t in thr
        t.wakeup
      end
    end
  end
}

gsock = TCPServer.open(port)

# クライアントと接続したスレッドを作り thr に登録
while true
  $stdout.puts("Wait for another connection")
  Thread.start(gsock.accept) do |sock|
    addr = sock.peeraddr
    $stdout.puts("Connected " + addr.join(":"))
    thr.push(Thread.current)

    # クライアントと接続したら指示があるまで待つ
    while true
      Thread.stop
      break if !SendOrcl.new(sock).send
    end
    sock.close
    $stdout.puts("Close socket")
    thr.delete(Thread.current)
  end
end

ORCL0030Listener

java で書いたクライアント。(NetBeans 6.9.1 のプロジェクト)
ダウンロード ORCL0030.zip (1475.0K)

Orcl00302

Orcl0030

起動画面 ORCL0030 を受けると,うさぎアイコンが跳ねる

« 3年間の運用まとめ | トップページ | com.sun.image.codec の置き換え »

ダウンロード」カテゴリの記事