diff --git a/app/models/grader_process.rb b/app/models/grader_process.rb --- a/app/models/grader_process.rb +++ b/app/models/grader_process.rb @@ -1,5 +1,7 @@ class GraderProcess < ActiveRecord::Base + belongs_to :task + def self.find_by_ip_and_pid(ip,pid) return GraderProcess.find(:first, :conditions => { @@ -8,10 +10,43 @@ }) end - def self.report_active(ip,pid,mode) + def self.register(ip,pid,mode) + grader = GraderProcess.find_by_ip_and_pid(ip,pid) + if grader + grader.mode = mode + grader.active = nil + grader.task_id = nil + grader.save + else + grader = GraderProcess.create(:ip => ip, + :pid => pid, + :mode => mode) + end + grader + end + + def self.find_stalled_process() + GraderProcess.find(:all, + :conditions => ["active AND updated_at < ?", + Time.now.gmtime - GraderProcess.stalled_time]) + end + + def report_active(task=nil) + self.active = true + self.task = task + self.save end - def self.report_inactive(ip,pid,mode) + def report_inactive() + self.active = false + self.task = nil + self.save end + protected + + def self.stalled_time() + return 1.minute + end + end