Ejemplo n.º 1
0
        public IActionResult GetWorkloadAnalysisDetailForBestEnvironment(GetWorkloadAnalysisDetailForBestEnvRequest request)
        {
            GetWorkloadAnalysisDetailForEnvReponse result = new GetWorkloadAnalysisDetailForEnvReponse();

            if (request != null)
            {
                HandleException(() =>
                {
                    var environmentsRepository             = DALRepositories.GetVirtualEnvironmentsRepository();
                    var realStatementEvaluationsRepository = DALRepositories.GetWorkloadAnalysisRealStatementEvaluationsRepository();
                    var environmentID = environmentsRepository.GetBestEnvironmentForWorkloadAnalysis(request.WorkloadAnalysisID);
                    if (environmentID > 0)
                    {
                        var env        = environmentsRepository.GetDetail(environmentID);
                        var statements = realStatementEvaluationsRepository.GetAllForWorkloadAnalysis(request.WorkloadAnalysisID);

                        result.Data = Converter.ConvertToWorkloadAnalysisDetailForEnv(env, statements);
                    }
                    else
                    {
                        result.Data = new WorkloadAnalysisDetailForEnvData();
                    }
                    result.IsSuccess = result.Data != null;
                }, ex => result.ErrorMessage = ex.Message);
            }
            return(Json(result));
        }
        public IActionResult GetOverviewStats(StatsOverviewRequest request)
        {
            StatsOverviewResponse result = new StatsOverviewResponse();

            if (request != null && request.Filter != null)
            {
                HandleException(() =>
                {
                    var data     = new StatsOverviewData();
                    int topCount = 10;
                    var totalRelationStatsRepository = DALRepositories.GetTotalRelationStatisticsRepository();
                    var statementStatsRepository     = DALRepositories.GetNormalizedStatementStatisticsRepository();
                    // alive relations
                    var summaryTotalRelationStatistics = totalRelationStatsRepository.GetSummaryTotalRelationStatistics(request.DatabaseID, request.Filter.DateFrom, request.Filter.DateTo, topCount);
                    data.MostAliveRelations            = Converter.ConvertToMostAliveRelations(summaryTotalRelationStatistics);
                    // top executed
                    var topExecuted             = statementStatsRepository.GetSummaryTotalStatementStatistics(request.DatabaseID, request.Filter.DateFrom, request.Filter.DateTo, DAL.Contracts.SummaryNormalizedStatementStatisticsOrderBy.ExecutionCount, null, topCount);
                    data.MostExecutedStatements = Converter.ConvertToMostExecutedStatements(topExecuted);
                    // slowest
                    var topSlowest             = statementStatsRepository.GetSummaryTotalStatementStatistics(request.DatabaseID, request.Filter.DateFrom, request.Filter.DateTo, DAL.Contracts.SummaryNormalizedStatementStatisticsOrderBy.MaxDuration, null, topCount);
                    data.MostSlowestStatements = Converter.ConvertToMostSlowestStatements(topSlowest);
                    result.Data      = data;
                    result.IsSuccess = data != null;
                }, ex => result.ErrorMessage = ex.Message);
            }
            return(Json(result));
        }
