|
|
module GraderScript
|
|
|
|
|
|
def self.grader_control_enabled?
|
|
|
if defined? GRADER_ROOT_DIR
|
|
|
GRADER_ROOT_DIR != ''
|
|
|
else
|
|
|
false
|
|
|
end
|
|
|
end
|
|
|
|
|
|
def self.raw_dir
|
|
|
File.join GRADER_ROOT_DIR, "raw"
|
|
|
end
|
|
|
|
|
|
def self.call_grader(params)
|
|
|
if GraderScript.grader_control_enabled?
|
|
|
cmd = File.join(GRADER_ROOT_DIR, "scripts/grader") + " " + params
|
|
|
system(cmd)
|
|
|
end
|
|
|
end
|
|
|
|
|
|
def self.stop_grader(pid)
|
|
|
GraderScript.call_grader "stop #{pid}"
|
|
|
end
|
|
|
|
|
|
def self.stop_graders(pids)
|
|
|
pid_str = (pids.map { |process| process.pid.to_s }).join ' '
|
|
|
GraderScript.call_grader "stop #{pid_str}"
|
|
|
end
|
|
|
|
|
|
def self.start_grader(env)
|
|
|
GraderScript.call_grader "#{env} queue --err-log &"
|
|
|
GraderScript.call_grader "#{env} test_request -err-log &"
|
|
|
end
|
|
|
|
|
|
def self.call_import_problem(problem_name,
|
|
|
problem_dir,
|
|
|
time_limit=1,
|
|
|
memory_limit=32,
|
|
|
checker_name='text')
|
|
|
if GraderScript.grader_control_enabled?
|
|
|
cur_dir = `pwd`.chomp
|
|
|
Dir.chdir(GRADER_ROOT_DIR)
|
|
|
|
|
|
script_name = File.join(GRADER_ROOT_DIR, "scripts/import_problem")
|
|
|
cmd = "#{script_name} #{problem_name} #{problem_dir} #{checker_name}" +
|
|
|
" -t #{time_limit} -m #{memory_limit}"
|
|
|
|
|
|
output = `#{cmd}`
|
|
|
|
|
|
Dir.chdir(cur_dir)
|
|
|
|
|
|
return "import CMD: #{cmd}\n" + output
|
|
|
end
|
|
|
return ''
|
|
|
end
|
|
|
|
|
|
def self.call_import_testcase(problem_name)
|
|
|
if GraderScript.grader_control_enabled?
|
|
|
cur_dir = `pwd`.chomp
|
|
|
Dir.chdir(GRADER_ROOT_DIR)
|
|
|
|
|
|
script_name = File.join(GRADER_ROOT_DIR, "scripts/load_testcase")
|
|
|
cmd = "#{script_name} #{problem_name}"
|
|
|
|
|
|
output = `#{cmd}`
|
|
|
|
|
|
Dir.chdir(cur_dir)
|
|
|
return "Testcase import result:\n" + output
|
|
|
end
|
|
|
end
|
|
|
|
|
|
end
|
|
|
|