|
|
#
|
|
|
# A runner drives the engine into various tasks.
|
|
|
#
|
|
|
|
|
|
module Grader
|
|
|
|
|
|
class Runner
|
|
|
|
|
|
def initialize(engine, grader_process=nil)
|
|
|
@engine = engine
|
|
|
@grader_process = grader_process
|
|
|
end
|
|
|
|
|
|
def grade_oldest_task
|
|
|
task = Task.get_inqueue_and_change_status(Task::STATUS_GRADING)
|
|
|
if task!=nil
|
|
|
@grader_process.report_active(task) if @grader_process!=nil
|
|
|
|
|
|
submission = Submission.find(task.submission_id)
|
|
|
@engine.grade(submission)
|
|
|
task.status_complete!
|
|
|
@grader_process.report_inactive(task) if @grader_process!=nil
|
|
|
end
|
|
|
return task
|
|
|
end
|
|
|
|
|
|
def grade_problem(problem)
|
|
|
users = User.find(:all)
|
|
|
users.each do |u|
|
|
|
puts "user: #{u.login}"
|
|
|
last_sub = Submission.find(:first,
|
|
|
:conditions => "user_id = #{u.id} and " +
|
|
|
"problem_id = #{problem.id}",
|
|
|
:order => 'submitted_at DESC')
|
|
|
if last_sub!=nil
|
|
|
@engine.grade(last_sub)
|
|
|
end
|
|
|
end
|
|
|
end
|
|
|
|
|
|
def grade_submission(submission)
|
|
|
puts "Submission: #{submission.id} by #{submission.user.full_name}"
|
|
|
@engine.grade(submission)
|
|
|
end
|
|
|
|
|
|
def grade_oldest_test_request
|
|
|
test_request = TestRequest.get_inqueue_and_change_status(Task::STATUS_GRADING)
|
|
|
if test_request!=nil
|
|
|
@grader_process.report_active(test_request) if @grader_process!=nil
|
|
|
|
|
|
@engine.grade(test_request)
|
|
|
test_request.status_complete!
|
|
|
@grader_process.report_inactive(test_request) if @grader_process!=nil
|
|
|
end
|
|
|
return test_request
|
|
|
end
|
|
|
|
|
|
end
|
|
|
|
|
|
end
|
|
|
|
|
|
|