Show More
Commit Description:
add model solution
Commit Description:
add model solution
File last commit:
Show/Diff file:
Action:
app/models/grader_process.rb | 72 lines | 1.6 KiB | text/x-ruby | RubyLexer |
class GraderProcess < ActiveRecord::Base
def self.find_by_host_and_pid(host,pid)
return GraderProcess.where(host:host).where(pid: pid).first
end
def self.register(host,pid,mode)
grader = GraderProcess.find_by_host_and_pid(host,pid)
if grader
grader.mode = mode
grader.active = nil
grader.task_id = nil
grader.task_type = nil
grader.terminated = false
grader.save
else
grader = GraderProcess.create(:host => host,
:pid => pid,
:mode => mode,
:terminated => false)
end
grader
end
def self.find_running_graders
where(terminated: false)
end
def self.find_terminated_graders
where(terminated: true)
end
def self.find_stalled_process
where(terminated: false).where(active: true).where("updated_at < ?",Time.now.gmtime - GraderProcess.stalled_time)
end
def report_active(task=nil)
self.active = true
if task!=nil
self.task_id = task.id
self.task_type = task.class.to_s
else
self.task_id = nil
self.task_type = nil
end
self.save
end
def report_inactive(task=nil)
self.active = false
if task!=nil
self.task_id = task.id
self.task_type = task.class.to_s
else
self.task_id = nil
self.task_type = nil
end
self.save
end
def terminate
self.terminated = true
self.save
end
protected
def self.stalled_time()
return 1.minute
end
end