2023-09-21 22:10:55 +02:00
|
|
|
|
using Insight.Domain.Interfaces;
|
|
|
|
|
|
using Insight.Domain.Messages;
|
|
|
|
|
|
using Insight.Domain.Messages.Agent;
|
2023-09-21 18:58:32 +02:00
|
|
|
|
using Insight.Infrastructure;
|
|
|
|
|
|
using Insight.Infrastructure.Entities;
|
|
|
|
|
|
using MongoDB.Bson;
|
|
|
|
|
|
using MongoDB.Driver;
|
|
|
|
|
|
|
2023-09-21 22:10:55 +02:00
|
|
|
|
namespace Insight.Server.Network.Handlers.Agent;
|
|
|
|
|
|
|
|
|
|
|
|
public class VideocardHandler : IMessageHandler<AgentSession>
|
2023-09-21 18:58:32 +02:00
|
|
|
|
{
|
2023-09-21 22:10:55 +02:00
|
|
|
|
private readonly IMongoDatabase _database;
|
2023-09-21 18:58:32 +02:00
|
|
|
|
|
2023-09-21 22:10:55 +02:00
|
|
|
|
public VideocardHandler(IMongoDatabase database)
|
|
|
|
|
|
{
|
|
|
|
|
|
_database = database;
|
|
|
|
|
|
}
|
2023-09-21 18:58:32 +02:00
|
|
|
|
|
2023-09-21 22:10:55 +02:00
|
|
|
|
public async ValueTask HandleAsync<TMessage>(AgentSession sender, TMessage message, CancellationToken cancellationToken) where TMessage : IMessage
|
|
|
|
|
|
{
|
|
|
|
|
|
if (message is VideocardList videocards)
|
2023-09-21 18:58:32 +02:00
|
|
|
|
{
|
2023-09-21 22:10:55 +02:00
|
|
|
|
await OnVideocardsAsync(sender, videocards, cancellationToken);
|
2023-09-21 18:58:32 +02:00
|
|
|
|
}
|
2023-09-21 22:10:55 +02:00
|
|
|
|
}
|
2023-09-21 18:58:32 +02:00
|
|
|
|
|
2023-09-21 22:10:55 +02:00
|
|
|
|
private async ValueTask OnVideocardsAsync(AgentSession session, List<Videocard>? videocards, CancellationToken cancellationToken)
|
|
|
|
|
|
{
|
|
|
|
|
|
var agentEntity = await _database.Agent().Find(Builders<AgentEntity>.Filter.Eq(p => p.Id, session.Id)).FirstOrDefaultAsync(cancellationToken);
|
|
|
|
|
|
if (agentEntity is null) return;
|
2023-09-21 18:58:32 +02:00
|
|
|
|
|
2023-09-21 22:10:55 +02:00
|
|
|
|
var hostEntity = await _database.Host().Find(Builders<HostEntity>.Filter.Eq(p => p.Agent, agentEntity.Id)).FirstOrDefaultAsync(cancellationToken);
|
|
|
|
|
|
if (hostEntity is null) return;
|
2023-09-21 18:58:32 +02:00
|
|
|
|
|
2023-09-21 22:10:55 +02:00
|
|
|
|
var batch = ObjectId.GenerateNewId().ToString();
|
|
|
|
|
|
var date = DateTime.Now;
|
2023-09-21 18:58:32 +02:00
|
|
|
|
|
2023-09-21 22:10:55 +02:00
|
|
|
|
var bulk = new List<WriteModel<HostVideocardEntity>>();
|
2023-09-21 18:58:32 +02:00
|
|
|
|
|
2023-09-21 22:10:55 +02:00
|
|
|
|
if (videocards is not null && videocards.Any())
|
|
|
|
|
|
{
|
|
|
|
|
|
foreach (var videocard in videocards)
|
2023-09-21 18:58:32 +02:00
|
|
|
|
{
|
2023-09-21 22:10:55 +02:00
|
|
|
|
var filterDefinition = Builders<HostVideocardEntity>.Filter.And(new List<FilterDefinition<HostVideocardEntity>>
|
2023-09-21 18:58:32 +02:00
|
|
|
|
{
|
2023-09-21 22:10:55 +02:00
|
|
|
|
Builders<HostVideocardEntity>.Filter.Eq(x => x.Host, hostEntity.Id),
|
|
|
|
|
|
Builders<HostVideocardEntity>.Filter.Eq(x => x.Name, videocard.Model)
|
2023-09-21 18:58:32 +02:00
|
|
|
|
});
|
|
|
|
|
|
|
2023-09-21 22:10:55 +02:00
|
|
|
|
var updateDefinition = Builders<HostVideocardEntity>.Update
|
|
|
|
|
|
.SetOnInsert(p => p.Insert, date)
|
|
|
|
|
|
.SetOnInsert(p => p.Host, hostEntity.Id)
|
|
|
|
|
|
.SetOnInsert(p => p.Name, videocard.Model)
|
|
|
|
|
|
.Set(p => p.Update, date)
|
|
|
|
|
|
.Set(p => p.Batch, batch)
|
|
|
|
|
|
.Set(p => p.Company, null)
|
|
|
|
|
|
.Set(p => p.Memory, videocard.Memory)
|
|
|
|
|
|
.Set(p => p.Driver, videocard.DriverVersion)
|
|
|
|
|
|
.Set(p => p.Date, videocard.DriverDate);
|
2023-09-21 18:58:32 +02:00
|
|
|
|
|
2023-09-21 22:10:55 +02:00
|
|
|
|
bulk.Add(new UpdateOneModel<HostVideocardEntity>(filterDefinition, updateDefinition)
|
|
|
|
|
|
{
|
|
|
|
|
|
IsUpsert = true
|
|
|
|
|
|
});
|
2023-09-21 18:58:32 +02:00
|
|
|
|
}
|
2023-09-21 22:10:55 +02:00
|
|
|
|
|
|
|
|
|
|
bulk.Add(new DeleteManyModel<HostVideocardEntity>(Builders<HostVideocardEntity>.Filter.And(new List<FilterDefinition<HostVideocardEntity>>
|
|
|
|
|
|
{
|
|
|
|
|
|
Builders<HostVideocardEntity>.Filter.Eq(x => x.Host, hostEntity.Id),
|
|
|
|
|
|
Builders<HostVideocardEntity>.Filter.Ne(x => x.Batch, batch)
|
|
|
|
|
|
})));
|
|
|
|
|
|
|
|
|
|
|
|
var result = await _database.HostVideocard().BulkWriteAsync(bulk, cancellationToken: cancellationToken);
|
2023-09-21 18:58:32 +02:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|