Open linkdotnet opened 6 months ago
Yes!
This feature is indeed an epic and should be approached in modular packages. I propose two potential strategies:
app.UseJobsUI();
to their application pipeline:using LinkDotNet.NCronJob;
var builder = WebApplication.CreateBuilder(args);
// Add NCronJob to the service container.
builder.Services.AddNCronJob(n => n
.AddJob<PrintHelloWorldJob>(p =>
p.WithCronExpression("*/2 * * * *"))
);
var app = builder.Build();
// Integrate NCronJob UI middleware.
app.UseJobsDashboard();
...
app.Run();
using LinkDotNet.NCronJob;
var builder = WebApplication.CreateBuilder(args);
// Register NCronJob.
builder.Services
.AddNCronJob(n =>
n.AddJob<PrintHelloWorldJob>(p =>
p.WithCronExpression("*/2 * * * *"))
)
.TryJoinJobsControlCenter(builder.Configuration);
var app = builder.Build();
app.Run();
The necessary configuration in appsettings.json might look like this:
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
"NCronJob": {
"ControlCenter": {
"Url": "http://localhost:7177/hub",
"ApiKey": "1234567890"
}
}
}
Obviously the second approach requires more effort, especially in terms of communication strategy and infrastructure. We can implement either option or both options (centralized hub more of a long term goal).
I am leaning towards an extension package rather than pushing more and more features into the core library itself.
Absolutely, we need to start breaking the project into a core and then the separate extension components that rely on core. Keeping the core library lean makes it easier to maintain.
I do like the second approach as it gives a USP for this library. Let's keep that open and tackle it once we have a definitive idea on how to tackle it and how to tackle #25
This is more of an epic and has to be stripped down to some working packages. Once we are going in the direction of #25 (state-management) it might make sense to offer a dashboard that allows some more monitoring capabilities.
Initially, that can be read-only, but we might want to allow adding instant jobs via the dashboard (that triggers an API endpoint we have to build anyway).
I am leaning towards an extension package rather than pushing more and more features into the core library itself.