@using MoonCore.Blazor.FlyonUi.Components @using MoonCore.Blazor.FlyonUi.Toasts @using MoonCore.Blazor.Tailwind.Components @using MoonCore.Blazor.Tailwind.Toasts @using MoonCore.Helpers @using MoonlightServers.Frontend.Services @using MoonlightServers.Shared.Http.Responses.Admin.Nodes @using MoonlightServers.Shared.Http.Responses.Admin.Nodes.Statistics @inject NodeService NodeService @inject ToastService ToastService @inject ILogger Logger @implements IDisposable
Overview

@Math.Round(Statistics.Cpu.Usage, 2)%

CPU: @Statistics.Cpu.Model

@Formatter.FormatSize(Statistics.Memory.Total - Statistics.Memory.Available) / @Formatter.FormatSize(Statistics.Memory.Total)

Memory
@Formatter.FormatSize(Statistics.Memory.SwapTotal - Statistics.Memory.SwapFree) / @Formatter.FormatSize(Statistics.Memory.SwapTotal)
Swap
CPU
@{ var i = 0; } @foreach (var usage in Statistics.Cpu.UsagePerCore) { var percentRounded = Math.Round(usage, 2);
#@(i)
i++; }
Disks
@foreach (var disk in Statistics.Disks) { var usedPercent = Math.Round((disk.DiskTotal - disk.DiskFree) / (double)disk.DiskTotal * 100, 2); var iNodesPercent = Math.Round((disk.InodesTotal - disk.InodesFree) / (double)disk.InodesTotal * 100, 2);
Device: @disk.Device - Mounted at: @disk.MountPath
Used: @Formatter.FormatSize(disk.DiskTotal - disk.DiskFree) Total: @Formatter.FormatSize(disk.DiskTotal)
INodes: @(iNodesPercent)%
}
Docker

@Formatter.FormatSize(DockerStatistics.ImagesUsed) (@Formatter.FormatSize(DockerStatistics.ImagesReclaimable) unused)

Images

@Formatter.FormatSize(DockerStatistics.ContainersUsed) ( @Formatter.FormatSize(DockerStatistics.ContainersReclaimable) unused)

Containers

@Formatter.FormatSize(DockerStatistics.BuildCacheUsed) (@Formatter.FormatSize(DockerStatistics.BuildCacheReclaimable) unused)

Build Cache
@code { [Parameter] public NodeResponse Node { get; set; } private StatisticsResponse Statistics; private DockerStatisticsResponse DockerStatistics; private Timer? UpdateTimer; private async Task Load(LazyLoader _) { Statistics = await NodeService.GetStatistics(Node.Id); DockerStatistics = await NodeService.GetDockerStatistics(Node.Id); UpdateTimer = new Timer(HandleUpdate, null, TimeSpan.FromSeconds(1), TimeSpan.FromSeconds(3)); } private async void HandleUpdate(object? _) { try { Statistics = await NodeService.GetStatistics(Node.Id); DockerStatistics = await NodeService.GetDockerStatistics(Node.Id); await InvokeAsync(StateHasChanged); } catch (Exception e) { Logger.LogWarning("An error occured while fetching status update: {e}", e); await ToastService.Danger("Unable to fetch status update", e.Message); } } private string GetBackgroundColorByPercent(double percent) { if (percent < 70) return "bg-success"; else if (percent < 80) return "bg-warning"; else return "bg-danger"; } public void Dispose() { UpdateTimer?.Dispose(); } }