Description:
fixed dry option bug in contest mode
Commit status:
[Not Reviewed]
References:
Comments:
0 Commit comments 0 Inline Comments
Unresolved TODOs:
There are no unresolved TODOs
Add another comment

r95:8569b91a13b7 - - 1 file changed: 1 inserted, 1 deleted

@@ -184,161 +184,161
184 config.grader_mode = grader_mode
184 config.grader_mode = grader_mode
185
185
186 # reading rails environment
186 # reading rails environment
187 log 'Reading rails environment'
187 log 'Reading rails environment'
188
188
189 RAILS_ENV = config.rails_env
189 RAILS_ENV = config.rails_env
190 require RAILS_ROOT + '/config/environment'
190 require RAILS_ROOT + '/config/environment'
191
191
192 # register grader process
192 # register grader process
193 if config.report_grader
193 if config.report_grader
194 grader_proc = GraderProcess.register(config.grader_hostname,
194 grader_proc = GraderProcess.register(config.grader_hostname,
195 Process.pid,
195 Process.pid,
196 grader_mode)
196 grader_mode)
197 else
197 else
198 grader_proc = nil
198 grader_proc = nil
199 end
199 end
200
200
201 #set loggin environment
201 #set loggin environment
202 ENV['GRADER_LOGGING'] = log_file_name
202 ENV['GRADER_LOGGING'] = log_file_name
203
203
204 # register exit handler to report inactive, and terminated
204 # register exit handler to report inactive, and terminated
205 at_exit do
205 at_exit do
206 if grader_proc!=nil
206 if grader_proc!=nil
207 grader_proc.report_inactive
207 grader_proc.report_inactive
208 grader_proc.terminate
208 grader_proc.terminate
209 end
209 end
210 end
210 end
211
211
212 #
212 #
213 # MAIN LOOP
213 # MAIN LOOP
214 #
214 #
215
215
216 case grader_mode
216 case grader_mode
217 when "queue", "test_request"
217 when "queue", "test_request"
218 log "Grader: #{grader_mode}"
218 log "Grader: #{grader_mode}"
219 if grader_mode=="queue"
219 if grader_mode=="queue"
220 engine = Grader::Engine.new
220 engine = Grader::Engine.new
221 else
221 else
222 engine = Grader::Engine.new(:room_maker => Grader::TestRequestRoomMaker.new,
222 engine = Grader::Engine.new(:room_maker => Grader::TestRequestRoomMaker.new,
223 :reporter => Grader::TestRequestReporter.new)
223 :reporter => Grader::TestRequestReporter.new)
224 end
224 end
225
225
226 runner = Grader::Runner.new(engine, grader_proc)
226 runner = Grader::Runner.new(engine, grader_proc)
227 while true
227 while true
228
228
229 if check_stopfile # created by calling grader stop
229 if check_stopfile # created by calling grader stop
230 clear_stopfile
230 clear_stopfile
231 log "stopped (with stop file)"
231 log "stopped (with stop file)"
232 break
232 break
233 end
233 end
234
234
235 if grader_mode=="queue"
235 if grader_mode=="queue"
236 task = runner.grade_oldest_task
236 task = runner.grade_oldest_task
237 else
237 else
238 task = runner.grade_oldest_test_request
238 task = runner.grade_oldest_test_request
239 end
239 end
240 if task==nil
240 if task==nil
241 sleep(1)
241 sleep(1)
242 end
242 end
243 end
243 end
244
244
245 when "prob"
245 when "prob"
246 if options[:report]
246 if options[:report]
247 result_collector = ResultCollector.new
247 result_collector = ResultCollector.new
248 else
248 else
249 result_collector = nil
249 result_collector = nil
250 end
250 end
251
251
252 if options[:dry_run]
252 if options[:dry_run]
253 puts "Running in dry mode"
253 puts "Running in dry mode"
254 end
254 end
255
255
256 prob_reporter = Grader::SubmissionReporter.new(:dry_run => dry_run,
256 prob_reporter = Grader::SubmissionReporter.new(:dry_run => dry_run,
257 :result_collector => result_collector)
257 :result_collector => result_collector)
258 engine = Grader::Engine.new(:reporter => prob_reporter)
258 engine = Grader::Engine.new(:reporter => prob_reporter)
259 runner = Grader::Runner.new(engine, grader_proc)
259 runner = Grader::Runner.new(engine, grader_proc)
260
260
261 grader_proc.report_active if grader_proc!=nil
261 grader_proc.report_active if grader_proc!=nil
262
262
263 ARGV.each do |prob_name|
263 ARGV.each do |prob_name|
264 prob = Problem.find_by_name(prob_name)
264 prob = Problem.find_by_name(prob_name)
265 if prob==nil
265 if prob==nil
266 puts "cannot find problem: #{prob_name}"
266 puts "cannot find problem: #{prob_name}"
267 else
267 else
268 runner.grade_problem(prob)
268 runner.grade_problem(prob)
269 end
269 end
270 end
270 end
271
271
272 if options[:report]
272 if options[:report]
273 result_collector.print_report_by_user
273 result_collector.print_report_by_user
274 end
274 end
275
275
276 when "contest"
276 when "contest"
277 # always use dry run when grading during contest
277 # always use dry run when grading during contest
278 contest_name = ARGV.shift
278 contest_name = ARGV.shift
279
279
280 - options[:dry_run] = true
280 + dry_run = options[:dry_run] = true
281
281
282 contest = Contest.find_by_name(contest_name)
282 contest = Contest.find_by_name(contest_name)
283 if contest==nil
283 if contest==nil
284 puts "cannot find contest: #{contest_name}"
284 puts "cannot find contest: #{contest_name}"
285 exit(0)
285 exit(0)
286 end
286 end
287
287
288 if options[:report]
288 if options[:report]
289 result_collector = ResultCollector.new
289 result_collector = ResultCollector.new
290 else
290 else
291 result_collector = nil
291 result_collector = nil
292 end
292 end
293
293
294 if options[:dry_run]
294 if options[:dry_run]
295 puts "Running in dry mode"
295 puts "Running in dry mode"
296 end
296 end
297
297
298 prob_reporter = Grader::SubmissionReporter.new(:dry_run => dry_run,
298 prob_reporter = Grader::SubmissionReporter.new(:dry_run => dry_run,
299 :result_collector => result_collector)
299 :result_collector => result_collector)
300 engine = Grader::Engine.new(:reporter => prob_reporter)
300 engine = Grader::Engine.new(:reporter => prob_reporter)
301 runner = Grader::Runner.new(engine, grader_proc)
301 runner = Grader::Runner.new(engine, grader_proc)
302
302
303 grader_proc.report_active if grader_proc!=nil
303 grader_proc.report_active if grader_proc!=nil
304
304
305 contest.problems.each do |problem|
305 contest.problems.each do |problem|
306 puts "Grading: #{problem.name}"
306 puts "Grading: #{problem.name}"
307 runner.grade_problem(problem,
307 runner.grade_problem(problem,
308 :user_conditions => lambda do |u|
308 :user_conditions => lambda do |u|
309 u.contest_finished? and
309 u.contest_finished? and
310 u.contest_ids.include?(contest.id)
310 u.contest_ids.include?(contest.id)
311 end)
311 end)
312 end
312 end
313
313
314 if options[:report]
314 if options[:report]
315 result_collector.print_report_by_user
315 result_collector.print_report_by_user
316 end
316 end
317
317
318 when "sub"
318 when "sub"
319 engine = Grader::Engine.new
319 engine = Grader::Engine.new
320 runner = Grader::Runner.new(engine, grader_proc)
320 runner = Grader::Runner.new(engine, grader_proc)
321
321
322 grader_proc.report_active if grader_proc!=nil
322 grader_proc.report_active if grader_proc!=nil
323
323
324 ARGV.each do |sub_id|
324 ARGV.each do |sub_id|
325 puts "Grading #{sub_id}"
325 puts "Grading #{sub_id}"
326 begin
326 begin
327 submission = Submission.find(sub_id.to_i)
327 submission = Submission.find(sub_id.to_i)
328 rescue ActiveRecord::RecordNotFound
328 rescue ActiveRecord::RecordNotFound
329 puts "Record not found"
329 puts "Record not found"
330 submission = nil
330 submission = nil
331 end
331 end
332
332
333 if submission!=nil
333 if submission!=nil
334 runner.grade_submission(submission)
334 runner.grade_submission(submission)
335 end
335 end
336 end
336 end
337
337
338
338
339
339
340 else
340 else
341 display_manual
341 display_manual
342 exit(0)
342 exit(0)
343 end
343 end
344
344
You need to be logged in to leave comments. Login now