public async Task Run(CancellationToken cancellationToken) { Console.Write("Google authorization..."); await _googleSheets.AuthorizeAsync(cancellationToken); Console.WriteLine("ok"); while (true) { cancellationToken.ThrowIfCancellationRequested(); // Собираем статистику по пространству, которое занимает каждая БД на сервере foreach (var serverConfig in _applicationConfig.DatabaseServers) { Console.Write($"Refresh statistics for `{serverConfig.Name}` server..."); string serverName = serverConfig.Name; string updateStatisticsDate = DateTime.Today.ToShortDateString(); var dbInfos = (await _pgInfo.GetDatabaseSizeAsync(serverConfig, cancellationToken)) .ToList(); // Получаем файл для хранения статистики var spreadsheet = await _googleSheets.GetSpreadsheetAsync(_googleServiceConfig.SpreadsheetId, cancellationToken); string spreadsheetId = spreadsheet.SpreadsheetId; // Производим поиск листа var serverSheet = spreadsheet.Sheets.FirstOrDefault(x => x.Properties.Title == serverName); if (serverSheet == null) { // Если лист не найден, то добавляем новый await _googleSheets.AddSheetAsync(spreadsheetId, serverName, cancellationToken); } else { // Иначе очищаем лист от устаревших данных await _googleSheets.FillSheetAsync(spreadsheetId, serverName, 16, 64, string.Empty, cancellationToken); } // Подготавливаем данные для записи // Заголовок var values = new List <IList <object> > { new List <object> { "Сервер", "База данных", "Размер в ГБ", "Дата обновления" } }; // Информация о базах данных decimal ConvertToGb(decimal bytes) => Math.Round(bytes / 1024m / 1024 / 1024, 2); for (var i = 0; i < dbInfos.Count; i++) { var dbInfo = dbInfos[i]; values.Add ( new List <object> { // Для первой записи записываем наименование сервера i == 0 ? serverName : string.Empty, dbInfo.Name, ConvertToGb(dbInfo.Size), updateStatisticsDate } ); } // Дополнительная информация об оставшемся свободном месте values.Add(new List <object>()); values.Add(new List <object> { string.Empty, "Свободно", serverConfig.TotalDiskSizeInGb - ConvertToGb(dbInfos.Sum(x => x.Size)) }); await _googleSheets.UpdateValuesAsync(spreadsheetId, serverName, values, cancellationToken); Console.WriteLine("ok"); } Console.WriteLine("Waiting..."); await Task.Delay(_applicationConfig.RefreshDelay, cancellationToken); } }
public async Task Run(CancellationToken cancellationToken) { Console.Write("Google authorization"); await _googleSheets.AuthorizeAsync(cancellationToken); Console.WriteLine("ok"); while (true) { cancellationToken.ThrowIfCancellationRequested(); foreach (var serverConfig in _applicationConfig.DatabaseServers) { Console.Write($"Refresh '{serverConfig.Name}'"); string serverName = serverConfig.Name; string updateStatisticsDate = DateTime.Today.ToShortDateString(); var dbInfos = (await _dbInfo.GetDatabaseSizeAsync(serverConfig, cancellationToken)) .ToList(); var spreadsheet = await _googleSheets.GetSpreadsheetAsync(_googleServiceConfig.SpreadsheetId, cancellationToken); string spreadsheetId = spreadsheet.SpreadsheetId; var serverSheet = spreadsheet.Sheets.FirstOrDefault(x => x.Properties.Title == serverName); if (serverSheet == null) { await _googleSheets.AddSheetAsync(spreadsheetId, serverName, cancellationToken); } else { await _googleSheets.FillSheetAsync(spreadsheetId, serverName, 16, 64, string.Empty, cancellationToken); } var values = new List <IList <object> > { new List <object> { "Сервер", "База данных", "Размер в ГБ", "Дата обновления" } }; for (var i = 0; i < dbInfos.Count; i++) { var dbInfo = dbInfos[i]; values.Add ( new List <object> { i == 0 ? serverName : string.Empty, dbInfo.Name, ConvertToGb(dbInfo.Size), updateStatisticsDate } ); } values.Add(new List <object>()); values.Add(new List <object> { string.Empty, "Свободно", serverConfig.DiskSize - ConvertToGb(dbInfos.Sum(x => x.Size)) }); await _googleSheets.UpdateValuesAsync(spreadsheetId, serverName, values, cancellationToken); Console.WriteLine("ok"); } Console.WriteLine("..."); await Task.Delay(_applicationConfig.RefreshDelay, cancellationToken); } }