Store parsed linter messages
This commit is contained in:
@ -12,14 +12,14 @@ module SubmissionScoring
|
|||||||
output = execute_test_file(file, submission)
|
output = execute_test_file(file, submission)
|
||||||
assessment = assessor.assess(output)
|
assessment = assessor.assess(output)
|
||||||
passed = ((assessment[:passed] == assessment[:count]) and (assessment[:score]).positive?)
|
passed = ((assessment[:passed] == assessment[:count]) and (assessment[:score]).positive?)
|
||||||
testrun_output = passed ? nil : 'message: ' + output[:message].to_s + "\n stdout: " + output[:stdout].to_s + "\n stderr: " + output[:stderr].to_s
|
testrun_output = passed ? nil : 'status: ' + output[:status].to_s + "\n stdout: " + output[:stdout].to_s + "\n stderr: " + output[:stderr].to_s
|
||||||
unless testrun_output.blank?
|
unless testrun_output.blank?
|
||||||
submission.exercise.execution_environment.error_templates.each do |template|
|
submission.exercise.execution_environment.error_templates.each do |template|
|
||||||
pattern = Regexp.new(template.signature).freeze
|
pattern = Regexp.new(template.signature).freeze
|
||||||
StructuredError.create_from_template(template, testrun_output, submission) if pattern.match(testrun_output)
|
StructuredError.create_from_template(template, testrun_output, submission) if pattern.match(testrun_output)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
Testrun.new(
|
testrun = Testrun.create(
|
||||||
submission: submission,
|
submission: submission,
|
||||||
cause: 'assess', # Required to differ run and assess for RfC show
|
cause: 'assess', # Required to differ run and assess for RfC show
|
||||||
file: file, # Test file that was executed
|
file: file, # Test file that was executed
|
||||||
@ -27,7 +27,10 @@ module SubmissionScoring
|
|||||||
output: testrun_output,
|
output: testrun_output,
|
||||||
container_execution_time: output[:container_execution_time],
|
container_execution_time: output[:container_execution_time],
|
||||||
waiting_for_container_time: output[:waiting_for_container_time]
|
waiting_for_container_time: output[:waiting_for_container_time]
|
||||||
).save
|
)
|
||||||
|
|
||||||
|
LinterCheckRun.create_from(testrun, assessment) if file.teacher_defined_linter?
|
||||||
|
|
||||||
output.merge!(assessment)
|
output.merge!(assessment)
|
||||||
output.merge!(filename: file.name_with_extension, message: feedback_message(file, output), weight: file.weight)
|
output.merge!(filename: file.name_with_extension, message: feedback_message(file, output), weight: file.weight)
|
||||||
# end
|
# end
|
||||||
|
@ -53,6 +53,11 @@ class Submission < ApplicationRecord
|
|||||||
collect_files.detect(&:main_file?)
|
collect_files.detect(&:main_file?)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def file_by_name(file_path)
|
||||||
|
# expects the full file path incl. file extension
|
||||||
|
collect_files.detect { |file| file.filepath == file_path }
|
||||||
|
end
|
||||||
|
|
||||||
def normalized_score
|
def normalized_score
|
||||||
::NewRelic::Agent.add_custom_attributes({unnormalized_score: score})
|
::NewRelic::Agent.add_custom_attributes({unnormalized_score: score})
|
||||||
if !score.nil? && !exercise.maximum_score.nil? && (exercise.maximum_score > 0)
|
if !score.nil? && !exercise.maximum_score.nil? && (exercise.maximum_score > 0)
|
||||||
|
Reference in New Issue
Block a user