diff --git a/docker/mysql/Dockerfile b/docker/mysql/Dockerfile index c67b3ecd..a935353f 100644 --- a/docker/mysql/Dockerfile +++ b/docker/mysql/Dockerfile @@ -5,5 +5,6 @@ COPY sql/init-3-data.sql /tmp COPY docker/mysql/my.cnf /etc/mysql/conf.d/my.cnf RUN cat /tmp/init-1-schema-databases.sql >> /tmp/init.sql && \ cat /tmp/init-2-schema-tables.sql >> /tmp/init.sql && \ - cat /tmp/init-3-data.sql >> /tmp/init.sql && \ + cat /tmp/init-3-schema-quartz.sql >> /tmp/init.sql && \ + cat /tmp/init-4-data.sql >> /tmp/init.sql && \ cp /tmp/init.sql /docker-entrypoint-initdb.d diff --git a/docs/about/change-log.md b/docs/about/change-log.md index 8ee9677e..9ce8c8b5 100644 --- a/docs/about/change-log.md +++ b/docs/about/change-log.md @@ -12,6 +12,7 @@ * 🐞 修复 主机分组授权页面刷新不显示 loading * 🐞 修复 面包屑组件路径显示不全的问题 * 🐞 修复 数据字典历史提示无权限 +* 🐞 修复 批量执行较短命令日志不显示 * 🩰 修改 主机终端亮色模式配色 * 🩰 修改 执行模板 UI 修改 * 🌈 新增 计划任务模块 diff --git a/docs/about/roadmap.md b/docs/about/roadmap.md index a6759f35..07fcbefc 100644 --- a/docs/about/roadmap.md +++ b/docs/about/roadmap.md @@ -1,12 +1,15 @@ ## 功能排期 ⏳ -* 文件重复删除/重命名 可配置 -* 文件夹书签 * tracker 使用配置文件 +* 文件重复删除/重命名 可配置 +* 定时删除未引用的 tag +* 管理员也需要自行授权资产 +* 使用文件执行命令 +* 主机身份类型 +* 文件夹书签 +* 批量上传 * 优化文件传输列表进度显示 * 终端断开连接后回车重新连接 -* template 配置默认主机 -* 批量上传 * 站内消息 * 终端背景图片 * 资产授权 UI 改版 diff --git a/docs/operator/asset-audit.md b/docs/operator/asset-audit.md index 7a05e31d..2291ab43 100644 --- a/docs/operator/asset-audit.md +++ b/docs/operator/asset-audit.md @@ -7,7 +7,7 @@ * 删除: 删除连接记录 * 清理: 根据条件清理数据 -### SFTP 操作日志 +### 文件操作日志 查看用户 SFTP 操作日志, 是从用户操作日志中过滤查询。 diff --git a/docs/operator/exec.md b/docs/operator/exec.md index 80b98ac7..b79178e0 100644 --- a/docs/operator/exec.md +++ b/docs/operator/exec.md @@ -2,7 +2,59 @@ 批量执行 ssh 主机 shell 脚本。 -##### 日志面板中有几个内置的快捷键 +* 重置: 重置全部参数 +* 执行: 执行所输入的命令 +* 返回: 返回到执行命令页面 +* 从模板中选择: 从模板中选择需要执行的命令 +* 执行历史: 点击历史命令可以快速填入 + +### 批量执行日志 + +查看批量执行任务日志。 + +* 执行命令: 跳转到批量执行页面 +* 清空: 清空执行日志 +* 删除: 删除执行日志 +* 重新执行: 重新执行此命令 +* 命令: 查看执行时的命令 +* 参数: 查看执行时的参数 +* 中断: 中断命令执行 +* 日志: 查看执行日志, ctrl + 左键点击会用新页面打开 +* 下载: 下载执行日志 + +### 计划任务 + +维护计划任务, 定时执行命令。 + +* 新增: 新增计划任务 +* 详情: 查看计划任务详情 +* 修改: 修改计划任务 +* 状态: 修改计划任务状态 +* 手动触发: 手动触发计划任务 +* 删除: 删除计划任务 + +### 计划任务日志 + +查看计划任务执行日志 + +* 清空: 清空执行日志 +* 删除: 删除执行日志 +* 命令: 查看执行时的命令 +* 参数: 查看执行时的参数 +* 中断: 中断命令执行 +* 日志: 查看执行日志, ctrl + 左键点击会用新页面打开 +* 下载: 下载执行日志 + +### 执行模板 + +用来维护批量执行的命令模板, 支持动态参数, 使用 `@{{ xxx }}` 来替换命令参数。 + +* 新增: 新增执行模板 +* 执行: 打开命令执行框并且带入模板参数 +* 修改: 修改执行模板 +* 删除: 删除执行模板 + +> 日志面板快捷键 * 回车: `Enter` * 向上滚动一行: `↑` @@ -14,47 +66,15 @@ * 搜索: `ctrl` `F` * 清空: `ctrl` `L` -⭐ 内置参数同执行模板参数 +> 命令内置参数 -* 重置: 重置全部参数 -* 执行: 执行所输入的命令 -* 返回: 返回到执行命令页面 -* 从模板中选择: 从模板中选择需要执行的命令 -* 执行历史: 点击历史命令可以快速填入 - -### 批量执行日志 - -查看批量执行任务记录。 - -* 执行命令: 跳转到批量执行页面 -* 清空: 清空执行记录 -* 删除: 删除执行记录 -* 重新执行: 重新执行此命令 -* 命令: 查看执行时的命令 -* 参数: 查看执行时的参数 -* 日志: 查看执行日志, ctrl + 左键点击会用新页面打开 -* 下载: 下载执行日志 - -### 计划任务 - -### 计划任务日志 - -### 执行模板 - -用来维护批量执行的命令模板, 支持动态参数, 使用 `@{{ xxx }}` 来替换命令参数。 - -* 新增: 新增执行模板 -* 执行: 打开命令执行框并且带入模板参数 -* 修改: 修改执行模板 -* 删除: 删除执行模板 - -> 内置参数 +⚡ 使用 `@{{ xxx }}` 来替换命令参数 | 参数 | 描述 | |:----------------|:--------------------------| | source | 执行来源 (BATCH/JOB) | -| sourceId | 执行来源id (计划任务特有) | -| seq | 执行序列 (计划任务特有) | +| sourceId | 执行来源id (JOB特有) | +| seq | 执行序列 (JOB特有) | | execId | 执行记录id | | hostId | 执行主机id | | hostName | 执行主机名称 | @@ -70,4 +90,3 @@ | timestamp | 时间戳 | | date | 执行时间 yyyy-MM-dd | | datetime | 执行时间 yyyy-MM-dd HH:mm :ss | - diff --git a/docs/update/v1.0.0.md b/docs/update/v1.0.0.md index 3b4ba952..bc76c6db 100644 --- a/docs/update/v1.0.0.md +++ b/docs/update/v1.0.0.md @@ -1,9 +1,14 @@ ## v1.0.0 -> sql 脚本 +> sql 脚本 - DML ```sql +-- 字典配置项 +DELETE FROM `dict_key` WHERE id >= 32; INSERT INTO `dict_key` VALUES (32, 'terminalTabColor', 'COLOR', '[]', '终端标签页颜色', '2024-03-01 15:01:44', '2024-03-01 15:01:44', '1', '1', 0); + +-- 字典配置值 +DELETE FROM `dict_value` WHERE id >= 203; INSERT INTO `dict_value` VALUES (203, 32, 'terminalTabColor', 'rgb(var(--red-6))', '红色', '{}', 10, '2024-03-01 15:07:41', '2024-03-01 15:07:41', '1', '1', 0); INSERT INTO `dict_value` VALUES (204, 32, 'terminalTabColor', 'rgb(var(--orange-6))', '橙色', '{}', 20, '2024-03-01 15:07:55', '2024-03-01 15:07:55', '1', '1', 0); INSERT INTO `dict_value` VALUES (205, 32, 'terminalTabColor', 'rgb(var(--yellow-6))', '黄色', '{}', 30, '2024-03-01 15:08:13', '2024-03-01 15:08:13', '1', '1', 0); diff --git a/docs/update/v1.0.1.md b/docs/update/v1.0.1.md index f8f818cd..f16d863b 100644 --- a/docs/update/v1.0.1.md +++ b/docs/update/v1.0.1.md @@ -1,14 +1,17 @@ ## v1.0.1 -> sql 脚本 +> sql 脚本 - DDL ```sql --- 表结构 DROP TABLE IF EXISTS `command_template`; ALTER TABLE `operator_log` ADD INDEX `idx_type`(`type`); +``` +> sql 脚本 - DML + +```sql -- 菜单配置 -DELETE FROM `system_menu` WHERE id IN (148, 149); +DELETE FROM `system_menu` WHERE id >= 148; INSERT INTO `system_menu` VALUES (148, 152, '连接日志', NULL, 2, 10, 1, 1, 1, 0, 'IconLink', NULL, 'assetAuditConnectLog', '2023-12-26 22:53:07', '2024-03-05 23:31:23', '1', '1', 0); INSERT INTO `system_menu` VALUES (149, 148, '查询连接日志', 'asset:host-connect-log:management:query', 3, 10, 1, 1, 1, 0, NULL, NULL, NULL, '2023-12-26 22:53:08', '2024-03-04 13:40:42', '1', '1', 0); INSERT INTO `system_menu` VALUES (152, 0, '运维审计', NULL, 1, 410, 1, 1, 1, 0, 'IconSafe', NULL, 'assetAudit', '2024-01-04 17:54:56', '2024-03-05 23:31:10', '1', '1', 0); @@ -22,9 +25,11 @@ INSERT INTO `system_menu` VALUES (159, 158, '查询 SFTP 操作日志', 'asset:h INSERT INTO `system_menu` VALUES (160, 158, '删除 SFTP 操作日志', 'asset:host-sftp-log:management:delete', 3, 20, 1, 1, 1, 0, NULL, NULL, NULL, '2024-03-05 15:31:17', '2024-03-05 15:57:30', '1', '1', 0); -- 字典配置项 +DELETE FROM `dict_key` WHERE id >= 33; INSERT INTO `dict_key` VALUES (33, 'sftpOperatorType', 'STRING', '[]', 'SFTP 操作类型', '2024-03-05 16:49:54', '2024-03-05 16:49:54', '1', '1', 0); -- 字典配置值 +DELETE FROM `dict_value` WHERE id >= 214; INSERT INTO `dict_value` VALUES (214, 28, 'hostConnectStatus', 'FORCE_OFFLINE', '强制下线', '{\"color\": \"rgb(var(--red-6))\"}', 40, '2024-03-04 12:51:13', '2024-03-04 12:51:13', '1', '1', 0); INSERT INTO `dict_value` VALUES (215, 1, 'operatorLogModule', 'asset:host-connect-log', '主机连接日志', '{}', 2060, '2024-03-04 13:43:33', '2024-03-04 13:43:33', '1', '1', 0); INSERT INTO `dict_value` VALUES (216, 2, 'operatorLogType', 'host-connect-log:delete', '删除记录', '{}', 10, '2024-03-04 13:44:34', '2024-03-04 13:44:34', '1', '1', 0); diff --git a/docs/update/v1.0.2.md b/docs/update/v1.0.2.md index bfc79d2b..569c08ec 100644 --- a/docs/update/v1.0.2.md +++ b/docs/update/v1.0.2.md @@ -1,9 +1,8 @@ ## v1.0.2 -> sql 脚本 +> sql 脚本 - DDL ```sql --- 表结构 ALTER TABLE `host_connect_log` MODIFY COLUMN `start_time` datetime(3) NULL DEFAULT NULL COMMENT '开始时间' AFTER `token`, MODIFY COLUMN `end_time` datetime(3) NULL DEFAULT NULL COMMENT '结束时间' AFTER `start_time`; @@ -82,7 +81,11 @@ CREATE TABLE `exec_template` CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '执行模板' ROW_FORMAT = Dynamic; +``` +> sql 脚本 - DML + +```sql -- 菜单配置 TRUNCATE `system_menu`; INSERT INTO `system_menu` VALUES (1, 0, '工作台', NULL, 1, 10, 1, 1, 1, 0, 'IconComputer', NULL, 'workplace', '2023-07-28 10:51:50', '2023-09-11 15:27:52', '1', '1', 0); diff --git a/docs/update/v1.0.3.md b/docs/update/v1.0.3.md index 9257d8c7..f7022ac4 100644 --- a/docs/update/v1.0.3.md +++ b/docs/update/v1.0.3.md @@ -1,6 +1,6 @@ ## v1.0.3 -> sql 脚本 +> sql 脚本 - DML ```sql DELETE FROM preference WHERE type = 'TERMINAL'; diff --git a/docs/update/v1.0.4.md b/docs/update/v1.0.4.md index 71368197..2d43e913 100644 --- a/docs/update/v1.0.4.md +++ b/docs/update/v1.0.4.md @@ -1,6 +1,6 @@ ## v1.0.4 -> sql 脚本 +> sql 脚本 - DDL ```sql -- 修改字段 @@ -55,6 +55,65 @@ CREATE TABLE `exec_job_host` ROW_FORMAT = Dynamic; -- quartz 表结构 +DROP TABLE IF EXISTS `QRTZ_JOB_DETAILS`; +CREATE TABLE `QRTZ_JOB_DETAILS` +( + `SCHED_NAME` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `JOB_NAME` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `JOB_GROUP` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `DESCRIPTION` varchar(250) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `JOB_CLASS_NAME` varchar(250) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `IS_DURABLE` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `IS_NONCONCURRENT` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `IS_UPDATE_DATA` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `REQUESTS_RECOVERY` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `JOB_DATA` blob NULL, + PRIMARY KEY (`SCHED_NAME`, `JOB_NAME`, `JOB_GROUP`) USING BTREE, + INDEX `IDX_QRTZ_J_REQ_RECOVERY` (`SCHED_NAME`, `REQUESTS_RECOVERY`) USING BTREE, + INDEX `IDX_QRTZ_J_GRP` (`SCHED_NAME`, `JOB_GROUP`) USING BTREE +) ENGINE = InnoDB + CHARACTER SET = utf8mb4 + COLLATE = utf8mb4_general_ci + ROW_FORMAT = Dynamic; + +DROP TABLE IF EXISTS `QRTZ_TRIGGERS`; +CREATE TABLE `QRTZ_TRIGGERS` +( + `SCHED_NAME` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `TRIGGER_NAME` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `TRIGGER_GROUP` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `JOB_NAME` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `JOB_GROUP` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `DESCRIPTION` varchar(250) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `NEXT_FIRE_TIME` bigint(0) NULL DEFAULT NULL, + `PREV_FIRE_TIME` bigint(0) NULL DEFAULT NULL, + `PRIORITY` int(0) NULL DEFAULT NULL, + `TRIGGER_STATE` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `TRIGGER_TYPE` varchar(8) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `START_TIME` bigint(0) NOT NULL, + `END_TIME` bigint(0) NULL DEFAULT NULL, + `CALENDAR_NAME` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `MISFIRE_INSTR` smallint(0) NULL DEFAULT NULL, + `JOB_DATA` blob NULL, + PRIMARY KEY (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) USING BTREE, + INDEX `IDX_QRTZ_T_J` (`SCHED_NAME`, `JOB_NAME`, `JOB_GROUP`) USING BTREE, + INDEX `IDX_QRTZ_T_JG` (`SCHED_NAME`, `JOB_GROUP`) USING BTREE, + INDEX `IDX_QRTZ_T_C` (`SCHED_NAME`, `CALENDAR_NAME`) USING BTREE, + INDEX `IDX_QRTZ_T_G` (`SCHED_NAME`, `TRIGGER_GROUP`) USING BTREE, + INDEX `IDX_QRTZ_T_STATE` (`SCHED_NAME`, `TRIGGER_STATE`) USING BTREE, + INDEX `IDX_QRTZ_T_N_STATE` (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`, `TRIGGER_STATE`) USING BTREE, + INDEX `IDX_QRTZ_T_N_G_STATE` (`SCHED_NAME`, `TRIGGER_GROUP`, `TRIGGER_STATE`) USING BTREE, + INDEX `IDX_QRTZ_T_NEXT_FIRE_TIME` (`SCHED_NAME`, `NEXT_FIRE_TIME`) USING BTREE, + INDEX `IDX_QRTZ_T_NFT_ST` (`SCHED_NAME`, `TRIGGER_STATE`, `NEXT_FIRE_TIME`) USING BTREE, + INDEX `IDX_QRTZ_T_NFT_MISFIRE` (`SCHED_NAME`, `MISFIRE_INSTR`, `NEXT_FIRE_TIME`) USING BTREE, + INDEX `IDX_QRTZ_T_NFT_ST_MISFIRE` (`SCHED_NAME`, `MISFIRE_INSTR`, `NEXT_FIRE_TIME`, `TRIGGER_STATE`) USING BTREE, + INDEX `IDX_QRTZ_T_NFT_ST_MISFIRE_GRP` (`SCHED_NAME`, `MISFIRE_INSTR`, `NEXT_FIRE_TIME`, `TRIGGER_GROUP`, `TRIGGER_STATE`) USING BTREE, + CONSTRAINT `QRTZ_TRIGGERS_ibfk_1` FOREIGN KEY (`SCHED_NAME`, `JOB_NAME`, `JOB_GROUP`) REFERENCES `QRTZ_JOB_DETAILS` (`SCHED_NAME`, `JOB_NAME`, `JOB_GROUP`) ON DELETE RESTRICT ON UPDATE RESTRICT +) ENGINE = InnoDB + CHARACTER SET = utf8mb4 + COLLATE = utf8mb4_general_ci + ROW_FORMAT = Dynamic; + DROP TABLE IF EXISTS `QRTZ_BLOB_TRIGGERS`; CREATE TABLE `QRTZ_BLOB_TRIGGERS` ( @@ -70,13 +129,41 @@ CREATE TABLE `QRTZ_BLOB_TRIGGERS` COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; -DROP TABLE IF EXISTS `QRTZ_CALENDARS`; -CREATE TABLE `QRTZ_CALENDARS` +DROP TABLE IF EXISTS `QRTZ_SIMPLE_TRIGGERS`; +CREATE TABLE `QRTZ_SIMPLE_TRIGGERS` +( + `SCHED_NAME` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `TRIGGER_NAME` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `TRIGGER_GROUP` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `REPEAT_COUNT` bigint(0) NOT NULL, + `REPEAT_INTERVAL` bigint(0) NOT NULL, + `TIMES_TRIGGERED` bigint(0) NOT NULL, + PRIMARY KEY (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) USING BTREE, + CONSTRAINT `QRTZ_SIMPLE_TRIGGERS_ibfk_1` FOREIGN KEY (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) REFERENCES `QRTZ_TRIGGERS` (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) ON DELETE RESTRICT ON UPDATE RESTRICT +) ENGINE = InnoDB + CHARACTER SET = utf8mb4 + COLLATE = utf8mb4_general_ci + ROW_FORMAT = Dynamic; + +DROP TABLE IF EXISTS `QRTZ_SIMPROP_TRIGGERS`; +CREATE TABLE `QRTZ_SIMPROP_TRIGGERS` ( `SCHED_NAME` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, - `CALENDAR_NAME` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, - `CALENDAR` blob NOT NULL, - PRIMARY KEY (`SCHED_NAME`, `CALENDAR_NAME`) USING BTREE + `TRIGGER_NAME` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `TRIGGER_GROUP` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `STR_PROP_1` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `STR_PROP_2` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `STR_PROP_3` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `INT_PROP_1` int(0) NULL DEFAULT NULL, + `INT_PROP_2` int(0) NULL DEFAULT NULL, + `LONG_PROP_1` bigint(0) NULL DEFAULT NULL, + `LONG_PROP_2` bigint(0) NULL DEFAULT NULL, + `DEC_PROP_1` decimal(13, 4) NULL DEFAULT NULL, + `DEC_PROP_2` decimal(13, 4) NULL DEFAULT NULL, + `BOOL_PROP_1` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `BOOL_PROP_2` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + PRIMARY KEY (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) USING BTREE, + CONSTRAINT `QRTZ_SIMPROP_TRIGGERS_ibfk_1` FOREIGN KEY (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) REFERENCES `QRTZ_TRIGGERS` (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) ON DELETE RESTRICT ON UPDATE RESTRICT ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci @@ -125,22 +212,12 @@ CREATE TABLE `QRTZ_FIRED_TRIGGERS` COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; -DROP TABLE IF EXISTS `QRTZ_JOB_DETAILS`; -CREATE TABLE `QRTZ_JOB_DETAILS` +DROP TABLE IF EXISTS `QRTZ_PAUSED_TRIGGER_GRPS`; +CREATE TABLE `QRTZ_PAUSED_TRIGGER_GRPS` ( - `SCHED_NAME` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, - `JOB_NAME` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, - `JOB_GROUP` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, - `DESCRIPTION` varchar(250) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, - `JOB_CLASS_NAME` varchar(250) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, - `IS_DURABLE` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, - `IS_NONCONCURRENT` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, - `IS_UPDATE_DATA` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, - `REQUESTS_RECOVERY` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, - `JOB_DATA` blob NULL, - PRIMARY KEY (`SCHED_NAME`, `JOB_NAME`, `JOB_GROUP`) USING BTREE, - INDEX `IDX_QRTZ_J_REQ_RECOVERY` (`SCHED_NAME`, `REQUESTS_RECOVERY`) USING BTREE, - INDEX `IDX_QRTZ_J_GRP` (`SCHED_NAME`, `JOB_GROUP`) USING BTREE + `SCHED_NAME` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `TRIGGER_GROUP` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + PRIMARY KEY (`SCHED_NAME`, `TRIGGER_GROUP`) USING BTREE ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci @@ -157,12 +234,13 @@ CREATE TABLE `QRTZ_LOCKS` COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; -DROP TABLE IF EXISTS `QRTZ_PAUSED_TRIGGER_GRPS`; -CREATE TABLE `QRTZ_PAUSED_TRIGGER_GRPS` +DROP TABLE IF EXISTS `QRTZ_CALENDARS`; +CREATE TABLE `QRTZ_CALENDARS` ( `SCHED_NAME` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, - `TRIGGER_GROUP` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, - PRIMARY KEY (`SCHED_NAME`, `TRIGGER_GROUP`) USING BTREE + `CALENDAR_NAME` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `CALENDAR` blob NOT NULL, + PRIMARY KEY (`SCHED_NAME`, `CALENDAR_NAME`) USING BTREE ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci @@ -180,85 +258,11 @@ CREATE TABLE `QRTZ_SCHEDULER_STATE` CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; +``` -DROP TABLE IF EXISTS `QRTZ_SIMPLE_TRIGGERS`; -CREATE TABLE `QRTZ_SIMPLE_TRIGGERS` -( - `SCHED_NAME` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, - `TRIGGER_NAME` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, - `TRIGGER_GROUP` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, - `REPEAT_COUNT` bigint(0) NOT NULL, - `REPEAT_INTERVAL` bigint(0) NOT NULL, - `TIMES_TRIGGERED` bigint(0) NOT NULL, - PRIMARY KEY (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) USING BTREE, - CONSTRAINT `QRTZ_SIMPLE_TRIGGERS_ibfk_1` FOREIGN KEY (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) REFERENCES `QRTZ_TRIGGERS` (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) ON DELETE RESTRICT ON UPDATE RESTRICT -) ENGINE = InnoDB - CHARACTER SET = utf8mb4 - COLLATE = utf8mb4_general_ci - ROW_FORMAT = Dynamic; - -DROP TABLE IF EXISTS `QRTZ_SIMPROP_TRIGGERS`; -CREATE TABLE `QRTZ_SIMPROP_TRIGGERS` -( - `SCHED_NAME` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, - `TRIGGER_NAME` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, - `TRIGGER_GROUP` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, - `STR_PROP_1` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, - `STR_PROP_2` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, - `STR_PROP_3` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, - `INT_PROP_1` int(0) NULL DEFAULT NULL, - `INT_PROP_2` int(0) NULL DEFAULT NULL, - `LONG_PROP_1` bigint(0) NULL DEFAULT NULL, - `LONG_PROP_2` bigint(0) NULL DEFAULT NULL, - `DEC_PROP_1` decimal(13, 4) NULL DEFAULT NULL, - `DEC_PROP_2` decimal(13, 4) NULL DEFAULT NULL, - `BOOL_PROP_1` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, - `BOOL_PROP_2` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, - PRIMARY KEY (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) USING BTREE, - CONSTRAINT `QRTZ_SIMPROP_TRIGGERS_ibfk_1` FOREIGN KEY (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) REFERENCES `QRTZ_TRIGGERS` (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) ON DELETE RESTRICT ON UPDATE RESTRICT -) ENGINE = InnoDB - CHARACTER SET = utf8mb4 - COLLATE = utf8mb4_general_ci - ROW_FORMAT = Dynamic; - -DROP TABLE IF EXISTS `QRTZ_TRIGGERS`; -CREATE TABLE `QRTZ_TRIGGERS` -( - `SCHED_NAME` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, - `TRIGGER_NAME` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, - `TRIGGER_GROUP` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, - `JOB_NAME` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, - `JOB_GROUP` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, - `DESCRIPTION` varchar(250) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, - `NEXT_FIRE_TIME` bigint(0) NULL DEFAULT NULL, - `PREV_FIRE_TIME` bigint(0) NULL DEFAULT NULL, - `PRIORITY` int(0) NULL DEFAULT NULL, - `TRIGGER_STATE` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, - `TRIGGER_TYPE` varchar(8) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, - `START_TIME` bigint(0) NOT NULL, - `END_TIME` bigint(0) NULL DEFAULT NULL, - `CALENDAR_NAME` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, - `MISFIRE_INSTR` smallint(0) NULL DEFAULT NULL, - `JOB_DATA` blob NULL, - PRIMARY KEY (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) USING BTREE, - INDEX `IDX_QRTZ_T_J` (`SCHED_NAME`, `JOB_NAME`, `JOB_GROUP`) USING BTREE, - INDEX `IDX_QRTZ_T_JG` (`SCHED_NAME`, `JOB_GROUP`) USING BTREE, - INDEX `IDX_QRTZ_T_C` (`SCHED_NAME`, `CALENDAR_NAME`) USING BTREE, - INDEX `IDX_QRTZ_T_G` (`SCHED_NAME`, `TRIGGER_GROUP`) USING BTREE, - INDEX `IDX_QRTZ_T_STATE` (`SCHED_NAME`, `TRIGGER_STATE`) USING BTREE, - INDEX `IDX_QRTZ_T_N_STATE` (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`, `TRIGGER_STATE`) USING BTREE, - INDEX `IDX_QRTZ_T_N_G_STATE` (`SCHED_NAME`, `TRIGGER_GROUP`, `TRIGGER_STATE`) USING BTREE, - INDEX `IDX_QRTZ_T_NEXT_FIRE_TIME` (`SCHED_NAME`, `NEXT_FIRE_TIME`) USING BTREE, - INDEX `IDX_QRTZ_T_NFT_ST` (`SCHED_NAME`, `TRIGGER_STATE`, `NEXT_FIRE_TIME`) USING BTREE, - INDEX `IDX_QRTZ_T_NFT_MISFIRE` (`SCHED_NAME`, `MISFIRE_INSTR`, `NEXT_FIRE_TIME`) USING BTREE, - INDEX `IDX_QRTZ_T_NFT_ST_MISFIRE` (`SCHED_NAME`, `MISFIRE_INSTR`, `NEXT_FIRE_TIME`, `TRIGGER_STATE`) USING BTREE, - INDEX `IDX_QRTZ_T_NFT_ST_MISFIRE_GRP` (`SCHED_NAME`, `MISFIRE_INSTR`, `NEXT_FIRE_TIME`, `TRIGGER_GROUP`, `TRIGGER_STATE`) USING BTREE, - CONSTRAINT `QRTZ_TRIGGERS_ibfk_1` FOREIGN KEY (`SCHED_NAME`, `JOB_NAME`, `JOB_GROUP`) REFERENCES `QRTZ_JOB_DETAILS` (`SCHED_NAME`, `JOB_NAME`, `JOB_GROUP`) ON DELETE RESTRICT ON UPDATE RESTRICT -) ENGINE = InnoDB - CHARACTER SET = utf8mb4 - COLLATE = utf8mb4_general_ci - ROW_FORMAT = Dynamic; +> sql 脚本 - DML +```sql -- 操作日志修改 UPDATE operator_log SET module = 'asset:exec-command', type = 'exec-command:exec' WHERE type = 'exec:exec-command'; UPDATE operator_log SET module = 'asset:exec-command-log', type = 'exec-command-log:interrupt' WHERE type = 'exec:interrupt-exec'; @@ -384,9 +388,8 @@ DELETE FROM `dict_key` WHERE `id` >= 36; INSERT INTO `dict_key` VALUES (36, 'execJobStatus', 'INTEGER', '[{\"name\": \"color\", \"type\": \"COLOR\"}]', '计划任务状态', '2024-04-10 16:18:07', '2024-04-11 14:25:05', '1', '1', 0); -- 字典配置值 -DELETE FROM `dict_value` WHERE `id` = 222; +DELETE FROM `dict_value` WHERE `id` = 222 OR >= 233; INSERT INTO `dict_value` VALUES (222, 2, 'operatorLogType', 'host-terminal:delete-sftp-log', '删除文件操作日志', '{}', 15, '2024-03-05 15:28:00', '2024-04-12 13:47:36', '1', '1', 0); -DELETE FROM `dict_value` WHERE `id` >= 233; INSERT INTO `dict_value` VALUES (233, 2, 'operatorLogType', 'exec-template:create', '创建执行模板', '{}', 10, '2024-03-07 18:32:41', '2024-04-12 13:48:54', '1', '1', 0); INSERT INTO `dict_value` VALUES (234, 2, 'operatorLogType', 'exec-template:update', '更新执行模板', '{}', 20, '2024-03-07 18:32:41', '2024-04-12 13:48:56', '1', '1', 0); INSERT INTO `dict_value` VALUES (235, 2, 'operatorLogType', 'exec-template:delete', '删除执行模板', '{}', 30, '2024-03-07 18:32:41', '2024-04-12 13:49:01', '1', '1', 0); diff --git a/docs/update/v1.0.5.md b/docs/update/v1.0.5.md new file mode 100644 index 00000000..12cda601 --- /dev/null +++ b/docs/update/v1.0.5.md @@ -0,0 +1,11 @@ +## v1.0.5 + +> sql 脚本 - DDL + +```sql +``` + +> sql 脚本 - DML + +```sql +``` diff --git a/orion-ops-framework/orion-ops-spring-boot-starter-job/src/main/java/com/orion/ops/framework/job/core/utils/QuartzUtils.java b/orion-ops-framework/orion-ops-spring-boot-starter-job/src/main/java/com/orion/ops/framework/job/core/utils/QuartzUtils.java index 08716175..6260f2fa 100644 --- a/orion-ops-framework/orion-ops-spring-boot-starter-job/src/main/java/com/orion/ops/framework/job/core/utils/QuartzUtils.java +++ b/orion-ops-framework/orion-ops-spring-boot-starter-job/src/main/java/com/orion/ops/framework/job/core/utils/QuartzUtils.java @@ -70,7 +70,10 @@ public class QuartzUtils { .withIdentity(getTriggerKey(type, key)) .withSchedule(CronScheduleBuilder .cronSchedule(cron) - .withMisfireHandlingInstructionIgnoreMisfires()) + // 补偿一次 + // .withMisfireHandlingInstructionFireAndProceed() + // 不补偿 + .withMisfireHandlingInstructionDoNothing()) .build(); QuartzUtils.addJob(jobDetail, trigger); } diff --git a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/define/operator/ExecJobOperatorType.java b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/define/operator/ExecJobOperatorType.java index 4bca3c74..676595d1 100644 --- a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/define/operator/ExecJobOperatorType.java +++ b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/define/operator/ExecJobOperatorType.java @@ -31,7 +31,7 @@ public class ExecJobOperatorType extends InitializingOperatorTypes { return new OperatorType[]{ new OperatorType(L, CREATE, "创建计划任务 ${name}"), new OperatorType(M, UPDATE, "更新计划任务 ${before}"), - new OperatorType(M, UPDATE_STATUS, "${statusName}计划任务 ${name}"), + new OperatorType(M, UPDATE_STATUS, "${statusName} 计划任务 ${name}"), new OperatorType(M, TRIGGER, "手动触发计划任务 ${name}"), new OperatorType(H, DELETE, "删除计划任务 ${name}"), }; diff --git a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/handler/host/exec/command/handler/ExecCommandHandler.java b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/handler/host/exec/command/handler/ExecCommandHandler.java index e46a8479..137fa8dd 100644 --- a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/handler/host/exec/command/handler/ExecCommandHandler.java +++ b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/handler/host/exec/command/handler/ExecCommandHandler.java @@ -179,9 +179,9 @@ public class ExecCommandHandler implements IExecCommandHandler { return; } this.closed = true; + Streams.close(logOutputStream); Streams.close(executor); Streams.close(sessionStore); - Streams.close(logOutputStream); execLogManager.asyncCloseTailFile(execHostCommand.getLogPath()); } diff --git a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/handler/host/exec/command/handler/ExecTaskHandler.java b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/handler/host/exec/command/handler/ExecTaskHandler.java index de98bda7..02150b59 100644 --- a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/handler/host/exec/command/handler/ExecTaskHandler.java +++ b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/handler/host/exec/command/handler/ExecTaskHandler.java @@ -19,7 +19,6 @@ import lombok.extern.slf4j.Slf4j; import java.util.Date; import java.util.List; -import java.util.stream.Collectors; /** * 命令执行任务 @@ -40,7 +39,7 @@ public class ExecTaskHandler implements IExecTaskHandler { private TimeoutChecker timeoutChecker; @Getter - private List handlers; + private final List handlers; public ExecTaskHandler(ExecCommandDTO execCommand) { this.execCommand = execCommand; @@ -93,11 +92,13 @@ public class ExecTaskHandler implements IExecTaskHandler { } if (hosts.size() == 1) { // 单个主机直接执行 - new ExecCommandHandler(hosts.get(0), timeoutChecker).run(); + ExecCommandHandler handler = new ExecCommandHandler(hosts.get(0), timeoutChecker); + handlers.add(handler); + handler.run(); } else { - this.handlers = hosts.stream() + hosts.stream() .map(s -> new ExecCommandHandler(s, timeoutChecker)) - .collect(Collectors.toList()); + .forEach(handlers::add); // 多个主机异步阻塞执行 Threads.blockRun(handlers, AssetThreadPools.EXEC_HOST); } diff --git a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/handler/host/exec/log/constant/LogConst.java b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/handler/host/exec/log/constant/LogConst.java index a3118ab4..14838dbe 100644 --- a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/handler/host/exec/log/constant/LogConst.java +++ b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/handler/host/exec/log/constant/LogConst.java @@ -19,6 +19,6 @@ public interface LogConst { int TRACKER_DELAY_MS = 200; - int TRACKER_WAIT_TIMES = 10; + int TRACKER_WAIT_TIMES = 100; } diff --git a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/handler/host/exec/log/tracker/ExecLogTracker.java b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/handler/host/exec/log/tracker/ExecLogTracker.java index 934ed8ec..db74d8b8 100644 --- a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/handler/host/exec/log/tracker/ExecLogTracker.java +++ b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/handler/host/exec/log/tracker/ExecLogTracker.java @@ -55,10 +55,11 @@ public class ExecLogTracker implements IExecLogTracker { tracker.notFoundMode(FileNotFoundMode.WAIT_COUNT, LogConst.TRACKER_WAIT_TIMES); // 开始监听文件 tracker.run(); - // 监听完成回调 - this.close = true; } catch (Exception e) { log.error("exec log tracker error path: {}", absolutePath, e); + } finally { + // 释放资源 + this.close(); } } diff --git a/orion-ops-ui/src/components/view/chart/index.vue b/orion-ops-ui/src/components/view/chart/index.vue index e8b56628..0d11c724 100644 --- a/orion-ops-ui/src/components/view/chart/index.vue +++ b/orion-ops-ui/src/components/view/chart/index.vue @@ -6,13 +6,13 @@