Skip to content

Commit 28b3bf6

Browse files
author
Matthew Bate
committed
Stats Tab Completed
1 parent 805539a commit 28b3bf6

File tree

9 files changed

+470
-20
lines changed

9 files changed

+470
-20
lines changed

BHD-ServerManager/API/Controllers/ProfileController.cs

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
using Microsoft.AspNetCore.Authorization;
55
using Microsoft.AspNetCore.Mvc;
66
using System.Net;
7+
using static BHD_ServerManager.Classes.InstanceManagers.theInstanceManager;
78

89
namespace BHD_ServerManager.API.Controllers;
910

@@ -370,4 +371,41 @@ public class RemoveBlockedCountryRequest
370371
{
371372
public int RecordID { get; set; }
372373
}
374+
375+
[HttpPost("webstats")]
376+
public ActionResult<CommandResult> SaveWebStatsSettings([FromBody] WebStatsSettings settings)
377+
{
378+
if (settings == null)
379+
return BadRequest(new CommandResult { Success = false, Message = "Invalid request." });
380+
381+
var result = theInstanceManager.SaveWebStatsSettings(settings);
382+
CommonCore.instanceStats!.ForceUIUpdate = true;
383+
return Ok(new CommandResult
384+
{
385+
Success = result.Success,
386+
Message = result.Message
387+
});
388+
}
389+
[HttpPost("webstats/validate")]
390+
public async Task<ActionResult<CommandResult>> ValidateWebStatsConnection([FromBody] WebStatsValidateRequest req)
391+
{
392+
if (req == null || string.IsNullOrWhiteSpace(req.ServerPath))
393+
return BadRequest(new CommandResult { Success = false, Message = "Invalid request." });
394+
395+
var result = await theInstanceManager.TestWebStatsConnectionAsync(req.ServerPath);
396+
397+
return Ok(new CommandResult
398+
{
399+
Success = result.Success,
400+
Message = result.Message
401+
});
402+
}
403+
404+
/// <summary>
405+
/// DTO for web stats validation request.
406+
/// </summary>
407+
public class WebStatsValidateRequest
408+
{
409+
public string ServerPath { get; set; } = string.Empty;
410+
}
373411
}

