107 lines
3.9 KiB
Plaintext
107 lines
3.9 KiB
Plaintext
@page "/admin/system/diagnose"
|
|
|
|
@using MoonCore.Attributes
|
|
@using MoonCore.Helpers
|
|
@using Moonlight.Shared.Http.Responses.Admin.Sys
|
|
@using Moonlight.Shared.Misc
|
|
|
|
@attribute [RequirePermission("admin.system.diagnose")]
|
|
|
|
@inject HttpApiClient ApiClient
|
|
@inject DownloadService DownloadService
|
|
|
|
<div class="mb-5">
|
|
<NavTabs Index="5" Names="UiConstants.AdminNavNames" Links="UiConstants.AdminNavLinks" />
|
|
</div>
|
|
|
|
<div class="grid grid-cols-2">
|
|
<div class="col-span-2 md:col-span-1 card">
|
|
<div class="card-header">
|
|
<span class="card-title">Diagnose</span>
|
|
</div>
|
|
<div class="card-body">
|
|
<p>
|
|
If you're experiencing issues or need help via our Discord, you're in the right place here!
|
|
By pressing the button below, Moonlight will run all available diagnostic checks and package the results into a
|
|
downloadable zip file.
|
|
The report includes useful information about your system, plugins, and environment, making it easier to identify problems or share with support.
|
|
</p>
|
|
|
|
<WButton OnClick="GenerateDiagnose" CssClasses="btn btn-primary my-5">Generate diagnose</WButton>
|
|
|
|
<div>
|
|
<a class="text-primary cursor-pointer" @onclick:preventDefault @onclick="ToggleDropDown">Advanced <i class="icon-chevron-@(DropdownOpen ? "up" : "down")"></i></a>
|
|
<div class="@(DropdownOpen ? "" : "hidden")">
|
|
<LazyLoader Load="Load">
|
|
<div class="mb-2 pb-2 pt-4 border-b border-white/5 flex items-center gap-3">
|
|
<input class="rounded" @bind="SelectAll" type="checkbox" id="selectall_checkbox"/>
|
|
<label for="selectall_checkbox">Select all</label>
|
|
</div>
|
|
|
|
@foreach (var item in AvailableProviders)
|
|
{
|
|
<div class="mt-1 flex gap-3 items-center">
|
|
<input class="rounded" type="checkbox" id="@(item.Key.Type + "_checkbox")" @bind="@AvailableProviders[item.Key]" />
|
|
<label for="@(item.Key.Type + "_checkbox")">@Formatter.ConvertCamelCaseToSpaces(item.Key.Name)</label>
|
|
</div>
|
|
}
|
|
</LazyLoader>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
@code
|
|
{
|
|
|
|
private async Task GenerateDiagnose(WButton _)
|
|
{
|
|
string[] payload = [];
|
|
|
|
if (!SelectAll)
|
|
{
|
|
// filter the providers which have been selected if not all providers have been selected
|
|
payload = AvailableProviders
|
|
.Where(x => x.Value)
|
|
.Select(x => x.Key)
|
|
.Select(x => x.Type)
|
|
.ToArray();
|
|
}
|
|
|
|
var stream = await ApiClient.PostStream("api/admin/system/diagnose", payload);
|
|
|
|
await DownloadService.DownloadStream("diagnose.zip", stream);
|
|
}
|
|
|
|
private bool DropdownOpen = false;
|
|
private bool AllSelected = true;
|
|
private Dictionary<DiagnoseProvideResponse, bool> AvailableProviders;
|
|
|
|
private async Task ToggleDropDown()
|
|
{
|
|
DropdownOpen = !DropdownOpen;
|
|
|
|
await InvokeAsync(StateHasChanged);
|
|
}
|
|
|
|
private async Task Load(LazyLoader arg)
|
|
{
|
|
AvailableProviders = (await ApiClient.GetJson<DiagnoseProvideResponse[]>("api/admin/system/diagnose/available"))
|
|
.ToDictionary(x => x, _ => true);
|
|
}
|
|
|
|
private bool SelectAll
|
|
{
|
|
get => AvailableProviders.Values.All(v => v);
|
|
set
|
|
{
|
|
// flip every entry to the new value
|
|
var keys = AvailableProviders.Keys.ToList();
|
|
foreach (var k in keys)
|
|
{
|
|
AvailableProviders[k] = value;
|
|
}
|
|
}
|
|
}
|
|
} |