Show More
Commit Description:
copy working trunk (r383, before major changes to combine judge and to support grader message queue) to trunk...
Commit Description:
copy working trunk (r383, before major changes to combine judge and to support grader message queue) to trunk
git-svn-id: http://theory.cpe.ku.ac.th/grader/web/trunk@396 6386c4cd-e34a-4fa8-8920-d93eb39b512e
References:
File last commit:
Show/Diff file:
Action:
judge/scripts/lib/configuration.rb
| 84 lines
| 2.4 KiB
| text/x-ruby
| RubyLexer
|
|
r176 | module Grader | ||
# This singleton class holds basic configurations for grader. When | ||||
# running in each mode, grader uses resources from different | ||||
# directories and outputs differently. Usually the attributes name | ||||
# are descriptive; below we explain more on each attributes. | ||||
class Configuration | ||||
# Rails' environment: "development", "production" | ||||
attr_accessor :rails_env | ||||
# Grader looks for problem [prob] in problem_dir/[prob], and store | ||||
# execution results for submission [x] of user [u] in directory | ||||
# user_result_dir/[u]/[x] | ||||
attr_accessor :problems_dir | ||||
attr_accessor :user_result_dir | ||||
# If report_grader=true, the grader would add a row in model | ||||
# GraderProcess. It would report itself with grader_hostname and | ||||
# process id. | ||||
attr_accessor :report_grader | ||||
attr_accessor :grader_hostname | ||||
# If talkative=true, grader would report status to console. If | ||||
# logging=true, grader would report status to a log file located | ||||
# in log_dir, in a file name mode.options.pid. TODO: defined | ||||
# log file naming. | ||||
attr_accessor :talkative | ||||
attr_accessor :logging | ||||
attr_accessor :log_dir | ||||
# These are directories related to the test interface. | ||||
attr_accessor :test_request_input_base_dir | ||||
attr_accessor :test_request_output_base_dir | ||||
attr_accessor :test_request_problem_templates_dir | ||||
# Comment received from the grading script will be filtered | ||||
# through Configuration#report_comment. How this method behave | ||||
# depends on this option; right now only two formats, :short and | ||||
# :long | ||||
attr_accessor :comment_report_style | ||||
def report_comment(comment) | ||||
case comment_report_style | ||||
when :short | ||||
if comment.chomp =~ /^[\[\]P]+$/ # all P's | ||||
'passed' | ||||
elsif comment.chomp =~ /[Cc]ompil.*[Ee]rror/ | ||||
'compilation error' | ||||
else | ||||
'failed' | ||||
end | ||||
when :full | ||||
comment.chomp | ||||
end | ||||
end | ||||
# Codes for singleton | ||||
private_class_method :new | ||||
@@instance = nil | ||||
def self.get_instance | ||||
if @@instance==nil | ||||
@@instance = new | ||||
end | ||||
@@instance | ||||
end | ||||
private | ||||
def initialize | ||||
@talkative = false | ||||
@log_file = nil | ||||
@report_grader = false | ||||
@grader_hostname = `hostname`.chomp | ||||
@rails_env = 'development' | ||||
@comment_report_style = :full | ||||
end | ||||
end | ||||
end | ||||