Description:
added after_save_hook to ResultCollector
Commit status:
[Not Reviewed]
References:
Comments:
0 Commit comments 0 Inline Comments
Unresolved TODOs:
There are no unresolved TODOs
Add another comment

r122:ed471e6e96ca - - 1 file changed: 15 inserted, 2 deleted

@@ -93,71 +93,76
93 end
93 end
94
94
95 #default options
95 #default options
96 options = {
96 options = {
97 :mode => 'queue',
97 :mode => 'queue',
98 :environment => 'exam',
98 :environment => 'exam',
99 :dry_run => false,
99 :dry_run => false,
100 }
100 }
101
101
102 # Process mode and environment option
102 # Process mode and environment option
103 if ARGV.length >= 1
103 if ARGV.length >= 1
104 options[:environment] = ARGV.shift
104 options[:environment] = ARGV.shift
105 if ARGV.length >=1
105 if ARGV.length >=1
106 options[:mode] = ARGV.shift
106 options[:mode] = ARGV.shift
107 end
107 end
108 end
108 end
109
109
110 options[:dry_run] = (ARGV.delete('--dry') != nil)
110 options[:dry_run] = (ARGV.delete('--dry') != nil)
111 if options[:dry_run] and (not ['prob','contest','autonew'].include? options[:mode])
111 if options[:dry_run] and (not ['prob','contest','autonew'].include? options[:mode])
112 puts "Dry run currently works only for 'prob' or 'contest' modes."
112 puts "Dry run currently works only for 'prob' or 'contest' modes."
113 exit(0)
113 exit(0)
114 end
114 end
115
115
116 options[:report] = (ARGV.delete('--report') != nil)
116 options[:report] = (ARGV.delete('--report') != nil)
117 - if options[:report] and (not ['prob','contest'].include? options[:mode])
117 + if options[:report] and (not ['prob','contest','autonew'].include? options[:mode])
118 puts "Report currently works only for 'prob' or 'contest' modes."
118 puts "Report currently works only for 'prob' or 'contest' modes."
119 exit(0)
119 exit(0)
120 end
120 end
121
121
122 return options
122 return options
123 end
123 end
124
124
125 class ResultCollector
125 class ResultCollector
126 def initialize
126 def initialize
127 @results = {}
127 @results = {}
128 @problems = {}
128 @problems = {}
129 @users = {}
129 @users = {}
130 end
130 end
131
131
132 + def after_save_hook(user, problem, grading_result)
133 + end
134 +
132 def save(user, problem, grading_result)
135 def save(user, problem, grading_result)
133 if not @problems.has_key? problem.id
136 if not @problems.has_key? problem.id
134 @problems[problem.id] = problem
137 @problems[problem.id] = problem
135 end
138 end
136 if not @users.has_key? user.id
139 if not @users.has_key? user.id
137 @users[user.id] = user
140 @users[user.id] = user
138 end
141 end
139 @results[[user.id, problem.id]] = grading_result
142 @results[[user.id, problem.id]] = grading_result
143 +
144 + after_save_hook(user, problem, grading_result)
140 end
145 end
141
146
142 def print_report_by_user
147 def print_report_by_user
143 puts "---------------------"
148 puts "---------------------"
144 puts " REPORT"
149 puts " REPORT"
145 puts "---------------------"
150 puts "---------------------"
146
151
147 print "login,email"
152 print "login,email"
148 @problems.each_value do |problem|
153 @problems.each_value do |problem|
149 print ",#{problem.name}"
154 print ",#{problem.name}"
150 end
155 end
151 print "\n"
156 print "\n"
152
157
153 @users.each_value do |user|
158 @users.each_value do |user|
154 print "#{user.login},#{user.email}"
159 print "#{user.login},#{user.email}"
155 @problems.each_value do |problem|
160 @problems.each_value do |problem|
156 if @results.has_key? [user.id, problem.id]
161 if @results.has_key? [user.id, problem.id]
157 print ",#{@results[[user.id,problem.id]][:points]}"
162 print ",#{@results[[user.id,problem.id]][:points]}"
158 else
163 else
159 print ","
164 print ","
160 end
165 end
161 end
166 end
162 print "\n"
167 print "\n"
163 end
168 end
@@ -181,53 +186,61
181 end
186 end
182 end
187 end
183 end
188 end
184
189
185 def grader_queue_loop(grader_proc, options)
190 def grader_queue_loop(grader_proc, options)
186 log "Grader: queue"
191 log "Grader: queue"
187 engine = Grader::Engine.new
192 engine = Grader::Engine.new
188 grader_general_loop(engine, grader_proc, options) do |runner|
193 grader_general_loop(engine, grader_proc, options) do |runner|
189 runner.grade_oldest_task
194 runner.grade_oldest_task
190 end
195 end
191 end
196 end
192
197
193 def grader_test_request_loop(grader_proc, options)
198 def grader_test_request_loop(grader_proc, options)
194 log "Grader: test_request"
199 log "Grader: test_request"
195 engine = Grader::Engine.new(:room_maker => Grader::TestRequestRoomMaker.new,
200 engine = Grader::Engine.new(:room_maker => Grader::TestRequestRoomMaker.new,
196 :reporter => Grader::TestRequestReporter.new)
201 :reporter => Grader::TestRequestReporter.new)
197 grader_general_loop(engine, grader_proc, options) do |runner|
202 grader_general_loop(engine, grader_proc, options) do |runner|
198 runner.grade_oldest_test_request
203 runner.grade_oldest_test_request
199 end
204 end
200 end
205 end
201
206
202 def grader_autonew_loop(grader_proc, options)
207 def grader_autonew_loop(grader_proc, options)
203 log "Grader: autonew"
208 log "Grader: autonew"
204
209
210 + if options[:report]
211 + result_collector = ResultCollector.new
212 + else
213 + result_collector = nil
214 + end
215 +
205 if options[:dry_run]
216 if options[:dry_run]
206 puts "Running in dry mode"
217 puts "Running in dry mode"
207 end
218 end
208
219
209 - prob_reporter = Grader::SubmissionReporter.new(:dry_run => options[:dry_run])
220 + prob_reporter = Grader::SubmissionReporter.new(:dry_run => options[:dry_run],
221 + :result_collector => result_collector)
222 +
210 engine = Grader::Engine.new(:reporter => prob_reporter)
223 engine = Grader::Engine.new(:reporter => prob_reporter)
211 runner = Grader::Runner.new(engine, grader_proc)
224 runner = Grader::Runner.new(engine, grader_proc)
212
225
213 grader_proc.report_active if grader_proc!=nil
226 grader_proc.report_active if grader_proc!=nil
214
227
215 latest_submitted_at = nil
228 latest_submitted_at = nil
216 graded_submission_ids = {}
229 graded_submission_ids = {}
217
230
218 while true
231 while true
219
232
220 if check_stopfile # created by calling grader stop
233 if check_stopfile # created by calling grader stop
221 clear_stopfile
234 clear_stopfile
222 log "stopped (with stop file)"
235 log "stopped (with stop file)"
223 break
236 break
224 end
237 end
225
238
226 if latest_submitted_at==nil
239 if latest_submitted_at==nil
227 submissions = Submission.all
240 submissions = Submission.all
228 else
241 else
229 submissions = Submission.all(:conditions => ["submitted_at >= :latest",
242 submissions = Submission.all(:conditions => ["submitted_at >= :latest",
230 {:latest => latest_submitted_at}])
243 {:latest => latest_submitted_at}])
231 end
244 end
232
245
233 graded_any = false
246 graded_any = false
You need to be logged in to leave comments. Login now