logviewer

This commit is contained in:
Adam 2024-06-30 15:49:07 +02:00
parent 5fcab23479
commit 0b53befc75
9 changed files with 35 additions and 177 deletions

View File

@ -95,4 +95,6 @@ public class SignalRTags : AcSignalRTags
public const int GetTransferDestinationToProductsByProductId = 95; public const int GetTransferDestinationToProductsByProductId = 95;
public const int GetTransferDestinationToProductsByTransferDestinationId = 96; public const int GetTransferDestinationToProductsByTransferDestinationId = 96;
public const int GetAllLogItems = 100;
} }

View File

@ -20,7 +20,7 @@
<PageTitle>User permissions</PageTitle> <PageTitle>User permissions</PageTitle>
<div class="text-center m-5"> <div class="text-center m-5">
<h1>Drivers</h1> <h1>Log viewer</h1>
<h2 style="font-size:small">Manage drivers here!</h2> <h2 style="font-size:small">Manage drivers here!</h2>
</div> </div>
@ -38,7 +38,7 @@
Click="ColumnChooserButton_Click" /> Click="ColumnChooserButton_Click" />
</div> </div>
<LogViewerGridComponent DetailExpandButtonDisplayMode="GridDetailExpandButtonDisplayMode.Auto" ContextId="TiamConstClient.TransferProductId" GetAllTag="SignalRTags.GetUserProductMappingsByProductId"></LogViewerGridComponent> <LogViewerGridComponent DetailExpandButtonDisplayMode="GridDetailExpandButtonDisplayMode.Auto"></LogViewerGridComponent>
</div> </div>

View File

