From 3ef333f6ecc18c100196e97a814473a2e33cfe70 Mon Sep 17 00:00:00 2001 From: Argo-Tianyi Date: Wed, 29 Dec 2021 11:22:21 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=A2=9E=E5=8A=A0=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E5=BA=93=E6=97=A5=E5=BF=97=E4=BB=BB=E5=8A=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../BootstrapAdmin.DataAccess.Models/DBLog.cs | 33 +++++++++++ .../BootstrapAdmin.Web/Jobs/DBLogTask.cs | 59 +++++++++++++++++++ .../Extensions/TasksExtensions.cs | 2 +- src/mvc/admin/Bootstrap.Admin/Startup.cs | 5 +- 4 files changed, 94 insertions(+), 5 deletions(-) create mode 100644 src/blazor/admin/BootstrapAdmin.DataAccess.Models/DBLog.cs create mode 100644 src/blazor/admin/BootstrapAdmin.Web/Jobs/DBLogTask.cs diff --git a/src/blazor/admin/BootstrapAdmin.DataAccess.Models/DBLog.cs b/src/blazor/admin/BootstrapAdmin.DataAccess.Models/DBLog.cs new file mode 100644 index 00000000..c410bf13 --- /dev/null +++ b/src/blazor/admin/BootstrapAdmin.DataAccess.Models/DBLog.cs @@ -0,0 +1,33 @@ +using System.ComponentModel; + +namespace BootstrapAdmin.DataAccess.Models +{ + /// + /// 后台数据库脚本执行日志实体类 + /// + public class DBLog + { + /// + /// 获得/设置 主键ID + /// + public string? Id { get; set; } + + /// + /// 获得/设置 当前登陆名 + /// + [DisplayName("所属用户")] + public string? UserName { get; set; } + + /// + /// 获得/设置 数据库执行脚本 + /// + [DisplayName("脚本内容")] + public string SQL { get; set; } = ""; + + /// + /// 获取/设置 用户角色关联状态 checked 标示已经关联 '' 标示未关联 + /// + [DisplayName("执行时间")] + public DateTime LogTime { get; set; } + } +} diff --git a/src/blazor/admin/BootstrapAdmin.Web/Jobs/DBLogTask.cs b/src/blazor/admin/BootstrapAdmin.Web/Jobs/DBLogTask.cs new file mode 100644 index 00000000..806cd8a6 --- /dev/null +++ b/src/blazor/admin/BootstrapAdmin.Web/Jobs/DBLogTask.cs @@ -0,0 +1,59 @@ +using BootstrapAdmin.DataAccess.Models; +using Longbow.Tasks; +using PetaPoco; +using System.Collections.Concurrent; + +namespace BootstrapAdmin.Web.Jobs +{ + /// + /// 数据库脚本执行日志任务实体类 + /// + public class DBLogTask : ITask + { + private static readonly BlockingCollection _messageQueue = new(new ConcurrentQueue()); + + /// + /// 添加数据库日志实体类到内部集合中 + /// + /// + public static System.Threading.Tasks.Task AddDBLog(DBLog log) => System.Threading.Tasks.Task.Run(() => + { + if (!_messageQueue.IsAddingCompleted && !_pause) + { + _messageQueue.Add(log); + } + }); + + private static bool _pause; + /// + /// 暂停接收脚本执行日志 + /// + public static void Pause() => _pause = true; + + /// + /// 开始接收脚本执行日志 + /// + public static void Run() => _pause = false; + + /// + /// 任务执行方法 + /// + /// + /// + public System.Threading.Tasks.Task Execute(CancellationToken cancellationToken) + { + var logs = new List(); + while (_messageQueue.TryTake(out var log)) + { + if (log != null) logs.Add(log); + if (logs.Count >= 100) break; + } + if (logs.Any()) + { + //using var db = DbManager.Create(enableLog: false); + //db.InsertBatch(logs); + } + return System.Threading.Tasks.Task.CompletedTask; + } + } +} diff --git a/src/mvc/admin/Bootstrap.Admin/Extensions/TasksExtensions.cs b/src/mvc/admin/Bootstrap.Admin/Extensions/TasksExtensions.cs index 704b5a2d..b5281143 100644 --- a/src/mvc/admin/Bootstrap.Admin/Extensions/TasksExtensions.cs +++ b/src/mvc/admin/Bootstrap.Admin/Extensions/TasksExtensions.cs @@ -54,7 +54,7 @@ namespace Microsoft.Extensions.DependencyInjection // 真实任务负责批次写入数据执行脚本到日志中 TaskServicesManager.GetOrAdd("SQL日志", TriggerBuilder.Build(Cron.Minutely())); - // 真实人物负责周期性设置健康检查结果开关为开启 + // 真实任务负责周期性设置健康检查结果开关为开启 TaskServicesManager.GetOrAdd("健康检查", token => Task.FromResult(DictHelper.SaveSettings(new BootstrapDict[] { new BootstrapDict() { Category = "网站设置", diff --git a/src/mvc/admin/Bootstrap.Admin/Startup.cs b/src/mvc/admin/Bootstrap.Admin/Startup.cs index c604d3ae..2d840b1b 100644 --- a/src/mvc/admin/Bootstrap.Admin/Startup.cs +++ b/src/mvc/admin/Bootstrap.Admin/Startup.cs @@ -91,10 +91,7 @@ namespace Bootstrap.Admin options.Filters.Add>(); }).AddJsonOptions(op => op.JsonSerializerOptions.AddDefaultConverters()); services.AddRazorPages(); - services.AddServerSideBlazor().AddCircuitOptions(options => - { - if (Enviroment.IsDevelopment()) options.DetailedErrors = true; - }); + services.AddServerSideBlazor(); services.AddDisplayNames(); services.AddBootstrapBlazor(); }