private void LogException(Exception exception, StudentSubmissionDto submission) { Logger.Log($"Student: '{submission.StudentName}'\r\n" + $"Class: '{submission.ClassName}'\r\n" + $"Timestamp: {DateTime.Now}\r\n" + $"Exception Message - \r\n{exception.Message}\r\n" + $"Inner Message - \r\n{exception.InnerException?.Message}\r\n"); }
public async Task RunSubmissionImpl(StudentSubmissionDto submission) { await Engine.RunSubmission(submission); Mutex.WaitOne(); HangFireJobService.Remove(submission.StudentName); Mutex.ReleaseMutex(); }
public IActionResult Post([FromBody] StudentSubmissionDto submission) { if (submission.SnapshotFolder != null && submission.SnapshotFolder.Length > 0) { BackgroundJob.Enqueue(() => EngineService.RunSubmission(submission)); return(Ok()); } return(BadRequest()); }
private async Task RunImplementation(StudentSubmissionDto submission) { using (var data = new SubmissionData(submission, Path.Combine(Options.RootDirectory, GetUniqueFolderName(Options.RootDirectory)))) { var email = await Runner.RunSubmission(data); await EmailService.Send(email); } }
public SubmissionData(StudentSubmissionDto submission, string root) { StudentName = submission.StudentName; ClassName = submission.ClassName; Root = root; Directory.CreateDirectory(Root); SnapshotFolder = Path.Combine(Root, "SnapshotFiles"); EngineFileUtilities.ExtractZip(Root, "SnapshotFiles", submission.SnapshotFolder); }
public void Init() { Submission = new StudentSubmissionDto() { StudentName = StudentName, ClassName = ClassName, SnapshotFolder = MockSnapshots.GetCalculatorSnapshots(), }; Root = Path.Combine(Directory.GetCurrentDirectory(), nameof(SubmissionDataTests)); }
public async Task RunSubmission(StudentSubmissionDto submission) { try { await RunImplementation(submission); } catch (EngineExceptionData exceptionData) { LogEngineException(exceptionData); } catch (Exception exception) { LogException(exception, submission); } }
public void RunSubmission(StudentSubmissionDto submission) { Mutex.WaitOne(); var parentId = HangFireJobService.GetParentOrDefault(submission.StudentName); if (parentId == null) { var newId = BackgroundJob.Enqueue(() => RunSubmissionImpl(submission)); HangFireJobService.AddJob(submission.StudentName, newId); } else { var newId = BackgroundJob.ContinueJobWith(parentId, () => RunSubmissionImpl(submission)); HangFireJobService.AddJob(submission.StudentName, newId); } Mutex.ReleaseMutex(); }
public void Init() { Students = new MockRepository <Student, string>( new List <Student>() { new Student() { Id = StudentId, Name = StudentName, StudentCourseClasses = new List <StudentCourseClass>() { new StudentCourseClass() { Class = new CourseClass() { Id = ClassId, Name = ClassName, } } } } }); Surveys = new MockRepository <Survey, string>(); SnapshotGenerator = new MockSnapshotGenerator(); Runner = new EngineRunner(Microsoft.Extensions.Options.Options.Create( new EngineRunnerOptions() { SurveyUrl = "Blank", }), Students, Surveys, SnapshotGenerator, new MockAssignmentGenerator(), new MockMarkovModelGenerator()); Root = Path.Combine(Directory.GetCurrentDirectory(), nameof(EngineRunnerTests)); Submission = new StudentSubmissionDto() { SnapshotFolder = MockSnapshots.GetCalculatorSnapshots(), }; }
public void Init() { Root = Path.Combine(Directory.GetCurrentDirectory(), nameof(SnapshotGeneratorTests)); Submission = new StudentSubmissionDto() { SnapshotFolder = MockSnapshots.GetCalculatorSnapshots(), StudentName = StudentName, ClassName = "Class", }; Assignment = new Assignment() { Id = AssignmentId, Filename = MockSnapshots.GetCalculatorFile(), Solution = new AssignmentSolution() { Files = MockSnapshots.GetCalculatorSolutionFiles(), Name = MockSnapshots.GetCalculatorClassName(), } }; Student = new Student() { Id = StudentId, Name = StudentName, Submissions = new List <SnapshotSubmission>() { new SnapshotSubmission() { Id = FirstCalculatorSubmissionId, CreatedDateTime = MockSnapshots.GetFirstCalculatorSnapshotTime(), } }, Snapshots = new List <Snapshot>() { new Snapshot() { Id = FirstCalculatorSubmissionId, SnapshotSubmission = new SnapshotSubmission() { Id = FirstCalculatorSubmissionId, CreatedDateTime = MockSnapshots.GetFirstCalculatorSnapshotTime(), Files = MockSnapshots.GetFirstCalculatorSnapshotFile(), }, AssignmentId = AssignmentId }, new Snapshot() { Id = LastSnapshotId, SnapshotSubmission = new SnapshotSubmission() { Id = 2, CreatedDateTime = MockSnapshots.GetSecondCalculatorSnapshotTime(), Files = MockSnapshots.GetSecondCalculatorSnapshotFile(), }, AssignmentId = AssignmentId } } }; Students = new MockRepository <Student, string>(); Students.Add(Student); Snapshots = new MockRepository <Snapshot, int>(); SnapshotSubmission = new MockRepository <SnapshotSubmission, int>( new List <SnapshotSubmission>() { new SnapshotSubmission() { Id = FirstCalculatorSubmissionId, CreatedDateTime = MockSnapshots.GetFirstCalculatorSnapshotTime() } }); Generator = new SnapshotGenerator(new MockSnapshotDateConverter(), SnapshotSubmission, Snapshots, new MockSnapshotReportGenerate(), Students, new MockAbstractSyntaxClassTreeExtractor(), new MockAbstractSyntaxTreeGenerator()); Data = new SubmissionData(Submission, Root) { Student = Student }; GeneratorObj = new SnapshotGenerator.SnapshotGeneratorObj(Data, Assignment, Generator); }