class JobChecker

Public Instance Methods

generate_new_job_script(log_dir, script_basename, script_content) click to toggle source
# File lib/job_checker.rb, line 34
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) click to toggle source
# File lib/job_checker.rb, line 51
def perform(job_id, script_basename, log_file, user, project_id, next_dataset_id=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)

    unless state == pre_state
      db0[job_id] = update_time_status(state, script_basename, user, project_id, next_dataset_id)
      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 =~ /---/
end
update_time_status(status, script_basename, user, project_number, next_dataset_id) click to toggle source
# File lib/job_checker.rb, line 43
def update_time_status(status, script_basename, user, project_number, next_dataset_id)
  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].join(',')
end