From f82c62fe9d75c3cdc5ed5fe6f5e5ce517e6eafbc Mon Sep 17 00:00:00 2001 From: Rory& Date: Thu, 17 Apr 2025 11:26:12 +0200 Subject: Room query cleanup, add start of state resync --- .../Pages/HSAdmin/Synapse/RoomQuery.razor | 218 ++++++++++----------- 1 file changed, 99 insertions(+), 119 deletions(-) (limited to 'MatrixUtils.Web/Pages/HSAdmin/Synapse/RoomQuery.razor') diff --git a/MatrixUtils.Web/Pages/HSAdmin/Synapse/RoomQuery.razor b/MatrixUtils.Web/Pages/HSAdmin/Synapse/RoomQuery.razor index 79e7357..5c29909 100644 --- a/MatrixUtils.Web/Pages/HSAdmin/Synapse/RoomQuery.razor +++ b/MatrixUtils.Web/Pages/HSAdmin/Synapse/RoomQuery.razor @@ -2,9 +2,10 @@ @using Microsoft.AspNetCore.WebUtilities @using ArcaneLibs.Extensions @using LibMatrix.Homeservers.ImplementationDetails.Synapse.Models.Filters -@using LibMatrix.Homeservers.ImplementationDetails.Synapse.Models.Requests @using LibMatrix.Homeservers.ImplementationDetails.Synapse.Models.Responses @using MatrixUtils.Web.Pages.HSAdmin.Synapse.Components +@using MatrixUtils.Web.Pages.HSAdmin.Synapse.Components.RoomQuery +@inject ILogger Logger

Homeserver Administration - Room Query

@@ -21,93 +22,52 @@
Local filtering (slow) - -
- String contains - Room ID: - Room name: - Canonical alias: - Creator: - Room version: - Encryption algorithm: - Join rules: - Guest access: - History visibility: - - Optional checks - - Is federated: - @if (Filter.CheckFederation) { - - } - - - Is public: - @if (Filter.CheckPublic) { - - } - - - Ranges - - state events - - - members - - - local members - -
+

@if (Results.Count > 0) {

Found @Results.Count rooms

-
- TSV data (copy/paste) -
-            
-                @foreach (var res in Results) {
-                    
-                        
-                        
-                        
-                        
-                    
-                }
-            
@res.RoomId@("\t")@res.CanonicalAlias@("\t")@res.Creator@("\t")@res.Name
-
-
+ @*
*@ + @* TSV data (copy/paste) *@ + @*
 *@
+    @*              *@
+    @*                 @foreach (var res in Results) { *@
+    @*                      *@
+    @*                          *@
+    @*                          *@
+    @*                          *@
+    @*                          *@
+    @*                      *@
+    @*                 } *@
+    @*             
@res.RoomId@("\t")@res.CanonicalAlias@("\t")@res.Creator@("\t")@res.Name
*@ + @*
*@ + @*
*@ } @foreach (var res in Results) { -
+
@* *@

@if (!string.IsNullOrWhiteSpace(res.CanonicalAlias)) { - @res.CanonicalAlias - @res.RoomId (@res.Name) -
+ @res.CanonicalAlias - } - else { - @res.RoomId (@res.Name) -
+ @res.RoomId + @if (!string.IsNullOrWhiteSpace(res.Name)) { + (@res.Name) } +
+ @if (!string.IsNullOrWhiteSpace(res.Creator)) { - @* Created by *@ Created by @res.Creator
}

Delete room + Resync state

- @res.StateEvents state events
- @if (res.LocalMembers is null) { - @res.JoinedMembers members, of which @res.JoinedLocalMembers are on this server + + @{ + List flags = []; + if (res.JoinedLocalMembers > 0) { + flags.Add(res.JoinRules switch { + "public" => "Public", + "invite" => "Invite only", + "knock" => "Knock", + "restricted" => "Restricted", + "knock_restricted" => "Knock + restricted", + // TODO: default? + null => null, + "" => null, + _ => "unknown join rule: " + res.JoinRules + }); + if (!string.IsNullOrWhiteSpace(res.Encryption)) flags.Add("encrypted"); + if (!res.Federatable) flags.Add("unfederated"); + + flags.Add(res.HistoryVisibility switch { + "world_readable" => "world readable history", + "shared" => "shared history", + "invited" => "history since invite", + "joined" => "history since join", + // TODO: default? + null => null, + "" => null, + _ => "unknown history setting: " + res.HistoryVisibility + }); + + flags.Add(res.GuestAccess switch { + "can_join" => "guests allowed", + "forbidden" => null, + // TODO: default? + null => null, + "" => null, + _ => "unknown guest access: " + res.GuestAccess, + }); + + flags = flags.Where(x => x != null).ToList(); + } } - else { - @res.JoinedMembers members, of which @res.JoinedLocalMembers are on this server: @(string.Join(", ", res.LocalMembers)) + @string.Join(", ", flags)
+ + @res.StateEvents state events, room version @(res.Version ?? "1")
+ + @{ + var memberSummary = $"{res.JoinedMembers} members, of which {res.JoinedLocalMembers} are on this server"; + if (res.LocalMembers is not null) { + memberSummary += $": {string.Join(", ", res.LocalMembers)}"; + } } + @memberSummary
Full result data
@res.ToJson(ignoreNull: true)
@@ -146,46 +153,14 @@ @* *@ @* } *@ -@foreach(var (roomId, deleteRequest) in DeleteRequests) { - +@foreach (var (roomId, deleteRequest) in DeleteRequests) { + + + } @code { @@ -200,7 +175,7 @@ [Parameter] [SupplyParameterFromQuery(Name = "ascending")] - public bool Ascending { get; set; } + public bool Ascending { get; set; } = true; private List Results { get; set; } = new(); @@ -215,8 +190,6 @@ // private Dictionary DeleteStatuses { get; set; } = new(); protected override Task OnParametersSetAsync() { - if (Ascending == null) - Ascending = true; OrderBy ??= "name"; var execute = false; @@ -300,9 +273,6 @@ while (await searchRooms.MoveNextAsync()) { var room = searchRooms.Current; - if (Results.Count < 100) - Console.WriteLine("Hit: " + room.ToJson(false)); - var roomInfo = new RoomInfo { RoomId = room.RoomId, Name = room.Name, @@ -322,14 +292,24 @@ Results.Add(roomInfo); - if (room.JoinedLocalMembers is > 0 and < 100) - roomInfo.LocalMembers = (await synapse.Admin.GetRoomMembersAsync(room.RoomId)).Members.Where(x => x.EndsWith(":" + synapse.ServerName)).ToList(); - - if (Results.Count < 200 || Results.Count % 1000 == 0) { + if ((Results.Count <= 200 && Results.Count % 10 == 0) || Results.Count % 1000 == 0) { StateHasChanged(); await Task.Yield(); + await Task.Delay(1); } } + + StateHasChanged(); + + var tasks = Results + .Where(x => x.JoinedLocalMembers is > 0 and < 100) + .Select(async r => { + var members = (await synapse.Admin.GetRoomMembersAsync(r.RoomId)).Members.Where(x => x.EndsWith(":" + synapse.ServerName)).ToList(); + r.LocalMembers = members; + } + ); + await Task.WhenAll(tasks); + //Logger.LogWarning($"Found {tasks.Count} rooms with >0, <100 local members"); } StateHasChanged(); @@ -416,5 +396,5 @@ private class RoomInfo : SynapseAdminRoomListResult.SynapseAdminRoomListResultRoom { public List? LocalMembers { get; set; } } - + } -- cgit 1.5.1