From 283fa1abc2f5946bb063f05e00ef79a0d0eb1457 Mon Sep 17 00:00:00 2001 From: Kevin Kai Berthold Date: Thu, 21 Sep 2023 23:44:05 +0200 Subject: [PATCH] web-proxy rewrite --- .../Network/Handlers/ConsoleHandler.cs | 20 +++++----- .../Messages/Agent/ConsoleQuery.cs | 25 +----------- src/Core/Insight.Domain/Messages/IMessage.cs | 12 +++--- src/Core/Insight.Domain/Messages/Proxy.cs | 17 +++++++++ .../Messages/Web/ConsoleProxy.cs | 38 ------------------- .../Network/Handlers/Agent/ConsoleHandler.cs | 17 ++------- .../Handlers/Web/ConsoleProxyHandler.cs | 33 +++------------- .../Network/Handlers/ConsoleHandler.cs | 4 +- .../Hosts/Actions/Console/Index.razor | 8 ++-- .../Hosts/Actions/Console/Index.razor.cs | 23 +++++------ 10 files changed, 63 insertions(+), 134 deletions(-) create mode 100644 src/Core/Insight.Domain/Messages/Proxy.cs delete mode 100644 src/Core/Insight.Domain/Messages/Web/ConsoleProxy.cs diff --git a/src/Agent/Insight.Agent/Network/Handlers/ConsoleHandler.cs b/src/Agent/Insight.Agent/Network/Handlers/ConsoleHandler.cs index 71097df..87aed7c 100644 --- a/src/Agent/Insight.Agent/Network/Handlers/ConsoleHandler.cs +++ b/src/Agent/Insight.Agent/Network/Handlers/ConsoleHandler.cs @@ -10,24 +10,26 @@ public class ConsoleHandler : IMessageHandler { public async ValueTask HandleAsync(AgentSession sender, TMessage message, CancellationToken cancellationToken) where TMessage : IMessage { - if (message is ConsoleQueryRequest consoleQueryRequest) + if (message is Proxy consoleQueryRequest) { await OnConsoleQueryRequestAsync(sender, consoleQueryRequest, cancellationToken); } } - private async ValueTask OnConsoleQueryRequestAsync(AgentSession sender, ConsoleQueryRequest consoleQueryRequest, CancellationToken cancellationToken) + private async ValueTask OnConsoleQueryRequestAsync(AgentSession sender, Proxy consoleQueryRequest, CancellationToken cancellationToken) { - var result = await QueryScriptAsync(consoleQueryRequest.Query); + var result = await QueryScriptAsync(consoleQueryRequest.Message.Query); - await sender.SendAsync(new ConsoleQuery + await sender.SendAsync(new Proxy { - Id = consoleQueryRequest.Id, + RequestId = consoleQueryRequest.RequestId, HostId = consoleQueryRequest.HostId, - Query = consoleQueryRequest.Query, - Data = result.Data, - Errors = result.Errors, - HadErrors = result.HadErrors + Message = new ConsoleQuery + { + Data = result.Data, + Errors = result.Errors, + HadErrors = result.HadErrors + } }, cancellationToken); } diff --git a/src/Core/Insight.Domain/Messages/Agent/ConsoleQuery.cs b/src/Core/Insight.Domain/Messages/Agent/ConsoleQuery.cs index f50d2c9..c878462 100644 --- a/src/Core/Insight.Domain/Messages/Agent/ConsoleQuery.cs +++ b/src/Core/Insight.Domain/Messages/Agent/ConsoleQuery.cs @@ -6,27 +6,12 @@ namespace Insight.Domain.Messages.Agent; public partial class ConsoleQuery : IMessage { [MemoryPackOrder(0)] - public string? Id { get; set; } - - [MemoryPackOrder(1)] - public string? HostId { get; set; } - - [MemoryPackOrder(2)] - public string? Query { get; set; } - - [MemoryPackOrder(3)] public string? Data { get; set; } - [MemoryPackOrder(4)] + [MemoryPackOrder(1)] public string? Errors { get; set; } - [MemoryPackOrder(5)] - public bool IsString { get; set; } - - [MemoryPackOrder(6)] - public bool IsArray { get; set; } - - [MemoryPackOrder(7)] + [MemoryPackOrder(2)] public bool HadErrors { get; set; } } @@ -34,11 +19,5 @@ public partial class ConsoleQuery : IMessage public partial class ConsoleQueryRequest : IMessage { [MemoryPackOrder(0)] - public string? Id { get; set; } - - [MemoryPackOrder(1)] - public string? HostId { get; set; } - - [MemoryPackOrder(2)] public string? Query { get; set; } } \ No newline at end of file diff --git a/src/Core/Insight.Domain/Messages/IMessage.cs b/src/Core/Insight.Domain/Messages/IMessage.cs index 8a7a8e5..1d9ff68 100644 --- a/src/Core/Insight.Domain/Messages/IMessage.cs +++ b/src/Core/Insight.Domain/Messages/IMessage.cs @@ -4,11 +4,9 @@ namespace Insight.Domain.Messages; [MemoryPackable] [MemoryPackUnion(0, typeof(Keepalive))] -[MemoryPackUnion(1, typeof(Agent.Authentication))] -[MemoryPackUnion(2, typeof(Agent.AuthenticationRequest))] +[MemoryPackUnion(1, typeof(Agent.AuthenticationRequest))] +[MemoryPackUnion(2, typeof(Agent.Authentication))] [MemoryPackUnion(10, typeof(Agent.InventoryRequest))] -[MemoryPackUnion(20, typeof(Agent.ConsoleQuery))] -[MemoryPackUnion(21, typeof(Agent.ConsoleQueryRequest))] [MemoryPackUnion(100, typeof(Agent.Application))] [MemoryPackUnion(101, typeof(Agent.ApplicationList))] [MemoryPackUnion(102, typeof(Agent.Drive))] @@ -41,6 +39,8 @@ namespace Insight.Domain.Messages; [MemoryPackUnion(129, typeof(Agent.VideocardList))] [MemoryPackUnion(130, typeof(Agent.VirtualMaschine))] [MemoryPackUnion(131, typeof(Agent.VirtualMaschineList))] -[MemoryPackUnion(400, typeof(Web.ConsoleQueryProxy))] -[MemoryPackUnion(401, typeof(Web.ConsoleQueryProxyRequest))] +[MemoryPackUnion(132, typeof(Agent.ConsoleQuery))] +[MemoryPackUnion(133, typeof(Agent.ConsoleQueryRequest))] +[MemoryPackUnion(1000, typeof(Proxy))] +[MemoryPackUnion(1001, typeof(Proxy))] public partial interface IMessage { } \ No newline at end of file diff --git a/src/Core/Insight.Domain/Messages/Proxy.cs b/src/Core/Insight.Domain/Messages/Proxy.cs new file mode 100644 index 0000000..a322ba6 --- /dev/null +++ b/src/Core/Insight.Domain/Messages/Proxy.cs @@ -0,0 +1,17 @@ +using MemoryPack; + +namespace Insight.Domain.Messages; + +[MemoryPackable] +public partial class Proxy : IMessage + where TMessage : IMessage +{ + [MemoryPackOrder(0)] + public string? RequestId { get; set; } + + [MemoryPackOrder(1)] + public string? HostId { get; set; } + + [MemoryPackOrder(2)] + public TMessage? Message { get; set; } +} \ No newline at end of file diff --git a/src/Core/Insight.Domain/Messages/Web/ConsoleProxy.cs b/src/Core/Insight.Domain/Messages/Web/ConsoleProxy.cs deleted file mode 100644 index 5d909d5..0000000 --- a/src/Core/Insight.Domain/Messages/Web/ConsoleProxy.cs +++ /dev/null @@ -1,38 +0,0 @@ -using MemoryPack; - -namespace Insight.Domain.Messages.Web; - -[MemoryPackable] -public partial class ConsoleQueryProxy : IMessage -{ - [MemoryPackOrder(0)] - public string? Id { get; set; } - - [MemoryPackOrder(1)] - public string? HostId { get; set; } - - [MemoryPackOrder(2)] - public string? Query { get; set; } - - [MemoryPackOrder(3)] - public string? Data { get; set; } - - [MemoryPackOrder(4)] - public string? Errors { get; set; } - - [MemoryPackOrder(7)] - public bool HadErrors { get; set; } -} - -[MemoryPackable] -public partial class ConsoleQueryProxyRequest : IMessage -{ - [MemoryPackOrder(0)] - public string? Id { get; set; } - - [MemoryPackOrder(1)] - public string? HostId { get; set; } - - [MemoryPackOrder(2)] - public string? Query { get; set; } -} \ No newline at end of file diff --git a/src/Server/Insight.Server/Network/Handlers/Agent/ConsoleHandler.cs b/src/Server/Insight.Server/Network/Handlers/Agent/ConsoleHandler.cs index 33e7fb0..f8740e8 100644 --- a/src/Server/Insight.Server/Network/Handlers/Agent/ConsoleHandler.cs +++ b/src/Server/Insight.Server/Network/Handlers/Agent/ConsoleHandler.cs @@ -1,7 +1,6 @@ using Insight.Domain.Interfaces; using Insight.Domain.Messages; using Insight.Domain.Messages.Agent; -using Insight.Domain.Messages.Web; using Microsoft.Extensions.Logging; using MongoDB.Driver; using Vaitr.Network; @@ -26,25 +25,17 @@ public class ConsoleHandler : IMessageHandler public async ValueTask HandleAsync(AgentSession sender, TMessage message, CancellationToken cancellationToken) where TMessage : IMessage { - if (message is ConsoleQuery consoleQuery) + if (message is Proxy consoleResponse) { - await OnConsoleQueryAsync(sender, consoleQuery, cancellationToken); + await OnConsoleQueryAsync(sender, consoleResponse, cancellationToken); } } - private async ValueTask OnConsoleQueryAsync(AgentSession session, ConsoleQuery query, CancellationToken cancellationToken) + private async ValueTask OnConsoleQueryAsync(AgentSession session, Proxy consoleResponse, CancellationToken cancellationToken) { // check if web online if (_webPool.FirstOrDefault().Value is not WebSession web) return; - await web.SendAsync(new ConsoleQueryProxy - { - Id = query.Id, - HostId = query.HostId, - Query = query.Query, - Data = query.Data, - Errors = query.Errors, - HadErrors = query.HadErrors - }, cancellationToken); + await web.SendAsync(consoleResponse, cancellationToken); } } \ No newline at end of file diff --git a/src/Server/Insight.Server/Network/Handlers/Web/ConsoleProxyHandler.cs b/src/Server/Insight.Server/Network/Handlers/Web/ConsoleProxyHandler.cs index 4fa49f3..ce707e0 100644 --- a/src/Server/Insight.Server/Network/Handlers/Web/ConsoleProxyHandler.cs +++ b/src/Server/Insight.Server/Network/Handlers/Web/ConsoleProxyHandler.cs @@ -1,7 +1,6 @@ using Insight.Domain.Interfaces; using Insight.Domain.Messages; using Insight.Domain.Messages.Agent; -using Insight.Domain.Messages.Web; using Insight.Infrastructure; using Insight.Infrastructure.Entities; using Microsoft.Extensions.Logging; @@ -33,19 +32,18 @@ public class ConsoleProxyHandler : IMessageHandler _database = database; _bus = bus; _logger = logger; - - _subscriptions.Add(_bus.SubscribeAsync(OnConsoleQueryAsync, null)); } public async ValueTask HandleAsync(WebSession sender, TMessage message, CancellationToken cancellationToken) where TMessage : IMessage { - if (message is ConsoleQueryProxyRequest consoleRequest) + if (message is Proxy consoleRequest) { + _logger.LogCritical("received: {0}" + consoleRequest.Message); await OnConsoleQueryRequestAsync(sender, consoleRequest, cancellationToken); } } - private async ValueTask OnConsoleQueryRequestAsync(WebSession session, ConsoleQueryProxyRequest request, CancellationToken cancellationToken) + private async ValueTask OnConsoleQueryRequestAsync(WebSession session, Proxy request, CancellationToken cancellationToken) { // get host var hostEntity = await _database.Host() @@ -76,28 +74,7 @@ public class ConsoleProxyHandler : IMessageHandler // check if agent online if (_agentPool.FirstOrDefault(p => p.Value.Id == agentEntity.Id).Value is not AgentSession agent) return; - // send "real" packet to agent - await agent.SendAsync(new ConsoleQueryRequest - { - Id = request.Id, - HostId = request.HostId, - Query = request.Query - }, cancellationToken); - } - - private async ValueTask OnConsoleQueryAsync(ConsoleQuery query, CancellationToken cancellationToken) - { - // check if web online - if (_webPool.FirstOrDefault().Value is not WebSession web) return; - - await web.SendAsync(new ConsoleQueryProxy - { - Id = query.Id, - HostId = query.HostId, - Query = query.Query, - Data = query.Data, - Errors = query.Errors, - HadErrors = query.HadErrors - }, cancellationToken); + // proxy-send request packet to agent + await agent.SendAsync(request, cancellationToken); } } \ No newline at end of file diff --git a/src/Web/Insight.Web/Network/Handlers/ConsoleHandler.cs b/src/Web/Insight.Web/Network/Handlers/ConsoleHandler.cs index 0fc7b16..fb99333 100644 --- a/src/Web/Insight.Web/Network/Handlers/ConsoleHandler.cs +++ b/src/Web/Insight.Web/Network/Handlers/ConsoleHandler.cs @@ -1,6 +1,6 @@ using Insight.Domain.Interfaces; using Insight.Domain.Messages; -using Insight.Domain.Messages.Web; +using Insight.Domain.Messages.Agent; using Vaitr.Bus; namespace Insight.Web.Network.Handlers; @@ -16,7 +16,7 @@ public class ConsoleHandler : IMessageHandler public async ValueTask HandleAsync(WebSession sender, TMessage message, CancellationToken cancellationToken) where TMessage : IMessage { - if (message is ConsoleQueryProxy consoleQuery) + if (message is Proxy consoleQuery) { await _bus.PublishAsync(consoleQuery, cancellationToken); } diff --git a/src/Web/Insight.Web/Pages/Management/Hosts/Actions/Console/Index.razor b/src/Web/Insight.Web/Pages/Management/Hosts/Actions/Console/Index.razor index e211fc7..f988c31 100644 --- a/src/Web/Insight.Web/Pages/Management/Hosts/Actions/Console/Index.razor +++ b/src/Web/Insight.Web/Pages/Management/Hosts/Actions/Console/Index.razor @@ -6,17 +6,17 @@ { - + - @if (_model.ConsoleQuery.HadErrors is false) + @if (_model.Response.HadErrors is false) { - + } else { - + } diff --git a/src/Web/Insight.Web/Pages/Management/Hosts/Actions/Console/Index.razor.cs b/src/Web/Insight.Web/Pages/Management/Hosts/Actions/Console/Index.razor.cs index 535c28b..eac27e5 100644 --- a/src/Web/Insight.Web/Pages/Management/Hosts/Actions/Console/Index.razor.cs +++ b/src/Web/Insight.Web/Pages/Management/Hosts/Actions/Console/Index.razor.cs @@ -1,5 +1,5 @@ using Insight.Domain.Messages; -using Insight.Domain.Messages.Web; +using Insight.Domain.Messages.Agent; using Insight.Infrastructure; using Insight.Infrastructure.Entities; using Insight.Web.Constants; @@ -33,7 +33,7 @@ public partial class Index protected override async Task OnInitializedAsync() { - _subscriptions.Add(Bus.SubscribeAsync(OnQueryResultAsync, p => p.Id == _id)); + _subscriptions.Add(Bus.SubscribeAsync>(OnQueryResultAsync, p => p.RequestId == _id)); } private async Task LoadDataAsync() @@ -75,15 +75,15 @@ public partial class Index private async Task SubmitAsync() { - if (_model.ConsoleQuery.Query is null || WebPool.Any() is false) return; + if (_model.Request.Query is null || WebPool.Any() is false) return; try { - await WebPool.First().Value.SendAsync(new ConsoleQueryProxyRequest + await WebPool.First().Value.SendAsync(new Proxy { - Id = _id, + RequestId = _id, HostId = HostId, - Query = _model.ConsoleQuery.Query + Message = _model.Request }, default); Notification.Information(Snackbar, "Sent Query Command"); @@ -94,17 +94,18 @@ public partial class Index } } - private async ValueTask OnQueryResultAsync(ConsoleQueryProxy query, CancellationToken cancellationToken) + private async ValueTask OnQueryResultAsync(Proxy proxy, CancellationToken cancellationToken) { - _model.ConsoleQuery.HadErrors = query.HadErrors; - _model.ConsoleQuery.Data = query.Data; - _model.ConsoleQuery.Errors = query.Errors; + _model.Response.HadErrors = proxy.Message.HadErrors; + _model.Response.Data = proxy.Message?.Data; + _model.Response.Errors = proxy.Message?.Errors; await InvokeAsync(StateHasChanged); } private class IndexViewModel { - public readonly ConsoleQueryProxy ConsoleQuery = new(); + public readonly ConsoleQueryRequest Request = new(); + public readonly ConsoleQuery Response = new(); } } \ No newline at end of file