public async Task PostResult([FromUri] string token, RunningResults result) { if (!ModelState.IsValid) throw new HttpResponseException(HttpStatusCode.BadRequest); CheckRunner(token); await userSolutionsRepo.SaveResults(result); }
public async void SendResult(RunningResults result) { var uri = GetUri("PostResult"); var responce = await httpClient.PostAsJsonAsync(uri, result); if (responce.IsSuccessStatusCode) return; Console.Error.WriteLine(DateTime.Now.ToString("HH:mm:ss")); Console.Error.WriteLine(responce.ToString()); Console.Error.WriteLine(result); }
private static void HandleInnerException(ref RunningResults results, Exception ex) { results.Verdict = Verdict.RuntimeError; results.Error = ex.ToString(); }
private static void HandleInnerException(ref RunningResults results, MemberAccessException ex) { results.Verdict = Verdict.SecurityException; results.Error = ex.ToString(); }
private static void HandleException(ref RunningResults results, TargetInvocationException ex) { HandleInnerException(ref results, (dynamic)ex.InnerException); }
private static void HandleException(ref RunningResults results, Exception ex) { results.Verdict = Verdict.SandboxError; results.Error = ex.ToString(); }
private static void HandleInnerException(ref RunningResults results, TypeInitializationException ex) { results.Verdict = Verdict.SecurityException; results.Error = ex.ToString(); }
private async Task<UserSolution> UpdateSubmission(UserSolution submission, RunningResults result) { var compilationErrorHash = (await textsRepo.AddText(result.CompilationOutput)).Hash; var outputHash = (await textsRepo.AddText(result.GetOutput().NormalizeEoln())).Hash; var webRunner = submission.CourseId == "web" && submission.SlideId == "runner"; var exerciseSlide = webRunner ? null : ((ExerciseSlide)courseManager.GetCourse(submission.CourseId).GetSlideById(submission.SlideId)); var updated = new UserSolution { Id = submission.Id, SolutionCodeHash = submission.SolutionCodeHash, CompilationErrorHash = compilationErrorHash, CourseId = submission.CourseId, SlideId = submission.SlideId, IsCompilationError = result.Verdict == Verdict.CompilationError, IsRightAnswer = result.Verdict == Verdict.Ok && (webRunner || exerciseSlide.Exercise.ExpectedOutput.NormalizeEoln() == result.GetOutput().NormalizeEoln()), OutputHash = outputHash, Timestamp = submission.Timestamp, UserId = submission.UserId, CodeHash = submission.CodeHash, Likes = submission.Likes, ExecutionServiceName = submission.ExecutionServiceName, Status = SubmissionStatus.Done, DisplayName = submission.DisplayName, Elapsed = DateTime.Now - submission.Timestamp }; return updated; }
public async Task SaveResults(RunningResults result) { var solution = Find(result.Id); var updatedSolution = await UpdateSubmission(solution, result); Save(updatedSolution); hasHandled = true; }
private async Task<AutomaticExerciseChecking> UpdateAutomaticExerciseChecking(AutomaticExerciseChecking checking, RunningResults result) { var compilationErrorHash = (await textsRepo.AddText(result.CompilationOutput)).Hash; var output = result.GetOutput().NormalizeEoln(); var outputHash = (await textsRepo.AddText(output)).Hash; var isWebRunner = checking.CourseId == "web" && checking.SlideId == Guid.Empty; var exerciseSlide = isWebRunner ? null : (ExerciseSlide)courseManager.GetCourse(checking.CourseId).GetSlideById(checking.SlideId); var expectedOutput = exerciseSlide?.Exercise.ExpectedOutput.NormalizeEoln(); var isRightAnswer = result.Verdict == Verdict.Ok && output.Equals(expectedOutput); var score = isRightAnswer ? exerciseSlide.Exercise.CorrectnessScore : 0; var newChecking = new AutomaticExerciseChecking { Id = checking.Id, CourseId = checking.CourseId, SlideId = checking.SlideId, UserId = checking.UserId, Timestamp = checking.Timestamp, CompilationErrorHash = compilationErrorHash, IsCompilationError = result.Verdict == Verdict.CompilationError, OutputHash = outputHash, ExecutionServiceName = checking.ExecutionServiceName, Status = AutomaticExerciseCheckingStatus.Done, DisplayName = checking.DisplayName, Elapsed = DateTime.Now - checking.Timestamp, IsRightAnswer = isRightAnswer, Score = score, }; return newChecking; }
public async Task SaveResults(RunningResults result) { var submission = FindSubmissionById(result.Id); var updatedChecking = await UpdateAutomaticExerciseChecking(submission.AutomaticChecking, result); Save(updatedChecking); hasHandled = true; }