From e5c5b16f8293ba12db22fa12c367b4cf6900e3d4 Mon Sep 17 00:00:00 2001 From: jung Date: Mon, 1 Jan 2024 19:56:54 +0100 Subject: [PATCH] dashboard proto --- .../Core.TaskProcessor.Dashboard.csproj | 16 +++++ .../TaskProcessorDashboardExtensions.cs | 59 +++++++++++++++++++ .../Core.TaskProcessor.SampleWebApi.csproj | 1 + Core.TaskProcessor.SampleWebApi/Program.cs | 12 ++++ Core.TaskProcessor.sln | 8 ++- 5 files changed, 95 insertions(+), 1 deletion(-) create mode 100644 Core.TaskProcessor.Dashboard/Core.TaskProcessor.Dashboard.csproj create mode 100644 Core.TaskProcessor.Dashboard/TaskProcessorDashboardExtensions.cs diff --git a/Core.TaskProcessor.Dashboard/Core.TaskProcessor.Dashboard.csproj b/Core.TaskProcessor.Dashboard/Core.TaskProcessor.Dashboard.csproj new file mode 100644 index 0000000..7ef77c6 --- /dev/null +++ b/Core.TaskProcessor.Dashboard/Core.TaskProcessor.Dashboard.csproj @@ -0,0 +1,16 @@ + + + + net6.0;net7.0;net8.0 + enable + enable + + + + + + + + + + diff --git a/Core.TaskProcessor.Dashboard/TaskProcessorDashboardExtensions.cs b/Core.TaskProcessor.Dashboard/TaskProcessorDashboardExtensions.cs new file mode 100644 index 0000000..38dc628 --- /dev/null +++ b/Core.TaskProcessor.Dashboard/TaskProcessorDashboardExtensions.cs @@ -0,0 +1,59 @@ +using Microsoft.AspNetCore.Builder; +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Mvc; +using Microsoft.Extensions.DependencyInjection; + +namespace Core.TaskProcessor.Dashboard +{ + public class TaskProcessorDashboardOptions + { + public string Prefix { get; set; } = "/taskprocessor"; + public Func> TenantProvider { get; set; } = _ => Task.FromResult("core"); + } + + public static class TaskProcessorDashboardExtensions + { + public static void AddTaskProcessorDashboard(this IServiceCollection services, TaskProcessorDashboardOptions options) + { + services.AddSingleton(options); + } + + public static void MapTaskProcessorDashboard(this WebApplication app) + { + var options = app.Services.GetRequiredService(); + + app.MapGet($"{options.Prefix}/batches", async (ITaskProcessor proc) => + { + return await proc.GetBatchesAsync("core", 0, 50); + }); + + app.MapGet($"{options.Prefix}/schedules", async (ITaskProcessor proc) => + { + return await proc.GetSchedulesAsync("core", 0, 50); + }); + + app.MapGet($"{options.Prefix}/queues", async (ITaskProcessor proc) => + { + return await proc.GetQueuesAsync(); + });//.RequireAuthorization("taskprocessor_admin"); + + app.MapPost($"{options.Prefix}/batch/{{batchId}}/cancel", async (ITaskProcessor proc, [FromRoute] string batchId) => + { + return await proc.CancelBatchAsync(batchId); + });//.RequireAuthorization("taskprocessor_admin"); + + app.MapPost($"{options.Prefix}/schedule/{{scheduleId}}/cancel", async (ITaskProcessor proc, [FromRoute] string scheduleId) => + { + + return await proc.CancelScheduleAsync(scheduleId, ); + });//.RequireAuthorization("taskprocessor_admin"); + + app.MapPost($"{options.Prefix}/schedule/{{scheduleId}}/fire", async (ITaskProcessor proc, [FromRoute] string batchId) => + { + return await proc.CancelBatchAsync(batchId); + });//.RequireAuthorization("taskprocessor_admin"); + + app.usesta + } + } +} diff --git a/Core.TaskProcessor.SampleWebApi/Core.TaskProcessor.SampleWebApi.csproj b/Core.TaskProcessor.SampleWebApi/Core.TaskProcessor.SampleWebApi.csproj index 017db6b..2529c66 100644 --- a/Core.TaskProcessor.SampleWebApi/Core.TaskProcessor.SampleWebApi.csproj +++ b/Core.TaskProcessor.SampleWebApi/Core.TaskProcessor.SampleWebApi.csproj @@ -13,6 +13,7 @@ + diff --git a/Core.TaskProcessor.SampleWebApi/Program.cs b/Core.TaskProcessor.SampleWebApi/Program.cs index 4414748..7d65914 100644 --- a/Core.TaskProcessor.SampleWebApi/Program.cs +++ b/Core.TaskProcessor.SampleWebApi/Program.cs @@ -1,4 +1,5 @@ using Core.TaskProcessor; +using Core.TaskProcessor.Dashboard; using Core.TaskProcessor.SampleWebApi.Services; var builder = WebApplication.CreateBuilder(args); @@ -20,9 +21,19 @@ UseHostedService = true, UseCronSeconds = true }); +builder.Services.AddTaskProcessorDashboard(new TaskProcessorDashboardOptions +{ + +}); builder.Services.AddScoped(); +builder.Services.AddAuthorizationBuilder() + .AddPolicy("taskprocessor_admin", policy => + policy + .RequireRole("taskprocessor")); + + var app = builder.Build(); if (app.Environment.IsDevelopment()) @@ -34,6 +45,7 @@ app.UseAuthorization(); app.MapControllers(); +app.MapTaskProcessorDashboard(); { var proc = app.Services.GetRequiredService(); diff --git a/Core.TaskProcessor.sln b/Core.TaskProcessor.sln index 77e867a..7d29326 100644 --- a/Core.TaskProcessor.sln +++ b/Core.TaskProcessor.sln @@ -7,7 +7,9 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Core.TaskProcessor", "Core. EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Core.TaskProcessor.Tests", "Core.TaskProcessor.Tests\Core.TaskProcessor.Tests.csproj", "{47028D34-1E6E-4968-844D-080373CB5647}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Core.TaskProcessor.SampleWebApi", "Core.TaskProcessor.SampleWebApi\Core.TaskProcessor.SampleWebApi.csproj", "{A37C75D6-DD7A-4368-BAA0-CF6ACCAD8C8A}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Core.TaskProcessor.SampleWebApi", "Core.TaskProcessor.SampleWebApi\Core.TaskProcessor.SampleWebApi.csproj", "{A37C75D6-DD7A-4368-BAA0-CF6ACCAD8C8A}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Core.TaskProcessor.Dashboard", "Core.TaskProcessor.Dashboard\Core.TaskProcessor.Dashboard.csproj", "{95F89C4F-A7D8-4177-BC64-EF15E73D9229}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -27,6 +29,10 @@ Global {A37C75D6-DD7A-4368-BAA0-CF6ACCAD8C8A}.Debug|Any CPU.Build.0 = Debug|Any CPU {A37C75D6-DD7A-4368-BAA0-CF6ACCAD8C8A}.Release|Any CPU.ActiveCfg = Release|Any CPU {A37C75D6-DD7A-4368-BAA0-CF6ACCAD8C8A}.Release|Any CPU.Build.0 = Release|Any CPU + {95F89C4F-A7D8-4177-BC64-EF15E73D9229}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {95F89C4F-A7D8-4177-BC64-EF15E73D9229}.Debug|Any CPU.Build.0 = Debug|Any CPU + {95F89C4F-A7D8-4177-BC64-EF15E73D9229}.Release|Any CPU.ActiveCfg = Release|Any CPU + {95F89C4F-A7D8-4177-BC64-EF15E73D9229}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE