public IEnumerable <ScenarioResult> CalculateBRSIndicatorsAfterRunCompleted(Run run) { if (run.Scenarios.Count > 1 && run.HasAllScenarioCompletedSuccessfully) { var infoLabel = $"(RunID={run.Id}, BRSConfigurationTemplateId={run.BRSConfigurationTemplateId})"; RaiseInfo($"Starting calculation of BRS Indicator {infoLabel}. Scenarios info: {run.Scenarios.Select(x => new { ScenarioId = x.Id, x.Status }) }"); var scenarioResults = CalculateBRSIndicators(run); RaiseInfo($"Scenario results after calculation {infoLabel}: {JsonConvert.SerializeObject(scenarioResults)}"); _scenarioResultRepository.UpdateRange(scenarioResults); _scenarioResultRepository.SaveChanges(); RaiseInfo($"Finished calculation of BRS Indicator {infoLabel}"); return(scenarioResults); } return(null); }
public IHttpActionResult PostCalculateAndSave(Guid runId, int?brsConfigurationTemplateId = null) { var run = _runRepository.Find(runId); if (run == null) { return(NotFound()); } var scenarioResults = _brsManager.CalculateBRSIndicators(run, brsConfigurationTemplateId); _scenarioResultRepository.UpdateRange(scenarioResults); if (brsConfigurationTemplateId.HasValue) { run.BRSConfigurationTemplateId = brsConfigurationTemplateId.Value; _runRepository.Update(run); } _scenarioResultRepository.SaveChanges(); return(Ok(_mapper.Map <List <BRSIndicatorValueForScenarioResultModel> >(scenarioResults))); }
/// <summary> /// Processes files. For each file we pass it to a file processor which /// performs some action on it. /// </summary> /// <param name="runId">RunID</param> /// <param name="scenarioId">ScenarioId</param> /// <param name="scenarioResult"></param> private void ProcessOutputFiles(Guid runId, Guid scenarioId, ScenarioResult scenarioResult) { _auditEventRepository.Insert(AuditEventFactory.CreateAuditEventForGameplanPipelineStart(0, 0, PipelineEventIDs.STARTED_EXPORTING_DATA_TO_DATABASE, runId, scenarioId, null, null)); _pipelineAuditEventRepository.Add(PipelineEventHelper.CreatePipelineAuditEvent(AuditEventTypes.GamePlanRun, PipelineEventIDs.STARTED_EXPORTING_DATA_TO_DATABASE, runId, scenarioId, null)); string scenarioLocalFolder = GetScenarioLocalFolder(scenarioId); var dataProcessingExceptions = new List <Exception>(); using (var kpiCalculationScope = _kpiCalculationScopeFactory.CreateCalculationScope(runId, scenarioId)) { var kpiCalculationContext = kpiCalculationScope.Resolve <IKPICalculationContext>(); var kpiCalculationManager = kpiCalculationScope.Resolve <IKPICalculationManager>(); foreach (var dataProcessingAction in _dataProcessingActions) { try { dataProcessingAction(kpiCalculationScope, _featureManager, _auditEventRepository, scenarioLocalFolder); } catch (Exception e) { _auditEventRepository.Insert(AuditEventFactory.CreateAuditEventForException(0, 0, $"Error processing: {dataProcessingAction.Method.GetGenericArguments().First().Name}. ScenarioId: {scenarioId}", e)); dataProcessingExceptions.Add(e); } } if (_includeScenarioPerformanceMeasurementKPIs) { kpiCalculationContext.SetDefaultKpiDemos(); } _scenarioCampaignMetricsProcessor.ProcessScenarioCampaignMetrics(runId, scenarioId, kpiCalculationContext.Recommendations); scenarioResult.Metrics = kpiCalculationManager.CalculateKPIs(runId, scenarioId); scenarioResult.AnalysisGroupMetrics = kpiCalculationManager.CalculateAnalysisGroupKPIs(runId); _scenarioResultRepository.Add(scenarioResult); _scenarioResultRepository.SaveChanges(); } // Exceptions handling if (dataProcessingExceptions.Count == 1) { _auditEventRepository.Insert(AuditEventFactory.CreateAuditEventForGameplanPipelineEnd(0, 0, PipelineEventIDs.FINISHED_EXPORTING_DATA_TO_DATABASE, runId, scenarioId, null, null, dataProcessingExceptions[0].Message, dataProcessingExceptions[0])); throw dataProcessingExceptions[0]; } else if (dataProcessingExceptions.Count > 1) { _auditEventRepository.Insert(AuditEventFactory.CreateAuditEventForGameplanPipelineEnd(0, 0, PipelineEventIDs.FINISHED_EXPORTING_DATA_TO_DATABASE, runId, scenarioId, null, null, dataProcessingExceptions[0].Message, dataProcessingExceptions[0])); throw new AggregateException(dataProcessingExceptions); } _auditEventRepository.Insert(AuditEventFactory.CreateAuditEventForGameplanPipelineEnd(0, 0, PipelineEventIDs.FINISHED_EXPORTING_DATA_TO_DATABASE, runId, scenarioId, null, "Import has been finished", null, null)); _pipelineAuditEventRepository.Add(PipelineEventHelper.CreatePipelineAuditEvent(AuditEventTypes.GamePlanRun, PipelineEventIDs.FINISHED_EXPORTING_DATA_TO_DATABASE, runId, scenarioId, null)); _pipelineAuditEventRepository.SaveChanges(); }