26 KiB
系统磁盘监控功能设计
1. 背景
当前仓库已经存在系统监控入口页与磁盘监控占位页:
frontend/src/views/systemMonitor/index.vuefrontend/src/views/systemMonitor/diskMonitor/index.vue
本次目标是在现有“系统监控 > 磁盘监控”入口下,补齐一套完整的磁盘监控方案设计,覆盖:
- 多盘符监控配置
- 盘符级预警/告警阈值配置
- 配置保存与回显
- 应用启动后自动执行一次监控
- 每日统一时间执行定时监控
- 本地目录/网络路径通知
- HTTP 回调通知
- 监控结果与通知日志留痕
- MySQL 表结构与建表 SQL
2. 已确认需求结论
2.1 业务范围
- 磁盘监控配置由页面完成,配置后持久化保存
- 页面支持配置磁盘预警和告警阈值,配置后持久化保存
- 支持多个盘符监控,每个盘符独立配置预警和告警阈值
- 应用启动时立即执行一次监控
- 支持录入通知路径,录入完成后按规则通知
- 支持每天定时执行监控
2.2 已确认的约束
- 监控阈值采用“已使用率”而不是“剩余容量”
- “系统启动时即可进行监控”指“应用启动后立即执行一次”,不包含操作系统开机自启动
- 每日定时监控采用“全局统一时间”,而不是每盘符独立时间
- 通知方式同时支持:
- 本地目录路径
- 网络共享路径
- HTTP 回调地址
- 通知规则固定为:
- 告警状态下每次监控都通知
- 其他状态按状态变化通知
2.3 当前仓库边界
- 当前仓库包含前端和 Electron 壳层
- 当前仓库中未提供可直接修改的业务后端源码
- 因此本设计覆盖完整业务方案,但在本仓库实际落地时,前端页面和接口契约可直接实现,真正的扫描、调度、通知执行需由后端配合实现
3. 推荐方案
采用“分层业务方案”,但按最终确认结果收敛为 5 张核心表:
disk_monitor_policydisk_monitor_targetdisk_monitor_jobdisk_monitor_resultdisk_monitor_notify_log
其中:
disk_monitor_policy负责全局监控策略disk_monitor_target单独存盘符配置,并合并该盘符的通知目标配置disk_monitor_job记录每次监控批次disk_monitor_result记录批次内每个盘符的扫描结果disk_monitor_notify_log记录通知发送结果
该方案兼顾当前需求与后续可维护性,避免把状态判断、任务记录、通知日志混在单表里。
4. 页面设计
4.1 页面入口
页面入口保留在系统监控模块下:
- 入口页:
frontend/src/views/systemMonitor/index.vue - 目标页:
frontend/src/views/systemMonitor/diskMonitor/index.vue
磁盘监控页作为独立配置页,不再只是占位内容。
4.2 页面布局
页面分为 4 个区域。
4.2.1 顶部摘要区
展示当前系统的全局监控状态,字段建议包括:
- 监控总开关
- 应用启动即监控
- 每日统一执行时间
- 最近执行时间
- 最近执行状态
- 监控盘符数量
- 当前告警盘符数量
4.2.2 全局策略区
用于维护全局监控策略,字段包括:
- 是否启用磁盘监控
- 应用启动后立即执行一次
- 每日统一监控时间
- 通知规则说明
通知规则在页面上只展示,不开放复杂配置:
- 预警:状态变化通知
- 告警:每次命中都通知
4.2.3 通知配置区
通知配置跟盘符走,每个盘符都带一组通知目标。页面上建议以“盘符展开卡片”或“盘符表格 + 弹窗”方式编辑通知配置。
每个盘符支持两类通知目标:
- 路径通知:
- 本地目录,如
D:\disk-monitor - 网络共享目录,如
\\server\share\disk-monitor
- 本地目录,如
- HTTP 回调通知:
- 如
http://127.0.0.1:8080/api/disk/notify
- 如
每条通知目标包含:
- 名称
- 地址
- 是否启用
- 备注
HTTP 目标额外包含:
- 请求方法,默认
POST - 超时时间,默认
5000ms
4.2.4 盘符配置区
盘符配置区以表格展示,支持新增、编辑、删除盘符配置。字段包括:
- 盘符
- 是否监控
- 预警使用率
- 告警使用率
- 当前状态
- 最近扫描时间
- 最近使用率
- 操作
4.3 页面交互规则
4.3.1 配置保存
页面保存时一次性提交整页配置,包含:
- 全局策略
- 所有盘符配置
- 每个盘符下的路径通知配置
- 每个盘符下的 HTTP 通知配置
4.3.2 配置回显
页面加载时一次性读取当前生效配置,并回显:
- 全局策略
- 盘符列表
- 各盘符的通知配置
- 最近执行摘要
4.3.3 手动执行
页面建议提供“立即执行监控”按钮,用于:
- 联调验证
- 保存配置后立刻测试
- 验证通知逻辑
4.3.4 最近执行结果
页面下半区建议展示最近若干次执行记录,支持查看:
- 任务来源
- 开始/结束时间
- 执行状态
- 预警数量
- 告警数量
- 每盘符结果
- 通知发送记录
4.4 页面校验规则
- 盘符不能为空
- 盘符不能重复
- 预警使用率必须在
1-100之间 - 告警使用率必须在
1-100之间 - 告警使用率必须大于等于预警使用率
- 每日统一执行时间不能为空,格式固定
HH:mm:ss - 路径通知目标不能为空
- HTTP 通知目标必须是合法 URL
5. 数据库设计
5.1 设计原则
- 使用 MySQL 8.0
- 使用
InnoDB - 字符集使用
utf8mb4 - 配置表与日志表分离
- 为减少配置调整对历史记录的影响,表之间以“索引型关联”为主,不强依赖数据库外键
- 通知目标与盘符配置合并到
disk_monitor_target,使用 JSON 字段存多条通知目标
5.2 表结构概览
5.2.1 disk_monitor_policy
用途:存全局策略,仅保留一套当前生效配置。
关键字段:
idpolicy_namemonitor_enabledrun_on_app_startdaily_run_timewarning_notify_modealarm_notify_modelast_job_idremarkcreated_bycreated_atupdated_byupdated_at
5.2.2 disk_monitor_target
用途:存盘符配置,并合并该盘符的通知配置。
关键字段:
idpolicy_iddrive_lettermonitor_enabledwarning_usage_percentalarm_usage_percentnotify_path_enablednotify_path_list_jsonnotify_http_enablednotify_http_list_jsonlast_statuslast_scan_timelast_used_percentremarkcreated_bycreated_atupdated_byupdated_at
5.2.3 disk_monitor_job
用途:记录每次监控任务批次。
关键字段:
idjob_nojob_sourceplanned_timestarted_atfinished_atjob_statustarget_countsuccess_countwarning_countalarm_countmessagecreated_at
5.2.4 disk_monitor_result
用途:记录一次任务下每个盘符的扫描结果。
关键字段:
idjob_idtarget_iddrive_lettertotal_bytesused_bytesfree_bytesused_percentcurrent_statusprevious_statusstatus_changedshould_notifynotify_reasonscan_timemessage
5.2.5 disk_monitor_notify_log
用途:记录每次通知发送日志。
关键字段:
idjob_idresult_idtarget_iddrive_letternotify_levelchannel_typechannel_targetnotify_titlenotify_contentsend_statusresponse_messagesent_at
5.3 JSON 字段结构
5.3.1 notify_path_list_json
[
{
"path": "D:\\disk-monitor",
"name": "本地通知目录",
"enabled": true
},
{
"path": "\\\\server\\share\\disk-monitor",
"name": "共享目录通知",
"enabled": true
}
]
5.3.2 notify_http_list_json
[
{
"url": "http://127.0.0.1:8080/api/disk/notify",
"name": "运维平台回调",
"method": "POST",
"timeoutMs": 5000,
"enabled": true
}
]
5.4 状态值约定
5.4.1 盘符状态
UNKNOWNNORMALWARNINGALARM
5.4.2 任务来源
APP_STARTDAILY_SCHEDULEMANUAL
5.4.3 任务状态
RUNNINGSUCCESSPARTIAL_SUCCESSFAILED
5.4.4 通知原因
ALARM_EVERY_TIMESTATUS_CHANGEDNO_NOTIFY
5.4.5 通知级别
WARNINGALARMRECOVER
5.4.6 通知通道类型
PATHHTTP
5.4.7 通知发送状态
SUCCESSFAILED
5.5 索引设计
5.5.1 disk_monitor_policy
- 主键:
id
5.5.2 disk_monitor_target
- 主键:
id - 唯一索引:
uk_drive_letter(drive_letter) - 普通索引:
idx_policy_id(policy_id)
5.5.3 disk_monitor_job
- 主键:
id - 唯一索引:
uk_job_no(job_no) - 普通索引:
idx_job_source(job_source) - 普通索引:
idx_started_at(started_at)
5.5.4 disk_monitor_result
- 主键:
id - 普通索引:
idx_job_id(job_id) - 普通索引:
idx_target_id(target_id) - 普通索引:
idx_drive_letter(drive_letter) - 普通索引:
idx_scan_time(scan_time)
5.5.5 disk_monitor_notify_log
- 主键:
id - 普通索引:
idx_job_id(job_id) - 普通索引:
idx_result_id(result_id) - 普通索引:
idx_target_id(target_id) - 普通索引:
idx_sent_at(sent_at)
5.6 MySQL 建表 SQL
CREATE TABLE IF NOT EXISTS `disk_monitor_policy` (
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键',
`policy_name` VARCHAR(100) NOT NULL DEFAULT '默认磁盘监控策略' COMMENT '策略名称',
`monitor_enabled` TINYINT(1) NOT NULL DEFAULT 1 COMMENT '是否启用监控:0否 1是',
`run_on_app_start` TINYINT(1) NOT NULL DEFAULT 1 COMMENT '应用启动后是否执行一次:0否 1是',
`daily_run_time` TIME NOT NULL COMMENT '每日统一执行时间',
`warning_notify_mode` VARCHAR(32) NOT NULL DEFAULT 'STATUS_CHANGE' COMMENT '预警通知模式',
`alarm_notify_mode` VARCHAR(32) NOT NULL DEFAULT 'EVERY_TIME' COMMENT '告警通知模式',
`last_job_id` BIGINT NULL COMMENT '最近一次任务ID',
`remark` VARCHAR(500) NULL COMMENT '备注',
`created_by` VARCHAR(64) NULL COMMENT '创建人',
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`updated_by` VARCHAR(64) NULL COMMENT '更新人',
`updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='磁盘监控全局策略表';
CREATE TABLE IF NOT EXISTS `disk_monitor_target` (
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键',
`policy_id` BIGINT NOT NULL COMMENT '策略ID',
`drive_letter` VARCHAR(10) NOT NULL COMMENT '盘符,例如 C:',
`monitor_enabled` TINYINT(1) NOT NULL DEFAULT 1 COMMENT '是否启用监控:0否 1是',
`warning_usage_percent` TINYINT UNSIGNED NOT NULL COMMENT '预警使用率阈值',
`alarm_usage_percent` TINYINT UNSIGNED NOT NULL COMMENT '告警使用率阈值',
`notify_path_enabled` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '是否启用路径通知:0否 1是',
`notify_path_list_json` JSON NULL COMMENT '路径通知目标列表JSON',
`notify_http_enabled` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '是否启用HTTP通知:0否 1是',
`notify_http_list_json` JSON NULL COMMENT 'HTTP通知目标列表JSON',
`last_status` VARCHAR(32) NOT NULL DEFAULT 'UNKNOWN' COMMENT '最近一次状态',
`last_scan_time` DATETIME NULL COMMENT '最近扫描时间',
`last_used_percent` DECIMAL(5,2) NULL COMMENT '最近一次使用率',
`remark` VARCHAR(500) NULL COMMENT '备注',
`created_by` VARCHAR(64) NULL COMMENT '创建人',
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`updated_by` VARCHAR(64) NULL COMMENT '更新人',
`updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_drive_letter` (`drive_letter`),
KEY `idx_policy_id` (`policy_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='磁盘监控盘符配置表';
CREATE TABLE IF NOT EXISTS `disk_monitor_job` (
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键',
`job_no` VARCHAR(64) NOT NULL COMMENT '任务编号',
`job_source` VARCHAR(32) NOT NULL COMMENT '任务来源',
`planned_time` DATETIME NULL COMMENT '计划执行时间',
`started_at` DATETIME NOT NULL COMMENT '开始时间',
`finished_at` DATETIME NULL COMMENT '结束时间',
`job_status` VARCHAR(32) NOT NULL COMMENT '任务状态',
`target_count` INT NOT NULL DEFAULT 0 COMMENT '计划扫描盘符数量',
`success_count` INT NOT NULL DEFAULT 0 COMMENT '成功扫描数量',
`warning_count` INT NOT NULL DEFAULT 0 COMMENT '预警数量',
`alarm_count` INT NOT NULL DEFAULT 0 COMMENT '告警数量',
`message` VARCHAR(1000) NULL COMMENT '结果说明',
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_job_no` (`job_no`),
KEY `idx_job_source` (`job_source`),
KEY `idx_started_at` (`started_at`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='磁盘监控任务批次表';
CREATE TABLE IF NOT EXISTS `disk_monitor_result` (
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键',
`job_id` BIGINT NOT NULL COMMENT '任务ID',
`target_id` BIGINT NOT NULL COMMENT '盘符配置ID',
`drive_letter` VARCHAR(10) NOT NULL COMMENT '盘符',
`total_bytes` BIGINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '总容量字节数',
`used_bytes` BIGINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '已使用字节数',
`free_bytes` BIGINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '剩余字节数',
`used_percent` DECIMAL(5,2) NOT NULL DEFAULT 0.00 COMMENT '使用率',
`current_status` VARCHAR(32) NOT NULL COMMENT '当前状态',
`previous_status` VARCHAR(32) NOT NULL DEFAULT 'UNKNOWN' COMMENT '上一次状态',
`status_changed` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '状态是否变化:0否 1是',
`should_notify` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '本次是否通知:0否 1是',
`notify_reason` VARCHAR(32) NOT NULL DEFAULT 'NO_NOTIFY' COMMENT '通知原因',
`scan_time` DATETIME NOT NULL COMMENT '扫描时间',
`message` VARCHAR(1000) NULL COMMENT '扫描说明',
PRIMARY KEY (`id`),
KEY `idx_job_id` (`job_id`),
KEY `idx_target_id` (`target_id`),
KEY `idx_drive_letter` (`drive_letter`),
KEY `idx_scan_time` (`scan_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='磁盘监控结果表';
CREATE TABLE IF NOT EXISTS `disk_monitor_notify_log` (
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键',
`job_id` BIGINT NOT NULL COMMENT '任务ID',
`result_id` BIGINT NOT NULL COMMENT '结果ID',
`target_id` BIGINT NOT NULL COMMENT '盘符配置ID',
`drive_letter` VARCHAR(10) NOT NULL COMMENT '盘符',
`notify_level` VARCHAR(32) NOT NULL COMMENT '通知级别',
`channel_type` VARCHAR(32) NOT NULL COMMENT '通知通道类型',
`channel_target` VARCHAR(1000) NOT NULL COMMENT '通知目标',
`notify_title` VARCHAR(255) NOT NULL COMMENT '通知标题',
`notify_content` TEXT NOT NULL COMMENT '通知内容',
`send_status` VARCHAR(32) NOT NULL COMMENT '发送状态',
`response_message` VARCHAR(2000) NULL COMMENT '响应结果或异常信息',
`sent_at` DATETIME NOT NULL COMMENT '发送时间',
PRIMARY KEY (`id`),
KEY `idx_job_id` (`job_id`),
KEY `idx_result_id` (`result_id`),
KEY `idx_target_id` (`target_id`),
KEY `idx_sent_at` (`sent_at`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='磁盘监控通知日志表';
6. 接口设计
6.1 配置查询
接口
GET /disk-monitor/policy/detail
用途
页面初始化时一次性返回:
- 当前生效的全局策略
- 所有盘符配置
返回结构
{
"code": "A0000",
"message": "success",
"data": {
"policy": {
"id": 1,
"policyName": "默认磁盘监控策略",
"monitorEnabled": true,
"runOnAppStart": true,
"dailyRunTime": "08:30:00",
"warningNotifyMode": "STATUS_CHANGE",
"alarmNotifyMode": "EVERY_TIME",
"lastJobId": 1001,
"remark": ""
},
"targets": [
{
"id": 11,
"driveLetter": "C:",
"monitorEnabled": true,
"warningUsagePercent": 80,
"alarmUsagePercent": 90,
"notifyPathEnabled": true,
"notifyPathList": [
{
"path": "D:\\disk-monitor",
"name": "本地目录",
"enabled": true
}
],
"notifyHttpEnabled": true,
"notifyHttpList": [
{
"url": "http://127.0.0.1:8080/api/disk/notify",
"name": "运维平台",
"method": "POST",
"timeoutMs": 5000,
"enabled": true
}
],
"lastStatus": "NORMAL",
"lastScanTime": "2026-04-22 08:30:00",
"lastUsedPercent": 76.42,
"remark": ""
}
]
}
}
6.2 配置保存
接口
POST /disk-monitor/policy/save
用途
页面点击保存时,整页提交一次:
- 全局策略
- 所有盘符配置
- 所有通知配置
请求结构
{
"policy": {
"id": 1,
"policyName": "默认磁盘监控策略",
"monitorEnabled": true,
"runOnAppStart": true,
"dailyRunTime": "08:30:00",
"warningNotifyMode": "STATUS_CHANGE",
"alarmNotifyMode": "EVERY_TIME",
"remark": ""
},
"targets": [
{
"id": 11,
"driveLetter": "C:",
"monitorEnabled": true,
"warningUsagePercent": 80,
"alarmUsagePercent": 90,
"notifyPathEnabled": true,
"notifyPathList": [
{
"path": "D:\\disk-monitor",
"name": "本地目录",
"enabled": true
}
],
"notifyHttpEnabled": true,
"notifyHttpList": [
{
"url": "http://127.0.0.1:8080/api/disk/notify",
"name": "运维平台",
"method": "POST",
"timeoutMs": 5000,
"enabled": true
}
],
"remark": ""
}
]
}
保存规则
- 已存在盘符则更新
- 新增盘符则插入
- 请求中已移除的盘符可按业务选择:
- 直接删除
- 逻辑删除
- 必须做完整参数校验
6.3 手动执行监控
接口
POST /disk-monitor/job/run
用途
页面“立即执行监控”按钮触发一次人工监控。
请求结构
{
"jobSource": "MANUAL"
}
返回结构
{
"code": "A0000",
"message": "任务已启动",
"data": {
"jobId": 1002,
"jobNo": "DM202604220001"
}
}
6.4 最近任务列表
接口
POST /disk-monitor/job/list
用途
查询最近执行记录,用于页面结果区展示。
请求结构
{
"pageNum": 1,
"pageSize": 100,
"sortField": "startedAt",
"sortOrder": "desc"
}
说明:该接口默认用于“最近任务”区域,后端应按 startedAt desc 返回最近记录,前端再截取前 10 条进行展示。
列表字段
jobIdjobNojobSourcestartedAtfinishedAtjobStatustargetCountwarningCountalarmCountmessage
6.5 任务详情
接口
GET /disk-monitor/job/{jobId}/detail
用途
查看一次任务的盘符结果和通知发送情况。
返回结构
{
"code": "A0000",
"message": "success",
"data": {
"job": {
"id": 1002,
"jobNo": "DM202604220001",
"jobSource": "MANUAL",
"jobStatus": "SUCCESS"
},
"results": [
{
"resultId": 2001,
"targetId": 11,
"driveLetter": "C:",
"totalBytes": 512000000000,
"usedBytes": 430000000000,
"freeBytes": 82000000000,
"usedPercent": 83.98,
"currentStatus": "WARNING",
"previousStatus": "NORMAL",
"statusChanged": true,
"shouldNotify": true,
"notifyReason": "STATUS_CHANGED",
"scanTime": "2026-04-22 15:10:00",
"message": ""
}
],
"notifyLogs": [
{
"id": 3001,
"resultId": 2001,
"driveLetter": "C:",
"notifyLevel": "WARNING",
"channelType": "HTTP",
"channelTarget": "http://127.0.0.1:8080/api/disk/notify",
"sendStatus": "SUCCESS",
"responseMessage": "200 OK",
"sentAt": "2026-04-22 15:10:02"
}
]
}
}
6.6 通知测试接口
接口
POST /disk-monitor/notify/test
用途
用于页面保存配置后,快速验证通知目标是否可用。
请求结构
{
"driveLetter": "C:"
}
该接口非必须,但建议保留,便于联调。
7. 执行流设计
7.1 应用启动监控
执行条件:
disk_monitor_policy.monitor_enabled = 1disk_monitor_policy.run_on_app_start = 1
执行流程:
- 应用启动完成
- 后端读取当前全局策略
- 创建一条
disk_monitor_job job_source = APP_START- 扫描所有启用监控的盘符
- 为每个盘符生成一条
disk_monitor_result - 若本次需通知,则生成
disk_monitor_notify_log - 更新
disk_monitor_target.last_status / last_scan_time / last_used_percent
7.2 每日定时监控
执行条件:
disk_monitor_policy.monitor_enabled = 1- 已配置
daily_run_time
执行流程:
- 后端启动时注册统一调度器
- 每天到
daily_run_time执行一次 - 创建一条
disk_monitor_job job_source = DAILY_SCHEDULE- 扫描所有启用监控的盘符
- 生成结果与通知日志
7.3 手动执行监控
执行流程:
- 页面点击“立即执行监控”
- 调用
POST /disk-monitor/job/run - 创建一条
disk_monitor_job job_source = MANUAL- 扫描所有启用盘符
- 返回任务编号
8. 状态判定与通知规则
8.1 盘符状态判定
设:
usedPercent为当前使用率warningUsagePercent为预警阈值alarmUsagePercent为告警阈值
判定规则:
usedPercent >= alarmUsagePercent->ALARMusedPercent >= warningUsagePercent 且 usedPercent < alarmUsagePercent->WARNING- 其他 ->
NORMAL
8.2 通知判定规则
本次需求固定为:
- 告警后需要每次都通知
- 其余状态按状态变化通知
执行逻辑:
if currentStatus == ALARM:
shouldNotify = true
notifyReason = ALARM_EVERY_TIME
else if currentStatus == WARNING and previousStatus != WARNING:
shouldNotify = true
notifyReason = STATUS_CHANGED
else if currentStatus == NORMAL and previousStatus in (WARNING, ALARM):
shouldNotify = true
notifyReason = STATUS_CHANGED
else:
shouldNotify = false
notifyReason = NO_NOTIFY
8.3 恢复通知
当盘符由:
WARNING -> NORMALALARM -> NORMAL
时,视为状态变化,发送恢复通知,通知级别建议记为 RECOVER。
9. 通知执行设计
9.1 路径通知
执行方式:
- 遍历
notify_path_list_json - 对每个启用路径生成一份通知文件
建议文件内容为 JSON 或文本,至少包含:
- 任务编号
- 盘符
- 当前状态
- 当前使用率
- 预警阈值
- 告警阈值
- 扫描时间
每次路径写入都要记录到 disk_monitor_notify_log。
9.2 HTTP 回调通知
执行方式:
- 遍历
notify_http_list_json - 按配置的
url / method / timeoutMs发请求
建议请求体:
{
"jobNo": "DM202604220001",
"driveLetter": "C:",
"currentStatus": "ALARM",
"usedPercent": 93.12,
"warningUsagePercent": 80,
"alarmUsagePercent": 90,
"scanTime": "2026-04-22 15:10:00"
}
HTTP 执行结果需要记录:
- 发送成功或失败
- 状态码
- 异常信息
并统一写入 disk_monitor_notify_log。
10. 前端改动范围建议
若后续进入本仓库实现,预计改动集中在:
frontend/src/views/systemMonitor/diskMonitor/index.vuefrontend/src/views/systemMonitor/diskMonitor/components/frontend/src/api/systemMonitor/- 必要的前端类型定义文件
页面入口继续复用:
frontend/src/views/systemMonitor/index.vue
11. 验证方案
11.1 配置验证
- 页面保存后重新进入
- 全局策略正确回显
- 盘符配置正确回显
- 通知路径与 HTTP 回调正确回显
11.2 启动验证
- 应用启动后自动生成一条
APP_START任务记录 - 启用盘符均生成结果记录
11.3 定时验证
- 到设定时间后自动生成一条
DAILY_SCHEDULE任务记录 - 所有启用盘符都参与扫描
11.4 通知规则验证
NORMAL -> WARNING时通知一次- 连续
WARNING -> WARNING不重复通知 - 连续
ALARM -> ALARM每次都通知 WARNING -> NORMAL时发恢复通知ALARM -> NORMAL时发恢复通知
11.5 通知通道验证
- 路径通知能成功写入本地目录
- 路径通知能成功写入网络共享目录
- HTTP 回调能成功返回状态码
- 失败情况能正确写入通知日志
12. 风险与注意事项
- 当前仓库中未提供业务后端源码,设计中的扫描、调度、通知逻辑需由后端配合实现
- 通知目标合并进
disk_monitor_target后,当前需求下表结构更简洁,但后续若要做通知目标复用统计,不如独立通知表灵活 - 路径通知涉及网络共享目录时,需要额外关注运行账户权限
- HTTP 回调需要处理超时、重复通知、目标不可达等异常情况
- 若后续允许删除盘符配置,建议保留结果表中的
drive_letter冗余字段,避免历史查询受影响
13. 结论
本设计采用“全局策略 + 盘符配置 + 任务批次 + 扫描结果 + 通知日志”的五表方案,在满足当前需求的前提下,保证了:
- 多盘符独立配置
- 启动监控
- 每日统一定时监控
- 路径与 HTTP 双通知通道
- 告警每次通知、其他状态变化通知
- 配置、结果、通知日志完整留痕
该设计可直接作为后续接口开发、数据库建表和前端页面实现的依据。