net8, language features, bugfixes
This commit is contained in:
parent
1591618c2c
commit
ce99053a10
353 changed files with 3245 additions and 3944 deletions
|
|
@ -7,18 +7,16 @@ using Vaitr.Network;
|
|||
|
||||
namespace Insight.Server.Network.Agent;
|
||||
|
||||
public class AgentSession : TcpSession<IMessage>
|
||||
public class AgentSession(
|
||||
AgentHandler agentHandler,
|
||||
IEnumerable<IMessageHandler<AgentSession>> handlers,
|
||||
ISerializer<IMessage> serializer,
|
||||
ILogger<AgentSession> logger) : TcpSession<IMessage>(serializer, logger)
|
||||
{
|
||||
public string? Id { get; set; }
|
||||
|
||||
private readonly AgentHandler _agentHandler;
|
||||
private readonly IEnumerable<IMessageHandler<AgentSession>> _handlers;
|
||||
|
||||
public AgentSession(AgentHandler agentHandler, IEnumerable<IMessageHandler<AgentSession>> handlers, ISerializer<IMessage> serializer, ILogger<AgentSession> logger) : base(serializer, logger)
|
||||
{
|
||||
_agentHandler = agentHandler;
|
||||
_handlers = handlers;
|
||||
}
|
||||
private readonly AgentHandler _agentHandler = agentHandler;
|
||||
private readonly IEnumerable<IMessageHandler<AgentSession>> _handlers = handlers;
|
||||
|
||||
protected override async ValueTask OnConnectedAsync(CancellationToken cancellationToken)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -8,16 +8,10 @@ using MongoDB.Driver;
|
|||
|
||||
namespace Insight.Server.Network.Agent.Handlers;
|
||||
|
||||
public class AgentHandler : IMessageHandler<AgentSession>
|
||||
public class AgentHandler(IMongoDatabase database, ILogger<AgentHandler> logger) : IMessageHandler<AgentSession>
|
||||
{
|
||||
private readonly IMongoDatabase _database;
|
||||
private readonly ILogger<AgentHandler> _logger;
|
||||
|
||||
public AgentHandler(IMongoDatabase database, ILogger<AgentHandler> logger)
|
||||
{
|
||||
_database = database;
|
||||
_logger = logger;
|
||||
}
|
||||
private readonly IMongoDatabase _database = database;
|
||||
private readonly ILogger<AgentHandler> _logger = logger;
|
||||
|
||||
public async ValueTask HandleAsync<TMessage>(AgentSession sender, TMessage message, CancellationToken cancellationToken) where TMessage : IMessage
|
||||
{
|
||||
|
|
|
|||
|
|
@ -5,14 +5,9 @@ using Microsoft.Extensions.Logging;
|
|||
|
||||
namespace Insight.Server.Network.Agent.Handlers;
|
||||
|
||||
public class CustomHandler : IMessageHandler<AgentSession>
|
||||
public class CustomHandler(ILogger<CustomHandler> logger) : IMessageHandler<AgentSession>
|
||||
{
|
||||
private readonly ILogger<CustomHandler> _logger;
|
||||
|
||||
public CustomHandler(ILogger<CustomHandler> logger)
|
||||
{
|
||||
_logger = logger;
|
||||
}
|
||||
private readonly ILogger<CustomHandler> _logger = logger;
|
||||
|
||||
public async ValueTask HandleAsync<TMessage>(AgentSession sender, TMessage message, CancellationToken cancellationToken) where TMessage : IMessage
|
||||
{
|
||||
|
|
@ -24,8 +19,9 @@ public class CustomHandler : IMessageHandler<AgentSession>
|
|||
}
|
||||
}
|
||||
|
||||
private async ValueTask OnResponseAsync(AgentSession sender, Response response, CancellationToken cancellationToken)
|
||||
private ValueTask OnResponseAsync(AgentSession sender, Response response, CancellationToken cancellationToken)
|
||||
{
|
||||
_logger.LogWarning($"Response: {response.ResponseData}");
|
||||
_logger.LogWarning("Response: {response}", response.ResponseData);
|
||||
return default;
|
||||
}
|
||||
}
|
||||
|
|
@ -7,14 +7,9 @@ using MongoDB.Driver;
|
|||
|
||||
namespace Insight.Server.Network.Agent.Handlers;
|
||||
|
||||
public class DriveHandler : IMessageHandler<AgentSession>
|
||||
public class DriveHandler(IMongoDatabase database) : IMessageHandler<AgentSession>
|
||||
{
|
||||
private readonly IMongoDatabase _database;
|
||||
|
||||
public DriveHandler(IMongoDatabase database)
|
||||
{
|
||||
_database = database;
|
||||
}
|
||||
private readonly IMongoDatabase _database = database;
|
||||
|
||||
public async ValueTask HandleAsync<TMessage>(AgentSession sender, TMessage message, CancellationToken cancellationToken) where TMessage : IMessage
|
||||
{
|
||||
|
|
@ -39,7 +34,7 @@ public class DriveHandler : IMessageHandler<AgentSession>
|
|||
|
||||
var driveBulk = new List<WriteModel<HostDriveEntity>>();
|
||||
|
||||
if (drives is not null && drives.Any())
|
||||
if (drives is not null && drives.Count != 0)
|
||||
{
|
||||
foreach (var drive in drives)
|
||||
{
|
||||
|
|
@ -83,16 +78,16 @@ public class DriveHandler : IMessageHandler<AgentSession>
|
|||
|
||||
var volumeBulk = new List<WriteModel<HostVolumeEntity>>();
|
||||
|
||||
if (drives is not null && drives.Any())
|
||||
if (drives is not null && drives.Count != 0)
|
||||
{
|
||||
foreach (var drive in drives)
|
||||
{
|
||||
var driveId = await _database.HostDrive()
|
||||
.Find(p => p.Host == hostEntity.Id && p.Index == drive.Index)
|
||||
.Project(p => p.Id)
|
||||
.FirstOrDefaultAsync();
|
||||
.FirstOrDefaultAsync(cancellationToken: default);
|
||||
|
||||
if (drive.Volumes is not null && drive.Volumes.Any())
|
||||
if (drive.Volumes is not null && drive.Volumes.Count != 0)
|
||||
{
|
||||
foreach (var volume in drive.Volumes)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -3,22 +3,14 @@ using Insight.Domain.Interfaces;
|
|||
using Insight.Domain.Network;
|
||||
using Insight.Domain.Network.Agent.Messages;
|
||||
using Insight.Infrastructure.Entities;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using MongoDB.Driver;
|
||||
using static Insight.Domain.Network.Agent.Messages.Event;
|
||||
|
||||
namespace Insight.Server.Network.Agent.Handlers;
|
||||
|
||||
public class EventHandler : IMessageHandler<AgentSession>
|
||||
public class EventHandler(IMongoDatabase database) : IMessageHandler<AgentSession>
|
||||
{
|
||||
private readonly IMongoDatabase _database;
|
||||
private readonly ILogger<EventHandler> _logger;
|
||||
|
||||
public EventHandler(IMongoDatabase database, ILogger<EventHandler> logger)
|
||||
{
|
||||
_database = database;
|
||||
_logger = logger;
|
||||
}
|
||||
private readonly IMongoDatabase _database = database;
|
||||
|
||||
public async ValueTask HandleAsync<TMessage>(AgentSession sender, TMessage message, CancellationToken cancellationToken) where TMessage : IMessage
|
||||
{
|
||||
|
|
@ -75,13 +67,13 @@ public class EventHandler : IMessageHandler<AgentSession>
|
|||
_ => null
|
||||
};
|
||||
|
||||
CategoryEnum? category = @event.Category.ToLower() switch
|
||||
CategoryEnum? category = @event.Category?.ToLower() switch
|
||||
{
|
||||
"network" => CategoryEnum.Network,
|
||||
"application" => CategoryEnum.Application,
|
||||
"security" => CategoryEnum.Security,
|
||||
"system" => CategoryEnum.System,
|
||||
_ => null
|
||||
_ => CategoryEnum.None
|
||||
};
|
||||
|
||||
var date = DateTime.Now;
|
||||
|
|
@ -114,55 +106,59 @@ public class EventHandler : IMessageHandler<AgentSession>
|
|||
_ => null
|
||||
};
|
||||
|
||||
CategoryEnum? category = null;
|
||||
switch (@event.Category)
|
||||
var category = CategoryEnum.None;
|
||||
|
||||
if (@event.Category is not null)
|
||||
{
|
||||
case var _ when @event.Category.Contains("network", StringComparison.InvariantCultureIgnoreCase):
|
||||
category = CategoryEnum.Network;
|
||||
break;
|
||||
switch (@event.Category)
|
||||
{
|
||||
case var _ when @event.Category.Contains("network", StringComparison.InvariantCultureIgnoreCase):
|
||||
category = CategoryEnum.Network;
|
||||
break;
|
||||
|
||||
case var _ when @event.Category.Contains("application", StringComparison.InvariantCultureIgnoreCase):
|
||||
category = CategoryEnum.Application;
|
||||
break;
|
||||
case var _ when @event.Category.Contains("application", StringComparison.InvariantCultureIgnoreCase):
|
||||
category = CategoryEnum.Application;
|
||||
break;
|
||||
|
||||
case var _ when @event.Category.Contains("security", StringComparison.InvariantCultureIgnoreCase):
|
||||
category = CategoryEnum.Security;
|
||||
break;
|
||||
case var _ when @event.Category.Contains("security", StringComparison.InvariantCultureIgnoreCase):
|
||||
category = CategoryEnum.Security;
|
||||
break;
|
||||
|
||||
case var _ when @event.Category.Contains("system", StringComparison.InvariantCultureIgnoreCase):
|
||||
category = CategoryEnum.System;
|
||||
break;
|
||||
case var _ when @event.Category.Contains("system", StringComparison.InvariantCultureIgnoreCase):
|
||||
category = CategoryEnum.System;
|
||||
break;
|
||||
|
||||
case var _ when @event.Category.Contains("printservice", StringComparison.InvariantCultureIgnoreCase):
|
||||
category = CategoryEnum.Printer;
|
||||
break;
|
||||
case var _ when @event.Category.Contains("printservice", StringComparison.InvariantCultureIgnoreCase):
|
||||
category = CategoryEnum.Printer;
|
||||
break;
|
||||
|
||||
case var _ when @event.Category.Contains("taskscheduler", StringComparison.InvariantCultureIgnoreCase):
|
||||
category = CategoryEnum.Task;
|
||||
break;
|
||||
case var _ when @event.Category.Contains("taskscheduler", StringComparison.InvariantCultureIgnoreCase):
|
||||
category = CategoryEnum.Task;
|
||||
break;
|
||||
|
||||
case var _ when @event.Category.Contains("terminalservices", StringComparison.InvariantCultureIgnoreCase):
|
||||
category = CategoryEnum.RDP;
|
||||
break;
|
||||
case var _ when @event.Category.Contains("terminalservices", StringComparison.InvariantCultureIgnoreCase):
|
||||
category = CategoryEnum.RDP;
|
||||
break;
|
||||
|
||||
case var _ when @event.Category.Contains("smbclient", StringComparison.InvariantCultureIgnoreCase):
|
||||
category = CategoryEnum.Network;
|
||||
break;
|
||||
case var _ when @event.Category.Contains("smbclient", StringComparison.InvariantCultureIgnoreCase):
|
||||
category = CategoryEnum.Network;
|
||||
break;
|
||||
|
||||
case var _ when @event.Category.Contains("smbserver", StringComparison.InvariantCultureIgnoreCase):
|
||||
category = CategoryEnum.Network;
|
||||
break;
|
||||
case var _ when @event.Category.Contains("smbserver", StringComparison.InvariantCultureIgnoreCase):
|
||||
category = CategoryEnum.Network;
|
||||
break;
|
||||
|
||||
case var _ when @event.Category.Contains("storagespaces", StringComparison.InvariantCultureIgnoreCase):
|
||||
category = CategoryEnum.System;
|
||||
break;
|
||||
case var _ when @event.Category.Contains("storagespaces", StringComparison.InvariantCultureIgnoreCase):
|
||||
category = CategoryEnum.System;
|
||||
break;
|
||||
|
||||
case var _ when @event.Category.Contains("diagnostics", StringComparison.InvariantCultureIgnoreCase):
|
||||
category = CategoryEnum.System;
|
||||
break;
|
||||
case var _ when @event.Category.Contains("diagnostics", StringComparison.InvariantCultureIgnoreCase):
|
||||
category = CategoryEnum.System;
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
var date = DateTime.Now;
|
||||
|
|
@ -175,7 +171,7 @@ public class EventHandler : IMessageHandler<AgentSession>
|
|||
EventId = @event.EventId.ToString(),
|
||||
Status = status.ToString(),
|
||||
Source = @event.Source,
|
||||
Category = category?.ToString(),
|
||||
Category = category.ToString(),
|
||||
Message = @event.Message
|
||||
};
|
||||
|
||||
|
|
@ -183,7 +179,7 @@ public class EventHandler : IMessageHandler<AgentSession>
|
|||
return log;
|
||||
}
|
||||
|
||||
private bool FilterEventId(Event @event)
|
||||
private static bool FilterEventId(Event @event)
|
||||
{
|
||||
var filter = new List<int>
|
||||
{
|
||||
|
|
@ -234,10 +230,8 @@ public class EventHandler : IMessageHandler<AgentSession>
|
|||
return false;
|
||||
}
|
||||
|
||||
private bool FilterMonitoringHostLog(HostLogEntity hostLog)
|
||||
private static bool FilterMonitoringHostLog(HostLogEntity hostLog)
|
||||
{
|
||||
//_logger.LogDebug($"try filter event: {hostLog.Category}.{hostLog.Source}.{hostLog.Status}");
|
||||
|
||||
if (Enum.TryParse(hostLog.Status, out StatusType status) is false) return true;
|
||||
|
||||
if (hostLog.Category == CategoryEnum.System.ToString())
|
||||
|
|
|
|||
|
|
@ -7,14 +7,9 @@ using MongoDB.Driver;
|
|||
|
||||
namespace Insight.Server.Network.Agent.Handlers;
|
||||
|
||||
public class InterfaceHandler : IMessageHandler<AgentSession>
|
||||
public class InterfaceHandler(IMongoDatabase database) : IMessageHandler<AgentSession>
|
||||
{
|
||||
private readonly IMongoDatabase _database;
|
||||
|
||||
public InterfaceHandler(IMongoDatabase database)
|
||||
{
|
||||
_database = database;
|
||||
}
|
||||
private readonly IMongoDatabase _database = database;
|
||||
|
||||
public async ValueTask HandleAsync<TMessage>(AgentSession sender, TMessage message, CancellationToken cancellationToken) where TMessage : IMessage
|
||||
{
|
||||
|
|
@ -39,7 +34,7 @@ public class InterfaceHandler : IMessageHandler<AgentSession>
|
|||
|
||||
// interfaces
|
||||
|
||||
if (interfaces is not null && interfaces.Any())
|
||||
if (interfaces is not null && interfaces.Count != 0)
|
||||
{
|
||||
var interfaceBulk = new List<WriteModel<HostInterfaceEntity>>();
|
||||
|
||||
|
|
@ -95,7 +90,7 @@ public class InterfaceHandler : IMessageHandler<AgentSession>
|
|||
|
||||
// addresses
|
||||
|
||||
if (interfaces is not null && interfaces.Any())
|
||||
if (interfaces is not null && interfaces.Count != 0)
|
||||
{
|
||||
var addressBulk = new List<WriteModel<HostInterfaceAddressEntity>>();
|
||||
|
||||
|
|
@ -104,9 +99,9 @@ public class InterfaceHandler : IMessageHandler<AgentSession>
|
|||
var interfaceId = await _database.HostInterface()
|
||||
.Find(p => p.Host == hostEntity.Id && p.Index == @interface.Index)
|
||||
.Project(p => p.Id)
|
||||
.FirstOrDefaultAsync();
|
||||
.FirstOrDefaultAsync(cancellationToken: default);
|
||||
|
||||
if (@interface.Addresses is not null && @interface.Addresses.Any())
|
||||
if (@interface.Addresses is not null && @interface.Addresses.Count != 0)
|
||||
{
|
||||
foreach (var address in @interface.Addresses)
|
||||
{
|
||||
|
|
@ -146,7 +141,7 @@ public class InterfaceHandler : IMessageHandler<AgentSession>
|
|||
|
||||
// gateways
|
||||
|
||||
if (interfaces is not null && interfaces.Any())
|
||||
if (interfaces is not null && interfaces.Count != 0)
|
||||
{
|
||||
var gatewayBulk = new List<WriteModel<HostInterfaceGatewayEntity>>();
|
||||
|
||||
|
|
@ -155,9 +150,9 @@ public class InterfaceHandler : IMessageHandler<AgentSession>
|
|||
var interfaceId = await _database.HostInterface()
|
||||
.Find(p => p.Host == hostEntity.Id && p.Index == @interface.Index)
|
||||
.Project(p => p.Id)
|
||||
.FirstOrDefaultAsync();
|
||||
.FirstOrDefaultAsync(cancellationToken: default);
|
||||
|
||||
if (@interface.Gateways is not null && @interface.Gateways.Any())
|
||||
if (@interface.Gateways is not null && @interface.Gateways.Count != 0)
|
||||
{
|
||||
foreach (var gateway in @interface.Gateways)
|
||||
{
|
||||
|
|
@ -195,7 +190,7 @@ public class InterfaceHandler : IMessageHandler<AgentSession>
|
|||
|
||||
// nameservers
|
||||
|
||||
if (interfaces is not null && interfaces.Any())
|
||||
if (interfaces is not null && interfaces.Count != 0)
|
||||
{
|
||||
var nameserverBulk = new List<WriteModel<HostInterfaceNameserverEntity>>();
|
||||
|
||||
|
|
@ -204,9 +199,9 @@ public class InterfaceHandler : IMessageHandler<AgentSession>
|
|||
var interfaceId = await _database.HostInterface()
|
||||
.Find(p => p.Host == hostEntity.Id && p.Index == @interface.Index)
|
||||
.Project(p => p.Id)
|
||||
.FirstOrDefaultAsync();
|
||||
.FirstOrDefaultAsync(cancellationToken: default);
|
||||
|
||||
if (@interface.Dns is not null && @interface.Dns.Any())
|
||||
if (@interface.Dns is not null && @interface.Dns.Count != 0)
|
||||
{
|
||||
foreach (var nameserver in @interface.Dns)
|
||||
{
|
||||
|
|
@ -244,7 +239,7 @@ public class InterfaceHandler : IMessageHandler<AgentSession>
|
|||
|
||||
// routes
|
||||
|
||||
if (interfaces is not null && interfaces.Any())
|
||||
if (interfaces is not null && interfaces.Count != 0)
|
||||
{
|
||||
var routeBulk = new List<WriteModel<HostInterfaceRouteEntity>>();
|
||||
|
||||
|
|
@ -253,9 +248,9 @@ public class InterfaceHandler : IMessageHandler<AgentSession>
|
|||
var interfaceId = await _database.HostInterface()
|
||||
.Find(p => p.Host == hostEntity.Id && p.Index == @interface.Index)
|
||||
.Project(p => p.Id)
|
||||
.FirstOrDefaultAsync();
|
||||
.FirstOrDefaultAsync(cancellationToken: default);
|
||||
|
||||
if (@interface.Routes is not null && @interface.Routes.Any())
|
||||
if (@interface.Routes is not null && @interface.Routes.Count != 0)
|
||||
{
|
||||
foreach (var route in @interface.Routes)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -6,14 +6,9 @@ using MongoDB.Driver;
|
|||
|
||||
namespace Insight.Server.Network.Agent.Handlers
|
||||
{
|
||||
public class MainboardHandler : IMessageHandler<AgentSession>
|
||||
public class MainboardHandler(IMongoDatabase database) : IMessageHandler<AgentSession>
|
||||
{
|
||||
private readonly IMongoDatabase _database;
|
||||
|
||||
public MainboardHandler(IMongoDatabase database)
|
||||
{
|
||||
_database = database;
|
||||
}
|
||||
private readonly IMongoDatabase _database = database;
|
||||
|
||||
public async ValueTask HandleAsync<TMessage>(AgentSession sender, TMessage message, CancellationToken cancellationToken) where TMessage : IMessage
|
||||
{
|
||||
|
|
|
|||
|
|
@ -7,14 +7,9 @@ using MongoDB.Driver;
|
|||
|
||||
namespace Insight.Server.Network.Agent.Handlers;
|
||||
|
||||
public class MemoryHandler : IMessageHandler<AgentSession>
|
||||
public class MemoryHandler(IMongoDatabase database) : IMessageHandler<AgentSession>
|
||||
{
|
||||
private readonly IMongoDatabase _database;
|
||||
|
||||
public MemoryHandler(IMongoDatabase database)
|
||||
{
|
||||
_database = database;
|
||||
}
|
||||
private readonly IMongoDatabase _database = database;
|
||||
|
||||
public async ValueTask HandleAsync<TMessage>(AgentSession sender, TMessage message, CancellationToken cancellationToken) where TMessage : IMessage
|
||||
{
|
||||
|
|
@ -39,7 +34,7 @@ public class MemoryHandler : IMessageHandler<AgentSession>
|
|||
|
||||
var bulk = new List<WriteModel<HostMemoryEntity>>();
|
||||
|
||||
if (memory is not null && memory.Any())
|
||||
if (memory is not null && memory.Count != 0)
|
||||
{
|
||||
foreach (var mem in memory)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -6,14 +6,9 @@ using MongoDB.Driver;
|
|||
|
||||
namespace Insight.Server.Network.Agent.Handlers;
|
||||
|
||||
public class OperationSystemHandler : IMessageHandler<AgentSession>
|
||||
public class OperationSystemHandler(IMongoDatabase database) : IMessageHandler<AgentSession>
|
||||
{
|
||||
private readonly IMongoDatabase _database;
|
||||
|
||||
public OperationSystemHandler(IMongoDatabase database)
|
||||
{
|
||||
_database = database;
|
||||
}
|
||||
private readonly IMongoDatabase _database = database;
|
||||
|
||||
public async ValueTask HandleAsync<TMessage>(AgentSession sender, TMessage message, CancellationToken cancellationToken) where TMessage : IMessage
|
||||
{
|
||||
|
|
|
|||
|
|
@ -7,14 +7,9 @@ using MongoDB.Driver;
|
|||
|
||||
namespace Insight.Server.Network.Agent.Handlers;
|
||||
|
||||
public class PrinterHandler : IMessageHandler<AgentSession>
|
||||
public class PrinterHandler(IMongoDatabase database) : IMessageHandler<AgentSession>
|
||||
{
|
||||
private readonly IMongoDatabase _database;
|
||||
|
||||
public PrinterHandler(IMongoDatabase database)
|
||||
{
|
||||
_database = database;
|
||||
}
|
||||
private readonly IMongoDatabase _database = database;
|
||||
|
||||
public async ValueTask HandleAsync<TMessage>(AgentSession sender, TMessage message, CancellationToken cancellationToken) where TMessage : IMessage
|
||||
{
|
||||
|
|
@ -39,7 +34,7 @@ public class PrinterHandler : IMessageHandler<AgentSession>
|
|||
|
||||
var bulk = new List<WriteModel<HostPrinterEntity>>();
|
||||
|
||||
if (printers is not null && printers.Any())
|
||||
if (printers is not null && printers.Count != 0)
|
||||
{
|
||||
foreach (var printer in printers)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -7,14 +7,9 @@ using MongoDB.Driver;
|
|||
|
||||
namespace Insight.Server.Network.Agent.Handlers;
|
||||
|
||||
public class ProcessorHandler : IMessageHandler<AgentSession>
|
||||
public class ProcessorHandler(IMongoDatabase database) : IMessageHandler<AgentSession>
|
||||
{
|
||||
private readonly IMongoDatabase _database;
|
||||
|
||||
public ProcessorHandler(IMongoDatabase database)
|
||||
{
|
||||
_database = database;
|
||||
}
|
||||
private readonly IMongoDatabase _database = database;
|
||||
|
||||
public async ValueTask HandleAsync<TMessage>(AgentSession sender, TMessage message, CancellationToken cancellationToken) where TMessage : IMessage
|
||||
{
|
||||
|
|
@ -39,7 +34,7 @@ public class ProcessorHandler : IMessageHandler<AgentSession>
|
|||
|
||||
var bulk = new List<WriteModel<HostProcessorEntity>>();
|
||||
|
||||
if (processors is not null && processors.Any())
|
||||
if (processors is not null && processors.Count != 0)
|
||||
{
|
||||
foreach (var processor in processors)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -7,14 +7,9 @@ using MongoDB.Driver;
|
|||
|
||||
namespace Insight.Server.Network.Agent.Handlers;
|
||||
|
||||
public class ServiceHandler : IMessageHandler<AgentSession>
|
||||
public class ServiceHandler(IMongoDatabase database) : IMessageHandler<AgentSession>
|
||||
{
|
||||
private readonly IMongoDatabase _database;
|
||||
|
||||
public ServiceHandler(IMongoDatabase database)
|
||||
{
|
||||
_database = database;
|
||||
}
|
||||
private readonly IMongoDatabase _database = database;
|
||||
|
||||
public async ValueTask HandleAsync<TMessage>(AgentSession sender, TMessage message, CancellationToken cancellationToken) where TMessage : IMessage
|
||||
{
|
||||
|
|
@ -39,7 +34,7 @@ public class ServiceHandler : IMessageHandler<AgentSession>
|
|||
|
||||
var bulk = new List<WriteModel<HostServiceEntity>>();
|
||||
|
||||
if (services is not null && services.Any())
|
||||
if (services is not null && services.Count != 0)
|
||||
{
|
||||
foreach (var service in services)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -7,14 +7,9 @@ using MongoDB.Driver;
|
|||
|
||||
namespace Insight.Server.Network.Agent.Handlers;
|
||||
|
||||
public class SessionHandler : IMessageHandler<AgentSession>
|
||||
public class SessionHandler(IMongoDatabase database) : IMessageHandler<AgentSession>
|
||||
{
|
||||
private readonly IMongoDatabase _database;
|
||||
|
||||
public SessionHandler(IMongoDatabase database)
|
||||
{
|
||||
_database = database;
|
||||
}
|
||||
private readonly IMongoDatabase _database = database;
|
||||
|
||||
public async ValueTask HandleAsync<TMessage>(AgentSession sender, TMessage message, CancellationToken cancellationToken) where TMessage : IMessage
|
||||
{
|
||||
|
|
@ -39,7 +34,7 @@ public class SessionHandler : IMessageHandler<AgentSession>
|
|||
|
||||
var bulk = new List<WriteModel<HostSessionEntity>>();
|
||||
|
||||
if (sessions is not null && sessions.Any())
|
||||
if (sessions is not null && sessions.Count != 0)
|
||||
{
|
||||
foreach (var sess in sessions)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -7,14 +7,9 @@ using MongoDB.Driver;
|
|||
|
||||
namespace Insight.Server.Network.Agent.Handlers;
|
||||
|
||||
public class SoftwareHandler : IMessageHandler<AgentSession>
|
||||
public class SoftwareHandler(IMongoDatabase database) : IMessageHandler<AgentSession>
|
||||
{
|
||||
private readonly IMongoDatabase _database;
|
||||
|
||||
public SoftwareHandler(IMongoDatabase database)
|
||||
{
|
||||
_database = database;
|
||||
}
|
||||
private readonly IMongoDatabase _database = database;
|
||||
|
||||
public async ValueTask HandleAsync<TMessage>(AgentSession sender, TMessage message, CancellationToken cancellationToken) where TMessage : IMessage
|
||||
{
|
||||
|
|
@ -39,7 +34,7 @@ public class SoftwareHandler : IMessageHandler<AgentSession>
|
|||
|
||||
var bulk = new List<WriteModel<HostApplicationEntity>>();
|
||||
|
||||
if (applications is not null && applications.Any())
|
||||
if (applications is not null && applications.Count != 0)
|
||||
{
|
||||
foreach (var app in applications)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -7,14 +7,9 @@ using MongoDB.Driver;
|
|||
|
||||
namespace Insight.Server.Network.Agent.Handlers;
|
||||
|
||||
public class StoragePoolHandler : IMessageHandler<AgentSession>
|
||||
public class StoragePoolHandler(IMongoDatabase database) : IMessageHandler<AgentSession>
|
||||
{
|
||||
private readonly IMongoDatabase _database;
|
||||
|
||||
public StoragePoolHandler(IMongoDatabase database)
|
||||
{
|
||||
_database = database;
|
||||
}
|
||||
private readonly IMongoDatabase _database = database;
|
||||
|
||||
public async ValueTask HandleAsync<TMessage>(AgentSession sender, TMessage message, CancellationToken cancellationToken) where TMessage : IMessage
|
||||
{
|
||||
|
|
@ -39,7 +34,7 @@ public class StoragePoolHandler : IMessageHandler<AgentSession>
|
|||
|
||||
// storagepools
|
||||
|
||||
if (storagePools is not null && storagePools.Any())
|
||||
if (storagePools is not null && storagePools.Count != 0)
|
||||
{
|
||||
var storagepoolBulk = new List<WriteModel<HostStoragePoolEntity>>();
|
||||
|
||||
|
|
@ -55,12 +50,10 @@ public class StoragePoolHandler : IMessageHandler<AgentSession>
|
|||
|
||||
if (storagePool.States is not null)
|
||||
{
|
||||
states = new List<string>();
|
||||
states = [];
|
||||
|
||||
foreach (var state in storagePool.States)
|
||||
{
|
||||
states.Add(state.ToString());
|
||||
}
|
||||
}
|
||||
|
||||
var storagePoolUpdate = Builders<HostStoragePoolEntity>.Update
|
||||
|
|
@ -98,7 +91,7 @@ public class StoragePoolHandler : IMessageHandler<AgentSession>
|
|||
|
||||
// physicaldisks
|
||||
|
||||
if (storagePools is not null && storagePools.Any())
|
||||
if (storagePools is not null && storagePools.Count != 0)
|
||||
{
|
||||
var physicalDiskBulk = new List<WriteModel<HostStoragePoolPhysicalDiskEntity>>();
|
||||
|
||||
|
|
@ -107,9 +100,9 @@ public class StoragePoolHandler : IMessageHandler<AgentSession>
|
|||
var storagePoolId = await _database.HostStoragePool()
|
||||
.Find(p => p.Host == hostEntity.Id && p.UniqueId == storagePool.UniqueId)
|
||||
.Project(p => p.Id)
|
||||
.FirstOrDefaultAsync();
|
||||
.FirstOrDefaultAsync(cancellationToken: default);
|
||||
|
||||
if (storagePool.PhysicalDisks is not null && storagePool.PhysicalDisks.Any())
|
||||
if (storagePool.PhysicalDisks is not null && storagePool.PhysicalDisks.Count != 0)
|
||||
{
|
||||
foreach (var physicalDisk in storagePool.PhysicalDisks)
|
||||
{
|
||||
|
|
@ -124,12 +117,10 @@ public class StoragePoolHandler : IMessageHandler<AgentSession>
|
|||
|
||||
if (physicalDisk.States is not null)
|
||||
{
|
||||
states = new List<string>();
|
||||
states = [];
|
||||
|
||||
foreach (var state in physicalDisk.States)
|
||||
{
|
||||
states.Add(state.ToString());
|
||||
}
|
||||
}
|
||||
|
||||
var physicalDiskUpdate = Builders<HostStoragePoolPhysicalDiskEntity>.Update
|
||||
|
|
@ -177,20 +168,20 @@ public class StoragePoolHandler : IMessageHandler<AgentSession>
|
|||
|
||||
// virtual disks
|
||||
|
||||
if (storagePools is not null && storagePools.Any())
|
||||
if (storagePools is not null && storagePools.Count != 0)
|
||||
{
|
||||
var virtualDiskBulk = new List<WriteModel<HostStoragePoolVirtualDiskEntity>>();
|
||||
|
||||
foreach (var storagePool in storagePools)
|
||||
{
|
||||
if (storagePool.VirtualDisks is not null && storagePool.VirtualDisks.Any())
|
||||
if (storagePool.VirtualDisks is not null && storagePool.VirtualDisks.Count != 0)
|
||||
{
|
||||
foreach (var virtualDisk in storagePool.VirtualDisks)
|
||||
{
|
||||
var storagePoolId = await _database.HostStoragePool()
|
||||
.Find(p => p.Host == hostEntity.Id && p.UniqueId == storagePool.UniqueId)
|
||||
.Project(p => p.Id)
|
||||
.FirstOrDefaultAsync();
|
||||
.FirstOrDefaultAsync(cancellationToken: default);
|
||||
|
||||
var virtualDiskFilter = Builders<HostStoragePoolVirtualDiskEntity>.Filter.And(new List<FilterDefinition<HostStoragePoolVirtualDiskEntity>>
|
||||
{
|
||||
|
|
@ -203,12 +194,10 @@ public class StoragePoolHandler : IMessageHandler<AgentSession>
|
|||
|
||||
if (virtualDisk.States is not null)
|
||||
{
|
||||
states = new List<string>();
|
||||
states = [];
|
||||
|
||||
foreach (var state in virtualDisk.States)
|
||||
{
|
||||
states.Add(state.ToString());
|
||||
}
|
||||
}
|
||||
|
||||
var virtualDiskUpdate = Builders<HostStoragePoolVirtualDiskEntity>.Update
|
||||
|
|
|
|||
|
|
@ -6,14 +6,9 @@ using MongoDB.Driver;
|
|||
|
||||
namespace Insight.Server.Network.Agent.Handlers;
|
||||
|
||||
public class SystemInfoHandler : IMessageHandler<AgentSession>
|
||||
public class SystemInfoHandler(IMongoDatabase database) : IMessageHandler<AgentSession>
|
||||
{
|
||||
private readonly IMongoDatabase _database;
|
||||
|
||||
public SystemInfoHandler(IMongoDatabase database)
|
||||
{
|
||||
_database = database;
|
||||
}
|
||||
private readonly IMongoDatabase _database = database;
|
||||
|
||||
public async ValueTask HandleAsync<TMessage>(AgentSession sender, TMessage message, CancellationToken cancellationToken) where TMessage : IMessage
|
||||
{
|
||||
|
|
@ -27,22 +22,24 @@ public class SystemInfoHandler : IMessageHandler<AgentSession>
|
|||
|
||||
private async ValueTask OnSystemInfoAsync(AgentSession session, SystemInfo? system, CancellationToken cancellationToken)
|
||||
{
|
||||
var agentEntity = await _database.Agent().Find(Builders<AgentEntity>.Filter.Eq(p => p.Id, session.Id)).FirstOrDefaultAsync(cancellationToken);
|
||||
var agentEntity = await _database.Agent().Find(Builders<AgentEntity>.Filter.Eq(p => p.Id, session?.Id)).FirstOrDefaultAsync(cancellationToken);
|
||||
if (agentEntity is null) return;
|
||||
|
||||
var hostEntity = await _database.Host().Find(Builders<HostEntity>.Filter.Eq(p => p.Agent, agentEntity.Id)).FirstOrDefaultAsync(cancellationToken);
|
||||
var hostEntity = await _database.Host().Find(Builders<HostEntity>.Filter.Eq(p => p.Agent, agentEntity?.Id)).FirstOrDefaultAsync(cancellationToken);
|
||||
if (hostEntity is null) return;
|
||||
|
||||
var date = DateTime.Now;
|
||||
|
||||
if (hostEntity.Id is null) return;
|
||||
|
||||
await _database.HostSystem().UpdateOneAsync(p => p.Host == hostEntity.Id, Builders<HostSystemEntity>.Update
|
||||
.SetOnInsert(p => p.Insert, date)
|
||||
.SetOnInsert(p => p.Host, hostEntity.Id)
|
||||
.Set(p => p.Update, date)
|
||||
.Set(p => p.BootUpTime, system.LastBootUpTime)
|
||||
.Set(p => p.LocalTime, system.LocalDateTime)
|
||||
.Set(p => p.Processes, system.Processes)
|
||||
.Set(p => p.License, system.License), new UpdateOptions
|
||||
.Set(p => p.BootUpTime, system?.LastBootUpTime)
|
||||
.Set(p => p.LocalTime, system?.LocalDateTime)
|
||||
.Set(p => p.Processes, system?.Processes)
|
||||
.Set(p => p.License, system?.License), new UpdateOptions
|
||||
{
|
||||
IsUpsert = true
|
||||
}, cancellationToken);
|
||||
|
|
|
|||
|
|
@ -11,14 +11,9 @@ using static Insight.Server.Models.MonitorMessage;
|
|||
|
||||
namespace Insight.Server.Network.Agent.Handlers;
|
||||
|
||||
public class TrapHandler : IMessageHandler<AgentSession>
|
||||
public partial class TrapHandler(IMongoDatabase database) : IMessageHandler<AgentSession>
|
||||
{
|
||||
private readonly IMongoDatabase _database;
|
||||
|
||||
public TrapHandler(IMongoDatabase database)
|
||||
{
|
||||
_database = database;
|
||||
}
|
||||
private readonly IMongoDatabase _database = database;
|
||||
|
||||
public async ValueTask HandleAsync<TMessage>(AgentSession sender, TMessage message, CancellationToken cancellationToken) where TMessage : IMessage
|
||||
{
|
||||
|
|
@ -85,7 +80,8 @@ public class TrapHandler : IMessageHandler<AgentSession>
|
|||
{
|
||||
monitoring = null;
|
||||
|
||||
if (packet is null || packet.Data is null || packet.Data.Any() is false) return false;
|
||||
if (packet is null || packet.Data is null || packet.Data.Count == 0)
|
||||
return false;
|
||||
|
||||
monitoring = new MonitorMessage
|
||||
{
|
||||
|
|
@ -96,9 +92,7 @@ public class TrapHandler : IMessageHandler<AgentSession>
|
|||
};
|
||||
|
||||
if (Enum.TryParse<ApplicationEnum>(packet.Community, true, out var application))
|
||||
{
|
||||
monitoring.Application = application;
|
||||
}
|
||||
|
||||
StatusEnum? status;
|
||||
string? task;
|
||||
|
|
@ -131,9 +125,12 @@ public class TrapHandler : IMessageHandler<AgentSession>
|
|||
return true;
|
||||
}
|
||||
|
||||
private static bool ParseAcronis(List<KeyValuePair<string, string>> data, out StatusEnum? status, out string? task, out string? message)
|
||||
[GeneratedRegex(@"\s+")]
|
||||
private static partial Regex AcronisRegex();
|
||||
|
||||
private static bool ParseAcronis(List<KeyValuePair<string, string?>> data, out StatusEnum? status, out string? task, out string? message)
|
||||
{
|
||||
status = data[0].Value.ToLower() switch
|
||||
status = data[0].Value?.ToLower() switch
|
||||
{
|
||||
"erfolgreich" => StatusEnum.Information,
|
||||
"success" => StatusEnum.Information,
|
||||
|
|
@ -149,49 +146,32 @@ public class TrapHandler : IMessageHandler<AgentSession>
|
|||
task = null;
|
||||
message = null;
|
||||
|
||||
var parsed = false;
|
||||
var trim = data[1].Value?.Split(':', StringSplitOptions.None);
|
||||
if (trim is null || trim.Length == 0) return false;
|
||||
|
||||
try
|
||||
{
|
||||
var trim = data[1].Value.Split(new string[] { ":" }, StringSplitOptions.None);
|
||||
task = trim[1].Split(new string[] { "'" }, StringSplitOptions.None)[1].Split("'")[0].Trim();
|
||||
message = trim[1].Split(new string[] { "' " }, StringSplitOptions.None)[1].Trim();
|
||||
task = trim[1].Split("'", StringSplitOptions.None)[1].Split("'")[0].Trim();
|
||||
message = trim[1].Split("' ", StringSplitOptions.None)[1].Trim();
|
||||
if (message is not null) return true;
|
||||
|
||||
parsed = true;
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
// skipped for base64 parse
|
||||
}
|
||||
if (data[1].Value is not string val) return false;
|
||||
|
||||
if (parsed) return true;
|
||||
var content = AcronisRegex().Replace(val, "");
|
||||
var bytes = Enumerable.Range(0, content.Length)
|
||||
.Where(x => x % 2 == 0)
|
||||
.Select(x => Convert.ToByte(content.Substring(x, 2), 16))
|
||||
.ToArray();
|
||||
|
||||
try
|
||||
{
|
||||
var content = Regex.Replace(data[1].Value, @"\s+", "");
|
||||
var bytes = Enumerable.Range(0, content.Length)
|
||||
.Where(x => x % 2 == 0)
|
||||
.Select(x => Convert.ToByte(content.Substring(x, 2), 16))
|
||||
.ToArray();
|
||||
content = Encoding.UTF8.GetString(bytes);
|
||||
|
||||
content = Encoding.UTF8.GetString(bytes);
|
||||
trim = content.Split(':', StringSplitOptions.None);
|
||||
if (trim is null || trim.Length == 0) return false;
|
||||
|
||||
var trim = content.Split(new string[] { ":" }, StringSplitOptions.None);
|
||||
task = trim[1].Split(new string[] { "'" }, StringSplitOptions.None)[1].Split("'")[0].Trim();
|
||||
message = trim[1].Split(new string[] { "' " }, StringSplitOptions.None)[1].Trim();
|
||||
|
||||
parsed = true;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
//_logger.LogError("{ex}", ex);
|
||||
}
|
||||
|
||||
if (parsed) return true;
|
||||
return false;
|
||||
task = trim[1].Split("'", StringSplitOptions.None)[1].Split("'")[0].Trim();
|
||||
message = trim[1].Split("' ", StringSplitOptions.None)[1].Trim();
|
||||
return message is not null;
|
||||
}
|
||||
|
||||
private static bool ParseVeeam(List<KeyValuePair<string, string>> data, out StatusEnum? status, out string? task, out string? message)
|
||||
private static bool ParseVeeam(List<KeyValuePair<string, string?>> data, out StatusEnum? status, out string? task, out string? message)
|
||||
{
|
||||
status = null;
|
||||
task = null;
|
||||
|
|
@ -203,13 +183,13 @@ public class TrapHandler : IMessageHandler<AgentSession>
|
|||
{
|
||||
var summary = false;
|
||||
|
||||
if (Guid.TryParse(data[0].Value, out _))
|
||||
if (Guid.TryParse(data[0].Value, out _))
|
||||
summary = true;
|
||||
|
||||
if (data[1].Value.ToLower() == "backup configuration job")
|
||||
if (data[1].Value?.ToLower() == "backup configuration job")
|
||||
return false;
|
||||
|
||||
status = (summary ? data[2].Value.ToLower() : data[3].Value.ToLower()) switch
|
||||
status = (summary ? data[2].Value?.ToLower() : data[3].Value?.ToLower()) switch
|
||||
{
|
||||
"success" => StatusEnum.Information,
|
||||
"warning" => StatusEnum.Warning,
|
||||
|
|
@ -230,7 +210,7 @@ public class TrapHandler : IMessageHandler<AgentSession>
|
|||
return false;
|
||||
}
|
||||
|
||||
private static bool ParseQnap(List<KeyValuePair<string, string>> data, out StatusEnum? status, out string? task, out string? message)
|
||||
private static bool ParseQnap(List<KeyValuePair<string, string?>> data, out StatusEnum? status, out string? task, out string? message)
|
||||
{
|
||||
status = StatusEnum.Information;
|
||||
task = null;
|
||||
|
|
@ -265,21 +245,15 @@ public class TrapHandler : IMessageHandler<AgentSession>
|
|||
};
|
||||
|
||||
foreach (var key in keywords)
|
||||
{
|
||||
if (Regex.IsMatch(string.Concat(data).ToLowerInvariant(), $@"\b{key.Key}\b"))
|
||||
{
|
||||
status = key.Value;
|
||||
}
|
||||
}
|
||||
|
||||
foreach (var kv in data)
|
||||
{
|
||||
message += kv.Value;
|
||||
}
|
||||
|
||||
parsed = true;
|
||||
}
|
||||
catch (Exception ex)
|
||||
catch (Exception)
|
||||
{
|
||||
//_logger.LogError("{ex}", ex);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -7,14 +7,9 @@ using MongoDB.Driver;
|
|||
|
||||
namespace Insight.Server.Network.Agent.Handlers;
|
||||
|
||||
public class UpdateHandler : IMessageHandler<AgentSession>
|
||||
public class UpdateHandler(IMongoDatabase database) : IMessageHandler<AgentSession>
|
||||
{
|
||||
private readonly IMongoDatabase _database;
|
||||
|
||||
public UpdateHandler(IMongoDatabase database)
|
||||
{
|
||||
_database = database;
|
||||
}
|
||||
private readonly IMongoDatabase _database = database;
|
||||
|
||||
public async ValueTask HandleAsync<TMessage>(AgentSession sender, TMessage message, CancellationToken cancellationToken) where TMessage : IMessage
|
||||
{
|
||||
|
|
@ -41,7 +36,7 @@ public class UpdateHandler : IMessageHandler<AgentSession>
|
|||
|
||||
if (updates is not null)
|
||||
{
|
||||
if (updates.Installed is not null && updates.Installed.Any())
|
||||
if (updates.Installed is not null && updates.Installed.Count != 0)
|
||||
{
|
||||
foreach (var update in updates.Installed)
|
||||
{
|
||||
|
|
@ -72,7 +67,7 @@ public class UpdateHandler : IMessageHandler<AgentSession>
|
|||
}
|
||||
}
|
||||
|
||||
if (updates.Pending is not null && updates.Pending.Any())
|
||||
if (updates.Pending is not null && updates.Pending.Count != 0)
|
||||
{
|
||||
foreach (var update in updates.Pending)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -7,14 +7,9 @@ using MongoDB.Driver;
|
|||
|
||||
namespace Insight.Server.Network.Agent.Handlers;
|
||||
|
||||
public class UserHandler : IMessageHandler<AgentSession>
|
||||
public class UserHandler(IMongoDatabase database) : IMessageHandler<AgentSession>
|
||||
{
|
||||
private readonly IMongoDatabase _database;
|
||||
|
||||
public UserHandler(IMongoDatabase database)
|
||||
{
|
||||
_database = database;
|
||||
}
|
||||
private readonly IMongoDatabase _database = database;
|
||||
|
||||
public async ValueTask HandleAsync<TMessage>(AgentSession sender, TMessage message, CancellationToken cancellationToken) where TMessage : IMessage
|
||||
{
|
||||
|
|
@ -39,7 +34,7 @@ public class UserHandler : IMessageHandler<AgentSession>
|
|||
|
||||
// users
|
||||
|
||||
if (users is not null && users.Any())
|
||||
if (users is not null && users.Count != 0)
|
||||
{
|
||||
var userBulk = new List<WriteModel<HostSysUserEntity>>();
|
||||
|
||||
|
|
@ -88,11 +83,11 @@ public class UserHandler : IMessageHandler<AgentSession>
|
|||
|
||||
// groups
|
||||
|
||||
if (users is not null && users.Any())
|
||||
if (users is not null && users.Count != 0)
|
||||
{
|
||||
var groupBulk = new List<WriteModel<HostSysGroupEntity>>();
|
||||
|
||||
var distinctGroups = users.SelectMany(p => p.Groups)
|
||||
var distinctGroups = users.SelectMany(p => p.Groups ?? [])
|
||||
.GroupBy(p => new { p?.Domain, p?.Name })
|
||||
.Select(p => p.First());
|
||||
|
||||
|
|
@ -133,8 +128,7 @@ public class UserHandler : IMessageHandler<AgentSession>
|
|||
}
|
||||
|
||||
// relations
|
||||
|
||||
if (users is not null && users.Any())
|
||||
if (users is not null && users.Count != 0)
|
||||
{
|
||||
var relationBulk = new List<WriteModel<HostSysUserSysGroupEntity>>();
|
||||
|
||||
|
|
@ -143,16 +137,16 @@ public class UserHandler : IMessageHandler<AgentSession>
|
|||
var userId = await _database.HostSystemUser()
|
||||
.Find(p => p.Host == hostEntity.Id && p.Domain == user.Domain && p.Name == user.Name)
|
||||
.Project(p => p.Id)
|
||||
.FirstOrDefaultAsync();
|
||||
.FirstOrDefaultAsync(cancellationToken: default);
|
||||
|
||||
if (user.Groups is not null && user.Groups.Any())
|
||||
if (user.Groups is not null && user.Groups.Count != 0)
|
||||
{
|
||||
foreach (var group in user.Groups)
|
||||
{
|
||||
var groupId = await _database.HostSystemGroup()
|
||||
.Find(p => p.Host == hostEntity.Id && p.Domain == group.Domain && p.Name == group.Name)
|
||||
.Project(p => p.Id)
|
||||
.FirstOrDefaultAsync();
|
||||
.FirstOrDefaultAsync(cancellationToken: default);
|
||||
|
||||
var relationFilter = Builders<HostSysUserSysGroupEntity>.Filter.And(new List<FilterDefinition<HostSysUserSysGroupEntity>>
|
||||
{
|
||||
|
|
|
|||
|
|
@ -7,14 +7,9 @@ using MongoDB.Driver;
|
|||
|
||||
namespace Insight.Server.Network.Agent.Handlers;
|
||||
|
||||
public class VideocardHandler : IMessageHandler<AgentSession>
|
||||
public class VideocardHandler(IMongoDatabase database) : IMessageHandler<AgentSession>
|
||||
{
|
||||
private readonly IMongoDatabase _database;
|
||||
|
||||
public VideocardHandler(IMongoDatabase database)
|
||||
{
|
||||
_database = database;
|
||||
}
|
||||
private readonly IMongoDatabase _database = database;
|
||||
|
||||
public async ValueTask HandleAsync<TMessage>(AgentSession sender, TMessage message, CancellationToken cancellationToken) where TMessage : IMessage
|
||||
{
|
||||
|
|
@ -39,7 +34,7 @@ public class VideocardHandler : IMessageHandler<AgentSession>
|
|||
|
||||
var bulk = new List<WriteModel<HostVideocardEntity>>();
|
||||
|
||||
if (videocards is not null && videocards.Any())
|
||||
if (videocards is not null && videocards.Count != 0)
|
||||
{
|
||||
foreach (var videocard in videocards)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -7,14 +7,9 @@ using MongoDB.Driver;
|
|||
|
||||
namespace Insight.Server.Network.Agent.Handlers;
|
||||
|
||||
public class VirtualMaschineHandler : IMessageHandler<AgentSession>
|
||||
public class VirtualMaschineHandler(IMongoDatabase database) : IMessageHandler<AgentSession>
|
||||
{
|
||||
private readonly IMongoDatabase _database;
|
||||
|
||||
public VirtualMaschineHandler(IMongoDatabase database)
|
||||
{
|
||||
_database = database;
|
||||
}
|
||||
private readonly IMongoDatabase _database = database;
|
||||
|
||||
public async ValueTask HandleAsync<TMessage>(AgentSession sender, TMessage message, CancellationToken cancellationToken) where TMessage : IMessage
|
||||
{
|
||||
|
|
@ -38,7 +33,7 @@ public class VirtualMaschineHandler : IMessageHandler<AgentSession>
|
|||
var date = DateTime.Now;
|
||||
|
||||
// virtual maschines
|
||||
if (virtualMaschines is not null && virtualMaschines.Any())
|
||||
if (virtualMaschines is not null && virtualMaschines.Count != 0)
|
||||
{
|
||||
var virtualMaschineBulk = new List<WriteModel<HostHypervisorVirtualMaschineEntity>>();
|
||||
|
||||
|
|
@ -96,7 +91,7 @@ public class VirtualMaschineHandler : IMessageHandler<AgentSession>
|
|||
|
||||
// virtual maschine configurations
|
||||
|
||||
if (virtualMaschines is not null && virtualMaschines.Any())
|
||||
if (virtualMaschines is not null && virtualMaschines.Count != 0)
|
||||
{
|
||||
var configurationBulk = new List<WriteModel<HostHypervisorVirtualMaschineConfigEntity>>();
|
||||
|
||||
|
|
@ -105,9 +100,9 @@ public class VirtualMaschineHandler : IMessageHandler<AgentSession>
|
|||
var virtualMaschineId = await _database.HostHypervisorVirtualMaschine()
|
||||
.Find(p => p.Host == hostEntity.Id && p.UniqueId == virtualmaschine.Id.ToString())
|
||||
.Project(p => p.Id)
|
||||
.FirstOrDefaultAsync();
|
||||
.FirstOrDefaultAsync(cancellationToken: default);
|
||||
|
||||
if (virtualmaschine.Configurations is not null && virtualmaschine.Configurations.Any())
|
||||
if (virtualmaschine.Configurations is not null && virtualmaschine.Configurations.Count != 0)
|
||||
{
|
||||
foreach (var config in virtualmaschine.Configurations)
|
||||
{
|
||||
|
|
@ -120,7 +115,11 @@ public class VirtualMaschineHandler : IMessageHandler<AgentSession>
|
|||
|
||||
// custom "notes" concat
|
||||
string notes = string.Empty;
|
||||
if (config?.Notes is not null) foreach (var n in config.Notes) notes += n;
|
||||
|
||||
if (config?.Notes is not null)
|
||||
foreach (var n in config.Notes) notes += n;
|
||||
|
||||
if (config?.Id is null) continue;
|
||||
|
||||
var configUpdate = Builders<HostHypervisorVirtualMaschineConfigEntity>.Update
|
||||
.SetOnInsert(p => p.Insert, date)
|
||||
|
|
|
|||
|
|
@ -7,18 +7,11 @@ using Vaitr.Network;
|
|||
|
||||
namespace Insight.Server.Network.Remote.Handlers;
|
||||
|
||||
public class RemoteHandler : IMessageHandler<RemoteSession>
|
||||
public class RemoteHandler(Bus bus, ISessionPool<RemoteSession, IMessage> remotePool, ILogger<RemoteHandler> logger) : IMessageHandler<RemoteSession>
|
||||
{
|
||||
private readonly Bus _bus;
|
||||
private readonly ISessionPool<RemoteSession, IMessage> _remotePool;
|
||||
private readonly ILogger<RemoteHandler> _logger;
|
||||
|
||||
public RemoteHandler(Bus bus, ISessionPool<RemoteSession, IMessage> remotePool, ILogger<RemoteHandler> logger)
|
||||
{
|
||||
_bus = bus;
|
||||
_remotePool = remotePool;
|
||||
_logger = logger;
|
||||
}
|
||||
private readonly Bus _bus = bus;
|
||||
private readonly ISessionPool<RemoteSession, IMessage> _remotePool = remotePool;
|
||||
private readonly ILogger<RemoteHandler> _logger = logger;
|
||||
|
||||
public async ValueTask HandleAsync<TMessage>(RemoteSession sender, TMessage message, CancellationToken cancellationToken) where TMessage : IMessage
|
||||
{
|
||||
|
|
@ -54,7 +47,7 @@ public class RemoteHandler : IMessageHandler<RemoteSession>
|
|||
|
||||
private async Task OnSessionRequest(RemoteSession session, RemoteSessionRequest sessionRequest, CancellationToken cancellationToken)
|
||||
{
|
||||
_logger.LogInformation($"Remote {session.Id} => SessionRequest");
|
||||
_logger.LogInformation("Remote {session} => SessionRequest", session.Id);
|
||||
|
||||
session.Mode = sessionRequest.Mode;
|
||||
|
||||
|
|
@ -97,14 +90,14 @@ public class RemoteHandler : IMessageHandler<RemoteSession>
|
|||
|
||||
private async Task OnClipboardData(RemoteSession session, CastClipboardReceived clipboardChanged, CancellationToken cancellationToken)
|
||||
{
|
||||
_logger.LogInformation($"Remote {session.Id} => ClipboardData");
|
||||
_logger.LogInformation("Remote {session} => ClipboardData", session.Id);
|
||||
|
||||
await _bus.PublishAsync(clipboardChanged, cancellationToken);
|
||||
}
|
||||
|
||||
private async Task OnAudioData(RemoteSession session, CastAudio audioSample, CancellationToken cancellationToken)
|
||||
{
|
||||
_logger.LogInformation($"Remote {session.Id} => AudioData");
|
||||
_logger.LogInformation("Remote {session} => AudioData", session.Id);
|
||||
|
||||
await _bus.PublishAsync(audioSample, cancellationToken);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,31 +3,21 @@ using Insight.Domain.Interfaces;
|
|||
using Insight.Domain.Network;
|
||||
using Insight.Server.Network.Web;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using Vaitr.Bus;
|
||||
using Vaitr.Network;
|
||||
|
||||
namespace Insight.Server.Network.Remote;
|
||||
|
||||
public class RemoteSession : TcpSession<IMessage>
|
||||
public class RemoteSession(
|
||||
ISessionPool<WebSession, IMessage> webPool,
|
||||
IEnumerable<IMessageHandler<RemoteSession>> handlers,
|
||||
ISerializer<IMessage> serializer,
|
||||
ILogger<RemoteSession> logger) : TcpSession<IMessage>(serializer, logger)
|
||||
{
|
||||
public string Id { get; }
|
||||
public string Id { get; } = GenerateRandomId();
|
||||
public RemoteControlMode Mode { get; set; }
|
||||
|
||||
private readonly Bus _bus;
|
||||
private readonly ISessionPool<WebSession, IMessage> _webPool;
|
||||
private readonly IEnumerable<IMessageHandler<RemoteSession>> _handlers;
|
||||
|
||||
public RemoteSession(
|
||||
ISessionPool<WebSession, IMessage> webPool,
|
||||
IEnumerable<IMessageHandler<RemoteSession>> handlers,
|
||||
ISerializer<IMessage> serializer,
|
||||
ILogger<RemoteSession> logger) : base(serializer, logger)
|
||||
{
|
||||
Id = GenerateRandomId();
|
||||
|
||||
_webPool = webPool;
|
||||
_handlers = handlers;
|
||||
}
|
||||
private readonly ISessionPool<WebSession, IMessage> _webPool = webPool;
|
||||
private readonly IEnumerable<IMessageHandler<RemoteSession>> _handlers = handlers;
|
||||
|
||||
public async ValueTask ProxyAsync<TMessage>(TMessage message, CancellationToken cancellationToken)
|
||||
where TMessage : IMessage
|
||||
|
|
@ -42,16 +32,16 @@ public class RemoteSession : TcpSession<IMessage>
|
|||
}, cancellationToken);
|
||||
}
|
||||
|
||||
protected override async ValueTask OnConnectedAsync(CancellationToken cancellationToken)
|
||||
protected override ValueTask OnConnectedAsync(CancellationToken cancellationToken)
|
||||
{
|
||||
_logger.LogInformation("Remote ({ep?}) connected", RemoteEndPoint);
|
||||
|
||||
if (_webPool.FirstOrDefault().Value is not WebSession webSession) return;
|
||||
return default;
|
||||
}
|
||||
|
||||
protected override async ValueTask OnDisconnectedAsync(CancellationToken cancellationToken)
|
||||
protected override ValueTask OnDisconnectedAsync(CancellationToken cancellationToken)
|
||||
{
|
||||
_logger.LogInformation("Remote ({ep?}) disconnected", RemoteEndPoint);
|
||||
return default;
|
||||
}
|
||||
|
||||
protected override async ValueTask OnSentAsync(IPacketContext<IMessage> context, CancellationToken cancellationToken)
|
||||
|
|
@ -76,9 +66,10 @@ public class RemoteSession : TcpSession<IMessage>
|
|||
}
|
||||
}
|
||||
|
||||
protected override async ValueTask OnHeartbeatAsync(CancellationToken cancellationToken)
|
||||
protected override ValueTask OnHeartbeatAsync(CancellationToken cancellationToken)
|
||||
{
|
||||
_logger.LogInformation("Remote ({ep?}) Heartbeat", RemoteEndPoint);
|
||||
return default;
|
||||
}
|
||||
|
||||
private static string GenerateRandomId()
|
||||
|
|
|
|||
|
|
@ -10,24 +10,16 @@ using Vaitr.Network;
|
|||
|
||||
namespace Insight.Server.Network.Globals;
|
||||
|
||||
public class ProxyHandler : IMessageHandler<AgentSession>, IMessageHandler<WebSession>
|
||||
public class ProxyHandler(
|
||||
ISessionPool<AgentSession, IMessage> agentPool,
|
||||
ISessionPool<WebSession, IMessage> webPool,
|
||||
IMongoDatabase database,
|
||||
ILogger<ProxyHandler> logger) : IMessageHandler<AgentSession>, IMessageHandler<WebSession>
|
||||
{
|
||||
private readonly ISessionPool<AgentSession, IMessage> _agentPool;
|
||||
private readonly ISessionPool<WebSession, IMessage> _webPool;
|
||||
private readonly IMongoDatabase _database;
|
||||
private readonly ILogger<ProxyHandler> _logger;
|
||||
|
||||
public ProxyHandler(
|
||||
ISessionPool<AgentSession, IMessage> agentPool,
|
||||
ISessionPool<WebSession, IMessage> webPool,
|
||||
IMongoDatabase database,
|
||||
ILogger<ProxyHandler> logger)
|
||||
{
|
||||
_agentPool = agentPool;
|
||||
_webPool = webPool;
|
||||
_database = database;
|
||||
_logger = logger;
|
||||
}
|
||||
private readonly ISessionPool<AgentSession, IMessage> _agentPool = agentPool;
|
||||
private readonly ISessionPool<WebSession, IMessage> _webPool = webPool;
|
||||
private readonly IMongoDatabase _database = database;
|
||||
private readonly ILogger<ProxyHandler> _logger = logger;
|
||||
|
||||
public async ValueTask HandleAsync<TMessage>(WebSession sender, TMessage message, CancellationToken cancellationToken) where TMessage : IMessage
|
||||
{
|
||||
|
|
|
|||
|
|
@ -5,25 +5,22 @@ using Vaitr.Network;
|
|||
|
||||
namespace Insight.Server.Network.Web;
|
||||
|
||||
public class WebSession : TcpSession<IMessage>
|
||||
public class WebSession(IEnumerable<IMessageHandler<WebSession>> handlers, ISerializer<IMessage> serializer, ILogger<WebSession> logger) : TcpSession<IMessage>(serializer, logger)
|
||||
{
|
||||
public string? Id { get; set; }
|
||||
|
||||
private readonly IEnumerable<IMessageHandler<WebSession>> _handlers;
|
||||
private readonly IEnumerable<IMessageHandler<WebSession>> _handlers = handlers;
|
||||
|
||||
public WebSession(IEnumerable<IMessageHandler<WebSession>> handlers, ISerializer<IMessage> serializer, ILogger<WebSession> logger) : base(serializer, logger)
|
||||
{
|
||||
_handlers = handlers;
|
||||
}
|
||||
|
||||
protected override async ValueTask OnConnectedAsync(CancellationToken cancellationToken)
|
||||
protected override ValueTask OnConnectedAsync(CancellationToken cancellationToken)
|
||||
{
|
||||
_logger.LogInformation("Web ({ep?}) connected", RemoteEndPoint);
|
||||
return default;
|
||||
}
|
||||
|
||||
protected override async ValueTask OnDisconnectedAsync(CancellationToken cancellationToken)
|
||||
protected override ValueTask OnDisconnectedAsync(CancellationToken cancellationToken)
|
||||
{
|
||||
_logger.LogInformation("Web ({ep?}) disconnected", RemoteEndPoint);
|
||||
return default;
|
||||
}
|
||||
|
||||
protected override async ValueTask OnSentAsync(IPacketContext<IMessage> context, CancellationToken cancellationToken)
|
||||
|
|
@ -48,8 +45,9 @@ public class WebSession : TcpSession<IMessage>
|
|||
}
|
||||
}
|
||||
|
||||
protected override async ValueTask OnHeartbeatAsync(CancellationToken cancellationToken)
|
||||
protected override ValueTask OnHeartbeatAsync(CancellationToken cancellationToken)
|
||||
{
|
||||
_logger.LogInformation("Web ({ep?}) Heartbeat", RemoteEndPoint);
|
||||
return default;
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue