public static void Log(this GradedSubmission flag, ILogger logger) { logger.LogInformation(EngineEvent.ProblemGraded, "{ProblemId} {SubmissionId} {Status} {Timestamp}", flag.SubmissionId, flag.Status, flag.Timestamp ); flag.State.Log(logger); }
public Task Grade(ProblemFlag flag) { bool passed = false; if (!Cache.TryGetValue(Key(flag.Id), out ProblemState state)) { throw new Exception("Problem not found."); } if (state.End != null && state.End != DateTime.MinValue) { throw new Exception("Problem already complete."); } Logger.LogDebug("received flag"); var graded = new GradedSubmission { SubmissionId = flag.SubmissionId, ProblemId = flag.Id, Timestamp = DateTime.UtcNow, Status = SubmissionStatus.Submitted, State = state }; Task.WaitAll(Handler.Update(graded)); Logger.LogDebug("grading flag"); if (Cache.TryGetValue(FlagKey(flag.Id), out string target)) { passed = flag.Tokens[0] == target; } if (passed || flag.Count >= 3) { state.End = DateTime.UtcNow; state.Status = passed ? ProblemStatus.Success : ProblemStatus.Failure; state.Percent = passed ? 10 : 0; state.GamespaceReady = false; } graded.Status = passed ? SubmissionStatus.Passed : SubmissionStatus.Failed; Task.Delay(new Random().Next(2000, 6000)).Wait(); Logger.LogDebug("graded flag"); Task.WaitAll(Handler.Update(graded)); return(Task.CompletedTask); }
public IActionResult Graded([FromBody] GradedSubmission model) { model.Log(Logger); return(Ok()); }
public async Task Update(GradedSubmission submission) { Logger.LogInformation(JsonConvert.SerializeObject(submission)); await Task.Delay(0); }