Class: JobChecker

Inherits:
Object
  • Object
show all
Includes:
Sidekiq::Worker
Defined in:
lib/job_checker.rb

Instance Method Summary collapse

Instance Method Details

#generate_new_job_script(log_dir, script_basename, script_content) ⇒ Object



34
35
36
37
38
39
40
41
42
# 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) ⇒ Object



51
52
53
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
# 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) ⇒ Object



43
44
45
46
47
48
49
# 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