Show More
Commit Description:
added default grading mode, changed log message in grader...
Commit Description:
added default grading mode, changed log message in grader
git-svn-id: http://theory.cpe.ku.ac.th/grader/web/trunk@393 6386c4cd-e34a-4fa8-8920-d93eb39b512e
References:
File last commit:
Show/Diff file:
Action:
judge/scripts/grader-batch
| 135 lines
| 2.9 KiB
| text/plain
| TextLexer
|
|
r185 | #!/usr/bin/ruby | ||
|
r186 | require 'optparse' | ||
|
r185 | |||
def config | ||||
Grader::Configuration.get_instance | ||||
end | ||||
def log_file_name | ||||
if !File.exists?(config.log_dir) | ||||
raise "Log directory does not exist: #{config.log_dir}" | ||||
end | ||||
config.log_dir + | ||||
|
r186 | "/#{GRADER_ENV}.#{Process.pid}" | ||
|
r185 | end | ||
def log(str) | ||||
if config.talkative | ||||
puts str | ||||
end | ||||
if config.logging | ||||
fp = File.open(log_file_name,"a") | ||||
fp.puts("GRADER: #{Time.new.strftime("%H:%M")} #{str}") | ||||
fp.close | ||||
end | ||||
end | ||||
|
r186 | def parse_arguments(args) | ||
options = { | ||||
:environment => 'grading', | ||||
:problems => [], | ||||
:submissions => [] | ||||
} | ||||
opts = OptionParser.new do |opts| | ||||
opts.banner = <<BANNER | ||||
grader-batch - the grader for batch grading.. | ||||
Usage: grader-batch [options] | ||||
BANNER | ||||
opts.on("-e", "--env", "Set environment: grading (*), exam, etc.") do |env| | ||||
options[:environment] = env | ||||
end | ||||
opts.on("--prob p1,p2,p3", Array, "Grade problems p1, p2, and p3.") do |prob_list| | ||||
options[:problems] += prob_list | ||||
end | ||||
opts.on("--sub s1,s2,s3", Array, "Grade submissions specified by ids") do |submission_list| | ||||
options[:submissions] += submission_list | ||||
end | ||||
# help | ||||
opts.on_tail("-h", "--help", "Show this message") do | ||||
puts opts | ||||
exit | ||||
end | ||||
end | ||||
opts.parse! | ||||
return options | ||||
|
r185 | end | ||
|
r186 | |||
|
r185 | ######################################### | ||
# main program | ||||
######################################### | ||||
|
r186 | options = parse_arguments(ARGV) | ||
|
r185 | |||
# reading environment and options | ||||
|
r186 | GRADER_ENV = options[:environment] | ||
|
r185 | puts "environment: #{GRADER_ENV}" | ||
require File.join(File.dirname(__FILE__),'config/environment') | ||||
# reading rails environment | ||||
log 'Reading rails environment' | ||||
RAILS_ENV = config.rails_env | ||||
require RAILS_ROOT + '/config/environment' | ||||
# register grader process | ||||
if config.report_grader | ||||
grader_proc = GraderProcess.register(config.grader_hostname, | ||||
Process.pid, | ||||
|
r186 | GRADER_ENV) | ||
|
r185 | else | ||
grader_proc = nil | ||||
end | ||||
#set loggin environment | ||||
ENV['GRADER_LOGGING'] = log_file_name | ||||
# register exit handler to report inactive, and terminated | ||||
at_exit do | ||||
if grader_proc!=nil | ||||
grader_proc.report_inactive | ||||
grader_proc.terminate | ||||
end | ||||
end | ||||
|
r186 | # grading | ||
engine = Grader::Engine.new | ||||
runner = Grader::Runner.new(engine, grader_proc) | ||||
|
r185 | |||
|
r186 | # grade problems | ||
options[:problems].each do |prob_name| | ||||
grader_proc.report_active if grader_proc!=nil | ||||
prob = Problem.find_by_name(prob_name) | ||||
if prob==nil | ||||
puts "cannot find problem: #{prob_name}" | ||||
|
r185 | else | ||
|
r186 | runner.grade_problem(prob) | ||
end | ||||
grader_proc.report_inactive if grader_proc!=nil | ||||
end | ||||
# grade submissions | ||||
options[:submissions].each do |sub_id| | ||||
grader_proc.report_active if grader_proc!=nil | ||||
puts "Grading #{sub_id}" | ||||
begin | ||||
submission = Submission.find(sub_id.to_i) | ||||
rescue ActiveRecord::RecordNotFound | ||||
puts "Record not found" | ||||
submission = nil | ||||
|
r185 | end | ||
|
r186 | if submission!=nil | ||
runner.grade_submission(submission) | ||||
|
r185 | end | ||
|
r186 | grader_proc.report_inactive if grader_proc!=nil | ||
|
r185 | end | ||
|
r186 | puts "Done." | ||