“运维与审计控制台”。
主要能力: SuperAdmin 专用入口:组织与权限 → 运维与审计。 操作日志分页查询,支持时间、账号、路径、方法和状态码筛选。 汇总自动排课、课表发布、补考安排三类失败后台任务。 实时检查数据库、缓存、任务通道及积压状态。 聚合 5xx、失败/重试任务、健康探针和备份时效告警。 SQLite 在线备份;MySQL 调用原生客户端备份。 SHA-256 校验及隔离数据库恢复演练,不覆盖业务库。 MySQL 强制使用独立运维连接,容器增加持久化备份卷与数据库客户端。
This commit is contained in:
@@ -8,6 +8,7 @@ using Jiaowu.Api.Infrastructure.Caching;
|
||||
using Jiaowu.Api.Infrastructure.Exams;
|
||||
using Jiaowu.Api.Infrastructure.Middleware;
|
||||
using Jiaowu.Api.Infrastructure.OfficialDocuments;
|
||||
using Jiaowu.Api.Infrastructure.Operations;
|
||||
using Jiaowu.Api.Infrastructure.Persistence;
|
||||
using Jiaowu.Api.Infrastructure.Scheduling;
|
||||
using Jiaowu.Api.Infrastructure.Timetables;
|
||||
@@ -74,6 +75,9 @@ var officialDocumentOptions = builder.Configuration
|
||||
var backgroundJobOptions = builder.Configuration
|
||||
.GetSection(BackgroundJobOptions.SectionName)
|
||||
.Get<BackgroundJobOptions>() ?? new BackgroundJobOptions();
|
||||
var operationsOptions = builder.Configuration
|
||||
.GetSection(OperationsOptions.SectionName)
|
||||
.Get<OperationsOptions>() ?? new OperationsOptions();
|
||||
var rabbitMqOptions = builder.Configuration
|
||||
.GetSection(RabbitMqOptions.SectionName)
|
||||
.Get<RabbitMqOptions>() ?? new RabbitMqOptions();
|
||||
@@ -167,10 +171,25 @@ if (backgroundJobOptions.UsesRabbitMq &&
|
||||
"生产环境启用 RabbitMQ 时不能使用默认 guest 凭据。");
|
||||
}
|
||||
|
||||
if (string.IsNullOrWhiteSpace(operationsOptions.BackupDirectory) ||
|
||||
operationsOptions.BackupWarningHours is < 1 or > 8760 ||
|
||||
operationsOptions.ToolTimeoutMinutes is < 1 or > 240 ||
|
||||
string.IsNullOrWhiteSpace(operationsOptions.MySqlDumpPath) ||
|
||||
string.IsNullOrWhiteSpace(operationsOptions.MySqlClientPath) ||
|
||||
operationsOptions.MySqlAdditionalArguments.Length > 20 ||
|
||||
operationsOptions.MySqlAdditionalArguments.Any(argument =>
|
||||
string.IsNullOrWhiteSpace(argument) ||
|
||||
argument.Length > 300 ||
|
||||
!argument.StartsWith("--", StringComparison.Ordinal)))
|
||||
{
|
||||
throw new InvalidOperationException("Operations 运维与备份配置超出允许范围。");
|
||||
}
|
||||
|
||||
builder.Services.AddSingleton(databaseOptions);
|
||||
builder.Services.AddSingleton(cacheOptions);
|
||||
builder.Services.AddSingleton(officialDocumentOptions);
|
||||
builder.Services.AddSingleton(backgroundJobOptions);
|
||||
builder.Services.AddSingleton(operationsOptions);
|
||||
builder.Services.AddSingleton(rabbitMqOptions);
|
||||
builder.Services.Configure<OfficialDocumentOptions>(
|
||||
builder.Configuration.GetSection(OfficialDocumentOptions.SectionName));
|
||||
@@ -277,6 +296,8 @@ builder.Services.AddScoped<MakeupExamArrangementService>();
|
||||
builder.Services.AddScoped<MakeupExamAutoJobProcessor>();
|
||||
builder.Services.AddSingleton<BackgroundJobTelemetry>();
|
||||
builder.Services.AddScoped<BackgroundJobMonitoringService>();
|
||||
builder.Services.AddScoped<OperationalHealthService>();
|
||||
builder.Services.AddSingleton<DatabaseBackupService>();
|
||||
builder.Services.AddSingleton<BackgroundJobRunner>();
|
||||
if (backgroundJobOptions.UsesRabbitMq)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user