Refactored project to module structure
This commit is contained in:
30
Moonlight.Api/Admin/Sys/Diagnose/DiagnoseController.cs
Normal file
30
Moonlight.Api/Admin/Sys/Diagnose/DiagnoseController.cs
Normal file
@@ -0,0 +1,30 @@
|
||||
using Microsoft.AspNetCore.Authorization;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using Moonlight.Shared;
|
||||
using Moonlight.Shared.Admin.Sys.Diagnose;
|
||||
|
||||
namespace Moonlight.Api.Admin.Sys.Diagnose;
|
||||
|
||||
[ApiController]
|
||||
[Authorize(Policy = Permissions.System.Diagnose)]
|
||||
[Route("api/admin/system/diagnose")]
|
||||
public class DiagnoseController : Controller
|
||||
{
|
||||
private readonly DiagnoseService DiagnoseService;
|
||||
|
||||
public DiagnoseController(DiagnoseService diagnoseService)
|
||||
{
|
||||
DiagnoseService = diagnoseService;
|
||||
}
|
||||
|
||||
[HttpGet]
|
||||
public async Task<ActionResult<DiagnoseResultDto[]>> GetAsync()
|
||||
{
|
||||
var results = await DiagnoseService.DiagnoseAsync();
|
||||
|
||||
return results
|
||||
.OrderBy(x => x.Level)
|
||||
.ToDto()
|
||||
.ToArray();
|
||||
}
|
||||
}
|
||||
17
Moonlight.Api/Admin/Sys/Diagnose/DiagnoseResult.cs
Normal file
17
Moonlight.Api/Admin/Sys/Diagnose/DiagnoseResult.cs
Normal file
@@ -0,0 +1,17 @@
|
||||
namespace Moonlight.Api.Admin.Sys.Diagnose;
|
||||
|
||||
public record DiagnoseResult(
|
||||
DiagnoseLevel Level,
|
||||
string Title,
|
||||
string[] Tags,
|
||||
string? Message,
|
||||
string? StackStrace,
|
||||
string? SolutionUrl,
|
||||
string? ReportUrl);
|
||||
|
||||
public enum DiagnoseLevel
|
||||
{
|
||||
Error = 0,
|
||||
Warning = 1,
|
||||
Healthy = 2
|
||||
}
|
||||
13
Moonlight.Api/Admin/Sys/Diagnose/DiagnoseResultMapper.cs
Normal file
13
Moonlight.Api/Admin/Sys/Diagnose/DiagnoseResultMapper.cs
Normal file
@@ -0,0 +1,13 @@
|
||||
using System.Diagnostics.CodeAnalysis;
|
||||
using Moonlight.Shared.Admin.Sys.Diagnose;
|
||||
using Riok.Mapperly.Abstractions;
|
||||
|
||||
namespace Moonlight.Api.Admin.Sys.Diagnose;
|
||||
|
||||
[Mapper]
|
||||
[SuppressMessage("Mapper", "RMG020:No members are mapped in an object mapping")]
|
||||
[SuppressMessage("Mapper", "RMG012:No members are mapped in an object mapping")]
|
||||
public static partial class DiagnoseResultMapper
|
||||
{
|
||||
public static partial IEnumerable<DiagnoseResultDto> ToDto(this IEnumerable<DiagnoseResult> results);
|
||||
}
|
||||
35
Moonlight.Api/Admin/Sys/Diagnose/DiagnoseService.cs
Normal file
35
Moonlight.Api/Admin/Sys/Diagnose/DiagnoseService.cs
Normal file
@@ -0,0 +1,35 @@
|
||||
using Microsoft.Extensions.Logging;
|
||||
using Moonlight.Api.Infrastructure.Hooks;
|
||||
|
||||
namespace Moonlight.Api.Admin.Sys.Diagnose;
|
||||
|
||||
public class DiagnoseService
|
||||
{
|
||||
private readonly ILogger<DiagnoseService> Logger;
|
||||
private readonly IEnumerable<IDiagnoseProvider> Providers;
|
||||
|
||||
public DiagnoseService(IEnumerable<IDiagnoseProvider> providers, ILogger<DiagnoseService> logger)
|
||||
{
|
||||
Providers = providers;
|
||||
Logger = logger;
|
||||
}
|
||||
|
||||
public async Task<DiagnoseResult[]> DiagnoseAsync()
|
||||
{
|
||||
var results = new List<DiagnoseResult>();
|
||||
|
||||
foreach (var provider in Providers)
|
||||
try
|
||||
{
|
||||
results.AddRange(
|
||||
await provider.DiagnoseAsync()
|
||||
);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Logger.LogError(e, "An unhandled error occured while processing provider");
|
||||
}
|
||||
|
||||
return results.ToArray();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user