mirror of
				https://github.com/chylex/Minecraft-Phantom-Panel.git
				synced 2025-11-02 16:53:00 +01:00 
			
		
		
		
	Compare commits
	
		
			2 Commits
		
	
	
		
			f50f5341da
			...
			5ffbde6a04
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						
						
							
						
						5ffbde6a04
	
				 | 
					
					
						|||
| 
						
						
							
						
						e69b0245aa
	
				 | 
					
					
						
@@ -3,7 +3,7 @@
 | 
				
			|||||||
namespace Phantom.Common.Data.Web.EventLog;
 | 
					namespace Phantom.Common.Data.Web.EventLog;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[MemoryPackable(GenerateType.VersionTolerant)]
 | 
					[MemoryPackable(GenerateType.VersionTolerant)]
 | 
				
			||||||
public sealed record EventLogItem(
 | 
					public sealed partial record EventLogItem(
 | 
				
			||||||
	[property: MemoryPackOrder(0)] DateTime UtcTime,
 | 
						[property: MemoryPackOrder(0)] DateTime UtcTime,
 | 
				
			||||||
	[property: MemoryPackOrder(1)] Guid? AgentGuid,
 | 
						[property: MemoryPackOrder(1)] Guid? AgentGuid,
 | 
				
			||||||
	[property: MemoryPackOrder(2)] EventLogEventType EventType,
 | 
						[property: MemoryPackOrder(2)] EventLogEventType EventType,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -11,6 +11,7 @@
 | 
				
			|||||||
      <PrivateAssets>all</PrivateAssets>
 | 
					      <PrivateAssets>all</PrivateAssets>
 | 
				
			||||||
      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
 | 
					      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
 | 
				
			||||||
    </PackageReference>
 | 
					    </PackageReference>
 | 
				
			||||||
 | 
					    <PackageReference Include="System.Linq.Async" />
 | 
				
			||||||
  </ItemGroup>
 | 
					  </ItemGroup>
 | 
				
			||||||
  
 | 
					  
 | 
				
			||||||
  <ItemGroup>
 | 
					  <ItemGroup>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -19,8 +19,8 @@ public sealed class AuditLogRepositoryReader {
 | 
				
			|||||||
		         .AsQueryable()
 | 
							         .AsQueryable()
 | 
				
			||||||
		         .OrderByDescending(static entity => entity.UtcTime)
 | 
							         .OrderByDescending(static entity => entity.UtcTime)
 | 
				
			||||||
		         .Take(count)
 | 
							         .Take(count)
 | 
				
			||||||
		         .Select(static entity => new AuditLogItem(entity.UtcTime, entity.UserGuid, entity.User == null ? null : entity.User.Name, entity.EventType, entity.SubjectType, entity.SubjectId, entity.Data == null ? null : entity.Data.RootElement.ToString()))
 | 
					 | 
				
			||||||
		         .AsAsyncEnumerable()
 | 
							         .AsAsyncEnumerable()
 | 
				
			||||||
 | 
							         .Select(static entity => new AuditLogItem(entity.UtcTime, entity.UserGuid, entity.User?.Name, entity.EventType, entity.SubjectType, entity.SubjectId, entity.Data?.RootElement.ToString()))
 | 
				
			||||||
		         .ToImmutableArrayAsync(cancellationToken);
 | 
							         .ToImmutableArrayAsync(cancellationToken);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -0,0 +1,30 @@
 | 
				
			|||||||
 | 
					using System.Collections.Immutable;
 | 
				
			||||||
 | 
					using Microsoft.EntityFrameworkCore;
 | 
				
			||||||
 | 
					using Phantom.Common.Data.Web.EventLog;
 | 
				
			||||||
 | 
					using Phantom.Controller.Database.Entities;
 | 
				
			||||||
 | 
					using Phantom.Utils.Collections;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace Phantom.Controller.Database.Repositories;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public sealed class EventLogRepository {
 | 
				
			||||||
 | 
						private readonly ILazyDbContext db;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						public EventLogRepository(ILazyDbContext db) {
 | 
				
			||||||
 | 
							this.db = db;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						public void AddItem(Guid eventGuid, DateTime utcTime, Guid? agentGuid, EventLogEventType eventType, string subjectId, Dictionary<string, object?>? extra = null) {
 | 
				
			||||||
 | 
							db.Ctx.EventLog.Add(new EventLogEntity(eventGuid, utcTime, agentGuid, eventType, subjectId, extra));
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						public Task<ImmutableArray<EventLogItem>> GetMostRecentItems(int count, CancellationToken cancellationToken) {
 | 
				
			||||||
 | 
							return db.Ctx
 | 
				
			||||||
 | 
							         .EventLog
 | 
				
			||||||
 | 
							         .AsQueryable()
 | 
				
			||||||
 | 
							         .OrderByDescending(static entity => entity.UtcTime)
 | 
				
			||||||
 | 
							         .Take(count)
 | 
				
			||||||
 | 
							         .AsAsyncEnumerable()
 | 
				
			||||||
 | 
							         .Select(static entity => new EventLogItem(entity.UtcTime, entity.AgentGuid, entity.EventType, entity.SubjectType, entity.SubjectId, entity.Data?.RootElement.ToString()))
 | 
				
			||||||
 | 
							         .ToImmutableArrayAsync(cancellationToken);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -20,7 +20,6 @@ public sealed class ControllerServices {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	private AgentManager AgentManager { get; }
 | 
						private AgentManager AgentManager { get; }
 | 
				
			||||||
	private AgentJavaRuntimesManager AgentJavaRuntimesManager { get; }
 | 
						private AgentJavaRuntimesManager AgentJavaRuntimesManager { get; }
 | 
				
			||||||
	private EventLog EventLog { get; }
 | 
					 | 
				
			||||||
	private InstanceManager InstanceManager { get; }
 | 
						private InstanceManager InstanceManager { get; }
 | 
				
			||||||
	private InstanceLogManager InstanceLogManager { get; }
 | 
						private InstanceLogManager InstanceLogManager { get; }
 | 
				
			||||||
	private EventLogManager EventLogManager { get; }
 | 
						private EventLogManager EventLogManager { get; }
 | 
				
			||||||
@@ -42,7 +41,6 @@ public sealed class ControllerServices {
 | 
				
			|||||||
		
 | 
							
 | 
				
			||||||
		this.AgentManager = new AgentManager(agentAuthToken, dbProvider, TaskManager, shutdownCancellationToken);
 | 
							this.AgentManager = new AgentManager(agentAuthToken, dbProvider, TaskManager, shutdownCancellationToken);
 | 
				
			||||||
		this.AgentJavaRuntimesManager = new AgentJavaRuntimesManager();
 | 
							this.AgentJavaRuntimesManager = new AgentJavaRuntimesManager();
 | 
				
			||||||
		this.EventLog = new EventLog(dbProvider, TaskManager, shutdownCancellationToken);
 | 
					 | 
				
			||||||
		this.InstanceManager = new InstanceManager(AgentManager, MinecraftVersions, dbProvider, shutdownCancellationToken);
 | 
							this.InstanceManager = new InstanceManager(AgentManager, MinecraftVersions, dbProvider, shutdownCancellationToken);
 | 
				
			||||||
		this.InstanceLogManager = new InstanceLogManager();
 | 
							this.InstanceLogManager = new InstanceLogManager();
 | 
				
			||||||
		
 | 
							
 | 
				
			||||||
@@ -52,7 +50,7 @@ public sealed class ControllerServices {
 | 
				
			|||||||
		
 | 
							
 | 
				
			||||||
		this.UserLoginManager = new UserLoginManager(UserManager, PermissionManager);
 | 
							this.UserLoginManager = new UserLoginManager(UserManager, PermissionManager);
 | 
				
			||||||
		this.AuditLogManager = new AuditLogManager(dbProvider);
 | 
							this.AuditLogManager = new AuditLogManager(dbProvider);
 | 
				
			||||||
		this.EventLogManager = new EventLogManager(dbProvider);
 | 
							this.EventLogManager = new EventLogManager(dbProvider, TaskManager, shutdownCancellationToken);
 | 
				
			||||||
		
 | 
							
 | 
				
			||||||
		this.dbProvider = dbProvider;
 | 
							this.dbProvider = dbProvider;
 | 
				
			||||||
		this.webAuthToken = webAuthToken;
 | 
							this.webAuthToken = webAuthToken;
 | 
				
			||||||
@@ -60,7 +58,7 @@ public sealed class ControllerServices {
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	public AgentMessageListener CreateAgentMessageListener(RpcConnectionToClient<IMessageToAgentListener> connection) {
 | 
						public AgentMessageListener CreateAgentMessageListener(RpcConnectionToClient<IMessageToAgentListener> connection) {
 | 
				
			||||||
		return new AgentMessageListener(connection, AgentManager, AgentJavaRuntimesManager, InstanceManager, InstanceLogManager, EventLog, cancellationToken);
 | 
							return new AgentMessageListener(connection, AgentManager, AgentJavaRuntimesManager, InstanceManager, InstanceLogManager, EventLogManager, cancellationToken);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	public WebMessageListener CreateWebMessageListener(RpcConnectionToClient<IMessageToWebListener> connection) {
 | 
						public WebMessageListener CreateWebMessageListener(RpcConnectionToClient<IMessageToWebListener> connection) {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,43 +0,0 @@
 | 
				
			|||||||
using System.Collections.Immutable;
 | 
					 | 
				
			||||||
using Microsoft.EntityFrameworkCore;
 | 
					 | 
				
			||||||
using Phantom.Common.Data.Web.EventLog;
 | 
					 | 
				
			||||||
using Phantom.Controller.Database;
 | 
					 | 
				
			||||||
using Phantom.Controller.Database.Entities;
 | 
					 | 
				
			||||||
using Phantom.Utils.Collections;
 | 
					 | 
				
			||||||
using Phantom.Utils.Tasks;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
namespace Phantom.Controller.Services.Events;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
public sealed partial class EventLog {
 | 
					 | 
				
			||||||
	private readonly IDbContextProvider dbProvider;
 | 
					 | 
				
			||||||
	private readonly TaskManager taskManager;
 | 
					 | 
				
			||||||
	private readonly CancellationToken cancellationToken;
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
	public EventLog(IDbContextProvider dbProvider, TaskManager taskManager, CancellationToken cancellationToken) {
 | 
					 | 
				
			||||||
		this.dbProvider = dbProvider;
 | 
					 | 
				
			||||||
		this.taskManager = taskManager;
 | 
					 | 
				
			||||||
		this.cancellationToken = cancellationToken;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	private async Task AddEntityToDatabase(EventLogEntity logEntity) {
 | 
					 | 
				
			||||||
		await using var ctx = dbProvider.Eager();
 | 
					 | 
				
			||||||
		ctx.EventLog.Add(logEntity);
 | 
					 | 
				
			||||||
		await ctx.SaveChangesAsync(cancellationToken);
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	private void AddItem(Guid eventGuid, DateTime utcTime, Guid? agentGuid, EventLogEventType eventType, string subjectId, Dictionary<string, object?>? extra = null) {
 | 
					 | 
				
			||||||
		var logEntity = new EventLogEntity(eventGuid, utcTime, agentGuid, eventType, subjectId, extra);
 | 
					 | 
				
			||||||
		taskManager.Run("Store event log item to database", () => AddEntityToDatabase(logEntity));
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	public async Task<ImmutableArray<EventLogItem>> GetItems(int count, CancellationToken cancellationToken) {
 | 
					 | 
				
			||||||
		await using var ctx = dbProvider.Eager();
 | 
					 | 
				
			||||||
		return await ctx.EventLog
 | 
					 | 
				
			||||||
		                .AsQueryable()
 | 
					 | 
				
			||||||
		                .OrderByDescending(static entity => entity.UtcTime)
 | 
					 | 
				
			||||||
		                .Take(count)
 | 
					 | 
				
			||||||
		                .Select(static entity => new EventLogItem(entity.UtcTime, entity.AgentGuid, entity.EventType, entity.SubjectType, entity.SubjectId, entity.Data))
 | 
					 | 
				
			||||||
		                .AsAsyncEnumerable()
 | 
					 | 
				
			||||||
		                .ToImmutableArrayAsync(cancellationToken);
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@@ -4,20 +4,20 @@ using Phantom.Common.Data.Web.EventLog;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
namespace Phantom.Controller.Services.Events;
 | 
					namespace Phantom.Controller.Services.Events;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
public sealed partial class EventLog {
 | 
					sealed partial class EventLogManager {
 | 
				
			||||||
	internal IInstanceEventVisitor CreateInstanceEventVisitor(Guid eventGuid, DateTime utcTime, Guid agentGuid, Guid instanceGuid) {
 | 
						internal IInstanceEventVisitor CreateInstanceEventVisitor(Guid eventGuid, DateTime utcTime, Guid agentGuid, Guid instanceGuid) {
 | 
				
			||||||
		return new InstanceEventVisitor(this, utcTime, eventGuid, agentGuid, instanceGuid);
 | 
							return new InstanceEventVisitor(this, utcTime, eventGuid, agentGuid, instanceGuid);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	private sealed class InstanceEventVisitor : IInstanceEventVisitor {
 | 
						private sealed class InstanceEventVisitor : IInstanceEventVisitor {
 | 
				
			||||||
		private readonly EventLog eventLog;
 | 
							private readonly EventLogManager eventLogManager;
 | 
				
			||||||
		private readonly Guid eventGuid;
 | 
							private readonly Guid eventGuid;
 | 
				
			||||||
		private readonly DateTime utcTime;
 | 
							private readonly DateTime utcTime;
 | 
				
			||||||
		private readonly Guid agentGuid;
 | 
							private readonly Guid agentGuid;
 | 
				
			||||||
		private readonly Guid instanceGuid;
 | 
							private readonly Guid instanceGuid;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		public InstanceEventVisitor(EventLog eventLog, DateTime utcTime, Guid eventGuid, Guid agentGuid, Guid instanceGuid) {
 | 
							public InstanceEventVisitor(EventLogManager eventLogManager, DateTime utcTime, Guid eventGuid, Guid agentGuid, Guid instanceGuid) {
 | 
				
			||||||
			this.eventLog = eventLog;
 | 
								this.eventLogManager = eventLogManager;
 | 
				
			||||||
			this.eventGuid = eventGuid;
 | 
								this.eventGuid = eventGuid;
 | 
				
			||||||
			this.utcTime = utcTime;
 | 
								this.utcTime = utcTime;
 | 
				
			||||||
			this.agentGuid = agentGuid;
 | 
								this.agentGuid = agentGuid;
 | 
				
			||||||
@@ -25,21 +25,21 @@ public sealed partial class EventLog {
 | 
				
			|||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		public void OnLaunchSucceeded(InstanceLaunchSuccededEvent e) {
 | 
							public void OnLaunchSucceeded(InstanceLaunchSuccededEvent e) {
 | 
				
			||||||
			eventLog.AddItem(eventGuid, utcTime, agentGuid, EventLogEventType.InstanceLaunchSucceded, instanceGuid.ToString());
 | 
								eventLogManager.EnqueueItem(eventGuid, utcTime, agentGuid, EventLogEventType.InstanceLaunchSucceded, instanceGuid.ToString());
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		public void OnLaunchFailed(InstanceLaunchFailedEvent e) {
 | 
							public void OnLaunchFailed(InstanceLaunchFailedEvent e) {
 | 
				
			||||||
			eventLog.AddItem(eventGuid, utcTime, agentGuid, EventLogEventType.InstanceLaunchFailed, instanceGuid.ToString(), new Dictionary<string, object?> {
 | 
								eventLogManager.EnqueueItem(eventGuid, utcTime, agentGuid, EventLogEventType.InstanceLaunchFailed, instanceGuid.ToString(), new Dictionary<string, object?> {
 | 
				
			||||||
				{ "reason", e.Reason.ToString() }
 | 
									{ "reason", e.Reason.ToString() }
 | 
				
			||||||
			});
 | 
								});
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		public void OnCrashed(InstanceCrashedEvent e) {
 | 
							public void OnCrashed(InstanceCrashedEvent e) {
 | 
				
			||||||
			eventLog.AddItem(eventGuid, utcTime, agentGuid, EventLogEventType.InstanceCrashed, instanceGuid.ToString());
 | 
								eventLogManager.EnqueueItem(eventGuid, utcTime, agentGuid, EventLogEventType.InstanceCrashed, instanceGuid.ToString());
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		public void OnStopped(InstanceStoppedEvent e) {
 | 
							public void OnStopped(InstanceStoppedEvent e) {
 | 
				
			||||||
			eventLog.AddItem(eventGuid, utcTime, agentGuid, EventLogEventType.InstanceStopped, instanceGuid.ToString());
 | 
								eventLogManager.EnqueueItem(eventGuid, utcTime, agentGuid, EventLogEventType.InstanceStopped, instanceGuid.ToString());
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		public void OnBackupCompleted(InstanceBackupCompletedEvent e) {
 | 
							public void OnBackupCompleted(InstanceBackupCompletedEvent e) {
 | 
				
			||||||
@@ -59,7 +59,7 @@ public sealed partial class EventLog {
 | 
				
			|||||||
				dictionary["warnings"] = e.Warnings.ListFlags().Select(static warning => warning.ToString()).ToArray();
 | 
									dictionary["warnings"] = e.Warnings.ListFlags().Select(static warning => warning.ToString()).ToArray();
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			eventLog.AddItem(eventGuid, utcTime, agentGuid, eventType, instanceGuid.ToString(), dictionary.Count == 0 ? null : dictionary);
 | 
								eventLogManager.EnqueueItem(eventGuid, utcTime, agentGuid, eventType, instanceGuid.ToString(), dictionary.Count == 0 ? null : dictionary);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -0,0 +1,34 @@
 | 
				
			|||||||
 | 
					using System.Collections.Immutable;
 | 
				
			||||||
 | 
					using Phantom.Common.Data.Web.EventLog;
 | 
				
			||||||
 | 
					using Phantom.Controller.Database;
 | 
				
			||||||
 | 
					using Phantom.Controller.Database.Repositories;
 | 
				
			||||||
 | 
					using Phantom.Utils.Tasks;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace Phantom.Controller.Services.Events; 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					sealed partial class EventLogManager {
 | 
				
			||||||
 | 
						private readonly IDbContextProvider dbProvider;
 | 
				
			||||||
 | 
						private readonly TaskManager taskManager;
 | 
				
			||||||
 | 
						private readonly CancellationToken cancellationToken;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						public EventLogManager(IDbContextProvider dbProvider, TaskManager taskManager, CancellationToken cancellationToken) {
 | 
				
			||||||
 | 
							this.dbProvider = dbProvider;
 | 
				
			||||||
 | 
							this.taskManager = taskManager;
 | 
				
			||||||
 | 
							this.cancellationToken = cancellationToken;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						public void EnqueueItem(Guid eventGuid, DateTime utcTime, Guid? agentGuid, EventLogEventType eventType, string subjectId, Dictionary<string, object?>? extra = null) {
 | 
				
			||||||
 | 
							taskManager.Run("Store event log item to database", () => AddItem(eventGuid, utcTime, agentGuid, eventType, subjectId, extra));
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						public async Task AddItem(Guid eventGuid, DateTime utcTime, Guid? agentGuid, EventLogEventType eventType, string subjectId, Dictionary<string, object?>? extra = null) {
 | 
				
			||||||
 | 
							await using var db = dbProvider.Lazy();
 | 
				
			||||||
 | 
							new EventLogRepository(db).AddItem(eventGuid, utcTime, agentGuid, eventType, subjectId, extra);
 | 
				
			||||||
 | 
							await db.Ctx.SaveChangesAsync(cancellationToken);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						public async Task<ImmutableArray<EventLogItem>> GetMostRecentItems(int count) {
 | 
				
			||||||
 | 
							await using var db = dbProvider.Lazy();
 | 
				
			||||||
 | 
							return await new EventLogRepository(db).GetMostRecentItems(count, cancellationToken);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -19,18 +19,18 @@ public sealed class AgentMessageListener : IMessageToControllerListener {
 | 
				
			|||||||
	private readonly AgentJavaRuntimesManager agentJavaRuntimesManager;
 | 
						private readonly AgentJavaRuntimesManager agentJavaRuntimesManager;
 | 
				
			||||||
	private readonly InstanceManager instanceManager;
 | 
						private readonly InstanceManager instanceManager;
 | 
				
			||||||
	private readonly InstanceLogManager instanceLogManager;
 | 
						private readonly InstanceLogManager instanceLogManager;
 | 
				
			||||||
	private readonly EventLog eventLog;
 | 
						private readonly EventLogManager eventLogManager;
 | 
				
			||||||
	private readonly CancellationToken cancellationToken;
 | 
						private readonly CancellationToken cancellationToken;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	private readonly TaskCompletionSource<Guid> agentGuidWaiter = AsyncTasks.CreateCompletionSource<Guid>();
 | 
						private readonly TaskCompletionSource<Guid> agentGuidWaiter = AsyncTasks.CreateCompletionSource<Guid>();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	internal AgentMessageListener(RpcConnectionToClient<IMessageToAgentListener> connection, AgentManager agentManager, AgentJavaRuntimesManager agentJavaRuntimesManager, InstanceManager instanceManager, InstanceLogManager instanceLogManager, EventLog eventLog, CancellationToken cancellationToken) {
 | 
						internal AgentMessageListener(RpcConnectionToClient<IMessageToAgentListener> connection, AgentManager agentManager, AgentJavaRuntimesManager agentJavaRuntimesManager, InstanceManager instanceManager, InstanceLogManager instanceLogManager, EventLogManager eventLogManager, CancellationToken cancellationToken) {
 | 
				
			||||||
		this.connection = connection;
 | 
							this.connection = connection;
 | 
				
			||||||
		this.agentManager = agentManager;
 | 
							this.agentManager = agentManager;
 | 
				
			||||||
		this.agentJavaRuntimesManager = agentJavaRuntimesManager;
 | 
							this.agentJavaRuntimesManager = agentJavaRuntimesManager;
 | 
				
			||||||
		this.instanceManager = instanceManager;
 | 
							this.instanceManager = instanceManager;
 | 
				
			||||||
		this.instanceLogManager = instanceLogManager;
 | 
							this.instanceLogManager = instanceLogManager;
 | 
				
			||||||
		this.eventLog = eventLog;
 | 
							this.eventLogManager = eventLogManager;
 | 
				
			||||||
		this.cancellationToken = cancellationToken;
 | 
							this.cancellationToken = cancellationToken;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -83,7 +83,7 @@ public sealed class AgentMessageListener : IMessageToControllerListener {
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	public async Task<NoReply> HandleReportInstanceEvent(ReportInstanceEventMessage message) {
 | 
						public async Task<NoReply> HandleReportInstanceEvent(ReportInstanceEventMessage message) {
 | 
				
			||||||
		message.Event.Accept(eventLog.CreateInstanceEventVisitor(message.EventGuid, message.UtcTime, await WaitForAgentGuid(), message.InstanceGuid));
 | 
							message.Event.Accept(eventLogManager.CreateInstanceEventVisitor(message.EventGuid, message.UtcTime, await WaitForAgentGuid(), message.InstanceGuid));
 | 
				
			||||||
		return NoReply.Instance;
 | 
							return NoReply.Instance;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -5,6 +5,7 @@ using Phantom.Common.Data.Minecraft;
 | 
				
			|||||||
using Phantom.Common.Data.Replies;
 | 
					using Phantom.Common.Data.Replies;
 | 
				
			||||||
using Phantom.Common.Data.Web.Agent;
 | 
					using Phantom.Common.Data.Web.Agent;
 | 
				
			||||||
using Phantom.Common.Data.Web.AuditLog;
 | 
					using Phantom.Common.Data.Web.AuditLog;
 | 
				
			||||||
 | 
					using Phantom.Common.Data.Web.EventLog;
 | 
				
			||||||
using Phantom.Common.Data.Web.Instance;
 | 
					using Phantom.Common.Data.Web.Instance;
 | 
				
			||||||
using Phantom.Common.Data.Web.Users;
 | 
					using Phantom.Common.Data.Web.Users;
 | 
				
			||||||
using Phantom.Common.Logging;
 | 
					using Phantom.Common.Logging;
 | 
				
			||||||
@@ -15,6 +16,7 @@ using Phantom.Common.Messages.Web.ToWeb;
 | 
				
			|||||||
using Phantom.Controller.Minecraft;
 | 
					using Phantom.Controller.Minecraft;
 | 
				
			||||||
using Phantom.Controller.Rpc;
 | 
					using Phantom.Controller.Rpc;
 | 
				
			||||||
using Phantom.Controller.Services.Agents;
 | 
					using Phantom.Controller.Services.Agents;
 | 
				
			||||||
 | 
					using Phantom.Controller.Services.Events;
 | 
				
			||||||
using Phantom.Controller.Services.Instances;
 | 
					using Phantom.Controller.Services.Instances;
 | 
				
			||||||
using Phantom.Controller.Services.Users;
 | 
					using Phantom.Controller.Services.Users;
 | 
				
			||||||
using Phantom.Utils.Rpc.Message;
 | 
					using Phantom.Utils.Rpc.Message;
 | 
				
			||||||
@@ -35,6 +37,7 @@ public sealed class WebMessageListener : IMessageToControllerListener {
 | 
				
			|||||||
	private readonly AgentJavaRuntimesManager agentJavaRuntimesManager;
 | 
						private readonly AgentJavaRuntimesManager agentJavaRuntimesManager;
 | 
				
			||||||
	private readonly InstanceManager instanceManager;
 | 
						private readonly InstanceManager instanceManager;
 | 
				
			||||||
	private readonly MinecraftVersions minecraftVersions;
 | 
						private readonly MinecraftVersions minecraftVersions;
 | 
				
			||||||
 | 
						private readonly EventLogManager eventLogManager;
 | 
				
			||||||
	private readonly TaskManager taskManager;
 | 
						private readonly TaskManager taskManager;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	internal WebMessageListener(
 | 
						internal WebMessageListener(
 | 
				
			||||||
@@ -47,6 +50,7 @@ public sealed class WebMessageListener : IMessageToControllerListener {
 | 
				
			|||||||
		AgentJavaRuntimesManager agentJavaRuntimesManager,
 | 
							AgentJavaRuntimesManager agentJavaRuntimesManager,
 | 
				
			||||||
		InstanceManager instanceManager,
 | 
							InstanceManager instanceManager,
 | 
				
			||||||
		MinecraftVersions minecraftVersions,
 | 
							MinecraftVersions minecraftVersions,
 | 
				
			||||||
 | 
							EventLogManager eventLogManager,
 | 
				
			||||||
		TaskManager taskManager
 | 
							TaskManager taskManager
 | 
				
			||||||
	) {
 | 
						) {
 | 
				
			||||||
		this.connection = connection;
 | 
							this.connection = connection;
 | 
				
			||||||
@@ -60,6 +64,8 @@ public sealed class WebMessageListener : IMessageToControllerListener {
 | 
				
			|||||||
		this.agentJavaRuntimesManager = agentJavaRuntimesManager;
 | 
							this.agentJavaRuntimesManager = agentJavaRuntimesManager;
 | 
				
			||||||
		this.instanceManager = instanceManager;
 | 
							this.instanceManager = instanceManager;
 | 
				
			||||||
		this.minecraftVersions = minecraftVersions;
 | 
							this.minecraftVersions = minecraftVersions;
 | 
				
			||||||
 | 
							this.eventLogManager = eventLogManager;
 | 
				
			||||||
 | 
							
 | 
				
			||||||
		this.taskManager = taskManager;
 | 
							this.taskManager = taskManager;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -131,6 +137,10 @@ public sealed class WebMessageListener : IMessageToControllerListener {
 | 
				
			|||||||
		return auditLogManager.GetMostRecentItems(message.Count);
 | 
							return auditLogManager.GetMostRecentItems(message.Count);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						public Task<ImmutableArray<EventLogItem>> HandleGetEventLog(GetEventLogMessage message) {
 | 
				
			||||||
 | 
							return eventLogManager.GetMostRecentItems(message.Count);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	public Task<LogInSuccess?> HandleLogIn(LogInMessage message) {
 | 
						public Task<LogInSuccess?> HandleLogIn(LogInMessage message) {
 | 
				
			||||||
		return userLoginManager.LogIn(message.Username, message.Password);
 | 
							return userLoginManager.LogIn(message.Username, message.Password);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -6,6 +6,7 @@
 | 
				
			|||||||
    <PackageReference Update="Microsoft.EntityFrameworkCore.Relational"          Version="7.0.11" />
 | 
					    <PackageReference Update="Microsoft.EntityFrameworkCore.Relational"          Version="7.0.11" />
 | 
				
			||||||
    <PackageReference Update="Microsoft.EntityFrameworkCore.Tools"               Version="7.0.11" />
 | 
					    <PackageReference Update="Microsoft.EntityFrameworkCore.Tools"               Version="7.0.11" />
 | 
				
			||||||
    <PackageReference Update="Npgsql.EntityFrameworkCore.PostgreSQL"             Version="7.0.11" />
 | 
					    <PackageReference Update="Npgsql.EntityFrameworkCore.PostgreSQL"             Version="7.0.11" />
 | 
				
			||||||
 | 
					    <PackageReference Update="System.Linq.Async"                                 Version="4.0.0" />
 | 
				
			||||||
  </ItemGroup>
 | 
					  </ItemGroup>
 | 
				
			||||||
  
 | 
					  
 | 
				
			||||||
  <ItemGroup>
 | 
					  <ItemGroup>
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user