net8, language features, bugfixes

This commit is contained in:
kkb 2023-12-18 16:31:00 +01:00
parent 1591618c2c
commit ce99053a10
353 changed files with 3245 additions and 3944 deletions

View file

@ -8,7 +8,7 @@ public static class Async
this IAsyncEnumerable<T> source,
Func<T, Task> body,
int maxDegreeOfParallelism = DataflowBlockOptions.Unbounded,
TaskScheduler scheduler = null)
TaskScheduler? scheduler = null)
{
var options = new ExecutionDataflowBlockOptions
{
@ -31,7 +31,7 @@ public static class Async
this IEnumerable<T> source,
Func<T, Task> body,
int maxDegreeOfParallelism = DataflowBlockOptions.Unbounded,
TaskScheduler scheduler = null)
TaskScheduler? scheduler = null)
{
var options = new ExecutionDataflowBlockOptions
{

View file

@ -2,13 +2,15 @@
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net7.0</TargetFramework>
<TargetFramework>net8.0</TargetFramework>
<LangVersion>latest</LangVersion>
<Product>Insight</Product>
<AssemblyName>server</AssemblyName>
<AssemblyVersion>2023.12.14.0</AssemblyVersion>
<RootNamespace>Insight.Server</RootNamespace>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<SatelliteResourceLanguages>none</SatelliteResourceLanguages>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
@ -38,8 +40,8 @@
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Extensions.Hosting.Systemd" Version="7.0.0" />
<PackageReference Include="Microsoft.Extensions.Hosting.WindowsServices" Version="7.0.1" />
<PackageReference Include="Microsoft.Extensions.Hosting.Systemd" Version="8.0.0" />
<PackageReference Include="Microsoft.Extensions.Hosting.WindowsServices" Version="8.0.0" />
<PackageReference Include="Serilog.Extensions.Logging.File" Version="3.0.0" />
<!--Unix Serilog stuff-->
</ItemGroup>

View file

@ -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)
{

View file

@ -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
{

View file

@ -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;
}
}

View file

@ -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)
{

View file

@ -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())

View file

@ -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)
{

View file

@ -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
{

View file

@ -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)
{

View file

@ -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
{

View file

@ -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)
{

View file

@ -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)
{

View file

@ -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)
{

View file

@ -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)
{

View file

@ -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)
{

View file

@ -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

View file

@ -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);

View file

@ -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);
}

View file

@ -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)
{

View file

@ -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>>
{

View file

@ -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)
{

View file

@ -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)

View file

@ -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);
}

View file

@ -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()

View file

@ -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
{

View file

@ -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;
}
}

View file

@ -120,7 +120,7 @@ internal static class ServiceExtensions
services.AddSingleton<IMessageHandler<AgentSession>, UserHandler>();
services.AddSingleton<IMessageHandler<AgentSession>, VideocardHandler>();
services.AddSingleton<IMessageHandler<AgentSession>, VirtualMaschineHandler>();
return services;
}

View file

@ -8,20 +8,12 @@ using MongoDB.Driver;
namespace Insight.Server.Services;
internal class DispatchService : BackgroundService
internal class DispatchService(HttpClient httpClient, IMongoDatabase database, IConfiguration configuration, ILogger<DispatchService> logger) : BackgroundService
{
private readonly HttpClient _httpClient;
private readonly IMongoDatabase _database;
private readonly IConfiguration _configuration;
private readonly ILogger<DispatchService> _logger;
public DispatchService(HttpClient httpClient, IMongoDatabase database, IConfiguration configuration, ILogger<DispatchService> logger)
{
_httpClient = httpClient;
_database = database;
_configuration = configuration;
_logger = logger;
}
private readonly HttpClient _httpClient = httpClient;
private readonly IMongoDatabase _database = database;
private readonly IConfiguration _configuration = configuration;
private readonly ILogger<DispatchService> _logger = logger;
protected override async Task ExecuteAsync(CancellationToken cancellationToken)
{
@ -52,7 +44,7 @@ internal class DispatchService : BackgroundService
.Limit(10)
.ToListAsync(cancellationToken);
if (pendings is null || pendings.Any() is false) return;
if (pendings is null || pendings.Count == 0) return;
foreach (var entity in pendings)
{
@ -68,20 +60,19 @@ internal class DispatchService : BackgroundService
}
catch (Exception ex)
{
_logger.LogError(ex.Message);
_logger.LogTrace(ex.StackTrace);
_logger.LogError("{exception}", ex.Message);
}
finally
{
// webmatic safety offset
await Task.Delay(TimeSpan.FromSeconds(1), default);
await Task.Delay(TimeSpan.FromSeconds(1), cancellationToken: default);
}
}
}
private async ValueTask<DispatchEnum> SendAsync(HostLogMonitoringEntity monitoring, CancellationToken cancellationToken)
{
_logger.LogTrace($"SendAsync ({monitoring})");
_logger.LogTrace("SendAsync ({monitoring})", monitoring);
var monitoringApi = Monitoring.LogUri;
var monitoringContent = new List<KeyValuePair<string, string>>();

View file

@ -1,5 +1,4 @@
using Amazon.Runtime.Internal;
using Insight.Domain.Network;
using Insight.Domain.Network;
using Insight.Domain.Network.Agent.Messages;
using Insight.Infrastructure.Entities;
using Insight.Server.Extensions;
@ -11,18 +10,11 @@ using Vaitr.Network;
namespace Insight.Server.Services;
internal class JobService : BackgroundService
internal class JobService(ISessionPool<AgentSession, IMessage> agentPool, IMongoDatabase database, ILogger<JobService> logger) : BackgroundService
{
private readonly ISessionPool<AgentSession, IMessage> _agentPool;
private readonly IMongoDatabase _database;
private readonly ILogger<JobService> _logger;
public JobService(ISessionPool<AgentSession, IMessage> agentPool, IMongoDatabase database, ILogger<JobService> logger)
{
_agentPool = agentPool;
_database = database;
_logger = logger;
}
private readonly ISessionPool<AgentSession, IMessage> _agentPool = agentPool;
private readonly IMongoDatabase _database = database;
private readonly ILogger<JobService> _logger = logger;
protected override async Task ExecuteAsync(CancellationToken cancellationToken)
{
@ -90,7 +82,7 @@ internal class JobService : BackgroundService
}
}
}
private async ValueTask<IEnumerable<AgentSession>> GetAssignedAgentsAsync(CancellationToken cancellationToken)