@ -6,6 +6,7 @@
@using TIAM.Services @using TIAM.Services
@using TIAMSharedUI.Shared.Components.Grids @using TIAMSharedUI.Shared.Components.Grids
@using TIAMWebApp.Shared.Application.Interfaces @using TIAMWebApp.Shared.Application.Interfaces
@using TIAMWebApp.Shared.Application.Models.ClientSide.UI
@using TIAMWebApp.Shared.Application.Services @using TIAMWebApp.Shared.Application.Services
@using TIAMWebApp.Shared.Application.Utility @using TIAMWebApp.Shared.Application.Utility
@using TIAM.Core.Loggers @using TIAM.Core.Loggers
@ -21,204 +22,56 @@
<LogViewerGrid Logger="_logger" <LogViewerGrid Logger="_logger"
@ref="_logViewerGrid" @ref="_logViewerGrid"
ContextIds="new [] {ContextId}"
GetAllMessageTag="GetAllTag"
SignalRClient="AdminSignalRClient" SignalRClient="AdminSignalRClient"
PageSize="10" PageSize="10"
ValidationEnabled="false" ValidationEnabled="false"
CustomizeElement="Grid_CustomizeElement" CustomizeElement="Grid_CustomizeElement"
CustomizeEditModel="CustomizeEditModel"
EditMode="GridEditMode.EditForm" EditMode="GridEditMode.EditForm"
ColumnResizeMode="GridColumnResizeMode.NextColumn" ColumnResizeMode="GridColumnResizeMode.NextColumn"
DetailExpandButtonDisplayMode="DetailExpandButtonDisplayMode" DetailExpandButtonDisplayMode="DetailExpandButtonDisplayMode"
ShowFilterRow="true"> ShowFilterRow="true">
<Columns> <Columns>
<DxGridCommandColumn Width="135" MinWidth="135" FixedPosition="GridColumnFixedPosition.Left" />
<DxGridDataColumn FieldName="Id" ShowInColumnChooser="AcDomain.IsDeveloperVersion" Visible="AcDomain.IsDeveloperVersion" DisplayFormat="N" /> <DxGridDataColumn FieldName="AcLogItemClient.Id"/>
@{ <DxGridDataColumn FieldName="AcLogItemClient.CategoryName" />
var userEmailFieldName = $"{nameof(UserProductMapping.User)}.{nameof(User.EmailAddress)}"; <DxGridDataColumn FieldName="AcLogItemClient.CallerName" />
} <DxGridDataColumn Width="80px" FieldName="AcLogItemClient.LogLevel" />
<DxGridDataColumn FieldName="@userEmailFieldName" Caption="User email" SortIndex="0" />
<DxGridDataColumn FieldName="ProductId" Caption="ServiceId" ShowInColumnChooser="AcDomain.IsDeveloperVersion" Visible="AcDomain.IsDeveloperVersion" DisplayFormat="N" />
@{
var productNameFieldName = $"{nameof(UserProductMapping.Product)}.{nameof(Product.Name)}";
}
<DxGridDataColumn FieldName="@productNameFieldName" Caption="Service name" />
<DxGridDataColumn FieldName="Permissions" />
</Columns> </Columns>
<DetailRowTemplate> <DetailRowTemplate>
@{ @{
<DxTabs> var a = ((LogitemViewerModel)context.DataItem).AcLogItemClient;
<DxTabPage Text="Products">
<ProductDetailGridComponent GetAllTag="SignalRTags.GetProductsById" ContextId="((UserProductMapping)context.DataItem).ProductId" />
</DxTabPage>
<DxTabPage Text="Cars">
<CarDetailGridComponent GetAllTag="SignalRTags.GetCarsForUserProductMapping" ContextId="((UserProductMapping)context.DataItem).Id" />
</DxTabPage>
</DxTabs>
} }
<p>@a.Text</p>
</DetailRowTemplate> </DetailRowTemplate>
<EditFormTemplate Context="UserEditFormContext">
@{
var transfer2 = (UserProductMapping)UserEditFormContext.EditModel;
}
<DxFormLayout CssClass="w-100">
<DxFormLayoutItem Caption="UserId" ColSpanLg="6" ColSpanMd="12">
@transfer2.UserId
@{
var a = UserEditFormContext.GetEditor("UserId");
}
@* <DxButton Click="() => ShowPopup((UserProductMapping)UserEditFormContext.EditModel)" Context="ButtonContext">Select user</DxButton> *@
<DxButton Click="@(async (MouseEventArgs e) => await ShowPopup((UserProductMapping)UserEditFormContext.EditModel))" Context="ButtonContext">Select user</DxButton>
</DxFormLayoutItem>
<DxFormLayoutItem Caption="Permissions" ColSpanMd="4">
@UserEditFormContext.GetEditor("Permissions")
</DxFormLayoutItem>
</DxFormLayout>
</EditFormTemplate>
</LogViewerGrid> </LogViewerGrid>
@code { @code {
[Parameter] public Guid ContextId { get; set; }
[Parameter] public IProductRelation ParentData { get; set; } = null!;
[Parameter] public int GetAllTag { get; set; } = SignalRTags.GetAllUserProductMappings;
[Parameter] public GridDetailExpandButtonDisplayMode DetailExpandButtonDisplayMode { get; set; } = GridDetailExpandButtonDisplayMode.Never; [Parameter] public GridDetailExpandButtonDisplayMode DetailExpandButtonDisplayMode { get; set; } = GridDetailExpandButtonDisplayMode.Never;
private LoggerClient<UserProductMappingGridComponent> _logger; private LoggerClient<LogViewerGridComponent> _logger;
private LogViewerGrid _logViewerGrid; private LogViewerGrid _logViewerGrid;
private UserProductMapping _tempProductMapping;
bool PopupVisible { get; set; }
private DxMaskedInput<string> _emailInput;
private DxButton _button1;
private ElementReference _errorMessage;
private string _errorCss = "display: none;";
private List<UserModelDto> FoundUsers { get; set; } = new List<UserModelDto>();
private string Email { get; set; } = "email@email.com";
string EmailMask { get; set; } = @"(\w|[.-])+@(\w|-)+\.(\w|-){2,4}";
UserModelDto _chosenUser = null!;
protected override void OnInitialized() protected override void OnInitialized()
{ {
_logger = new LoggerClient<UserProductMappingGridComponent>(LogWriters.ToArray()); _logger = new LoggerClient<LogViewerGridComponent>(LogWriters.ToArray());
base.OnInitialized(); base.OnInitialized();
} }
void CustomizeEditModel(GridCustomizeEditModelEventArgs e)
{
if (!e.IsNew) return;
if (ContextId.IsNullOrEmpty())
{
_logger.Warning($"ContextId.IsNullOrEmpty()");
return;
}
var newUpm = (UserProductMapping)e.EditModel;
newUpm.ProductId = ContextId;
var newProductMapping = new UserProductMapping
{
Id = Guid.NewGuid(),
ProductId = (Guid)ContextId,
Permissions = 2
};
//e.EditModel = newProductMapping;
}
async Task FindUser()
{
var userModelDto = await UserDataService.GetUserByEmailAsync(Email);
if (userModelDto != null)
{
_chosenUser = userModelDto;
FoundUsers.Add(_chosenUser);
_emailInput.Enabled = false;
_button1.Visible = false;
}
else
{
_emailInput.Value = "email@email.com";
_errorCss = "display: block";
}
}
void CancelCreateClick()
{
PopupVisible = false;
}
void SelectDriverPopupClosed()
{
//cancel clicked
}
void SelectDriverPopupClosing(PopupClosingEventArgs args)
{
//myModel = new TransferWizardModel();
}
public Task SubmitForm(object result)
{
_logger.Info($"Submitted nested form: {result.GetType().FullName}");
return Task.CompletedTask;
}
public Task ShowPopup(UserProductMapping emptyProductMapping)
{
_tempProductMapping = emptyProductMapping;
PopupVisible = true;
return Task.CompletedTask;
}
private async Task OnUserSelected(Guid userId)
{
// Logic after the user is selected
await Task.Run(() => Console.WriteLine($"Selected User ID: {userId}"));
}
private async Task OnRowClick(GridRowClickEventArgs e) private async Task OnRowClick(GridRowClickEventArgs e)
{ {
await SelectUser((Guid)e.Grid.GetRowValue(e.VisibleIndex, "Id"));
}
private async Task SelectUser(Guid id)
{
PopupVisible = false;
_tempProductMapping.UserId = id;
await OnUserSelected(id);
} }
void Grid_CustomizeElement(GridCustomizeElementEventArgs e) void Grid_CustomizeElement(GridCustomizeElementEventArgs e)
{ {
if (e.ElementType == GridElementType.DataRow && (int)e.Grid.GetRowValue(e.VisibleIndex, "Permissions") == 1)
{
e.Style = "display: none";
}
// else if (e.ElementType == GridElementType.HeaderCell)
// {
// e.Style = "background-color: rgba(0, 0, 0, 0.08); font-style=bold";
// }
} }
} }

