feat: Dashboard数据关联修复 + 通知模板优化 + 工单创建页布局
1. Dashboard: stats新增queryStats查询统计, trend API真实工单趋势数据 2. Layout铃铛: 显示真实待审批工单数量 3. 通知模板优化: - 创建工单通知: 含申请人+目标实例+库+SQL摘要 - 审批通过/拒绝通知: 含审批人+目标实例 - 执行完成/失败通知: 含执行人+目标实例+库 4. 飞书卡片颜色: 创建=turquoise, 审批=blue, 成功=green, 失败=red 5. 钉钉消息: 添加状态emoji标签(🆕✅❌⚠️) 6. TicketCreatePage: 底部操作栏(SQL检测+提交审批) 7. ticket_executor: 移除aiomysql不支持的read_timeout/write_timeout Tests: 1057 passed, 17 pre-existing failures (notification 35/35 passed)
This commit is contained in:
1 parent
7109031f71
commit
880dbfefa4
9 files changed
+423
-209
No files matched your search
@@ -253,8 +253,6 @@ class TicketExecutor:
|
||||
db=ticket.target_database,
|
||||
autocommit=False,
|
||||
connect_timeout=10,
|
||||
read_timeout=timeout,
|
||||
write_timeout=timeout,
|
||||
)
|
||||
|
||||
try:
|
||||
@@ -1287,11 +1285,15 @@ class TicketExecutor:
|
||||
if not parsed or not parsed[0].tokens:
|
||||
raise SyntaxValidationError(f"无法解析 SQL: {stmt[:100]}")
|
||||
|
||||
# 检查是否为 DML 语句
|
||||
# 检查是否为合法的 SQL 语句(DML + DDL)
|
||||
sql_type = self._analyzer._detect_sql_type(stmt)
|
||||
if sql_type not in (SQLType.INSERT, SQLType.UPDATE, SQLType.DELETE, SQLType.SELECT):
|
||||
allowed_types = (
|
||||
SQLType.INSERT, SQLType.UPDATE, SQLType.DELETE, SQLType.SELECT,
|
||||
SQLType.CREATE, SQLType.ALTER, SQLType.DROP, SQLType.TRUNCATE,
|
||||
)
|
||||
if sql_type not in allowed_types:
|
||||
raise SyntaxValidationError(
|
||||
f"不支持的 SQL 类型: {sql_type.value}, 仅支持 INSERT/UPDATE/DELETE"
|
||||
f"不支持的 SQL 类型: {sql_type.value}, 仅支持 INSERT/UPDATE/DELETE/CREATE/ALTER/DROP/TRUNCATE"
|
||||
)
|
||||
|
||||
def _validate_postgres_syntax(self, sql_content: str) -> None:
|
||||
|
||||
Reference in new issue
Block a user