1
0
mirror of https://github.com/chylex/Minecraft-Phantom-Panel.git synced 2025-05-09 14:34:10 +02:00
Minecraft-Phantom-Panel/Web/Phantom.Web/Pages/Agents.razor

81 lines
2.6 KiB
Plaintext

@page "/agents"
@using Phantom.Common.Data.Web.Agent
@using Phantom.Utils.Collections
@using Phantom.Web.Services.Agents
@inherits Phantom.Web.Components.PhantomComponent
@inject AgentManager AgentManager
<h1>Agents</h1>
<Table Items="agentTable">
<HeaderRow>
<Column Width="50%">Name</Column>
<Column Class="text-end" Width="24%" MinWidth="90px">Instances</Column>
<Column Class="text-end" Width="26%" MinWidth="145px">Memory</Column>
<Column>Version</Column>
<Column Class="text-center">Status</Column>
<Column Class="text-end" MinWidth="200px">Last Ping</Column>
</HeaderRow>
<ItemRow Context="agent">
@{
var usedInstances = agent.Stats?.RunningInstanceCount;
var usedMemory = agent.Stats?.RunningInstanceMemory.InMegabytes;
}
<Cell>
<p class="fw-semibold">@agent.Name</p>
<small class="font-monospace text-uppercase">@agent.Guid.ToString()</small>
</Cell>
<Cell class="text-end">
<ProgressBar Value="@(usedInstances ?? 0)" Maximum="@agent.MaxInstances">
@(usedInstances?.ToString() ?? "?") / @agent.MaxInstances.ToString()
</ProgressBar>
</Cell>
<Cell class="text-end">
<ProgressBar Value="@(usedMemory ?? 0)" Maximum="@agent.MaxMemory.InMegabytes">
@(usedMemory?.ToString() ?? "?") / @agent.MaxMemory.InMegabytes.ToString() MB
</ProgressBar>
</Cell>
<Cell class="text-condensed">
Build: <span class="font-monospace">@agent.BuildVersion</span>
<br>
Protocol: <span class="font-monospace">v@(agent.ProtocolVersion.ToString())</span>
</Cell>
@if (agent.IsOnline) {
<Cell class="fw-semibold text-center text-success">Online</Cell>
<Cell class="text-end">-</Cell>
}
else {
<Cell class="fw-semibold text-center">Offline</Cell>
<Cell class="text-end">
@if (agent.LastPing is {} lastPing) {
<TimeWithOffset Time="lastPing" />
}
else {
<text>N/A</text>
}
</Cell>
}
</ItemRow>
<NoItemsRow>
No agents registered.
</NoItemsRow>
</Table>
@code {
private readonly TableData<AgentWithStats, Guid> agentTable = new();
protected override void OnInitialized() {
AgentManager.AgentsChanged.Subscribe(this, agents => {
var sortedAgents = agents.Sort(static (a1, a2) => a1.Name.CompareTo(a2.Name));
agentTable.UpdateFrom(sortedAgents, static agent => agent.Guid, static agent => agent, static (agent, _) => agent);
InvokeAsync(StateHasChanged);
});
}
protected override void OnDisposed() {
AgentManager.AgentsChanged.Unsubscribe(this);
}
}