View File

@ -11,10 +11,7 @@ public class LogViewerGrid : TiamGrid<LogitemViewerModel>
{ {
public LogViewerGrid() : base() public LogViewerGrid() : base()
{ {
GetAllMessageTag = SignalRTags.GetAllUserProductMappings; GetAllMessageTag = SignalRTags.GetAllLogItems;
AddMessageTag = SignalRTags.CreateUserProductMapping;
UpdateMessageTag = SignalRTags.UpdateUserProductMapping;
RemoveMessageTag = SignalRTags.DeleteUserProductMapping;
} }
protected override Task SetParametersAsyncCore(ParameterView parameters) protected override Task SetParametersAsyncCore(ParameterView parameters)

View File

@ -26,6 +26,7 @@
<DxMenuItem NavigateUrl="sysadmin/userproductmappings" Text="Permissions" /> <DxMenuItem NavigateUrl="sysadmin/userproductmappings" Text="Permissions" />
<DxMenuItem NavigateUrl="sysadmin/users" Text="Users" /> <DxMenuItem NavigateUrl="sysadmin/users" Text="Users" />
<DxMenuItem NavigateUrl="sysadmin/logs" Text="Logs" />
</Items> </Items>
</DxMenuItem> </DxMenuItem>
<DxMenuItem Text="HotelAdmin" IconCssClass="menu-icon-support menu-icon"> <DxMenuItem Text="HotelAdmin" IconCssClass="menu-icon-support menu-icon">

View File

@ -1,9 +1,11 @@
using AyCode.Core.Consts; using AyCode.Core.Consts;
using AyCode.Entities.Server.LogItems; using AyCode.Entities.Server.LogItems;
using AyCode.Services.SignalRs;
using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Cors; using Microsoft.AspNetCore.Cors;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using TIAM.Database.DataLayers.Admins; using TIAM.Database.DataLayers.Admins;
using TIAM.Services;
using TIAMWebApp.Server.Services; using TIAMWebApp.Server.Services;
using TIAMWebApp.Shared.Application.Models; using TIAMWebApp.Shared.Application.Models;
using TIAMWebApp.Shared.Application.Models.ClientSide.UI; using TIAMWebApp.Shared.Application.Models.ClientSide.UI;
@ -51,16 +53,17 @@ namespace TIAMWebApp.Server.Controllers
[AllowAnonymous] [AllowAnonymous]
[HttpGet] [HttpGet]
[Route(APIUrls.GetAllLogItemsRouteName)] [Route(APIUrls.GetAllLogItemsRouteName)]
[SignalR(SignalRTags.GetAllLogItems)]
public async Task<List<LogitemViewerModel>> GetAllLogItems() public async Task<List<LogitemViewerModel>> GetAllLogItems()
{ {
var result = await _adminDal.GetLogItemsAsync(); var result = await _adminDal.GetLogItemsAsync();
List<LogitemViewerModel> returnList = new List<LogitemViewerModel>(); List<LogitemViewerModel> returnList = new List<LogitemViewerModel>();
foreach (var item in result) for (int i = 0; i < 100; i++ )
{ {
returnList.Add(new LogitemViewerModel(Guid.NewGuid(), item, item.LogHeaderId));
returnList.Add(new LogitemViewerModel(Guid.NewGuid(), result[i], result[i].LogHeaderId));
} }
return returnList; return returnList;
} }
} }
} }

