コード例 #1
0
        public IActionResult GetIndices()
        {
            BaseResponse <Dictionary <uint, List <IndexData> > > result = new BaseResponse <Dictionary <uint, List <IndexData> > >();

            HandleException(() =>
            {
                var databases         = DBMSRepositories.GetDatabasesRepository().GetAll();
                var indicesRepository = DBMSRepositories.GetIndicesRepository();
                result.Data           = new Dictionary <uint, List <IndexData> >();
                foreach (var d in databases)
                {
                    try
                    {
                        using (var scope = Converter.CreateDatabaseScope(d.ID))
                        {
                            var indices = indicesRepository.GetAll().OrderBy(x => x.Name);
                            foreach (var i in indices)
                            {
                                if (!result.Data.ContainsKey(i.RelationID))
                                {
                                    result.Data.Add(i.RelationID, new List <IndexData>());
                                }
                                result.Data[i.RelationID].Add(Converter.Convert(i));
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        System.Diagnostics.Trace.WriteLine(ex.Message);
                    }
                }
                result.IsSuccess = result.Data != null;
            }, ex => result.ErrorMessage = ex.Message);
            return(Json(result));
        }
コード例 #2
0
        public IActionResult GetDatabases()
        {
            BaseResponse <List <DatabaseData> > result = new BaseResponse <List <DatabaseData> >();

            HandleException(() =>
            {
                var repository = DBMSRepositories.GetDatabasesRepository();
                var databases  = repository.GetAll();
                result.Data    = new List <DatabaseData>();
                foreach (var d in databases)
                {
                    result.Data.Add(Converter.Convert(d));
                }
                result.IsSuccess = result.Data != null;
            }, ex => result.ErrorMessage = ex.Message);
            return(Json(result));
        }
コード例 #3
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));
        }