示例#1
0
 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");
 }
示例#2
0
        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());
 }
示例#4
0
        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);
            }
        }
示例#5
0
        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));
        }
示例#7
0
 public async Task RunSubmission(StudentSubmissionDto submission)
 {
     try
     {
         await RunImplementation(submission);
     }
     catch (EngineExceptionData exceptionData)
     {
         LogEngineException(exceptionData);
     }
     catch (Exception exception)
     {
         LogException(exception, submission);
     }
 }
示例#8
0
        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(),
            };
        }
示例#10
0
        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);
        }