View File

@ -43,6 +43,7 @@ builder.Services.AddScoped<ServiceProviderAPIController>();
builder.Services.AddScoped<TransferDataAPIController>(); builder.Services.AddScoped<TransferDataAPIController>();
builder.Services.AddScoped<MessageAPIController>(); builder.Services.AddScoped<MessageAPIController>();
builder.Services.AddScoped<ProfileAPIController>(); builder.Services.AddScoped<ProfileAPIController>();
builder.Services.AddScoped<LoggerApiController>();
builder.Services.AddSignalR(options => options.MaximumReceiveMessageSize = 102400 * 1024);//.AddMessagePackProtocol(options => options.SerializerOptions = MessagePackSerializerOptions.Standard.WithSecurity(MessagePackSecurity.UntrustedData)); builder.Services.AddSignalR(options => options.MaximumReceiveMessageSize = 102400 * 1024);//.AddMessagePackProtocol(options => options.SerializerOptions = MessagePackSerializerOptions.Standard.WithSecurity(MessagePackSecurity.UntrustedData));

View File

@ -99,7 +99,7 @@ public class DevAdminSignalRHub : Hub<ISignalRHubItemServer>, IAcSignalRHubServe
//private readonly ServiceProviderAPIController _serviceProviderApiController; //private readonly ServiceProviderAPIController _serviceProviderApiController;
//private readonly TransferDataAPIController _transferDataApiController; //private readonly TransferDataAPIController _transferDataApiController;
public DevAdminSignalRHub(AdminDal adminDal, ServiceProviderAPIController serviceProviderApiController, TransferDataAPIController transferDataApiController, MessageAPIController messageApiController, ProfileAPIController profileApiController, IEnumerable<IAcLogWriterBase> logWriters) public DevAdminSignalRHub(AdminDal adminDal, ServiceProviderAPIController serviceProviderApiController, TransferDataAPIController transferDataApiController, MessageAPIController messageApiController, ProfileAPIController profileApiController, LoggerApiController loggerApiController, IEnumerable<IAcLogWriterBase> logWriters)
{ {
_adminDal = adminDal; _adminDal = adminDal;
//_serviceProviderApiController = serviceProviderApiController; //_serviceProviderApiController = serviceProviderApiController;
@ -111,6 +111,7 @@ public class DevAdminSignalRHub : Hub<ISignalRHubItemServer>, IAcSignalRHubServe
_dynamicMethodCallModels.Add(new DynamicMethodCallModel<SignalRAttribute>(transferDataApiController)); _dynamicMethodCallModels.Add(new DynamicMethodCallModel<SignalRAttribute>(transferDataApiController));
_dynamicMethodCallModels.Add(new DynamicMethodCallModel<SignalRAttribute>(messageApiController)); _dynamicMethodCallModels.Add(new DynamicMethodCallModel<SignalRAttribute>(messageApiController));
_dynamicMethodCallModels.Add(new DynamicMethodCallModel<SignalRAttribute>(profileApiController)); _dynamicMethodCallModels.Add(new DynamicMethodCallModel<SignalRAttribute>(profileApiController));
_dynamicMethodCallModels.Add(new DynamicMethodCallModel<SignalRAttribute>(loggerApiController));
//_dynamicMethodCallModels.Add(new DynamicMethodCallModel<SignalRAttribute>(typeof(AdminDal))); //_dynamicMethodCallModels.Add(new DynamicMethodCallModel<SignalRAttribute>(typeof(AdminDal)));
} }

View File

@ -7,6 +7,6 @@ namespace TIAMWebApp.Shared.Application.Utility;
public class HttpClientLogItemWriter : AcHttpClientLogItemWriter<AcLogItemClient> public class HttpClientLogItemWriter : AcHttpClientLogItemWriter<AcLogItemClient>
{ {
public HttpClientLogItemWriter(HttpClient httpClient) : base(httpClient, $"{Setting.ApiBaseUrl}/{APIUrls.Logger}") public HttpClientLogItemWriter(HttpClient httpClient) : base(httpClient, $"{Setting.ApiBaseUrl}/{APIUrls.AddLogItem}")
{ } { }
} }