Ejemplo n.º 3
0
        public IActionResult DeleteWorkload(DeleteWorkloadRequest request)
        {
            BaseOperationResponse result = new BaseOperationResponse()
            {
                IsSuccess = false
            };

            if (request != null)
            {
                HandleException(() =>
                {
                    var repository = DALRepositories.GetWorkloadsRepository();
                    var workload   = repository.GetByPrimaryKey(request.WorkloadID);
                    if (workload != null)
                    {
                        if (workload.InactiveDate == null)
                        {
                            workload.InactiveDate = DateTime.Now;
                            repository.Update(workload);
                        }
                        result.IsSuccess = true;
                    }
                }, ex => result.ErrorMessage = ex.Message);
            }
            return(Json(result));
        }
        public IActionResult GetStoredProcedureStatistics(GetStoredProcedureStatisticsRequest request)
        {
            GetStoredProcedureStatisticsResponse result = new GetStoredProcedureStatisticsResponse();

            if (request != null && request.Filter != null)
            {
                HandleException(() =>
                {
                    var data = new StoredProcedureStatisticsData();
                    var totalStoredProcStatsRepository  = DALRepositories.GetTotalStoredProcedureStatisticsRepository();
                    data.TotalStoredProcedureStatistics = totalStoredProcStatsRepository.GetAllForProcedure(request.StoredProcedureID, request.Filter.DateFrom, request.Filter.DateTo).ToList();
                    result.Data      = data;
                    result.IsSuccess = result.Data != null;
                }, ex => result.ErrorMessage = ex.Message);
            }
            return(Json(result));
        }
        public IActionResult UpdateConfiguration(ConfigurationData configuration)
        {
            BaseOperationResponse result = new BaseOperationResponse();

            HandleException(() =>
            {
                var repository   = DALRepositories.GetSettingPropertiesRepository();
                var originalSmtp = repository.GetObject <DAL.Contracts.SmtpConfiguration>(DAL.Contracts.SettingPropertyKeys.SMTP_CONFIGURATION);
                var smtp         = Converter.CreateSmtpConfiguration(configuration.Smtp, originalSmtp);
                repository.SetObject(DAL.Contracts.SettingPropertyKeys.SMTP_CONFIGURATION, smtp);
                var reporting = Converter.CreateReportingSettings(configuration.Reports);
                repository.SetObject(DAL.Contracts.SettingPropertyKeys.REPORTING_SETTINGS, reporting);
                var collector = Converter.CreateCollectorConfiguration(configuration.Collector);
                repository.SetObject(DAL.Contracts.SettingPropertyKeys.COLLECTOR_CONFIGURATION, collector);
                result.IsSuccess = true;
            }, ex => result.ErrorMessage = ex.Message);
            return(Json(result));
        }
        public IActionResult GetConfiguration()
        {
            BaseResponse <ConfigurationData> result = new BaseResponse <ConfigurationData>();

            HandleException(() =>
            {
                var repository             = DALRepositories.GetSettingPropertiesRepository();
                var data                   = new ConfigurationData();
                var smtp                   = repository.GetObject <DAL.Contracts.SmtpConfiguration>(DAL.Contracts.SettingPropertyKeys.SMTP_CONFIGURATION);
                data.Smtp                  = Converter.Convert(smtp);
                var reporting              = repository.GetObject <DAL.Contracts.ReportingSettings>(DAL.Contracts.SettingPropertyKeys.REPORTING_SETTINGS);
                data.Reports               = Converter.Convert(reporting);
                var collectorConfiguration = repository.GetObject <DAL.Contracts.CollectorConfiguration>(DAL.Contracts.SettingPropertyKeys.COLLECTOR_CONFIGURATION);
                data.Collector             = Converter.Convert(collectorConfiguration);
                result.Data                = data;
                result.IsSuccess           = result.Data != null;
            }, ex => result.ErrorMessage = ex.Message);
            return(Json(result));
        }
        public IActionResult GetIndexStatistics(GetIndexStatisticsRequest request)
        {
            GetIndexStatisticsResponse result = new GetIndexStatisticsResponse();

            if (request != null && request.Filter != null)
            {
                HandleException(() =>
                {
                    var data = new IndexStatisticsData();
                    var totalIndexStatsRepository          = DALRepositories.GetTotalIndexStatisticsRepository();
                    var statementIndexStatisticsRepository = DALRepositories.GetNormalizedStatementIndexStatisticsRepository();
                    data.TotalIndexStatistics            = totalIndexStatsRepository.GetAllForIndex(request.IndexID, request.Filter.DateFrom, request.Filter.DateTo).ToList();
                    data.IndexSummaryStatementStatistics = statementIndexStatisticsRepository.GetIndexSummaryStatementStatistics(request.IndexID, request.Filter.DateFrom, request.Filter.DateTo).ToList();
                    result.Data      = data;
                    result.IsSuccess = result.Data != null;
                }, ex => result.ErrorMessage = ex.Message);
            }
            return(Json(result));
        }
        public IActionResult GetStatementsStatistics(GetStatementsStatisticsRequest request)
        {
            GetStatementsStatisticsResponse result = new GetStatementsStatisticsResponse();

            if (request != null && request.Filter != null)
            {
                HandleException(() =>
                {
                    var data = new StatementsStatisticsData();
                    var normalizedStatementStatisticsRepository = DALRepositories.GetNormalizedStatementStatisticsRepository();
                    data.SummaryNormalizedStatementStatistics   = normalizedStatementStatisticsRepository.GetSummaryTotalStatementStatistics(request.DatabaseID,
                                                                                                                                             request.Filter.DateFrom, request.Filter.DateTo, DAL.Contracts.SummaryNormalizedStatementStatisticsOrderBy.MaxDuration,
                                                                                                                                             Converter.CreateCommandTypeFilter(request.Filter.CommandType), null).ToList();
                    result.Data      = data;
                    result.IsSuccess = result.Data != null;
                }, ex => result.ErrorMessage = ex.Message);
            }
            return(Json(result));
        }
