diff --git a/Moonlight.Client/UI/Views/Admin/Sys/Hangfire.razor b/Moonlight.Client/UI/Views/Admin/Sys/Hangfire.razor
new file mode 100644
index 00000000..020b9062
--- /dev/null
+++ b/Moonlight.Client/UI/Views/Admin/Sys/Hangfire.razor
@@ -0,0 +1,42 @@
+@page "/admin/system/hangfire"
+
+@using MoonCore.Attributes
+@using MoonCore.Helpers
+@using Moonlight.Shared.Http.Responses.Admin.Hangfire
+@using Moonlight.Client.UI.Components
+
+@attribute [RequirePermission("admin.system.hangfire")]
+
+@inject HttpApiClient ApiClient
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+@code
+{
+ private HangfireStatsResponse Stats;
+
+ private async Task Load(LazyLoader _)
+ {
+ Stats = await ApiClient.GetJson
(
+ "api/admin/system/hangfire/stats"
+ );
+ }
+}
diff --git a/Moonlight.Client/UiConstants.cs b/Moonlight.Client/UiConstants.cs
index 4e6a12be..9293cc7f 100644
--- a/Moonlight.Client/UiConstants.cs
+++ b/Moonlight.Client/UiConstants.cs
@@ -2,6 +2,14 @@ namespace Moonlight.Client;
public static class UiConstants
{
- public static readonly string[] AdminNavNames = ["Overview", "Theme", "Files", "Advanced"];
- public static readonly string[] AdminNavLinks = ["/admin/system", "/admin/system/theme", "/admin/system/files", "/admin/system/advanced"];
+ public static readonly string[] AdminNavNames =
+ [
+ "Overview", "Theme", "Files", "Hangfire", "Advanced"
+ ];
+
+ public static readonly string[] AdminNavLinks =
+ [
+ "/admin/system", "/admin/system/theme", "/admin/system/files", "/admin/system/hangfire",
+ "/admin/system/advanced"
+ ];
}
\ No newline at end of file
diff --git a/Moonlight.Shared/Http/Responses/Admin/Hangfire/HangfireStatsResponse.cs b/Moonlight.Shared/Http/Responses/Admin/Hangfire/HangfireStatsResponse.cs
new file mode 100644
index 00000000..c925d814
--- /dev/null
+++ b/Moonlight.Shared/Http/Responses/Admin/Hangfire/HangfireStatsResponse.cs
@@ -0,0 +1,16 @@
+namespace Moonlight.Shared.Http.Responses.Admin.Hangfire;
+
+public class HangfireStatsResponse
+{
+ public long Servers { get; set; }
+ public long Recurring { get; set; }
+ public long Enqueued { get; set; }
+ public long Queues { get; set; }
+ public long Scheduled { get; set; }
+ public long Processing { get; set; }
+ public long Succeeded { get; set; }
+ public long Failed { get; set; }
+ public long Deleted { get; set; }
+ public long? Retries { get; set; }
+ public long? Awaiting { get; set; }
+}
\ No newline at end of file