Skip to content

Commit 74ba56e

Browse files
committed
Add operation log
1 parent db84c29 commit 74ba56e

12 files changed

Lines changed: 197 additions & 13 deletions

File tree

chat2db-server/chat2db-server-domain/chat2db-server-domain-api/src/main/java/ai/chat2db/server/domain/api/model/OperationLog.java

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,4 +54,31 @@ public class OperationLog {
5454
* ddl内容
5555
*/
5656
private String ddl;
57+
58+
59+
60+
/**
61+
* 状态
62+
*/
63+
private String status;
64+
65+
/**
66+
* 操作行数
67+
*/
68+
private Long operationRows;
69+
70+
/**
71+
* 使用时长
72+
*/
73+
private Long useTime;
74+
75+
/**
76+
* 扩展信息
77+
*/
78+
private String extendInfo;
79+
80+
/**
81+
* schema名称
82+
*/
83+
private String schemaName;
5784
}

chat2db-server/chat2db-server-domain/chat2db-server-domain-api/src/main/java/ai/chat2db/server/domain/api/param/operation/OperationLogCreateParam.java

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,4 +34,30 @@ public class OperationLogCreateParam {
3434
* ddl内容
3535
*/
3636
private String ddl;
37+
38+
39+
/**
40+
* 状态
41+
*/
42+
private String status;
43+
44+
/**
45+
* 操作行数
46+
*/
47+
private Long operationRows;
48+
49+
/**
50+
* 使用时长
51+
*/
52+
private Long useTime;
53+
54+
/**
55+
* 扩展信息
56+
*/
57+
private String extendInfo;
58+
59+
/**
60+
* schema名称
61+
*/
62+
private String schemaName;
3763
}

chat2db-server/chat2db-server-domain/chat2db-server-domain-api/src/main/java/ai/chat2db/server/domain/api/param/operation/OperationLogPageQueryParam.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,4 +21,19 @@ public class OperationLogPageQueryParam extends PageQueryParam {
2121
* 搜索关键词
2222
*/
2323
private String searchKey;
24+
25+
/**
26+
* 数据源id
27+
*/
28+
private Long dataSourceId;
29+
30+
/**
31+
* 数据库名称
32+
*/
33+
private String databaseName;
34+
35+
/**
36+
* schema名称
37+
*/
38+
private String schemaName;
2439
}

chat2db-server/chat2db-server-domain/chat2db-server-domain-core/src/main/java/ai/chat2db/server/domain/core/impl/DlTemplateServiceImpl.java

Lines changed: 45 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,10 @@
88
import java.util.Optional;
99

1010
import ai.chat2db.server.domain.api.param.*;
11+
import ai.chat2db.server.domain.api.param.operation.OperationLogCreateParam;
12+
import ai.chat2db.server.domain.api.service.OperationLogService;
1113
import ai.chat2db.spi.MetaData;
14+
import ai.chat2db.spi.sql.ConnectInfo;
1215
import com.alibaba.druid.DbType;
1316
import com.alibaba.druid.sql.PagerUtils;
1417
import com.alibaba.druid.sql.SQLUtils;
@@ -35,6 +38,7 @@
3538
import lombok.extern.slf4j.Slf4j;
3639
import org.apache.commons.collections4.CollectionUtils;
3740
import org.apache.commons.lang3.StringUtils;
41+
import org.springframework.beans.factory.annotation.Autowired;
3842
import org.springframework.stereotype.Service;
3943