Ejemplo n.º 9
0
        public IActionResult GetWorkloads(GetWorkloadsRequest request)
        {
            GetWorkloadsReponse result = new GetWorkloadsReponse();

            if (request != null && request.Filter != null)
            {
                HandleException(() =>
                {
                    var repository = DALRepositories.GetWorkloadsRepository();
                    var workloads  = repository.GetForDatabase(request.DatabaseID, request.Filter.DateFrom, request.Filter.DateTo, onlyActive: true);
                    result.Data    = new List <WorkloadData>();
                    foreach (var w in workloads)
                    {
                        result.Data.Add(Converter.Convert(w));
                    }
                    result.IsSuccess = result.Data != null;
                }, ex => result.ErrorMessage = ex.Message);
            }
            return(Json(result));
        }
        public IActionResult GetStatementStatistics(GetStatementStatisticsRequest request)
        {
            GetStatementStatisticsResponse result = new GetStatementStatisticsResponse();

            if (request != null && request.Filter != null)
            {
                HandleException(() =>
                {
                    var data = new StatementStatisticsData();
                    var totalStatsRepository         = DALRepositories.GetNormalizedStatementStatisticsRepository();
                    var relationStatsRepository      = DALRepositories.GetNormalizedStatementRelationStatisticsRepository();
                    var indexStatsRepository         = DALRepositories.GetNormalizedStatementIndexStatisticsRepository();
                    data.StatementTimeline           = totalStatsRepository.GetTimelineForStatement(request.StatementID, request.Filter.DateFrom, request.Filter.DateTo).ToList();
                    data.StatementRelationStatistics = relationStatsRepository.GetAllForStatement(request.StatementID, request.Filter.DateFrom, request.Filter.DateTo).ToList();
                    data.StatementIndexStatistics    = indexStatsRepository.GetAllForStatement(request.StatementID, request.Filter.DateFrom, request.Filter.DateTo).ToList();
                    data.SlowestRepresentatives      = totalStatsRepository.GetSlowestForStatement(request.StatementID, request.Filter.DateFrom, request.Filter.DateTo, 10).ToList();
                    result.Data      = data;
                    result.IsSuccess = result.Data != null;
                }, ex => result.ErrorMessage = ex.Message);
            }
            return(Json(result));
        }
