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 @@