Просмотр исходного кода

1、添加作业执行监视器,当job出现错误的时候邮件通知;
2、提取系统事件常量SysToDoEventConst

hans_wen 1 год назад
Родитель
Сommit
d60cac26b4

+ 1 - 1
Admin.NET/Admin.NET.Core/Const/CacheConst.cs

@@ -90,4 +90,4 @@ public class CacheConst
     /// 黑名单
     /// </summary>
     public const string KeyBlacklist = "sys_blacklist:";
-}
+}

+ 26 - 0
Admin.NET/Admin.NET.Core/Const/SysToDoEventConst.cs

@@ -0,0 +1,26 @@
+// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
+//
+// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
+//
+// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
+
+namespace Admin.NET.Core;
+
+/// <summary>
+/// 系统事件常量
+/// </summary>
+public class SysToDoEventConst
+{
+
+    /// <summary>
+    /// 增加异常日志
+    /// </summary>
+    public const string AddExLog = "Add:ExLog";
+    /// <summary>
+    /// 发送异常邮件
+    /// </summary>
+    public const string SendErrorMail = "Send:ErrorMail";
+
+
+
+}

+ 2 - 2
Admin.NET/Admin.NET.Core/EventBus/AppEventSubscriber.cs

@@ -23,7 +23,7 @@ public class AppEventSubscriber : IEventSubscriber, ISingleton, IDisposable
     /// </summary>
     /// <param name="context"></param>
     /// <returns></returns>
-    [EventSubscribe("Add:ExLog")]
+    [EventSubscribe(SysToDoEventConst.AddExLog)]
     public async Task CreateExLog(EventHandlerExecutingContext context)
     {
         var rep = _serviceScope.ServiceProvider.GetRequiredService<SqlSugarRepository<SysLogEx>>();
@@ -35,7 +35,7 @@ public class AppEventSubscriber : IEventSubscriber, ISingleton, IDisposable
     /// </summary>
     /// <param name="context"></param>
     /// <returns></returns>
-    [EventSubscribe("Send:ErrorMail")]
+    [EventSubscribe(SysToDoEventConst.SendErrorMail)]
     public async Task SendOrderErrorMail(EventHandlerExecutingContext context)
     {
         //var mailTempPath = Path.Combine(App.WebHostEnvironment.WebRootPath, "Temp\\ErrorMail.tp");

+ 1 - 1
Admin.NET/Admin.NET.Core/Logging/DatabaseLoggingWriter.cs

@@ -122,7 +122,7 @@ public class DatabaseLoggingWriter : IDatabaseLoggingWriter, IDisposable
                 // 将异常日志发送到邮件
                 if (await _sysConfigService.GetConfigValue<bool>(CommonConst.SysErrorMail))
                 {
-                    await App.GetRequiredService<IEventPublisher>().PublishAsync("Send:ErrorMail", loggingMonitor.exception);
+                    await App.GetRequiredService<IEventPublisher>().PublishAsync(SysToDoEventConst.SendErrorMail, loggingMonitor.exception);
                 }
 
                 return;

+ 1 - 1
Admin.NET/Admin.NET.Core/Service/Job/DbJobPersistence.cs

@@ -195,4 +195,4 @@ public class DbJobPersistence : IJobPersistence
             await db.Insertable(jobTriggerRecord).ExecuteCommandAsync();
         }
     }
-}
+}

+ 50 - 0
Admin.NET/Admin.NET.Core/Service/Job/JobMonitor.cs

@@ -0,0 +1,50 @@
+// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
+//
+// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
+//
+// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
+
+namespace Admin.NET.Core.Service;
+
+/// <summary>
+/// 作业执行监视器
+/// </summary>
+public class JobMonitor : IJobMonitor, IDisposable
+{
+    private readonly IEventPublisher _eventPublisher;
+    private readonly IServiceScope _serviceScope;
+    private readonly SysConfigService _sysConfigService; // 参数配置服务
+    public JobMonitor(IServiceScopeFactory scopeFactory)
+    {
+
+        _serviceScope = scopeFactory.CreateScope();
+        _sysConfigService = _serviceScope.ServiceProvider.GetRequiredService<SysConfigService>();
+        _eventPublisher = _serviceScope.ServiceProvider.GetRequiredService<IEventPublisher>(); ;
+    }
+
+
+
+    public async Task OnExecutedAsync(JobExecutedContext context, CancellationToken stoppingToken)
+    {
+        if (await _sysConfigService.GetConfigValue<bool>(CommonConst.SysErrorMail) && context.Exception != null)
+        {
+            var errorInfo = $"【{context.Trigger.Description}】出现错误:{context.Exception.InnerException}";
+            // 将异常日志发送到邮件
+            await _eventPublisher.PublishAsync(SysToDoEventConst.SendErrorMail, errorInfo);
+        }
+
+    }
+
+    public Task OnExecutingAsync(JobExecutingContext context, CancellationToken stoppingToken)
+    {
+        return Task.CompletedTask;
+    }
+
+    /// <summary>
+    /// 释放服务作用域
+    /// </summary>
+    public void Dispose()
+    {
+        _serviceScope.Dispose();
+    }
+}

+ 1 - 0
Admin.NET/Admin.NET.Web.Core/Startup.cs

@@ -52,6 +52,7 @@ public class Startup : AppStartup
         services.AddSchedule(options =>
         {
             options.AddPersistence<DbJobPersistence>(); // 添加作业持久化器
+            options.AddMonitor<JobMonitor>(); //添加作业执行监视器
         });
         // 脱敏检测
         services.AddSensitiveDetection();