refactor(dotnet): standardize scheduler job definitions
This commit is contained in:
@@ -16,6 +16,12 @@ namespace QuantEngine.Web.Services;
|
||||
/// </summary>
|
||||
public class SchedulerService
|
||||
{
|
||||
private sealed record RecurringJobDefinition(
|
||||
string JobId,
|
||||
Expression<Func<Task>> Job,
|
||||
string Cron,
|
||||
string Description);
|
||||
|
||||
private readonly ILogger<SchedulerService> _logger;
|
||||
private readonly IBackgroundJobClient _jobClient;
|
||||
private readonly IRecurringJobManager _recurringJobManager;
|
||||
@@ -76,6 +82,14 @@ public class SchedulerService
|
||||
}
|
||||
}
|
||||
|
||||
private IReadOnlyList<RecurringJobDefinition> BuildRecurringJobs() => new[]
|
||||
{
|
||||
new RecurringJobDefinition("daily-collection", () => RunDailyCollectionAsync(), "0 9 * * *", "Daily data collection"),
|
||||
new RecurringJobDefinition("hourly-price-update", () => UpdatePricesAsync(), "0 9,11,13,15 * * 1-5", "Hourly price update"),
|
||||
new RecurringJobDefinition("weekly-report", () => GenerateWeeklyReportAsync(), "0 17 * * 5", "Weekly report generation"),
|
||||
new RecurringJobDefinition("monthly-optimization", () => RunMonthlyOptimizationAsync(), "0 2 1 * *", "Monthly optimization"),
|
||||
};
|
||||
|
||||
private static string? FindGatherTradingDataJson()
|
||||
{
|
||||
var baseDir = AppContext.BaseDirectory;
|
||||
@@ -104,37 +118,16 @@ public class SchedulerService
|
||||
{
|
||||
_logger.LogInformation("Initializing Hangfire schedules...");
|
||||
|
||||
// Daily data collection at 9:00 AM
|
||||
_recurringJobManager.AddOrUpdate(
|
||||
"daily-collection",
|
||||
() => RunDailyCollectionAsync(),
|
||||
"0 9 * * *", // Every day at 9:00 AM
|
||||
new RecurringJobOptions { TimeZone = TimeZoneInfo.Local }
|
||||
);
|
||||
|
||||
// Hourly price update (during market hours 9 AM - 4 PM, every 2 hours)
|
||||
_recurringJobManager.AddOrUpdate(
|
||||
"hourly-price-update",
|
||||
() => UpdatePricesAsync(),
|
||||
"0 9,11,13,15 * * 1-5", // 9:00, 11:00, 13:00, 15:00 on Mon-Fri
|
||||
new RecurringJobOptions { TimeZone = TimeZoneInfo.Local }
|
||||
);
|
||||
|
||||
// Weekly report generation (Friday at 5:00 PM)
|
||||
_recurringJobManager.AddOrUpdate(
|
||||
"weekly-report",
|
||||
() => GenerateWeeklyReportAsync(),
|
||||
"0 17 * * 5", // Every Friday at 5:00 PM
|
||||
new RecurringJobOptions { TimeZone = TimeZoneInfo.Local }
|
||||
);
|
||||
|
||||
// Monthly optimization (First day of month at 2:00 AM)
|
||||
_recurringJobManager.AddOrUpdate(
|
||||
"monthly-optimization",
|
||||
() => RunMonthlyOptimizationAsync(),
|
||||
"0 2 1 * *", // First day of month at 2:00 AM
|
||||
new RecurringJobOptions { TimeZone = TimeZoneInfo.Local }
|
||||
);
|
||||
foreach (var job in BuildRecurringJobs())
|
||||
{
|
||||
_recurringJobManager.AddOrUpdate(
|
||||
job.JobId,
|
||||
job.Job,
|
||||
job.Cron,
|
||||
new RecurringJobOptions { TimeZone = TimeZoneInfo.Local }
|
||||
);
|
||||
_logger.LogInformation("Registered recurring job {JobId}: {Description}", job.JobId, job.Description);
|
||||
}
|
||||
|
||||
_logger.LogInformation("Hangfire schedules initialized successfully");
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user