Ejemplo n.º 11
0
        public IActionResult GetWorkloadAnalysisDetail(GetWorkloadAnalysisDetailRequest request)
        {
            GetWorkloadAnalysisDetailReponse result = new GetWorkloadAnalysisDetailReponse();

            if (request != null)
            {
                HandleException(() =>
                {
                    var environmentsRepository = DALRepositories.GetVirtualEnvironmentsRepository();
                    var indicesRepository      = DALRepositories.GetPossibleIndicesRepository();

                    var indicesEnvs = environmentsRepository.GetAllForWorkloadAnalysis(request.WorkloadAnalysisID, DAL.Contracts.VirtualEnvironmentType.Indices);
                    var hPartsEnvs  = environmentsRepository.GetAllForWorkloadAnalysis(request.WorkloadAnalysisID, DAL.Contracts.VirtualEnvironmentType.HPartitionings);
                    var indicesIds  = indicesEnvs.SelectMany(x => x.VirtualEnvironmentPossibleIndices).Select(x => x.PossibleIndexID).ToHashSet();
                    var indices     = indicesRepository.GetByIds(indicesIds);

                    result.Data      = Converter.ConvertToWorkloadAnalysisDetail(indicesEnvs, hPartsEnvs, indices);
                    result.IsSuccess = result.Data != null;
                }, ex => result.ErrorMessage = ex.Message);
            }
            return(Json(result));
        }
Ejemplo n.º 12
0
        public IActionResult CreateWorkloadAnalysis(CreateWorkloadAnalysisRequest request)
        {
            BaseOperationResponse result = new BaseOperationResponse()
            {
                IsSuccess = false
            };

            (bool isValid, string errorMessage) = WorkloadAnalysisValidator.Validate(request);
            if (!isValid)
            {
                result.ErrorMessage = errorMessage;
            }
            else
            {
                HandleException(() =>
                {
                    var workloadAnalysis = Converter.CreateWorkloadAnalysis(request);
                    var repository       = DALRepositories.GetWorkloadAnalysesRepository();
                    repository.Create(workloadAnalysis);
                    result.IsSuccess = true;
                }, ex => result.ErrorMessage = ex.Message);
            }
            return(Json(result));
        }
