Example #1
0
		public async Task PostResult([FromUri] string token, RunningResults result)
		{
			if (!ModelState.IsValid)
				throw new HttpResponseException(HttpStatusCode.BadRequest);
			CheckRunner(token);

			await userSolutionsRepo.SaveResults(result);
		}
Example #2
0
		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();
		}
Example #8
0
		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;
		}
Example #9
0
		public async Task SaveResults(RunningResults result)
		{
			var solution = Find(result.Id);
			var updatedSolution = await UpdateSubmission(solution, result);
			Save(updatedSolution);
			hasHandled = true;
		}
Example #10
0
		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;
		}
Example #11
0
		public async Task SaveResults(RunningResults result)
		{
			var submission = FindSubmissionById(result.Id);
			var updatedChecking = await UpdateAutomaticExerciseChecking(submission.AutomaticChecking, result);
			Save(updatedChecking);
			hasHandled = true;
		}