You've already forked onecmonitor
							
							
				mirror of
				https://github.com/akpaevj/onecmonitor.git
				synced 2025-10-30 23:47:59 +02:00 
			
		
		
		
	Обретка чтения настроек ЖР в попытку
This commit is contained in:
		| @@ -136,7 +136,7 @@ internal class CommandsWatcher | ||||
|         } | ||||
|         catch (Exception ex) | ||||
|         { | ||||
|             _logger.LogTrace(ex, "Ошибка обработки сообщения"); | ||||
|             _logger.LogError(ex, "Ошибка обработки сообщения"); | ||||
|             await _server.Error(message, ex.Message, _applicationLifetime.ApplicationStopping); | ||||
|         } | ||||
|     } | ||||
|   | ||||
| @@ -12,7 +12,8 @@ public class EventLogExportManager( | ||||
|     V8ServicesProvider v8ServicesProvider, | ||||
|     EventLogExporter exporter, | ||||
|     ILogger<IEventLogReader> logReaderLogger, | ||||
|     MonitorQueue<EventLogSettingsDto> settingsQueue) | ||||
|     MonitorQueue<EventLogSettingsDto> settingsQueue, | ||||
|     ILogger<EventLogExportManager> logger) | ||||
|     : BackgroundService | ||||
| { | ||||
|     private CancellationTokenSource? _cts; | ||||
| @@ -23,28 +24,36 @@ public class EventLogExportManager( | ||||
|     { | ||||
|         while (!cancellationToken.IsCancellationRequested) | ||||
|         { | ||||
|             var settings = await settingsQueue.DequeueAsync(cancellationToken); | ||||
|             await InitFromSettings(settings, cancellationToken); | ||||
|              | ||||
|             DisposeReaders(); | ||||
|  | ||||
|             if (!settings.Enabled)  | ||||
|                 continue; | ||||
|              | ||||
|             foreach (var exportItem in settings.Items.Where(c => c.IsActive)) | ||||
|             try | ||||
|             { | ||||
|                 var ragent = v8ServicesProvider.GetActiveRagentByPort(exportItem.InfoBase.Cluster.RagentPort); | ||||
|                 var clusterCatalog = Path.Combine(ragent.WorkingDirectory, $"reg_{exportItem.InfoBase.Cluster.Port}"); | ||||
|                 var infoBaseLogCatalog = Path.Combine(clusterCatalog, exportItem.InfoBase.InfoBaseInternalId, "1Cv8Log"); | ||||
|                 var settings = await settingsQueue.DequeueAsync(cancellationToken); | ||||
|                 await InitFromSettings(settings, cancellationToken); | ||||
|              | ||||
|                 DisposeReaders(); | ||||
|  | ||||
|                 var infoBaseInfo = new InfoBaseInfo(ragent.Platform, infoBaseLogCatalog, | ||||
|                     exportItem.InfoBase.InfoBaseName, exportItem.InfoBase.InfoBaseInternalId, exportItem.Ttl); | ||||
|                 if (!settings.Enabled)  | ||||
|                     continue; | ||||
|              | ||||
|                 foreach (var exportItem in settings.Items.Where(c => c.IsActive)) | ||||
|                 { | ||||
|                     var ragent = v8ServicesProvider.GetActiveRagentByPort(exportItem.InfoBase.Cluster.RagentPort); | ||||
|                     var clusterCatalog = Path.Combine(ragent.WorkingDirectory, $"reg_{exportItem.InfoBase.Cluster.Port}"); | ||||
|                     var infoBaseLogCatalog = Path.Combine(clusterCatalog, exportItem.InfoBase.InfoBaseInternalId, "1Cv8Log"); | ||||
|  | ||||
|                     var infoBaseInfo = new InfoBaseInfo(ragent.Platform, infoBaseLogCatalog, | ||||
|                         exportItem.InfoBase.InfoBaseName, exportItem.InfoBase.InfoBaseInternalId, exportItem.Ttl); | ||||
|                  | ||||
|                 var reader = new BracketsEventLogReader(infoBaseInfo, exporter, logReaderLogger); | ||||
|                 _readers.Add(reader); | ||||
|                     var reader = new BracketsEventLogReader(infoBaseInfo, exporter, logReaderLogger); | ||||
|                     _readers.Add(reader); | ||||
|                  | ||||
|                 var position = await exporter.GetLastEventDateTime(infoBaseInfo.InfoBaseId, _cts!.Token); | ||||
|                 reader.Start(position, _cts!.Token); | ||||
|                     var position = await exporter.GetLastEventDateTime(infoBaseInfo.InfoBaseId, _cts!.Token); | ||||
|                     reader.Start(position, _cts!.Token); | ||||
|                 } | ||||
|             } | ||||
|             catch (OperationCanceledException) {} | ||||
|             catch (Exception e) | ||||
|             { | ||||
|                 logger.LogError(e, "Ошибка обработки новых настроек экспорта журнала регистрации"); | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| @@ -53,12 +62,15 @@ public class EventLogExportManager( | ||||
|     { | ||||
|         if (_cts != null) | ||||
|             await _cts.CancelAsync(); | ||||
|  | ||||
|          | ||||
|         _cts = CancellationTokenSource.CreateLinkedTokenSource(cancellationToken); | ||||
|  | ||||
|         _settings = settings; | ||||
|          | ||||
|         await exporter.Init(settings.GetDbContext(), _settings, _cts.Token); | ||||
|         if (settings.Enabled) | ||||
|             await exporter.Init(_settings.GetDbContext(), _settings, _cts.Token); | ||||
|         else | ||||
|             await exporter.FlushAsync(_cts.Token); | ||||
|     } | ||||
|  | ||||
|     private void DisposeReaders() | ||||
|   | ||||
| @@ -3,7 +3,8 @@ | ||||
|     "LogLevel": { | ||||
|       "Default": "Information", | ||||
|       "Microsoft.Hosting.Lifetime": "Information", | ||||
|       "Microsoft.EntityFrameworkCore.Database": "Warning" | ||||
|       "Microsoft.EntityFrameworkCore.Database": "Warning", | ||||
|       "OneSwiss.Agent.Services.CommandsWatcher": "Trace" | ||||
|     } | ||||
|   } | ||||
| } | ||||
|   | ||||
| @@ -13,7 +13,7 @@ public static class EventLogSettingsExtensions | ||||
|         if (settings == null) | ||||
|             throw new Exception("Не установлены настройки хранилища журнала регистрации"); | ||||
|  | ||||
|         if (settings.Dbms.Type != DbmsType.ClickHouse) | ||||
|         if (settings.Dbms?.Type != DbmsType.ClickHouse) | ||||
|             throw new Exception("Only ClickHouse is supported"); | ||||
|  | ||||
|         return new ClickHouseContext(settings.Dbms, settings.Credentials, settings.DatabaseName, settings.Table); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user