require 'socket' require 'yaml' module Splash module Orchestrator module SchedulerHooks def on_pre_trigger(job, trigger_time) end def on_post_trigger(job, trigger_time) end def init_log end end module Commander include Splash::Transports def send_message (options) client = get_default_client client.publish options end end module Grammar VERBS=[:ping] def ping(payload) return "Pong : #{payload[:hostname]} !" end end class Scheduler include Splash::Constants include Splash::Helpers include Splash::Config include Splash::Transports include Splash::Orchestrator::Grammar def initialize @server = Rufus::Scheduler::new @server.extend SchedulerHooks @server.init_log @result = LogScanner::new @server.every '20s' do begin puts "Notify" @result.analyse @result.notify $stdout.flush rescue Errno::ECONNREFUSED $stderr.puts "PushGateway seems to be done, please start it." end end hostname = Socket.gethostname transport = get_default_subscriber queue: "splash.#{hostname}.input" transport.subscribe(:block => true) do |delivery_info, properties, body| content = YAML::load(body) if VERBS.include? content[:verb] res = self.send content[:verb], content[:payload] get_default_client.publish queue: content[:return_to], message: res.to_yaml else get_default_client.publish queue: content[:return_to], message: "Unkown verb #{content[:verb]}".to_yaml end end end def terminate end end end end