Added early concept of a status page
This commit is contained in:
@@ -56,6 +56,12 @@ public record CoreConfig : BaseConfig
|
||||
[JsonPropertyName("buildTime")]
|
||||
public string? BuildTime { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Timestamp of server start up
|
||||
/// </summary>
|
||||
[JsonPropertyName("serverStartTime")]
|
||||
public long? ServerStartTime { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Server locale keys that will be added to the bottom of the startup watermark
|
||||
/// </summary>
|
||||
|
||||
@@ -34,6 +34,8 @@ public class PostDbLoadService(
|
||||
|
||||
public void PerformPostDbLoadActions()
|
||||
{
|
||||
_coreConfig.ServerStartTime = DateTimeOffset.UtcNow.ToUnixTimeSeconds();
|
||||
|
||||
// Regenerate base cache now mods are loaded and game is starting
|
||||
// Mods that add items and use the baseClass service generate the cache including their items, the next mod that
|
||||
// add items gets left out,causing warnings
|
||||
|
||||
@@ -0,0 +1,59 @@
|
||||
using System.Text;
|
||||
using SPTarkov.DI.Annotations;
|
||||
using SPTarkov.Server.Core.Models.Spt.Config;
|
||||
using SPTarkov.Server.Core.Servers;
|
||||
using SPTarkov.Server.Core.Servers.Http;
|
||||
using SPTarkov.Server.Core.Services;
|
||||
using SPTarkov.Server.Core.Utils;
|
||||
|
||||
namespace SPTarkov.Server.Core.Status
|
||||
{
|
||||
[Injectable]
|
||||
public class StatusPage(
|
||||
TimeUtil timeUtil,
|
||||
ProfileActivityService profileActivityService,
|
||||
ConfigServer configServer
|
||||
) : IHttpListener
|
||||
{
|
||||
protected readonly CoreConfig _coreConfig = configServer.GetConfig<CoreConfig>();
|
||||
|
||||
public bool CanHandle(string sessionId, HttpRequest req)
|
||||
{
|
||||
return req.Method == "GET" && req.Path.Value.Contains("/status");
|
||||
}
|
||||
|
||||
public async Task Handle(string sessionId, HttpRequest req, HttpResponse resp)
|
||||
{
|
||||
var sptVersion = $"SPT version: {ProgramStatics.SPT_VERSION()}";
|
||||
var debugEnabled = $"Debug enabled: {ProgramStatics.DEBUG()}";
|
||||
var modsEnabled = $"Mods enabled: {ProgramStatics.MODS()}";
|
||||
var timeStarted =
|
||||
$"Started : {timeUtil.GetDateTimeFromTimeStamp(_coreConfig.ServerStartTime.Value)}";
|
||||
var uptime =
|
||||
$"Uptime: {DateTimeOffset.UtcNow.ToUnixTimeSeconds() - _coreConfig.ServerStartTime} seconds".ToArray();
|
||||
var activeProfiles = profileActivityService.GetActiveProfileIdsWithinMinutes(30);
|
||||
var activePlayerCount =
|
||||
$"Profiles active in last 30 minutes: {activeProfiles.Count}. {string.Join(",", activeProfiles)}";
|
||||
|
||||
resp.StatusCode = 200;
|
||||
resp.ContentType = "text/html";
|
||||
|
||||
await resp.Body.WriteAsync(Encoding.ASCII.GetBytes(sptVersion));
|
||||
await resp.Body.WriteAsync(Encoding.ASCII.GetBytes("<br>"));
|
||||
await resp.Body.WriteAsync(Encoding.ASCII.GetBytes(debugEnabled));
|
||||
await resp.Body.WriteAsync(Encoding.ASCII.GetBytes("<br>"));
|
||||
await resp.Body.WriteAsync(Encoding.ASCII.GetBytes(modsEnabled));
|
||||
await resp.Body.WriteAsync(Encoding.ASCII.GetBytes("<br>"));
|
||||
|
||||
await resp.Body.WriteAsync(Encoding.ASCII.GetBytes(timeStarted));
|
||||
await resp.Body.WriteAsync(Encoding.ASCII.GetBytes("<br>"));
|
||||
await resp.Body.WriteAsync(Encoding.ASCII.GetBytes(uptime));
|
||||
await resp.Body.WriteAsync(Encoding.ASCII.GetBytes("<br>"));
|
||||
await resp.Body.WriteAsync(Encoding.ASCII.GetBytes(activePlayerCount));
|
||||
await resp.Body.WriteAsync(Encoding.ASCII.GetBytes("<br>"));
|
||||
|
||||
await resp.StartAsync();
|
||||
await resp.CompleteAsync();
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user