You've already forked onecmonitor
mirror of
https://github.com/akpaevj/onecmonitor.git
synced 2026-06-17 22:34:48 +02:00
143 lines
4.7 KiB
Plaintext
143 lines
4.7 KiB
Plaintext
@page "/techlog/settings"
|
|
@inject AgentsConnectionsManager AgentsConnectionsManager
|
|
@inject TechLogRepositoryManager TechLogRepositoryManager
|
|
@inject IMapper Mapper
|
|
@inject ISnackbar SnackBar
|
|
@using FluentValidation
|
|
@using global::AutoMapper
|
|
@using Microsoft.EntityFrameworkCore
|
|
@using OneSwiss.Common.DTO
|
|
@using OneSwiss.Common.Services
|
|
@using OneSwiss.Common.Storage
|
|
@using OneSwiss.Server.Attributes
|
|
@using OneSwiss.Server.Components.Shared
|
|
@using OneSwiss.Server.Extensions
|
|
@using OneSwiss.Server.Services
|
|
@implements IDisposable
|
|
|
|
@attribute [ExtAuthorize]
|
|
|
|
<MudText Typo="Typo.h6" Class="mb-3">Сервис экспорта технологического журнала</MudText>
|
|
|
|
<SettingsForm @ref="_editor" T="Models.TechLogSettings"
|
|
Validation="@_validator.ValidateValue"
|
|
AfterSave="AfterSave">
|
|
<MudStack>
|
|
<MudSwitch Class="mb-3" Label="Включен" For="@(() => _editor.Model!.Enabled)"
|
|
@bind-Value="@_editor.Model!.Enabled" Color="Color.Primary"/>
|
|
<MudSelect Class="mb-3" Label="СУБД" For="@(() => _editor.Model!.DbmsId)" @bind-Value="@_editor.Model!.DbmsId"
|
|
Clearable="true">
|
|
@foreach (var item in _editor.Context!.Dbms.ToList())
|
|
{
|
|
<MudSelectItem Value="@((Guid?)item.Id)">@item.Name</MudSelectItem>
|
|
}
|
|
</MudSelect>
|
|
<MudTextField Class="mb-3" Label="Имя базы данных" For="@(() => _editor.Model!.DatabaseName)"
|
|
@bind-Value="@_editor.Model!.DatabaseName"/>
|
|
<MudTextField Class="mb-3" Label="Имя таблицы" For="@(() => _editor.Model!.Table)"
|
|
@bind-Value="@_editor.Model!.Table"/>
|
|
<MudSelect Class="mb-3" Label="Учетные данные" For="@(() => _editor.Model!.CredentialsId)"
|
|
@bind-Value="@_editor.Model!.CredentialsId" Clearable="true">
|
|
@foreach (var item in _editor.Context!.Credentials.Where(c => !c.IsToken).ToList())
|
|
{
|
|
<MudSelectItem Value="@((Guid?)item.Id)">@item.Name</MudSelectItem>
|
|
}
|
|
</MudSelect>
|
|
</MudStack>
|
|
</SettingsForm>
|
|
|
|
@code
|
|
{
|
|
private CancellationTokenSource? _cts;
|
|
private SettingsForm<Models.TechLogSettings> _editor = null!;
|
|
private readonly Validator _validator = new();
|
|
|
|
protected override void OnInitialized()
|
|
{
|
|
_cts = new CancellationTokenSource();
|
|
}
|
|
|
|
private class Validator : ModelValidator<Models.TechLogSettings>
|
|
{
|
|
public Validator()
|
|
{
|
|
When(c => c.Enabled, () =>
|
|
{
|
|
RuleFor(x => x.DatabaseName)
|
|
.NotEmpty()
|
|
.WithMessage("Не указано имя базы данных");
|
|
|
|
RuleFor(x => x.Table)
|
|
.NotEmpty()
|
|
.WithMessage("Не указана таблица базы данных");
|
|
|
|
RuleFor(x => x.DbmsId)
|
|
.NotEmpty()
|
|
.WithMessage("Не указана СУБД");
|
|
|
|
RuleFor(x => x.CredentialsId)
|
|
.NotEmpty()
|
|
.WithMessage("Не указаны учетные данные");
|
|
});
|
|
}
|
|
}
|
|
|
|
private async Task InitDataBase()
|
|
{
|
|
var settings = await _editor.Context!.TechLogSettings
|
|
.AsNoTracking()
|
|
.Include(c => c.Dbms)
|
|
.Include(c => c.Credentials)
|
|
.SingleOrDefaultAsync(_cts!.Token);
|
|
|
|
var settingsDto = Mapper.Map<TechLogSettingsDto>(settings);
|
|
|
|
using var context = new ClickHouseContext(
|
|
settingsDto.Dbms,
|
|
settingsDto.Credentials,
|
|
settingsDto.DatabaseName,
|
|
settingsDto.Table);
|
|
|
|
await context.InitTechLogTable(_cts!.Token);
|
|
}
|
|
|
|
private async Task AfterSave(Models.TechLogSettings obj)
|
|
{
|
|
if (!obj.Enabled)
|
|
return;
|
|
|
|
try
|
|
{
|
|
await InitDataBase();
|
|
|
|
SnackBar.ShowSuccess("База данных инициализирована");
|
|
|
|
var settings = await _editor.Context!.TechLogSettings
|
|
.Include(c => c.Credentials)
|
|
.Include(c => c.Dbms)
|
|
.SingleOrDefaultAsync();
|
|
|
|
TechLogRepositoryManager.UpdateSettings(Mapper.Map<TechLogSettingsDto>(settings));
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
SnackBar.ShowError(e);
|
|
return;
|
|
}
|
|
|
|
try
|
|
{
|
|
await AgentsConnectionsManager.RaiseUpdateSettings(_cts!.Token);
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
SnackBar.ShowError(e);
|
|
}
|
|
}
|
|
|
|
public void Dispose()
|
|
{
|
|
_cts?.Dispose();
|
|
}
|
|
}
|