示例#1
0
        public async Task <IActionResult> Updates(
            [FromServices] IJudgehostStore jh,
            [FromServices] IInternalErrorStore ie)
        {
            var judgehosts = await jh.GetJudgeStatusAsync();

            var internal_error = await ie.GetJudgeStatusAsync();

            return(Json(new { judgehosts, internal_error }));
        }
 public InternalErrorsController(IInternalErrorStore store)
 => Store = store;
        public async Task <ActionResult <int> > InternalError(
            [FromForm] InternalErrorModel model,
            [FromServices] IInternalErrorStore store,
            [FromServices] ILanguageStore langs,
            [FromServices] IProblemStore probs)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest());
            }

            var toDisable = model.disabled.AsJson <InternalErrorDisable>();
            var kind      = toDisable.kind;

            var ie = await store.CreateAsync(
                new InternalError
            {
                JudgehostLog = model.judgehostlog,
                JudgingId    = model.judgingid,
                ContestId    = model.cid,
                Description  = model.description,
                Disabled     = model.disabled,
                Status       = InternalErrorStatus.Open,
                Time         = DateTimeOffset.Now,
            });

            if (kind == "language")
            {
                var langid = toDisable.langid;
                await langs.ToggleJudgeAsync(langid, false);

                Telemetry.TrackDependency(
                    dependencyTypeName: "Language",
                    dependencyName: langid,
                    data: model.description,
                    startTime: DateTimeOffset.Now,
                    duration: TimeSpan.Zero,
                    success: false);
            }
            else if (kind == "judgehost")
            {
                var hostname = toDisable.hostname;
                await Judgehosts.ToggleAsync(hostname, false);

                Telemetry.TrackDependency(
                    dependencyTypeName: "JudgeHost",
                    dependencyName: hostname,
                    data: model.description,
                    startTime: DateTimeOffset.Now,
                    duration: TimeSpan.Zero,
                    success: false);
            }
            else if (kind == "problem")
            {
                var probid = toDisable.probid.Value;
                await probs.ToggleJudgeAsync(probid, false);

                Telemetry.TrackDependency(
                    dependencyTypeName: "Problem",
                    dependencyName: $"p{probid}",
                    data: model.description,
                    startTime: DateTimeOffset.Now,
                    duration: TimeSpan.Zero,
                    success: false);
            }
            else
            {
                Telemetry.TrackDependency(
                    dependencyTypeName: "Unresolved",
                    dependencyName: kind,
                    data: model.description,
                    startTime: DateTimeOffset.Now,
                    duration: TimeSpan.Zero,
                    success: false);
            }

            if (model.judgingid.HasValue)
            {
                var(j, pid, cid, uid, time) = await Judgings.FindAsync(model.judgingid.Value);
                await ReturnToQueue(j, cid, pid, uid, time);
            }

            await HttpContext.AuditAsync("added", $"{ie.ErrorId}", $"for {kind}");

            return(ie.ErrorId);
        }