Esempio n. 1
0
        /// <summary>
        /// Deletes scenario output data, typically as a result of a failure so
        /// that we don't leave partial data.
        ///
        /// Note that schedule data may have been modified (E.g. Break
        /// efficiency) but we don't reset that because it doesn't relate to a
        /// specific scenario.
        /// </summary>
        /// <param name="scenarioId"></param>
        private void DeleteOutputData(Guid scenarioId)
        {
            var runReset = new RunReset(_repositoryFactory);

            runReset.ResetScenarioOutputData(scenarioId, new List <string>()
            {
                "autobook", "isr", "rzr"
            }, true,
                                             true, true); // Leave Smooth recommendations, they relate to the whole run
        }
Esempio n. 2
0
 private void OnRunReset(int playerIndex)
 {
     RunReset?.Invoke(this, new RunResetArgs(playerIndex));
 }
Esempio n. 3
0
        protected override Task DeleteRunDataAsync(
            IReadOnlyCollection <RunDeletionInfo> runDeletionInfos,
            CancellationToken cancellationToken)
        {
            var runReset = new RunReset(_repositoryFactory);

            foreach (var runDeletionInfo in runDeletionInfos)
            {
                cancellationToken.ThrowIfCancellationRequested();

                using (var scope = _repositoryFactory.BeginRepositoryScope())
                {
                    try
                    {
                        var repositories = scope.CreateRepositories(
                            typeof(IRunRepository),
                            typeof(IScenarioRepository),
                            typeof(IPassRepository),
                            typeof(IScenarioCampaignResultRepository),
                            typeof(IScenarioCampaignFailureRepository),
                            typeof(IPipelineAuditEventRepository),
                            typeof(IAutoBookTaskReportRepository)
                            );

                        var runRepository      = repositories.Get <IRunRepository>();
                        var scenarioRepository = repositories.Get <IScenarioRepository>();
                        var passRepository     = repositories.Get <IPassRepository>();
                        var scenarioCampaignResultRepository  = repositories.Get <IScenarioCampaignResultRepository>();
                        var scenarioCampaignFailureRepository = repositories.Get <IScenarioCampaignFailureRepository>();
                        var pipelineAuditEventRepository      = repositories.Get <IPipelineAuditEventRepository>();
                        var autoBookTaskReportRepository      = repositories.Get <IAutoBookTaskReportRepository>();

                        // Don't delete ScenarioResults, KPI data is needed
                        foreach (var scenarioId in runDeletionInfo.ScenarioIds)
                        {
                            runReset.ResetScenarioOutputData(
                                scenarioId,
                                new List <string> {
                                "smooth", "autobook", "isr", "rzr"
                            },
                                resetAutoBookFailures: true,
                                resetResultFiles: true);
                        }

                        runReset.ResetSmoothFailures(runDeletionInfo.RunId);

                        foreach (var scenarioId in runDeletionInfo.ScenarioIds)
                        {
                            passRepository.RemoveByScenarioId(scenarioId);
                            scenarioRepository.Delete(scenarioId);
                            scenarioCampaignResultRepository.Delete(scenarioId);
                            scenarioCampaignFailureRepository.RemoveByScenarioId(scenarioId);
                        }

                        var pipelineItems = pipelineAuditEventRepository.GetAllByRunId(runDeletionInfo.RunId);
                        if (pipelineItems != null && pipelineItems.Any())
                        {
                            pipelineAuditEventRepository.DeleteRange(pipelineItems);
                        }

                        pipelineAuditEventRepository.SaveChanges();

                        var autobookTaskReports = autoBookTaskReportRepository.GetAllByRunId(runDeletionInfo.RunId);
                        if (autobookTaskReports != null && autobookTaskReports.Any())
                        {
                            autoBookTaskReportRepository.DeleteRange(autobookTaskReports);
                        }

                        autoBookTaskReportRepository.SaveChanges();

                        runRepository.Remove(runDeletionInfo.RunId);
                        runRepository.SaveChanges();
                    }
                    catch (Exception ex)
                    {
                        throw new RunCleaningException(
                                  $"Deletion of run with '{runDeletionInfo.RunId}' id has been failed. See inner exception for more details.",
                                  ex);
                    }
                }
            }

            return(Task.CompletedTask);
        }