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) ⇒ Object
- #update_time_status(status, script_basename, user, project_number, next_dataset_id) ⇒ Object
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 |