4044
/**
@@ -46,15 +50,21 @@
4650
@Service
4751
public class DlTemplateServiceImpl implements DlTemplateService {
4852

53+
@Autowired
54+
private OperationLogService operationLogService;
55+
4956
@Override
5057
public ListResult<ExecuteResult> execute(DlExecuteParam param) {
5158
if (StringUtils.isBlank(param.getSql())) {
5259
return ListResult.empty();
5360
}
5461
// 解析sql
55-
RemoveSpecialGO(param);
56-
DbType dbType =
57-
JdbcUtils.parse2DruidDbType(Chat2DBContext.getConnectInfo().getDbType());
62+
String type = Chat2DBContext.getConnectInfo().getDbType();
63+
DbType dbType = JdbcUtils.parse2DruidDbType(type);
64+
if ("SQLSERVER".equalsIgnoreCase(type)) {
65+
RemoveSpecialGO(param);
66+
}
67+
5868
List<String> sqlList = SqlUtils.parse(param.getSql(), dbType);
5969

6070

@@ -73,6 +83,7 @@ public ListResult<ExecuteResult> execute(DlExecuteParam param) {
7383
listResult.errorCode(executeResult.getDescription());
7484
listResult.setErrorMessage(executeResult.getMessage());
7585
}
86+
addOperationLog(executeResult);
7687
}
7788
return listResult;
7889
}
@@ -90,11 +101,12 @@ public DataResult<ExecuteResult> executeUpdate(DlExecuteParam param) {
90101
connection.setAutoCommit(false);
91102
for (String originalSql : sqlList) {
92103
ExecuteResult executeResult = SQLExecutor.getInstance().executeUpdate(originalSql, connection, 1);
93-
dataResult.setData(executeResult);
104+
dataResult.setData(executeResult);
105+
addOperationLog(executeResult);
94106
}
95107
connection.commit();
96-
}catch (Exception e){
97-
log.error("executeUpdate error",e);
108+
} catch (Exception e) {
109+
log.error("executeUpdate error", e);
98110
dataResult.setSuccess(false);
99111
dataResult.setErrorCode("connection error");
100112
dataResult.setErrorMessage(e.getMessage());
@@ -107,7 +119,7 @@ private void RemoveSpecialGO(DlExecuteParam param) {
107119
if (StringUtils.isBlank(sql)) {
108120
return;
109121
}
110-
sql = sql.replaceAll("(?i)\\s*go\\s*", ";");
122+
sql = sql.replaceAll("(?mi)^[ \\t]*go[ \\t]*$", ";");
111123
param.setSql(sql);
112124
}
113125

@@ -276,6 +288,9 @@ private String buildWhere(List<Header> headerList, List<String> row, MetaData me
276288
}
277289

278290
private String getInsertSql(UpdateSelectResultParam param, List<String> row, MetaData metaSchema) {
291+
if (CollectionUtils.isEmpty(row)) {
292+
return "";
293+
}
279294
StringBuilder script = new StringBuilder();
280295
script.append("INSERT INTO ").append(metaSchema.getMetaDataName(param.getDatabaseName(), param.getSchemaName(), param.getTableName()))
281296
.append(" (");
@@ -301,6 +316,9 @@ private String getInsertSql(UpdateSelectResultParam param, List<String> row, Met
301316

302317
private String getUpdateSql(UpdateSelectResultParam param, List<String> row, List<String> odlRow, MetaData metaSchema) {
303318
StringBuilder script = new StringBuilder();
319+
if (CollectionUtils.isEmpty(row) || CollectionUtils.isEmpty(odlRow)) {
320+
return "";
321+
}
304322
script.append("UPDATE ").append(metaSchema.getMetaDataName(param.getDatabaseName(), param.getSchemaName(), param.getTableName()))
305323
.append(" set ");
306324
for (int i = 1; i < row.size(); i++) {
@@ -336,4 +354,24 @@ private ExecuteResult execute(String sql, Integer offset, Integer count) {
336354
return executeResult;
337355
}
338356

357+
private void addOperationLog(ExecuteResult executeResult) {
358+
if (executeResult == null) {
359+
return;
360+
}
361+
try {
362+
ConnectInfo connectInfo = Chat2DBContext.getConnectInfo();
363+
OperationLogCreateParam createParam = new OperationLogCreateParam();
364+
createParam.setDdl(executeResult.getSql());
365+
createParam.setStatus(executeResult.getSuccess() ? "success" : "fail");
366+
createParam.setDatabaseName(connectInfo.getDatabaseName());
367+
createParam.setDataSourceId(connectInfo.getDataSourceId());
368+
createParam.setSchemaName(connectInfo.getSchemaName());
369+
createParam.setUseTime(executeResult.getDuration());
370+
createParam.setType(connectInfo.getDbType());
371+
createParam.setOperationRows(executeResult.getUpdateCount() != null ? Long.valueOf(executeResult.getUpdateCount()):null);
372+
operationLogService.create(createParam);
373+
} catch (Exception e) {
374+
log.error("addOperationLog error:", e);
375+
}
376+
}
339377
}

chat2db-server/chat2db-server-domain/chat2db-server-domain-core/src/main/java/ai/chat2db/server/domain/core/impl/OperationLogServiceImpl.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,10 @@ public DataResult<Long> create(OperationLogCreateParam param) {
5858
public PageResult<OperationLog> queryPage(OperationLogPageQueryParam param) {
5959
EasyLambdaQueryWrapper<OperationLogDO> queryWrapper = new EasyLambdaQueryWrapper<>();
6060
queryWrapper.likeWhenPresent(OperationLogDO::getDdl, EasySqlUtils.buildLikeRightFuzzy(param.getSearchKey()))
61-
.eqWhenPresent(OperationLogDO::getUserId, param.getUserId())
61+
.eqWhenPresent(OperationLogDO::getUserId, param.getUserId())
62+
.eqWhenPresent(OperationLogDO::getDataSourceId, param.getDataSourceId())
63+
.eqWhenPresent(OperationLogDO::getDatabaseName, param.getDatabaseName())
64+
.eqWhenPresent(OperationLogDO::getSchemaName, param.getSchemaName())
6265
;
6366
Integer start = param.getPageNo();
6467
Integer offset = param.getPageSize();

chat2db-server/chat2db-server-domain/chat2db-server-domain-repository/src/main/java/ai/chat2db/server/domain/repository/entity/OperationLogDO.java

Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import com.baomidou.mybatisplus.annotation.TableName;
66
import java.io.Serializable;
77
import java.time.LocalDateTime;
8+
import java.util.Date;
89
import lombok.Getter;
910
import lombok.Setter;
1011

@@ -13,8 +14,8 @@
1314
* 我的执行记录表
1415
* </p>
1516
*
16-
* @author ali-dbhub
17-
* @since 2022-12-28
17+
* @author chat2db
18+
* @since 2023-10-14
1819
*/
1920
@Getter
2021
@Setter
@@ -63,4 +64,29 @@ public class OperationLogDO implements Serializable {
6364
* 用户id
6465
*/
6566
private Long userId;
67+
68+
/**
69+
* 状态
70+
*/
71+
private String status;
72+
73+
/**
74+
* 操作行数
75+
*/
76+
private Long operationRows;
77+
78+
/**
79+
* 使用时长
80+
*/
81+
private Long useTime;
82+
83+
/**
84+
* 扩展信息
85+
*/
86+
private String extendInfo;
87+
88+
/**
89+
* schema名称
90+
*/
91+
private String schemaName;
6692
}

