1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
|
class Reactor
include Celluloid
def initialize(interval, filename)
@interval = interval
@filename = filename
every(@interval) do
info "check file #{@filename}"
if cmd = read_file
execute_command cmd
end
end
end
def read_file
if File.exist?(@filename)
cmd = File.read(@filename).chop
File.delete(@filename) rescue nil
cmd
end
end
def execute_command(cmd)
Eye::Control.command(cmd, 'all') if %w{restart start stop}.include?(cmd)
end
end
class Saver < Eye::Trigger::Custom
param :log_name, String, true
def check(trans)
tlogger.info "#{process.full_name} transition from #{trans.from_name} to #{trans.to_name}"
end
def tlogger
@tlogger ||= Logger.new(log_name)
end
end
def reactor
Celluloid::Actor[:reactor]
end
# Extend config options, add enable_reactor
class Eye::Dsl::ConfigOpts
def enable_reactor(*args)
@config[:reactor] = args
end
def enable_saver(save_log)
Eye.application '__default__' do
trigger :saver, :log_name => save_log
end
end
end
# extend controller to execute method, and config loads
class Eye::Controller
def set_opt_reactor(args)
reactor.terminate if reactor
Celluloid::Actor[:reactor] = Reactor.supervise(*args)
end
end
|