Class: JobChecker
- Inherits:
-
Object
- Object
- JobChecker
- Includes:
- Sidekiq::Worker
- Defined in:
- lib/job_checker.rb
Instance Method Summary collapse
- #generate_new_job_script(log_dir, script_basename, script_content) ⇒ Object
- #perform(job_id, script_basename, log_file, user, project_id, next_dataset_id = nil, rails_host = nil, log_dir = nil, copy_command_template = nil) ⇒ Object
- #update_time_status(status, script_basename, user, project_number, next_dataset_id, rails_host, log_dir) ⇒ Object
Instance Method Details
#generate_new_job_script(log_dir, script_basename, script_content) ⇒ Object
37 38 39 40 41 42 43 44 45 |
# File 'lib/job_checker.rb', line 37 def generate_new_job_script(log_dir, script_basename, script_content) new_job_script = File.basename(script_basename) + "_" + Time.now.strftime("%Y%m%d%H%M%S%L") new_job_script = File.join(log_dir, new_job_script) open(new_job_script, 'w') do |out| out.print script_content out.print "\necho __SCRIPT END__\n" end new_job_script end |
#perform(job_id, script_basename, log_file, user, project_id, next_dataset_id = nil, rails_host = nil, log_dir = nil, copy_command_template = nil) ⇒ Object
54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 |
# File 'lib/job_checker.rb', line 54 def perform(job_id, script_basename, log_file, user, project_id, next_dataset_id=nil, rails_host=nil, log_dir=nil, copy_command_template=nil) puts "JobID (in JobChecker): #{job_id}" db0 = Redis.new(port: PORT, db: 0) # state + alpha DB db1 = Redis.new(port: PORT, db: 1) # log DB db2 = Redis.new(port: PORT, db: 2) # project jobs DB db1[job_id] = log_file pre_state = nil @start_time = nil begin command = "sacct --jobs=#{job_id} --format=state" #puts command ret = `#{command}` #print ret state = ret.split(/\n/).last.strip #puts "state: #{state}" db0[job_id] = update_time_status(state, script_basename, user, project_id, next_dataset_id, rails_host, log_dir) unless state == pre_state db0[job_id] = update_time_status(state, script_basename, user, project_id, next_dataset_id, rails_host, log_dir) project_jobs = eval((db2[project_id]||[]).to_s) project_jobs = Hash[*project_jobs] project_jobs[job_id] = state #p project_jobs db2[project_id] = project_jobs.to_a.flatten.last(200).to_s end pre_state = state sleep WORKER_INTERVAL end while state =~ /RUNNING/ or state =~ /PENDING/ or state =~ /---/ # post process if next_dataset_id and rails_host uri = URI("#{rails_host}/data_set/#{next_dataset_id}/update_completed_samples") #p uri res = Net::HTTP.get_response(uri) if log_dir and !log_dir.empty? copy_command = copy_command_template.gsub("org_file", log_file) #puts "copy_command=#{copy_command}" system copy_command err_file = log_file.gsub('_o.log','_e.log') copy_command = copy_command_template.gsub("org_file", err_file) #puts "copy_command=#{copy_command}" system copy_command end end end |
#update_time_status(status, script_basename, user, project_number, next_dataset_id, rails_host, log_dir) ⇒ Object
46 47 48 49 50 51 52 |
# File 'lib/job_checker.rb', line 46 def update_time_status(status, script_basename, user, project_number, next_dataset_id, rails_host, log_dir) unless @start_time @start_time = Time.now.strftime("%Y-%m-%d %H:%M:%S") end time = Time.now.strftime("%Y-%m-%d %H:%M:%S") [status, script_basename, [@start_time, time].join("/"), user, project_number, next_dataset_id, rails_host, log_dir].join(',') end |