1
0
mirror of https://github.com/akpaevj/onecmonitor.git synced 2025-10-30 23:47:59 +02:00

Обретка чтения настроек ЖР в попытку

This commit is contained in:
akpaev.e
2025-09-26 21:44:04 +03:00
parent 67fee78543
commit 0bcab7dd75
4 changed files with 37 additions and 24 deletions

View File

@@ -136,7 +136,7 @@ internal class CommandsWatcher
}
catch (Exception ex)
{
_logger.LogTrace(ex, "Ошибка обработки сообщения");
_logger.LogError(ex, "Ошибка обработки сообщения");
await _server.Error(message, ex.Message, _applicationLifetime.ApplicationStopping);
}
}

View File

@@ -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()

View File

@@ -3,7 +3,8 @@
"LogLevel": {
"Default": "Information",
"Microsoft.Hosting.Lifetime": "Information",
"Microsoft.EntityFrameworkCore.Database": "Warning"
"Microsoft.EntityFrameworkCore.Database": "Warning",
"OneSwiss.Agent.Services.CommandsWatcher": "Trace"
}
}
}

View File

@@ -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);