private RemoteSubmissionResult ExecuteSubmissionRemotely(
            IOjsSubmission submission,
            object submissionRequestBody)
        {
            RemoteSubmissionResult result;

            try
            {
                result = this.http.PostJson <object, RemoteSubmissionResult>(this.endpoint, submissionRequestBody);
            }
            catch (Exception ex)
            {
                submission.ProcessingComment = $"Exception in getting remote submission result: {ex.Message}";

                throw new Exception($"Exception in {nameof(this.ExecuteSubmissionRemotely)}", ex);
            }

            if (result.Exception == null)
            {
                return(result);
            }

            submission.ProcessingComment = $"Exception in executing the submission: {result.Exception.Message}";

            throw new Exception(result.Exception.Message);
        }
Example #2
0
        // Overload accepting IOjsSubmission and doing cast, because upon getting the submission,
        // TInput is not known and no specific type could be given to the generic ProcessSubmission<>
        private void ProcessSubmission(IOjsSubmission submission)
        {
            try
            {
                switch (submission.ExecutionType)
                {
                case ExecutionType.TestsExecution:
                    var testsSubmission = (OjsSubmission <TestsInputModel>)submission;
                    this.ProcessSubmission <TestsInputModel, TestResult>(testsSubmission);
                    break;

                case ExecutionType.SimpleExecution:
                    var simpleSubmission = (OjsSubmission <string>)submission;
                    this.ProcessSubmission <string, OutputResult>(simpleSubmission);
                    break;

                default:
                    throw new ArgumentOutOfRangeException(
                              nameof(submission.ExecutionType),
                              "Invalid execution type!");
                }
            }
            catch (Exception ex)
            {
                this.logger.Error(
                    "{SubmissionProcessor}: The method {Method} has thrown an exception on submission {Submission}!",
                    this.Name,
                    nameof(this.ProcessSubmission),
                    ex);

                this.submissionProcessingStrategy.OnError(submission);
            }
        }
Example #3
0
        private void BeforeExecute(IOjsSubmission submission)
        {
            try
            {
                this.submissionProcessingStrategy.BeforeExecute();
            }
            catch (Exception ex)
            {
                submission.ProcessingComment = $"Exception before executing the submission: {ex.Message}";

                throw new Exception($"Exception in {nameof(this.submissionProcessingStrategy.BeforeExecute)}", ex);
            }
        }
Example #4
0
        private void ProcessExecutionResult <TOutput>(IExecutionResult <TOutput> executionResult, IOjsSubmission submission)
            where TOutput : ISingleCodeRunResult, new()
        {
            try
            {
                this.submissionProcessingStrategy.ProcessExecutionResult(executionResult);
            }
            catch (Exception ex)
            {
                submission.ProcessingComment = $"Exception in processing execution result: {ex.Message}";

                throw new Exception($"Exception in {nameof(this.ProcessExecutionResult)}", ex);
            }
        }
 private bool IsEnabledStrategy(IOjsSubmission submission)
 => this.EnabledExecutionStrategyTypes.Count == 0 ||
 this.EnabledExecutionStrategyTypes.Contains(submission.ExecutionStrategyType);
 private bool IsDisabledStrategy(IOjsSubmission submission)
 => this.DisabledExecutionStrategyTypes.Count > 0 &&
 this.DisabledExecutionStrategyTypes.Contains(submission.ExecutionStrategyType);
 protected virtual bool CanProcessSubmissionInternal(IOjsSubmission submission, ISubmissionWorker submissionWorker)
 => true;
 public bool CanProcessSubmission(IOjsSubmission submission, ISubmissionWorker submissionWorker)
 => submission != null &&
 !this.IsDisabledStrategy(submission) &&
 this.IsEnabledStrategy(submission) &&
 this.CanProcessSubmissionInternal(submission, submissionWorker);
 public abstract void OnError(IOjsSubmission submission);
        public override void OnError(IOjsSubmission submissionModel)
        {
            this.submission.ProcessingComment = submissionModel.ProcessingComment;

            this.UpdateResults();
        }
 protected override bool CanProcessSubmissionInternal(IOjsSubmission submission, ISubmissionWorker submissionWorker)
 => this.IsOnline(submissionWorker);