feat: enhance Caddy reverse proxy configuration with aggregated ports display
All checks were successful
Caddy Manager CI build / docker (push) Successful in 1m2s

This commit is contained in:
2025-07-16 07:16:23 +07:00
parent ee32425930
commit cade49d89d
3 changed files with 40 additions and 3 deletions

View File

@@ -84,9 +84,28 @@ public partial class CaddyReverseProxiesPage : ComponentBase
private void Refresh() private void Refresh()
{ {
var notSearching = string.IsNullOrWhiteSpace(_debouncedText); var notSearching = string.IsNullOrWhiteSpace(_debouncedText);
_availableCaddyConfigurations = [..CaddyService.GetExistingCaddyConfigurations() var configurations = CaddyService.GetExistingCaddyConfigurations()
.Where(conf => notSearching || conf.FileName.Contains(_debouncedText, StringComparison.OrdinalIgnoreCase) || conf.ReverseProxyHostname.Contains(_debouncedText, StringComparison.OrdinalIgnoreCase)) .Where(conf => notSearching || conf.FileName.Contains(_debouncedText, StringComparison.OrdinalIgnoreCase) || conf.ReverseProxyHostname.Contains(_debouncedText, StringComparison.OrdinalIgnoreCase))
.OrderBy(conf => conf.FileName)]; .OrderBy(conf => conf.FileName)
.ToList();
// Optimize by grouping by ReverseProxyHostname and computing once per group
var hostnameToAggregatedPorts = configurations
.GroupBy(c => c.ReverseProxyHostname)
.ToDictionary(
g => g.Key,
g => g.SelectMany(c => c.ReverseProxyPorts)
.Distinct()
.OrderBy(p => p)
.ToList()
);
foreach (var config in configurations)
{
config.AggregatedReverseProxyPorts = hostnameToAggregatedPorts[config.ReverseProxyHostname];
}
_availableCaddyConfigurations = [..configurations];
StateHasChanged(); StateHasChanged();
} }

View File

@@ -7,7 +7,20 @@
<MudIcon Icon="@Icons.Custom.FileFormats.FileCode"></MudIcon> <MudIcon Icon="@Icons.Custom.FileFormats.FileCode"></MudIcon>
<MudText>@ConfigurationInfo.FileName</MudText> <MudText>@ConfigurationInfo.FileName</MudText>
<MudSpacer/> <MudSpacer/>
<MudTooltip Delay="0" Placement="Placement.Left">
<ChildContent>
<MudChip T="string" Variant="Variant.Outlined">@ConfigurationInfo.ReverseProxyHostname</MudChip> <MudChip T="string" Variant="Variant.Outlined">@ConfigurationInfo.ReverseProxyHostname</MudChip>
</ChildContent>
<TooltipContent>
@if (ConfigurationInfo.AggregatedReverseProxyPorts?.Count > 0)
{
@foreach (var port in ConfigurationInfo.AggregatedReverseProxyPorts.OrderBy(p => p))
{
<MudText Align="Align.Start">⏵ @port</MudText>
}
}
</TooltipContent>
</MudTooltip>
<MudTooltip Delay="0" Placement="Placement.Left"> <MudTooltip Delay="0" Placement="Placement.Left">
<ChildContent> <ChildContent>
<MudChip T="string" Variant="Variant.Outlined" Style="width: 80px;" <MudChip T="string" Variant="Variant.Outlined" Style="width: 80px;"

View File

@@ -24,4 +24,9 @@ public class CaddyConfigurationInfo
/// The name of the configuration file. /// The name of the configuration file.
/// </summary> /// </summary>
public string FileName { get; set; } = string.Empty; public string FileName { get; set; } = string.Empty;
/// <summary>
/// Aggregated ports for the reverse proxy hostname from all configurations.
/// </summary>
public List<int> AggregatedReverseProxyPorts { get; set; } = [];
} }