示例#1
0
        private async Task ProcessSubmissionFromXQueue(Database.Models.XQueueWatcher watcher, XQueueSubmission submission)
        {
            var           xQueueRepo = GetNewXQueueRepo();
            GraderPayload graderPayload;

            try
            {
                graderPayload = submission.Body.GraderPayload.DeserializeJson <GraderPayload>();
            }
            catch (Exception e)
            {
                log.Error($"Can't parse grader payload: {e.Message}");
                log.Info($"Payload is: {submission.Body.GraderPayload}");
                return;
            }

            log.Info($"Add new xqueue submission for course {graderPayload.CourseId}, slide {graderPayload.SlideId}");
            await xQueueRepo.AddXQueueSubmission(
                watcher,
                submission.Header.JsonSerialize(),
                graderPayload.CourseId,
                graderPayload.SlideId,
                submission.Body.StudentResponse
                );
        }
示例#2
0
 private async Task SafeGetAndProcessSubmissionFromXQueue(Database.Models.XQueueWatcher watcher)
 {
     try
     {
         await GetAndProcessSubmissionFromXQueue(watcher);
     }
     catch (Exception e)
     {
         log.Error(e);
     }
 }
示例#3
0
        private async Task GetAndProcessSubmissionFromXQueue(Database.Models.XQueueWatcher watcher)
        {
            if (!clientsCache.TryGetValue(watcher.Id, out var client))
            {
                client = new XQueueClient(watcher.BaseUrl, watcher.UserName, watcher.Password);

                if (!await client.Login())
                {
                    log.Error($"Can\'t login to xqueue {watcher.QueueName} ({watcher.BaseUrl}, user {watcher.UserName})");
                    return;
                }

                clientsCache[watcher.Id] = client;
            }

            var submission = await client.GetSubmission(watcher.QueueName);

            if (submission == null)
            {
                return;
            }

            log.Info($"Got new submission in xqueue {watcher.QueueName}: {submission.JsonSerialize()}");

            try
            {
                await ProcessSubmissionFromXQueue(watcher, submission);
            }
            catch (Exception e)
            {
                log.Error($"Error occurred while processing submission from xqueue: {e.Message}", e);
                await client.PutResult(new XQueueResult
                {
                    header = submission.header,
                    Body   = new XQueueResultBody
                    {
                        Score     = 0,
                        IsCorrect = false,
                        Message   = "Sorry, we can't check your code now. Please retry or contact us at [email protected]",
                    }
                });
            }
        }