BHD-ServerManager/Classes/InstanceManagers/statsInstanceManager.cs

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -353,7 +353,7 @@ public static async Task SendImportData(ServerManagerUI thisServer)
353353
{
354354
string responseData = response.Replace("\r", "").Replace("\n", "").Trim();
355355
AppDebug.Log("StatsManager", $"Babstats Import Response: {responseData}");
356-
AddStatsLogRowSafe(thisServer, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), responseData);
356+
AddStatsLogRowSafe(thisServer, DateTime.Now, responseData);
357357
}
358358
}
359359
catch (Exception ex)
@@ -379,7 +379,7 @@ public static async Task SendUpdateData(ServerManagerUI thisServer)
379379
{
380380
string responseData = response.Replace("\r", "").Replace("\n", "").Trim();
381381
AppDebug.Log("StatsManager", $"Babstats Update Response: {responseData}");
382-
AddStatsLogRowSafe(thisServer, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), responseData);
382+
AddStatsLogRowSafe(thisServer, DateTime.Now, responseData);
383383
}
384384
}
385385
catch (Exception ex)
@@ -407,7 +407,7 @@ public static async Task<string> SendReportData(ServerManagerUI thisServer)
407407
string[] messages = response.Split(new[] { "\r\n", "\r", "\n" }, StringSplitOptions.RemoveEmptyEntries);
408408
foreach (var message in messages)
409409
{
410-
AddStatsLogRowSafe(thisServer, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), message);
410+
AddStatsLogRowSafe(thisServer, DateTime.Now, message);
411411
}
412412
return response;
413413
}
@@ -487,18 +487,31 @@ public static async Task<string> SendBabstatsData(string url, Dictionary<string,
487487

488488
// --- UI THREAD-SAFE HELPERS ---
489489

490-
private static void AddStatsLogRowSafe(ServerManagerUI thisServer, string dateTime, string message)
490+
private static void AddStatsLogRowSafe(ServerManagerUI thisServer, DateTime dateTime, string message)
491491
{
492+
var logRecord = new StatReportObject
493+
{
494+
ReportDate = dateTime,
495+
ReportContent = message
496+
};
497+
498+
string dateTimeString = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
499+
500+
CommonCore.instanceStats!.WebStatsLog.Add(logRecord);
501+
492502
if (thisServer.StatsTab.dg_statsLog.InvokeRequired)
493503
{
494504
thisServer.StatsTab.dg_statsLog.Invoke(new Action(() =>
495-
thisServer.StatsTab.dg_statsLog.Rows.Add(dateTime, message)
505+
thisServer.StatsTab.dg_statsLog.Rows.Add(dateTimeString, message)
496506
));
497507
}
498508
else
499509
{
500-
thisServer.StatsTab.dg_statsLog.Rows.Add(dateTime, message);
510+
thisServer.StatsTab.dg_statsLog.Rows.Add(dateTimeString, message);
501511
}
512+
513+
514+
502515
}
503516

504517
public static void PopulatePlayerStatsGrid()

BHD-ServerManager/Classes/InstanceManagers/theInstanceManager.cs

Lines changed: 1 addition & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using HawkSyncShared;
2+
using HawkSyncShared.DTOs;
23
using HawkSyncShared.SupportClasses;
34
using BHD_ServerManager.Classes.GameManagement;
45
using HawkSyncShared.Instances;
@@ -1259,18 +1260,6 @@ public static void GenerateMatchID()
12591260
// WEB STATS SETTINGS MANAGEMENT
12601261
// ================================================================================
12611262

1262-
/// <summary>
1263-
/// Web stats configuration settings
1264-
/// </summary>
1265-
public record WebStatsSettings(
1266-
string ProfileID,
1267-
bool Enabled,
1268-
string ServerPath,
1269-
bool Announcements,
1270-
int ReportInterval,
1271-
int UpdateInterval
1272-
);
1273-
12741263
/// <summary>
12751264
/// Load web stats settings
12761265
/// </summary>

BHD-ServerManager/Forms/Panels/tabStats.cs

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using HawkSyncShared;
2+
using HawkSyncShared.DTOs;
23
using HawkSyncShared.SupportClasses;
34
using BHD_ServerManager.Classes.InstanceManagers;
45
using HawkSyncShared.Instances;
@@ -20,7 +21,8 @@ public partial class tabStats : UserControl
2021
{
2122
// --- Instance Objects ---
2223
private theInstance? theInstance => CommonCore.theInstance;
23-
24+
private statInstance instanceStats => CommonCore.instanceStats!;
25+
2426
// --- Class Variables ---
2527
private new string Name = "StatsTab";
2628
private bool _firstLoadComplete = false;
@@ -135,6 +137,12 @@ public void StatsTickerHook()
135137
return;
136138
}
137139

140+
if (instanceStats.ForceUIUpdate)
141+
{
142+
instanceStats.ForceUIUpdate = false;
143+
methodFunction_loadSettings();
144+
}
145+
138146
// Additional ticker logic can go here if needed
139147
}
140148

HawkSyncShared/DTOs/StatsDTOs.cs

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Linq;
4+
using System.Text;
5+
using System.Threading.Tasks;
6+
7+
namespace HawkSyncShared.DTOs
8+
{
9+
/// <summary>
10+
/// Web stats configuration settings
11+
/// </summary>
12+
public record WebStatsSettings(
13+
string ProfileID,
14+
bool Enabled,
15+
string ServerPath,
16+
bool Announcements,
17+
int ReportInterval,
18+
int UpdateInterval
19+
);
20+
}

HawkSyncShared/Instances/statInstance.cs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,12 @@ public class statInstance
1111
public DateTime lastPlayerStatsReport { get; set; } = DateTime.MinValue;
1212
public Dictionary<string, PlayerStatObject> playerStatsList { get; set; } = new Dictionary<string, PlayerStatObject>();
1313

14+
// Web Stats Log Records
15+
public List<StatReportObject> WebStatsLog { get; set; } = new List<StatReportObject>();
16+
17+
// Force Update Flag
18+
public bool ForceUIUpdate { get; set; } = false;
19+
1420
}
1521

1622
public class PlayerStatObject
@@ -27,4 +33,11 @@ public class WeaponStatObject
2733
public int Kills { get; set; }
2834
public int Shots { get; set; }
2935
}
36+
37+
public class StatReportObject
38+
{
39+
public required DateTime ReportDate { get; set; }
40+
public required string ReportContent { get; set; }
41+
}
42+
3043
}

RemoteClient/Forms/Panels/tabStats.Designer.cs

Lines changed: 4 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)