chat2db-server/chat2db-server-domain/chat2db-server-domain-repository/src/main/java/ai/chat2db/server/domain/repository/mapper/OperationLogMapper.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@
88
* 我的执行记录表 Mapper 接口
99
* </p>
1010
*
11-
* @author ali-dbhub
12-
* @since 2022-12-28
11+
* @author chat2db
12+
* @since 2023-10-14
1313
*/
1414
public interface OperationLogMapper extends BaseMapper<OperationLogDO> {
1515

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
ALTER TABLE `operation_log`
2+
ADD COLUMN `schema_name` varchar(256) COMMENT 'schema名称';
3+
create INDEX idx_op_data_source_id on operation_log(data_source_id) ;

chat2db-server/chat2db-server-start/src/test/java/ai/chat2db/server/start/test/mybatis/MybatisGeneratorTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ public void coreGenerator() {
3535
//doGenerator(Lists.newArrayList("operation_saved"));
3636
//doGenerator(Lists.newArrayList("environment","data_source","team","team_dbhub_user","data_source_access",
3737
// "dbhub_user"));
38-
doGenerator(Lists.newArrayList("table_cache"));
38+
doGenerator(Lists.newArrayList("operation_log"));
3939
}
4040

4141
private void doGenerator(List<String> tableList) {

chat2db-server/chat2db-server-web/chat2db-server-web-api/src/main/java/ai/chat2db/server/web/api/controller/operation/log/OperationLogController.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,4 +66,5 @@ public DataResult<Long> create(@RequestBody OperationLogCreateRequest request) {
6666
return operationLogService.create(param);
6767
}
6868

69+
6970
}

0 commit comments

Comments
 (0)