Server names and admin log full-text search (#6327)
Co-authored-by: Julian Giebel <j.giebel@netrocks.info> Co-authored-by: Pieter-Jan Briers <pieterjan.briers+git@gmail.com>
This commit is contained in:
@@ -500,7 +500,7 @@ namespace Content.Server.Database
|
||||
await db.DbContext.SaveChangesAsync(cancel);
|
||||
}
|
||||
|
||||
public virtual async Task<int> AddNewRound(params Guid[] playerIds)
|
||||
public virtual async Task<int> AddNewRound(Server server, params Guid[] playerIds)
|
||||
{
|
||||
await using var db = await GetDb();
|
||||
|
||||
@@ -510,7 +510,8 @@ namespace Content.Server.Database
|
||||
|
||||
var round = new Round
|
||||
{
|
||||
Players = players
|
||||
Players = players,
|
||||
ServerId = server.Id
|
||||
};
|
||||
|
||||
db.DbContext.Round.Add(round);
|
||||
@@ -574,6 +575,27 @@ namespace Content.Server.Database
|
||||
|
||||
#region Admin Logs
|
||||
|
||||
public async Task<Server> AddOrGetServer(string serverName)
|
||||
{
|
||||
await using var db = await GetDb();
|
||||
var server = await db.DbContext.Server.Where(server => server.Name.Equals(serverName)).SingleOrDefaultAsync();
|
||||
if (server != default)
|
||||
{
|
||||
return server;
|
||||
}
|
||||
|
||||
server = new Server
|
||||
{
|
||||
Name = serverName
|
||||
};
|
||||
|
||||
db.DbContext.Server.Add(server);
|
||||
|
||||
await db.DbContext.SaveChangesAsync();
|
||||
|
||||
return server;
|
||||
}
|
||||
|
||||
public virtual async Task AddAdminLogs(List<QueuedLog> logs)
|
||||
{
|
||||
await using var db = await GetDb();
|
||||
|
||||
@@ -160,7 +160,7 @@ namespace Content.Server.Database
|
||||
|
||||
#region Rounds
|
||||
|
||||
Task<int> AddNewRound(params Guid[] playerIds);
|
||||
Task<int> AddNewRound(Server server, params Guid[] playerIds);
|
||||
Task<Round> GetRound(int id);
|
||||
Task AddRoundPlayers(int id, params Guid[] playerIds);
|
||||
|
||||
@@ -168,6 +168,7 @@ namespace Content.Server.Database
|
||||
|
||||
#region Admin Logs
|
||||
|
||||
Task<Server> AddOrGetServer(string serverName);
|
||||
Task AddAdminLogs(List<QueuedLog> logs);
|
||||
IAsyncEnumerable<string> GetAdminLogMessages(LogFilter? filter = null);
|
||||
IAsyncEnumerable<SharedAdminLog> GetAdminLogs(LogFilter? filter = null);
|
||||
@@ -394,9 +395,9 @@ namespace Content.Server.Database
|
||||
return _db.AddAdminRankAsync(rank, cancel);
|
||||
}
|
||||
|
||||
public Task<int> AddNewRound(params Guid[] playerIds)
|
||||
public Task<int> AddNewRound(Server server, params Guid[] playerIds)
|
||||
{
|
||||
return _db.AddNewRound(playerIds);
|
||||
return _db.AddNewRound(server, playerIds);
|
||||
}
|
||||
|
||||
public Task<Round> GetRound(int id)
|
||||
@@ -414,6 +415,11 @@ namespace Content.Server.Database
|
||||
return _db.UpdateAdminRankAsync(rank, cancel);
|
||||
}
|
||||
|
||||
public Task<Server> AddOrGetServer(string serverName)
|
||||
{
|
||||
return _db.AddOrGetServer(serverName);
|
||||
}
|
||||
|
||||
public Task AddAdminLogs(List<QueuedLog> logs)
|
||||
{
|
||||
return _db.AddAdminLogs(logs);
|
||||
|
||||
@@ -427,7 +427,7 @@ namespace Content.Server.Database
|
||||
return (admins.Select(p => (p.a, p.LastSeenUserName)).ToArray(), adminRanks)!;
|
||||
}
|
||||
|
||||
public override async Task<int> AddNewRound(params Guid[] playerIds)
|
||||
public override async Task<int> AddNewRound(Server server, params Guid[] playerIds)
|
||||
{
|
||||
await using var db = await GetDb();
|
||||
|
||||
@@ -444,7 +444,8 @@ namespace Content.Server.Database
|
||||
var round = new Round
|
||||
{
|
||||
Id = nextId,
|
||||
Players = players
|
||||
Players = players,
|
||||
ServerId = server.Id
|
||||
};
|
||||
|
||||
db.DbContext.Round.Add(round);
|
||||
|
||||
@@ -6,6 +6,7 @@ using Content.Server.Maps;
|
||||
using Content.Server.Mind;
|
||||
using Content.Server.Players;
|
||||
using Content.Server.Station;
|
||||
using Content.Shared.CCVar;
|
||||
using Content.Shared.Coordinates;
|
||||
using Content.Shared.GameTicking;
|
||||
using Content.Shared.Preferences;
|
||||
@@ -190,10 +191,15 @@ namespace Content.Server.GameTicking
|
||||
RoundLengthMetric.Set(0);
|
||||
|
||||
var playerIds = _playersInLobby.Keys.Select(player => player.UserId.UserId).ToArray();
|
||||
var serverName = _configurationManager.GetCVar(CCVars.AdminLogsServerName);
|
||||
// TODO FIXME AAAAAAAAAAAAAAAAAAAH THIS IS BROKEN
|
||||
// Task.Run as a terrible dirty workaround to avoid synchronization context deadlock from .Result here.
|
||||
// This whole setup logic should be made asynchronous so we can properly wait on the DB AAAAAAAAAAAAAH
|
||||
RoundId = Task.Run(async () => await _db.AddNewRound(playerIds)).Result;
|
||||
RoundId = Task.Run(async () =>
|
||||
{
|
||||
var server = await _db.AddOrGetServer(serverName);
|
||||
return await _db.AddNewRound(server, playerIds);
|
||||
}).Result;
|
||||
|
||||
var startingEvent = new RoundStartingEvent();
|
||||
RaiseLocalEvent(startingEvent);
|
||||
|
||||
Reference in New Issue
Block a user