module Flydata module Command class Sender < Base FLYDATA_HOME=Flydata::HOME_DIR def start if process_exist? say("Process exist. Please stop process first.") return end retry_count = 10 1.upto(retry_count) do |i| break if server_ready? say("Waiting server side active... (#{i}/#{retry_count})") sleep 30 end say('Starting sender process.') Dir.chdir(FLYDATA_HOME){ system("fluentd -d #{FLYDATA_HOME}/flydata.pid -l #{FLYDATA_HOME}/flydata.log -c #{FLYDATA_HOME}/flydata.conf") } sleep 5 data_port = flydata.data_port.get data_port_id = data_port['id'] retry_count = 10 ready = false 1.upto(retry_count) do |i| ready ||= client_ready? if ready and uploaded_successfully?(data_port_id) say('Done.') say("Go to your Dashboard! http://#{Flydata::FLYDATA_API_HOST}") return true end say("Waiting client side active... (#{i}/#{retry_count})") sleep 30 end say('Something wrong..') false end def stop unless process_exist? say("Process doesn't exist.") return true end say('Stopping sender process.') if system("kill `cat #{FLYDATA_HOME}/flydata.pid`") say('Done.') return true else say('Something wrong..') end false end def restart if process_exist? say('Restarting sender process.') if system("kill -HUP `cat #{FLYDATA_HOME}/flydata.pid`") say('Done.') return true else say('Something wrong..') end else say("Process doesn't exist.") start end end private def server_ready? data_port = flydata.data_port.get data_port['server_status'] == 'active' end def client_ready? process_exist? end def process_exist? process_count = `ps aux|grep -v grep|grep "\\.flydata/flydata\\.conf"|grep fluentd|wc -l`.to_i process_count > 0 end def uploaded_successfully?(data_port_id) res = flydata.get("/data_ports/#{data_port_id}/tail.json") res and res['logs'] and res['logs'].size > 0 end end end end