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 ); }
private async Task SafeGetAndProcessSubmissionFromXQueue(Database.Models.XQueueWatcher watcher) { try { await GetAndProcessSubmissionFromXQueue(watcher); } catch (Exception e) { log.Error(e); } }
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]", } }); } }