using Admin.NET.Plugin.AiDOP.Service.S8; using Furion.Schedule; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; namespace Admin.NET.Plugin.AiDOP.Job; /// /// 定期扫描挂有 ActiveFlow 且长时间未更新的 S8 异常,输出告警日志和通知记录。 /// [JobDetail("job_s8_active_flow_stuck_scan", Description = "S8 ActiveFlow 卡死扫描", GroupName = "default", Concurrent = false)] [Period(300000, TriggerId = "trigger_s8_active_flow_stuck_scan", Description = "每5分钟执行", RunOnStart = true)] public class S8ActiveFlowStuckScanJob : IJob { private readonly IServiceScopeFactory _scopeFactory; private readonly ILogger _logger; public S8ActiveFlowStuckScanJob(IServiceScopeFactory scopeFactory, ILoggerFactory loggerFactory) { _scopeFactory = scopeFactory; _logger = loggerFactory.CreateLogger(nameof(S8ActiveFlowStuckScanJob)); } public async Task ExecuteAsync(JobExecutingContext context, CancellationToken stoppingToken) { using var scope = _scopeFactory.CreateScope(); var watchService = scope.ServiceProvider.GetRequiredService(); try { var alertCount = await watchService.ScanAsync(stoppingToken); if (alertCount > 0) _logger.LogInformation("S8ActiveFlowStuckScanJob 本轮新增 {Count} 条卡死告警", alertCount); } catch (OperationCanceledException) when (stoppingToken.IsCancellationRequested) { _logger.LogInformation("S8ActiveFlowStuckScanJob 收到停止信号,结束本轮扫描"); } catch (Exception ex) { _logger.LogError(ex, "S8ActiveFlowStuckScanJob 扫描失败"); } } }