refactor(dotnet): standardize scheduler job definitions
This commit is contained in:
@@ -16,6 +16,12 @@ namespace QuantEngine.Web.Services;
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public class SchedulerService
|
public class SchedulerService
|
||||||
{
|
{
|
||||||
|
private sealed record RecurringJobDefinition(
|
||||||
|
string JobId,
|
||||||
|
Expression<Func<Task>> Job,
|
||||||
|
string Cron,
|
||||||
|
string Description);
|
||||||
|
|
||||||
private readonly ILogger<SchedulerService> _logger;
|
private readonly ILogger<SchedulerService> _logger;
|
||||||
private readonly IBackgroundJobClient _jobClient;
|
private readonly IBackgroundJobClient _jobClient;
|
||||||
private readonly IRecurringJobManager _recurringJobManager;
|
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()
|
private static string? FindGatherTradingDataJson()
|
||||||
{
|
{
|
||||||
var baseDir = AppContext.BaseDirectory;
|
var baseDir = AppContext.BaseDirectory;
|
||||||
@@ -104,37 +118,16 @@ public class SchedulerService
|
|||||||
{
|
{
|
||||||
_logger.LogInformation("Initializing Hangfire schedules...");
|
_logger.LogInformation("Initializing Hangfire schedules...");
|
||||||
|
|
||||||
// Daily data collection at 9:00 AM
|
foreach (var job in BuildRecurringJobs())
|
||||||
_recurringJobManager.AddOrUpdate(
|
{
|
||||||
"daily-collection",
|
_recurringJobManager.AddOrUpdate(
|
||||||
() => RunDailyCollectionAsync(),
|
job.JobId,
|
||||||
"0 9 * * *", // Every day at 9:00 AM
|
job.Job,
|
||||||
new RecurringJobOptions { TimeZone = TimeZoneInfo.Local }
|
job.Cron,
|
||||||
);
|
new RecurringJobOptions { TimeZone = TimeZoneInfo.Local }
|
||||||
|
);
|
||||||
// Hourly price update (during market hours 9 AM - 4 PM, every 2 hours)
|
_logger.LogInformation("Registered recurring job {JobId}: {Description}", job.JobId, job.Description);
|
||||||
_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 }
|
|
||||||
);
|
|
||||||
|
|
||||||
_logger.LogInformation("Hangfire schedules initialized successfully");
|
_logger.LogInformation("Hangfire schedules initialized successfully");
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user