public IHttpActionResult PostMetrics(Guid scenarioId) { var scenarioResult = _scenarioResultRepository.Find(scenarioId); if (scenarioResult == null) { return(NotFound()); } var runId = _runRepository.GetRunIdForScenario(scenarioId); using (var calculationScope = _kpiCalculationScopeFactory.CreateCalculationScope(runId, scenarioId)) { var kpiCalculationContext = calculationScope.Resolve <IKPICalculationContext>(); var kpiCalculationManager = calculationScope.Resolve <IKPICalculationManager>(); kpiCalculationContext.Recommendations = _recommendationRepository.GetByScenarioId(scenarioId); kpiCalculationContext.SetContextData(_failuresRepository.Get(scenarioId)); scenarioResult.Metrics = kpiCalculationManager .SetAudit(null) .CalculateKPIs(runId, scenarioId); } return(Ok(scenarioResult)); }
/// <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(); }