コード例 #1
0
ファイル: DatabaseService.cs プロジェクト: asydikov/ToolBox
        public async Task AddDatabases(DbWorkerOperationCompleted command)
        {
            var databasesName = command.Result.SelectMany(x => x)
                                .Where(x => x.Key == "databasE_NAME")
                                .Select(x => new { DatabaseName = x.Value });

            var databases = databasesName.Select(x =>
                                                 new Database {
                Name = x.DatabaseName, ServerId = command.SqlServerId
            }).ToList();

            await _repository.AddRangeAsync(databases);
        }
コード例 #2
0
        private async Task UserSessionMetricCollect(DbWorkerOperationCompleted command)
        {
            var flatResults =
                command.Result.SelectMany(x => x)
                .Where(x => x.Key == "login_name" && x.Value != "");

            var connectedUsers = new List <string>();

            foreach (var result in flatResults)
            {
                connectedUsers.Add(result.Value);
            }

            await _busClient.PublishAsync(new UserSessionMetricsCompleted(
                                              command.Id,
                                              command.UserId,
                                              command.SqlServerId,
                                              connectedUsers
                                              ));
        }
コード例 #3
0
        private async Task MemoryUsageMetricCollect(DbWorkerOperationCompleted command)
        {
            var memoryUsageMetrics = new MemoryUsageMetricsModel
            {
                RequestsCount  = Convert.ToInt32(command.Result[0]["cntr_value"]),
                PageReadsCount = Convert.ToInt32(command.Result[1]["cntr_value"]),
                PageLifetime   = Convert.ToInt32(command.Result[2]["cntr_value"]),
                ServerId       = command.SqlServerId
            };

            await _memoryUsageMetricsService.CreateAsync(memoryUsageMetrics);

            await _busClient.PublishAsync(new ServerMemoryUsageMetricsCompleted(
                                              command.Id,
                                              command.UserId,
                                              memoryUsageMetrics.ServerId,
                                              memoryUsageMetrics.RequestsCount,
                                              memoryUsageMetrics.PageReadsCount,
                                              memoryUsageMetrics.PageLifetime
                                              ));
        }
コード例 #4
0
        private async Task DatabaseSpaceMetricCollect(DbWorkerOperationCompleted command)
        {
            var databaseSpaceMetrics = new DatabaseSpaceMetricsModel();
            var flatResult           = command.Result.SelectMany(x => x).Where(x => x.Key == "database_size" || x.Key == "unallocated space");
            var databaseSize         = flatResult.FirstOrDefault(x => x.Key == "database_size").Value.Split();

            databaseSpaceMetrics.DatabaseId       = command.DatabaseId;
            databaseSpaceMetrics.Space            = Convert.ToDouble(flatResult.FirstOrDefault(x => x.Key == "database_size").Value.Split()[0]);
            databaseSpaceMetrics.UnallocatedSpace = Convert.ToDouble(flatResult.FirstOrDefault(x => x.Key == "unallocated space").Value.Split()[0]);
            databaseSpaceMetrics.Unit             = "MB";

            await _databaseSpaceMetricsService.CreateAsync(databaseSpaceMetrics);

            await _busClient.PublishAsync(new DatabaseSpaceUsageMetricsCompleted(
                                              command.Id,
                                              command.UserId,
                                              databaseSpaceMetrics.DatabaseId,
                                              databaseSpaceMetrics.Space,
                                              databaseSpaceMetrics.UnallocatedSpace,
                                              databaseSpaceMetrics.Unit
                                              ));
        }
コード例 #5
0
        public async Task ProcessMetrics(DbWorkerOperationCompleted command)
        {
            if (command.SqlQueryName == (int)SqlQueryNames.DatabaseSpaceStatus)
            {
                await DatabaseSpaceMetricCollect(command);
            }

            if (command.SqlQueryName == (int)SqlQueryNames.DatabasesBackupStatus)
            {
                await DatabaseBackupMetricCollect(command);
            }

            if (command.SqlQueryName == (int)SqlQueryNames.ConnectedUsers)
            {
                await UserSessionMetricCollect(command);
            }

            if (command.SqlQueryName == (int)SqlQueryNames.MemoryUsage)
            {
                await MemoryUsageMetricCollect(command);
            }
        }
コード例 #6
0
        private async Task DatabaseBackupMetricCollect(DbWorkerOperationCompleted command)
        {
            var databases = await _databaseService.GetAllAsync(x => x.ServerId == command.SqlServerId);

            var models = new List <DatabaseBackupMetricsModel>();

            foreach (var result in command.Result)
            {
                var databaseBackupMetrics = new DatabaseBackupMetricsModel();
                var full         = result["full DB Backup Status"];
                var transaction  = result["transaction DB Backup Status"];
                var differential = result["differential DB Backup Status"];
                var dbName       = result["databasE_Name"];

                databaseBackupMetrics.Full          = !string.IsNullOrWhiteSpace(full) ? DateTime.Parse(full) : (DateTime?)null;
                databaseBackupMetrics.Transaction   = !string.IsNullOrWhiteSpace(transaction) ? DateTime.Parse(transaction) : (DateTime?)null;
                databaseBackupMetrics.Differential  = !string.IsNullOrWhiteSpace(differential) ? DateTime.Parse(differential) : (DateTime?)null;
                databaseBackupMetrics.RecoveryModel = result["recoveryModel"];
                databaseBackupMetrics.DatabaseId    = databases.FirstOrDefault(x => x.Name == dbName).Id;
                models.Add(databaseBackupMetrics);
            }

            await _databaseBackupMetricsService.AddRangeAsync(models);
        }