Admin logs (#5419)
* Add admin logging, models, migrations * Add logging damage changes * Add Log admin flag, LogFilter, Logs admin menu tab, message Refactor admin logging API * Change admin log get method names * Fix the name again * Minute amount of reorganization * Reset Postgres db snapshot * Reset Sqlite db snapshot * Make AdminLog have a composite primary key of round, id * Minute cleanup * Change admin system to do a type check instead of index check * Make admin logs use C# 10 interpolated string handlers * Implement UI on its own window Custom controls Searching Add admin log converters * Implement limits into the query * Change logs to be put into an OutputPanel instead for text wrapping * Add log <-> player m2m relationship back * UI improvements, make text wrap, add separators * Remove entity prefix from damaged log * Add explicit m2m model, fix any players filter * Add debug command to test bulk adding logs * Admin logs now just kinda go * Add histogram for database update time * Make admin log system update run every 5 seconds * Add a cap to the log queue and a metric for how many times it has been reached * Add metric for logs sent in a round * Make cvars out of admin logs queue send delay and cap * Merge fixes * Reset some changes * Add test for adding and getting a single log * Add tests for bulk adding logs * Add test for querying logs * Add CallerArgumentExpression to LogStringHandler methods and test * Improve UI, fix SQLite, add searching by round * Add entities to admin logs * Move distinct after orderby * Add migrations * ef core eat my ass * Add cvar for client logs batch size * Sort logs from newest to oldest by default * Merge fixes * Reorganize tests and add one for date ordering * Add note to log types to not change their numeric values * Add impacts to logs, better UI filtering * Make log add callable from shared for convenience * Get current round id directly from game ticker * Revert namespace change for DamageableSystem
This commit is contained in:
committed by
GitHub
parent
0f7e81b564
commit
319aec109d
106
Content.Client/Administration/UI/Logs/AdminLogsEui.cs
Normal file
106
Content.Client/Administration/UI/Logs/AdminLogsEui.cs
Normal file
@@ -0,0 +1,106 @@
|
||||
using Content.Client.Eui;
|
||||
using Content.Shared.Administration;
|
||||
using Content.Shared.Administration.Logs;
|
||||
using Content.Shared.Eui;
|
||||
using JetBrains.Annotations;
|
||||
using static Content.Shared.Administration.AdminLogsEuiMsg;
|
||||
|
||||
namespace Content.Client.Administration.UI.Logs;
|
||||
|
||||
[UsedImplicitly]
|
||||
public class AdminLogsEui : BaseEui
|
||||
{
|
||||
public AdminLogsEui()
|
||||
{
|
||||
Window = new AdminLogsWindow();
|
||||
Window.OnClose += () => SendMessage(new Close());
|
||||
Window.LogSearch.OnTextEntered += _ => RequestLogs();
|
||||
Window.RefreshButton.OnPressed += _ => RequestLogs();
|
||||
Window.NextButton.OnPressed += _ => NextLogs();
|
||||
}
|
||||
|
||||
private AdminLogsWindow Window { get; }
|
||||
|
||||
private bool FirstState { get; set; } = true;
|
||||
|
||||
private void RequestLogs()
|
||||
{
|
||||
var round = Window.GetSelectedRoundId();
|
||||
var types = Window.GetSelectedLogTypes();
|
||||
var players = Window.GetSelectedPlayerIds();
|
||||
|
||||
var request = new LogsRequest(
|
||||
round,
|
||||
types,
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
players,
|
||||
null,
|
||||
null,
|
||||
DateOrder.Descending);
|
||||
|
||||
SendMessage(request);
|
||||
}
|
||||
|
||||
private void NextLogs()
|
||||
{
|
||||
var request = new NextLogsRequest();
|
||||
SendMessage(request);
|
||||
}
|
||||
|
||||
private void TrySetFirstState(AdminLogsEuiState state)
|
||||
{
|
||||
if (!FirstState)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
FirstState = false;
|
||||
Window.SetCurrentRound(state.RoundId);
|
||||
Window.SetRoundSpinBox(state.RoundId);
|
||||
}
|
||||
|
||||
public override void Opened()
|
||||
{
|
||||
Window.OpenCentered();
|
||||
}
|
||||
|
||||
public override void HandleState(EuiStateBase state)
|
||||
{
|
||||
var s = (AdminLogsEuiState) state;
|
||||
|
||||
TrySetFirstState(s);
|
||||
|
||||
if (s.IsLoading)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
Window.SetCurrentRound(s.RoundId);
|
||||
Window.SetPlayers(s.Players);
|
||||
}
|
||||
|
||||
public override void HandleMessage(EuiMessageBase msg)
|
||||
{
|
||||
base.HandleMessage(msg);
|
||||
|
||||
switch (msg)
|
||||
{
|
||||
case NewLogs {Replace: true} newLogs:
|
||||
Window.SetLogs(newLogs.Logs);
|
||||
break;
|
||||
case NewLogs {Replace: false} newLogs:
|
||||
Window.AddLogs(newLogs.Logs);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
public override void Closed()
|
||||
{
|
||||
base.Closed();
|
||||
|
||||
Window.Close();
|
||||
Window.Dispose();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user