Files
SPT-Server-Build/Libraries/SPTarkov.Server.Web/Components/Pages/Status.razor
T
Jesse 687b4f7a49 Add blazor & MVC Support (#602)
* Add initial code for Razor pages support

* Remove finalizer

* Try fully loading blazor

This is most likely entirely broken because of a rebase now

* UseSptBlazor after app.Use

* Fix up StaticWebAsset loading, add MudBlazor

* Implement page

* Update comment

* Replaced existing status page with razor

* Track background video in LFS

* Update attributes

* Improved status page theming

* Fix up wwwroot publish folder to SPT_Data/wwwroot

* Added name to page

* Remove unnecessary code

* Begin fixing up MVC & Blazor for modding

* Update TestMod

* Cleanup todo

* Further work out mod support

* Re-order initialization and use logger

* Rename library to SPTarkov.Server.Web

---------

Co-authored-by: Chomp <dev@dev.sp-tarkov.com>
Co-authored-by: Chomp <27521899+chompDev@users.noreply.github.com>
2025-10-02 19:03:27 +00: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);
_uptimeSeconds = DateTimeOffset.UtcNow.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"
}
};
}