Add exit_code and status to Testruns, create model for TestrunMessages
* This is the first step to migrate the `output` column from Testruns to a dedicated table TestrunMessages
This commit is contained in:
@ -116,7 +116,7 @@ class Runner < ApplicationRecord
|
||||
output.merge!(status: :failed, container_execution_time: e.execution_duration)
|
||||
rescue Runner::Error => e
|
||||
Rails.logger.debug { "Running command `#{command}` failed: #{e.message}" }
|
||||
output.merge!(status: :failed, container_execution_time: e.execution_duration)
|
||||
output.merge!(status: :container_depleted, container_execution_time: e.execution_duration)
|
||||
ensure
|
||||
# We forward the exception if requested
|
||||
raise e if raise_exception && defined?(e) && e.present?
|
||||
|
@ -252,7 +252,9 @@ class Submission < ApplicationRecord
|
||||
cause: 'assess', # Required to differ run and assess for RfC show
|
||||
file: file, # Test file that was executed
|
||||
passed: passed,
|
||||
output: testrun_output,
|
||||
exit_code: output[:exit_code],
|
||||
status: output[:status],
|
||||
output: testrun_output.presence,
|
||||
container_execution_time: output[:container_execution_time],
|
||||
waiting_for_container_time: output[:waiting_for_container_time]
|
||||
)
|
||||
|
@ -4,4 +4,16 @@ class Testrun < ApplicationRecord
|
||||
belongs_to :file, class_name: 'CodeOcean::File', optional: true
|
||||
belongs_to :submission
|
||||
belongs_to :testrun_execution_environment, optional: true, dependent: :destroy
|
||||
has_many :testrun_messages, dependent: :destroy
|
||||
|
||||
enum status: {
|
||||
ok: 0,
|
||||
failed: 1,
|
||||
container_depleted: 2,
|
||||
timeout: 3,
|
||||
out_of_memory: 4,
|
||||
}, _default: :ok, _prefix: true
|
||||
|
||||
validates :exit_code, numericality: {only_integer: true, min: 0, max: 255}, allow_nil: true
|
||||
validates :status, presence: true
|
||||
end
|
||||
|
40
app/models/testrun_message.rb
Normal file
40
app/models/testrun_message.rb
Normal file
@ -0,0 +1,40 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
class TestrunMessage < ApplicationRecord
|
||||
belongs_to :testrun
|
||||
|
||||
enum cmd: {
|
||||
input: 0,
|
||||
write: 1,
|
||||
clear: 2,
|
||||
turtle: 3,
|
||||
turtlebatch: 4,
|
||||
render: 5,
|
||||
exit: 6,
|
||||
timeout: 7,
|
||||
out_of_memory: 8,
|
||||
status: 9,
|
||||
hint: 10,
|
||||
client_kill: 11,
|
||||
exception: 12,
|
||||
result: 13,
|
||||
}, _default: :write, _prefix: true
|
||||
|
||||
enum stream: {
|
||||
stdin: 0,
|
||||
stdout: 1,
|
||||
stderr: 2,
|
||||
}, _prefix: true
|
||||
|
||||
validates :cmd, presence: true
|
||||
validates :timestamp, presence: true
|
||||
|
||||
validate :either_data_or_log
|
||||
|
||||
def either_data_or_log
|
||||
if [data, log].count(&:present?) > 1
|
||||
errors.add(log, "can't be present if data is also present")
|
||||
end
|
||||
end
|
||||
private :either_data_or_log
|
||||
end
|
Reference in New Issue
Block a user