Files
2025-10-25 18:10:15 +02:00

111 lines
4.8 KiB
Plaintext

@page "/status"
@using SPTarkov.Server.Core.Helpers
@using SPTarkov.Server.Core.Models.Spt.Config
@using SPTarkov.Server.Core.Servers
@using SPTarkov.Server.Core.Services
@using SPTarkov.Server.Core.Utils
@using SPTarkov.Server.Web.Components.Layout
@inject ConfigServer ConfigServer
@inject TimeUtil TimeUtil
@inject ProfileActivityService ProfileActivityService
@inject ProfileHelper ProfileHelper
@layout BaseMudBlazorLayout
<HeadContent>
<link href="@Assets["_content/MudBlazor/MudBlazor.min.css"]" rel="stylesheet" />
<meta name="robots" content="noindex, nofollow">
<link href="https://fonts.googleapis.com/css2?family=Open+Sans:ital,wght@0,300..800;1,300..800&amp;family=Roboto:ital,wght@0,100..900;1,100..900&amp;display=swap" rel="stylesheet">
</HeadContent>
<MudThemeProvider Theme="@_theme" IsDarkMode="true" />
<MudContainer Class="mt-16 d-flex justify-center">
<MudGrid Justify="Justify.Center">
<MudItem xs="12" sm="6" md="4">
<MudCard Elevation="25" Class="rounded-lg pb-4">
<MudCardHeader>
<CardHeaderContent>
<MudText Typo="Typo.h4" Color="Color.Warning" Align="Align.Center">Server health</MudText>
</CardHeaderContent>
</MudCardHeader>
<MudCardContent>
<MudList T="string" Class="mx-auto mt-4">
<MudListItem Icon="@Icons.Material.Filled.Circle" IconColor="Color.Warning">SPT Version: @_sptVersion</MudListItem>
<MudListItem Icon="@Icons.Material.Filled.Circle" IconColor="Color.Warning">Mods @(_modsEnabled ? "ENABLED" : "DISABLED")</MudListItem>
<MudListItem Icon="@Icons.Material.Filled.Circle" IconColor="Color.Warning">Debug @(_debugEnabled ? "ENABLED" : "DISABLED")</MudListItem>
<MudListItem Icon="@Icons.Material.Filled.Circle" IconColor="Color.Warning">Time started: @_startTime</MudListItem>
<MudListItem Icon="@Icons.Material.Filled.Circle" IconColor="Color.Warning">Uptime: @_uptimeSeconds seconds</MudListItem>
<MudListItem Icon="@Icons.Material.Filled.Circle" IconColor="Color.Warning">Total profile count: @_totalProfileCount</MudListItem>
<MudListItem Icon="@Icons.Material.Filled.Inbox" IconColor="Color.Warning" Text="Profiles active last 30 minutes:" Expanded>
<NestedList>
@foreach (var profile in _activeProfiles)
{
<MudListItem Icon="@Icons.Material.Filled.Circle" IconColor="Color.Warning">
@profile
</MudListItem>
}
</NestedList>
</MudListItem>
</MudList>
</MudCardContent>
</MudCard>
</MudItem>
</MudGrid>
</MudContainer>
@code
{
private string _sptVersion = string.Empty;
private bool _debugEnabled = false;
private bool _modsEnabled = false;
private DateTime _startTime = DateTime.Now;
private long _uptimeSeconds = 0;
private readonly List<string> _activeProfiles = [];
private int _totalProfileCount = 0;
protected override void OnInitialized()
{
base.OnInitialized();
var coreConfig = ConfigServer.GetConfig<CoreConfig>();
_sptVersion = ProgramStatics.SPT_VERSION().ToString();
_debugEnabled = ProgramStatics.DEBUG();
_modsEnabled = ProgramStatics.MODS();
_startTime = TimeUtil.GetDateTimeFromTimeStamp(coreConfig.ServerStartTime.Value).ToLocalTime();
_uptimeSeconds = DateTimeOffset.Now.ToUnixTimeSeconds() - coreConfig.ServerStartTime.Value;
var activeProfileIds = ProfileActivityService.GetActiveProfileIdsWithinMinutes(30);
if (activeProfileIds.Count == 0)
{
_activeProfiles.Add("None");
}
else
{
foreach (var activeProfileId in activeProfileIds)
{
_activeProfiles.Add($"{activeProfileId} ({ProfileHelper.GetPmcProfile(activeProfileId).Info.Nickname})");
}
}
_totalProfileCount = ProfileHelper.GetProfiles().Count;
}
private readonly MudTheme _theme = new()
{
PaletteDark = new PaletteDark
{
Primary = Colors.Blue.Default,
Secondary = Colors.Orange.Default,
Warning = Colors.Amber.Default,
Info = Colors.Blue.Lighten1,
Success = Colors.Green.Default,
Background = "rgba(0,0,0,0.9)",
Surface = "rgba(255,255,255,0.05)",
AppbarBackground = "rgba(0,0,0,0.8)",
TextPrimary = "#FFFFFF"
}
};
}