diff --git a/db/MongoDB/Dicts.js b/db/MongoDB/Dicts.js index ecb1b09f..0b4d1cd4 100644 --- a/db/MongoDB/Dicts.js +++ b/db/MongoDB/Dicts.js @@ -330,6 +330,12 @@ "Code": "0", "Define": NumberInt(0) }, + { + "Category": "网站设置", + "Name": "健康检查", + "Code": "0", + "Define": NumberInt(0) + }, { "Category": "网站设置", "Name": "默认应用程序", diff --git a/db/MySQL/initData.sql b/db/MySQL/initData.sql index f3571097..1e179238 100644 --- a/db/MySQL/initData.sql +++ b/db/MySQL/initData.sql @@ -45,6 +45,9 @@ INSERT INTO Dicts (Category, Name, Code, Define) VALUES ('网站设置', '自动 -- 是否启用 Blazor 默认为 0 未启用 INSERT INTO Dicts (Category, Name, Code, Define) VALUES ('网站设置', 'Blazor', '0', 0); +-- 是否启用 健康检查 默认为 0 未启用 1 启用 +INSERT INTO Dicts (Category, Name, Code, Define) Values ('网站设置', '健康检查', '1', 0); + -- 时长单位 月 INSERT INTO Dicts (Category, Name, Code, Define) VALUES ('网站设置', '程序异常保留时长', '1', 0); INSERT INTO Dicts (Category, Name, Code, Define) VALUES ('网站设置', '操作日志保留时长', '12', 0); diff --git a/db/Oracle/InitData.sql b/db/Oracle/InitData.sql index eafda4c1..1d14392a 100644 --- a/db/Oracle/InitData.sql +++ b/db/Oracle/InitData.sql @@ -45,6 +45,9 @@ INSERT INTO Dicts (Id, Category, Name, Code, Define) Values (SEQ_DICTS_ID.NEXTVA -- 是否启用 Blazor 默认为 0 未启用 INSERT INTO Dicts (Id, Category, Name, Code, Define) Values (SEQ_DICTS_ID.NEXTVAL, '网站设置', 'Blazor', '0', 0); +-- 是否启用 健康检查 默认为 0 未启用 1 启用 +INSERT INTO Dicts (Id, Category, Name, Code, Define) Values (SEQ_DICTS_ID.NEXTVAL, '网站设置', '健康检查', '1', 0); + -- 时长单位 月 INSERT INTO Dicts (Id, Category, Name, Code, Define) Values (SEQ_DICTS_ID.NEXTVAL, '网站设置', '程序异常保留时长', '1', 0); INSERT INTO Dicts (Id, Category, Name, Code, Define) Values (SEQ_DICTS_ID.NEXTVAL, '网站设置', '操作日志保留时长', '12', 0); diff --git a/db/SQLite/InitData.sql b/db/SQLite/InitData.sql index 0bd19ea2..34c2d516 100644 --- a/db/SQLite/InitData.sql +++ b/db/SQLite/InitData.sql @@ -45,6 +45,9 @@ INSERT INTO [Dicts] ([Category], [Name], [Code], [Define]) VALUES ('网站设置 -- 是否启用 Blazor 默认为 0 未启用 INSERT INTO [Dicts] ([Category], [Name], [Code], [Define]) VALUES ('网站设置', 'Blazor', '0', 0); +-- 是否启用 健康检查 默认为 0 未启用 1 启用 +INSERT INTO [Dicts] ([Category], [Name], [Code], [Define]) VALUES ('网站设置', '健康检查', '1', 0); + -- 时长单位 月 INSERT INTO [Dicts] ([Category], [Name], [Code], [Define]) VALUES ('网站设置', '程序异常保留时长', '1', 0); INSERT INTO [Dicts] ([Category], [Name], [Code], [Define]) VALUES ('网站设置', '操作日志保留时长', '12', 0); diff --git a/db/SqlServer/InitData.sql b/db/SqlServer/InitData.sql index d82bc482..4de9a43a 100644 --- a/db/SqlServer/InitData.sql +++ b/db/SqlServer/InitData.sql @@ -48,6 +48,9 @@ INSERT [dbo].[Dicts] ([Category], [Name], [Code], [Define]) VALUES (N'网站设 -- 是否启用 Blazor 默认为 0 未启用 INSERT [dbo].[Dicts] ([Category], [Name], [Code], [Define]) VALUES (N'网站设置', N'Blazor', N'0', 0) +-- 是否启用 健康检查 默认为 0 未启用 1 启用 +INSERT [dbo].[Dicts] ([Category], [Name], [Code], [Define]) VALUES (N'网站设置', N'健康检查', N'1', 0); + -- 时长单位 月 INSERT [dbo].[Dicts] ([Category], [Name], [Code], [Define]) VALUES (N'网站设置', N'程序异常保留时长', '1', 0) INSERT [dbo].[Dicts] ([Category], [Name], [Code], [Define]) VALUES (N'网站设置', N'操作日志保留时长', '12', 0) diff --git a/src/admin/Bootstrap.Admin/BootstrapAdmin.db b/src/admin/Bootstrap.Admin/BootstrapAdmin.db index 6c89075e..d586549c 100644 Binary files a/src/admin/Bootstrap.Admin/BootstrapAdmin.db and b/src/admin/Bootstrap.Admin/BootstrapAdmin.db differ diff --git a/src/admin/Bootstrap.Admin/Controllers/Api/HealthsController.cs b/src/admin/Bootstrap.Admin/Controllers/Api/HealthsController.cs index 05ef1440..11521df2 100644 --- a/src/admin/Bootstrap.Admin/Controllers/Api/HealthsController.cs +++ b/src/admin/Bootstrap.Admin/Controllers/Api/HealthsController.cs @@ -1,4 +1,5 @@ -using Microsoft.AspNetCore.Authorization; +using Bootstrap.DataAccess; +using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Configuration; using System.Net.Http; @@ -26,7 +27,7 @@ namespace Bootstrap.Admin.Controllers.Api { var ret = false; var url = config.GetValue("HealthsCloudUrl", ""); - if (!string.IsNullOrEmpty(url)) + if (!string.IsNullOrEmpty(url) && DictHelper.RetrieveHealth()) { await httpClient.HttpClient.PostAsJsonAsync(url, message); ret = true; diff --git a/src/admin/Bootstrap.Admin/Controllers/Api/TasksController.cs b/src/admin/Bootstrap.Admin/Controllers/Api/TasksController.cs index dd41429f..47b92541 100644 --- a/src/admin/Bootstrap.Admin/Controllers/Api/TasksController.cs +++ b/src/admin/Bootstrap.Admin/Controllers/Api/TasksController.cs @@ -79,7 +79,8 @@ namespace Bootstrap.Admin.Controllers.Api "超时任务", "取消任务", "禁用任务", - "SQL日志" + "SQL日志", + "健康检查" }; /// /// 删除任务方法 diff --git a/src/admin/Bootstrap.Admin/Models/SettingsModel.cs b/src/admin/Bootstrap.Admin/Models/SettingsModel.cs index c9e189f5..4d164881 100644 --- a/src/admin/Bootstrap.Admin/Models/SettingsModel.cs +++ b/src/admin/Bootstrap.Admin/Models/SettingsModel.cs @@ -31,6 +31,7 @@ namespace Bootstrap.Admin.Models IPCachePeriod = DictHelper.RetrieveLocaleIPSvrCachePeriod(); EnableDemo = DictHelper.RetrieveSystemModel(); AdminPathBase = DictHelper.RetrievePathBase(); + EnableHealth = DictHelper.RetrieveHealth(); var dicts = DictHelper.RetrieveDicts(); Apps = DictHelper.RetrieveApps().Where(d => !d.Key.Equals("BA", StringComparison.OrdinalIgnoreCase)).Select(k => @@ -109,5 +110,10 @@ namespace Bootstrap.Admin.Models /// 获得/设置 系统应用程序集合 /// public IEnumerable<(string Key, string Name, string Url)> Apps { get; set; } + + /// + /// 获得/设置 是否开启健康检查 + /// + public bool EnableHealth { get; set; } } } diff --git a/src/admin/Bootstrap.Admin/Startup.cs b/src/admin/Bootstrap.Admin/Startup.cs index 63c60422..4ab22d88 100644 --- a/src/admin/Bootstrap.Admin/Startup.cs +++ b/src/admin/Bootstrap.Admin/Startup.cs @@ -10,6 +10,7 @@ using Microsoft.AspNetCore.Mvc.Versioning; using Microsoft.AspNetCore.SignalR; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Diagnostics.HealthChecks; using Microsoft.Extensions.Hosting; using System; @@ -129,7 +130,10 @@ namespace Bootstrap.Admin { endpoints.MapHub("/NotiHub"); endpoints.MapHub("/TaskLogHub"); - endpoints.MapBootstrapHealthChecks(); + endpoints.MapBootstrapHealthChecks("/Healths", configure: op => + { + op.Predicate = new Func(reg => DictHelper.RetrieveHealth()); + }); endpoints.MapBlazorHub(); endpoints.MapFallbackToPage("/_Host"); endpoints.MapDefaultControllerRoute(); diff --git a/src/admin/Bootstrap.Admin/Tasks/TasksExtensions.cs b/src/admin/Bootstrap.Admin/Tasks/TasksExtensions.cs index 9c5a8c8b..704b5a2d 100644 --- a/src/admin/Bootstrap.Admin/Tasks/TasksExtensions.cs +++ b/src/admin/Bootstrap.Admin/Tasks/TasksExtensions.cs @@ -1,4 +1,5 @@ using Bootstrap.DataAccess; +using Bootstrap.Security; using Longbow.Tasks; using Microsoft.Extensions.Hosting; using System.Linq; @@ -52,6 +53,16 @@ namespace Microsoft.Extensions.DependencyInjection // 真实任务负责批次写入数据执行脚本到日志中 TaskServicesManager.GetOrAdd("SQL日志", TriggerBuilder.Build(Cron.Minutely())); + + // 真实人物负责周期性设置健康检查结果开关为开启 + TaskServicesManager.GetOrAdd("健康检查", token => Task.FromResult(DictHelper.SaveSettings(new BootstrapDict[] { + new BootstrapDict() { + Category = "网站设置", + Name = "健康检查", + Code = "1", + Define = 0 + } + })), TriggerBuilder.Build(Cron.Minutely(10))); }); } } diff --git a/src/admin/Bootstrap.Admin/Views/Admin/Settings.cshtml b/src/admin/Bootstrap.Admin/Views/Admin/Settings.cshtml index f2c5b581..e66c8979 100644 --- a/src/admin/Bootstrap.Admin/Views/Admin/Settings.cshtml +++ b/src/admin/Bootstrap.Admin/Views/Admin/Settings.cshtml @@ -113,6 +113,10 @@ +
+ + +