Ejemplo n.º 13
0
        public IActionResult GetUnusedObjects(GetUnusedObjectsRequest request)
        {
            GetUnusedObjectsResponse result = new GetUnusedObjectsResponse();

            if (request != null)
            {
                HandleException(() =>
                {
                    result.Data                         = new UnusedObjectsData();
                    result.Data.Objects                 = new List <UnusedObjectData>();
                    var now                             = DateTime.Now;
                    DateTime thresholdDate              = now.AddDays(-30);
                    var totalIndexStatsRepo             = DALRepositories.GetTotalIndexStatisticsRepository();
                    var totalRelationStatsRepo          = DALRepositories.GetTotalRelationStatisticsRepository();
                    var totalProceduresStatsRepo        = DALRepositories.GetTotalStoredProcedureStatisticsRepository();
                    var totalViewsStatsRepo             = DALRepositories.GetTotalViewStatisticsRepository();
                    bool areDataAvailableForWholePeriod = totalIndexStatsRepo.AreDataAvailableForWholePeriod(thresholdDate, now.Date) ||
                                                          totalRelationStatsRepo.AreDataAvailableForWholePeriod(thresholdDate, now.Date) ||
                                                          totalProceduresStatsRepo.AreDataAvailableForWholePeriod(thresholdDate, now.Date) ||
                                                          totalViewsStatsRepo.AreDataAvailableForWholePeriod(thresholdDate, now.Date);
                    var indicesLastKnownCollectionDate    = totalIndexStatsRepo.GetForAllLastKnownCollectionDate(request.DatabaseID);
                    var relationsLastKnownCollectionDate  = totalRelationStatsRepo.GetForAllLastKnownCollectionDate(request.DatabaseID);
                    var proceduresLastKnownCollectionDate = totalProceduresStatsRepo.GetForAllLastKnownCollectionDate(request.DatabaseID);
                    var viewsLastKnownCollectionDate      = totalViewsStatsRepo.GetForAllLastKnownCollectionDate(request.DatabaseID);
                    using (var scope = Converter.CreateDatabaseScope(request.DatabaseID))
                    {
                        foreach (var i in DBMSRepositories.GetIndicesRepository().GetAll())
                        {
                            bool?isUnused = null;
                            DateTime?lastKnownUsageDate = null;
                            if (indicesLastKnownCollectionDate.TryGetValue(i.ID, out var lastKnownCollectionDate))
                            {
                                lastKnownUsageDate = lastKnownCollectionDate;
                                if (areDataAvailableForWholePeriod)
                                {
                                    isUnused = lastKnownCollectionDate < thresholdDate;
                                }
                            }
                            result.Data.Objects.Add(new UnusedObjectData()
                            {
                                IsUnused = isUnused, LastKnownUsageDate = lastKnownUsageDate,
                                Name     = i.Name + $" ON {i.SchemaName}.{i.RelationName}", ObjectType = "Index", SchemaName = i.SchemaName
                            });
                        }
                        foreach (var r in DBMSRepositories.GetRelationsRepository().GetAll())
                        {
                            bool?isUnused = null;
                            DateTime?lastKnownUsageDate = null;
                            if (relationsLastKnownCollectionDate.TryGetValue(r.ID, out var lastKnownCollectionDate))
                            {
                                lastKnownUsageDate = lastKnownCollectionDate;
                                if (areDataAvailableForWholePeriod)
                                {
                                    isUnused = lastKnownCollectionDate < thresholdDate;
                                }
                            }
                            result.Data.Objects.Add(new UnusedObjectData()
                            {
                                IsUnused           = isUnused,
                                LastKnownUsageDate = lastKnownUsageDate,
                                Name       = r.Name,
                                ObjectType = "Relation",
                                SchemaName = r.SchemaName
                            });
                        }
                        foreach (var p in DBMSRepositories.GetStoredProceduresRepository().GetAll())
                        {
                            bool?isUnused = null;
                            DateTime?lastKnownUsageDate = null;
                            if (proceduresLastKnownCollectionDate.TryGetValue(p.ID, out var lastKnownCollectionDate))
                            {
                                lastKnownUsageDate = lastKnownCollectionDate;
                                if (areDataAvailableForWholePeriod)
                                {
                                    isUnused = lastKnownCollectionDate < thresholdDate;
                                }
                            }
                            result.Data.Objects.Add(new UnusedObjectData()
                            {
                                IsUnused           = isUnused,
                                LastKnownUsageDate = lastKnownUsageDate,
                                Name       = p.Name,
                                ObjectType = "Stored procedure",
                                SchemaName = p.SchemaName
                            });
                        }
                        foreach (var v in DBMSRepositories.GetViewsRepository().GetAll())
                        {
                            bool?isUnused = null;
                            DateTime?lastKnownUsageDate = null;
                            if (viewsLastKnownCollectionDate.TryGetValue(v.ID, out var lastKnownCollectionDate))
                            {
                                lastKnownUsageDate = lastKnownCollectionDate;
                                if (areDataAvailableForWholePeriod)
                                {
                                    isUnused = lastKnownCollectionDate < thresholdDate;
                                }
                            }
                            result.Data.Objects.Add(new UnusedObjectData()
                            {
                                IsUnused           = isUnused,
                                LastKnownUsageDate = lastKnownUsageDate,
                                Name       = v.Name,
                                ObjectType = "View",
                                SchemaName = v.SchemaName
                            });
                        }
                    }
                    result.Data.Objects.Sort((x, y) =>
                    {
                        var cmp = (x.LastKnownUsageDate?.Ticks ?? double.MaxValue).CompareTo(y.LastKnownUsageDate?.Ticks ?? double.MaxValue);
                        if (cmp == 0)
                        {
                            cmp = x.SchemaName.CompareTo(y.SchemaName);
                            if (cmp == 0)
                            {
                                cmp = x.Name.CompareTo(y.Name);
                            }
                        }
                        return(cmp);
                    });
                    result.IsSuccess = result.Data != null;
                }, ex => result.ErrorMessage = ex.Message);
            }
            return(Json(result));
        }