module Flydata class Cron CRON_TMP_PATH="#{FLYDATA_HOME}/cron_list.tmp" CRON_BACKUP_PATH="#{FLYDATA_HOME}/cron_list.back" LOG_PATH="#{FLYDATA_HOME}/flydata_cron.log" ROUTINE_BASE_COMMAND="#{FLYDATA_HOME}/bin/flydata routine >> #{LOG_PATH} 2>&1" if ENV['FLYDATA_API_HOST'] and ENV['FLYDATA_API_HOST'] != "" ROUTINE_COMMAND="export FLYDATA_API_HOST=#{ENV['FLYDATA_API_HOST']} && #{ROUTINE_BASE_COMMAND}" else ROUTINE_COMMAND=ROUTINE_BASE_COMMAND end CRON_LINE="15 4 * * * #{ROUTINE_COMMAND}" #CRON_LINE="* * * * * #{ROUTINE_COMMAND}" REMOVE_OPTION="-r" def initialize end def update(option=nil) arg = option ? option : '' # Check condition check_crontab_command dump_cron_setting reagistered = check_cron_setting # Remove mode if arg == REMOVE_OPTION unless reagistered puts "Skip removing. There are no flydata jobs in crontab." else remove_cron_setting puts "Updated crontab to remove the deletion of your log data." end # Add mode else if reagistered puts "Skip register. Already cron setup done." else add_cron_setting puts "Updated crontab to manage the deletion of your log data." end end true end private def check_crontab_command raise "Failed to update. Crontab is not installed." unless system("which crontab > /dev/null") end def dump_cron_setting system("crontab -l > #{CRON_BACKUP_PATH}") end def check_cron_setting already_exist = false File.open(CRON_BACKUP_PATH, 'r') { |file| while l = file.gets if l =~ /#{ROUTINE_COMMAND}/ already_exist = true break end end } already_exist end def add_cron_setting FileUtils.copy(CRON_BACKUP_PATH, CRON_TMP_PATH) File.open(CRON_TMP_PATH, "a") { |file| file.puts(CRON_LINE) } ret = system("crontab #{CRON_TMP_PATH}") raise "Failed to register flydata routine job to crontab." unless ret end def remove_cron_setting File.open(CRON_TMP_PATH, "w") { |dst| File.open(CRON_BACKUP_PATH, 'r') { |src| while l = src.gets dst.puts(l) unless l =~ /#{ROUTINE_COMMAND}/ end } } ret = system("crontab #{CRON_TMP_PATH}") raise "Failed to remove flydata routine job from crontab." unless ret end end end