S8ActiveFlowStuckScanJob.cs 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. using Admin.NET.Plugin.AiDOP.Service.S8;
  2. using Furion.Schedule;
  3. using Microsoft.Extensions.DependencyInjection;
  4. using Microsoft.Extensions.Logging;
  5. namespace Admin.NET.Plugin.AiDOP.Job;
  6. /// <summary>
  7. /// 定期扫描挂有 ActiveFlow 且长时间未更新的 S8 异常,输出告警日志和通知记录。
  8. /// </summary>
  9. [JobDetail("job_s8_active_flow_stuck_scan", Description = "S8 ActiveFlow 卡死扫描",
  10. GroupName = "default", Concurrent = false)]
  11. [Period(300000, TriggerId = "trigger_s8_active_flow_stuck_scan", Description = "每5分钟执行", RunOnStart = true)]
  12. public class S8ActiveFlowStuckScanJob : IJob
  13. {
  14. private readonly IServiceScopeFactory _scopeFactory;
  15. private readonly ILogger _logger;
  16. public S8ActiveFlowStuckScanJob(IServiceScopeFactory scopeFactory, ILoggerFactory loggerFactory)
  17. {
  18. _scopeFactory = scopeFactory;
  19. _logger = loggerFactory.CreateLogger(nameof(S8ActiveFlowStuckScanJob));
  20. }
  21. public async Task ExecuteAsync(JobExecutingContext context, CancellationToken stoppingToken)
  22. {
  23. using var scope = _scopeFactory.CreateScope();
  24. var watchService = scope.ServiceProvider.GetRequiredService<S8ActiveFlowWatchService>();
  25. try
  26. {
  27. var alertCount = await watchService.ScanAsync(stoppingToken);
  28. if (alertCount > 0)
  29. _logger.LogInformation("S8ActiveFlowStuckScanJob 本轮新增 {Count} 条卡死告警", alertCount);
  30. }
  31. catch (OperationCanceledException) when (stoppingToken.IsCancellationRequested)
  32. {
  33. _logger.LogInformation("S8ActiveFlowStuckScanJob 收到停止信号,结束本轮扫描");
  34. }
  35. catch (Exception ex)
  36. {
  37. _logger.LogError(ex, "S8ActiveFlowStuckScanJob 扫描失败");
  38. }
  39. }
  40. }