web-proxy rewrite
This commit is contained in:
parent
26c741ad03
commit
283fa1abc2
10 changed files with 63 additions and 134 deletions
|
|
@ -10,24 +10,26 @@ public class ConsoleHandler : IMessageHandler<AgentSession>
|
|||
{
|
||||
public async ValueTask HandleAsync<TMessage>(AgentSession sender, TMessage message, CancellationToken cancellationToken) where TMessage : IMessage
|
||||
{
|
||||
if (message is ConsoleQueryRequest consoleQueryRequest)
|
||||
if (message is Proxy<ConsoleQueryRequest> consoleQueryRequest)
|
||||
{
|
||||
await OnConsoleQueryRequestAsync(sender, consoleQueryRequest, cancellationToken);
|
||||
}
|
||||
}
|
||||
|
||||
private async ValueTask OnConsoleQueryRequestAsync(AgentSession sender, ConsoleQueryRequest consoleQueryRequest, CancellationToken cancellationToken)
|
||||
private async ValueTask OnConsoleQueryRequestAsync(AgentSession sender, Proxy<ConsoleQueryRequest> 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<ConsoleQuery>
|
||||
{
|
||||
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);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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; }
|
||||
}
|
||||
|
|
@ -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<Agent.ConsoleQuery>))]
|
||||
[MemoryPackUnion(1001, typeof(Proxy<Agent.ConsoleQueryRequest>))]
|
||||
public partial interface IMessage { }
|
||||
17
src/Core/Insight.Domain/Messages/Proxy.cs
Normal file
17
src/Core/Insight.Domain/Messages/Proxy.cs
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
using MemoryPack;
|
||||
|
||||
namespace Insight.Domain.Messages;
|
||||
|
||||
[MemoryPackable]
|
||||
public partial class Proxy<TMessage> : 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; }
|
||||
}
|
||||
|
|
@ -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; }
|
||||
}
|
||||
|
|
@ -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<AgentSession>
|
|||
|
||||
public async ValueTask HandleAsync<TMessage>(AgentSession sender, TMessage message, CancellationToken cancellationToken) where TMessage : IMessage
|
||||
{
|
||||
if (message is ConsoleQuery consoleQuery)
|
||||
if (message is Proxy<ConsoleQuery> 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<ConsoleQuery> 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);
|
||||
}
|
||||
}
|
||||
|
|
@ -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<WebSession>
|
|||
_database = database;
|
||||
_bus = bus;
|
||||
_logger = logger;
|
||||
|
||||
_subscriptions.Add(_bus.SubscribeAsync<ConsoleQuery>(OnConsoleQueryAsync, null));
|
||||
}
|
||||
|
||||
public async ValueTask HandleAsync<TMessage>(WebSession sender, TMessage message, CancellationToken cancellationToken) where TMessage : IMessage
|
||||
{
|
||||
if (message is ConsoleQueryProxyRequest consoleRequest)
|
||||
if (message is Proxy<ConsoleQueryRequest> 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<ConsoleQueryRequest> request, CancellationToken cancellationToken)
|
||||
{
|
||||
// get host
|
||||
var hostEntity = await _database.Host()
|
||||
|
|
@ -76,28 +74,7 @@ public class ConsoleProxyHandler : IMessageHandler<WebSession>
|
|||
// 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);
|
||||
}
|
||||
}
|
||||
|
|
@ -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<WebSession>
|
|||
|
||||
public async ValueTask HandleAsync<TMessage>(WebSession sender, TMessage message, CancellationToken cancellationToken) where TMessage : IMessage
|
||||
{
|
||||
if (message is ConsoleQueryProxy consoleQuery)
|
||||
if (message is Proxy<ConsoleQuery> consoleQuery)
|
||||
{
|
||||
await _bus.PublishAsync(consoleQuery, cancellationToken);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -6,17 +6,17 @@
|
|||
{
|
||||
<MudGrid>
|
||||
<MudItem xs="12" sm="12" md="12" lg="12">
|
||||
<MudTextField T="string" Label="Query" Variant="Variant.Outlined" @bind-Text="_model.ConsoleQuery.Query" Lines="20" />
|
||||
<MudTextField T="string" Label="Query" Variant="Variant.Outlined" @bind-Text="_model.Request.Query" Lines="20" />
|
||||
</MudItem>
|
||||
|
||||
<MudItem xs="12" sm="12" md="12" lg="12">
|
||||
@if (_model.ConsoleQuery.HadErrors is false)
|
||||
@if (_model.Response.HadErrors is false)
|
||||
{
|
||||
<MudTextField T="string" Label="Data" Variant="Variant.Outlined" @bind-Text="_model.ConsoleQuery.Data" Lines="20" />
|
||||
<MudTextField T="string" Label="Data" Variant="Variant.Outlined" @bind-Text="_model.Response.Data" Lines="20" />
|
||||
}
|
||||
else
|
||||
{
|
||||
<MudTextField T="string" Label="Errors" Variant="Variant.Outlined" @bind-Text="_model.ConsoleQuery.Errors" Lines="20" />
|
||||
<MudTextField T="string" Label="Errors" Variant="Variant.Outlined" @bind-Text="_model.Response.Errors" Lines="20" />
|
||||
}
|
||||
</MudItem>
|
||||
|
||||
|
|
|
|||
|
|
@ -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<ConsoleQueryProxy>(OnQueryResultAsync, p => p.Id == _id));
|
||||
_subscriptions.Add(Bus.SubscribeAsync<Proxy<ConsoleQuery>>(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<ConsoleQueryRequest>
|
||||
{
|
||||
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<ConsoleQuery> 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();
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue