Skip to content

Commit 1d9a28b

Browse files
committed
Add localized error messages for SQL Workbench audit functionality in English and Chinese, enhancing user feedback for various error scenarios.
1 parent 68bf5dc commit 1d9a28b

4 files changed

Lines changed: 42 additions & 9 deletions

File tree

internal/pkg/locale/active.en.toml

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -208,6 +208,15 @@ ProjectDesc = "Project description"
208208
ProjectName = "Project name"
209209
ProjectNotAvailable = "Unavailable"
210210
ProjectStatus = "Project status"
211+
SqlWorkbenchAuditCallSQLEErr = "The audit service is busy or unavailable. Please try again later."
212+
SqlWorkbenchAuditDBServiceMappingNotFoundErr = "Current data source was not found. Please confirm it exists, reselect it, and try again."
213+
SqlWorkbenchAuditGetDBServiceErr = "Current data source configuration was not found. Please confirm the data source exists and try again."
214+
SqlWorkbenchAuditGetDBServiceMappingErr = "We couldn't get the current data source information. Please reselect the data source and try again."
215+
SqlWorkbenchAuditGetDMSUserErr = "Your login session may have expired. Please sign in again and retry."
216+
SqlWorkbenchAuditMissingSQLOrDatasourceErr = "SQL or data source was not detected. Please select a data source and enter SQL, then try again."
217+
SqlWorkbenchAuditNotEnabledErr = "SQL audit is not enabled for this data source. Please enable SQL audit before running."
218+
SqlWorkbenchAuditParseReqErr = "We couldn't parse the request content. Please try again later."
219+
SqlWorkbenchAuditReadReqBodyErr = "We couldn't get the request content, possibly due to network instability. Please try again later."
211220
StatDisable = "Disabled"
212221
StatOK = "Normal"
213222
StatUnknown = "Unknown"

internal/pkg/locale/active.zh.toml

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -208,6 +208,15 @@ ProjectDesc = "项目描述"
208208
ProjectName = "项目名称"
209209
ProjectNotAvailable = "不可用"
210210
ProjectStatus = "项目状态"
211+
SqlWorkbenchAuditCallSQLEErr = "审核服务当前繁忙或不可用,请稍后重试。"
212+
SqlWorkbenchAuditDBServiceMappingNotFoundErr = "未找到当前数据源,请确认数据源存在并重新选择后重试。"
213+
SqlWorkbenchAuditGetDBServiceErr = "未找到当前数据源配置,请确认数据源存在后重试。"
214+
SqlWorkbenchAuditGetDBServiceMappingErr = "当前数据源信息获取失败,请重新选择数据源后重试。"
215+
SqlWorkbenchAuditGetDMSUserErr = "当前登录状态可能已过期,请重新登录后再试。"
216+
SqlWorkbenchAuditMissingSQLOrDatasourceErr = "未检测到 SQL 或数据源,请确认已选择数据源并输入 SQL 后重试。"
217+
SqlWorkbenchAuditNotEnabledErr = "该数据源尚未开启 SQL 审核,请先在数据源配置中开启“SQL 审核”后再执行。"
218+
SqlWorkbenchAuditParseReqErr = "请求内容解析失败,请稍后重试。"
219+
SqlWorkbenchAuditReadReqBodyErr = "请求内容获取失败,可能网络不稳定,请稍后重试。"
211220
StatDisable = "被禁用"
212221
StatOK = "正常"
213222
StatUnknown = "未知"

internal/pkg/locale/message_zh.go

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -182,6 +182,19 @@ var (
182182
CbOpResultRowCount = &i18n.Message{ID: "CbOpResultRowCount", Other: "结果集返回行数"}
183183
)
184184

185+
// SQL Workbench
186+
var (
187+
SqlWorkbenchAuditReadReqBodyErr = &i18n.Message{ID: "SqlWorkbenchAuditReadReqBodyErr", Other: "请求内容获取失败,可能网络不稳定,请稍后重试。"}
188+
SqlWorkbenchAuditParseReqErr = &i18n.Message{ID: "SqlWorkbenchAuditParseReqErr", Other: "请求内容解析失败,请稍后重试。"}
189+
SqlWorkbenchAuditMissingSQLOrDatasourceErr = &i18n.Message{ID: "SqlWorkbenchAuditMissingSQLOrDatasourceErr", Other: "未检测到 SQL 或数据源,请确认已选择数据源并输入 SQL 后重试。"}
190+
SqlWorkbenchAuditGetDMSUserErr = &i18n.Message{ID: "SqlWorkbenchAuditGetDMSUserErr", Other: "当前登录状态可能已过期,请重新登录后再试。"}
191+
SqlWorkbenchAuditGetDBServiceMappingErr = &i18n.Message{ID: "SqlWorkbenchAuditGetDBServiceMappingErr", Other: "当前数据源信息获取失败,请重新选择数据源后重试。"}
192+
SqlWorkbenchAuditDBServiceMappingNotFoundErr = &i18n.Message{ID: "SqlWorkbenchAuditDBServiceMappingNotFoundErr", Other: "未找到当前数据源,请确认数据源存在并重新选择后重试。"}
193+
SqlWorkbenchAuditGetDBServiceErr = &i18n.Message{ID: "SqlWorkbenchAuditGetDBServiceErr", Other: "未找到当前数据源配置,请确认数据源存在后重试。"}
194+
SqlWorkbenchAuditNotEnabledErr = &i18n.Message{ID: "SqlWorkbenchAuditNotEnabledErr", Other: "该数据源尚未开启 SQL 审核,请先在数据源配置中开启“SQL 审核”后再执行。"}
195+
SqlWorkbenchAuditCallSQLEErr = &i18n.Message{ID: "SqlWorkbenchAuditCallSQLEErr", Other: "审核服务当前繁忙或不可用,请稍后重试。"}
196+
)
197+
185198
// DB Service Sync Task
186199
var (
187200
DBServiceSyncVersion = &i18n.Message{ID: "DBServiceSyncVersion", Other: "版本(支持DMP5.23.04.0及以上版本)"}

internal/sql_workbench/service/sql_workbench_service.go

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import (
66
"context"
77
"encoding/base64"
88
"encoding/json"
9+
"errors"
910
"fmt"
1011
"io"
1112
"net/http"
@@ -22,6 +23,7 @@ import (
2223
"github.com/actiontech/dms/internal/dms/biz"
2324
pkgConst "github.com/actiontech/dms/internal/dms/pkg/constant"
2425
"github.com/actiontech/dms/internal/dms/storage"
26+
"github.com/actiontech/dms/internal/pkg/locale"
2527
dbmodel "github.com/actiontech/dms/internal/dms/storage/model"
2628
"github.com/actiontech/dms/internal/sql_workbench/client"
2729
config "github.com/actiontech/dms/internal/sql_workbench/config"
@@ -1020,7 +1022,7 @@ func (sqlWorkbenchService *SqlWorkbenchService) AuditMiddleware() echo.Middlewar
10201022
bodyBytes, err := io.ReadAll(c.Request().Body)
10211023
if err != nil {
10221024
sqlWorkbenchService.log.Errorf("failed to read request body: %v", err)
1023-
return fmt.Errorf("failed to read request body: %w", err)
1025+
return errors.New(locale.Bundle.LocalizeMsgByCtx(c.Request().Context(), locale.SqlWorkbenchAuditReadReqBodyErr))
10241026
}
10251027
// 恢复请求体,供后续处理使用
10261028
c.Request().Body = io.NopCloser(bytes.NewBuffer(bodyBytes))
@@ -1029,51 +1031,51 @@ func (sqlWorkbenchService *SqlWorkbenchService) AuditMiddleware() echo.Middlewar
10291031
sql, datasourceID, err := sqlWorkbenchService.parseStreamExecuteRequest(bodyBytes)
10301032
if err != nil {
10311033
sqlWorkbenchService.log.Errorf("failed to parse streamExecute request, skipping audit: %v", err)
1032-
return fmt.Errorf("failed to parse streamExecute request, skipping audit: %v", err)
1034+
return errors.New(locale.Bundle.LocalizeMsgByCtx(c.Request().Context(), locale.SqlWorkbenchAuditParseReqErr))
10331035
}
10341036

10351037
if sql == "" || datasourceID == "" {
10361038
sqlWorkbenchService.log.Debugf("SQL or datasource ID is empty, skipping audit")
1037-
return fmt.Errorf("SQL or datasource ID is empty, skipping audit")
1039+
return errors.New(locale.Bundle.LocalizeMsgByCtx(c.Request().Context(), locale.SqlWorkbenchAuditMissingSQLOrDatasourceErr))
10381040
}
10391041

10401042
// 获取当前用户 ID
10411043
dmsUserId, err := sqlWorkbenchService.getDMSUserIdFromRequest(c)
10421044
if err != nil {
10431045
sqlWorkbenchService.log.Errorf("failed to get DMS user ID: %v", err)
1044-
return fmt.Errorf("failed to get DMS user ID: %v", err)
1046+
return errors.New(locale.Bundle.LocalizeMsgByCtx(c.Request().Context(), locale.SqlWorkbenchAuditGetDMSUserErr))
10451047
}
10461048

10471049
// 从缓存表获取 dms_db_service_id
10481050
dmsDBServiceID, err := sqlWorkbenchService.getDMSDBServiceIDFromCache(c.Request().Context(), datasourceID, dmsUserId)
10491051
if err != nil {
10501052
sqlWorkbenchService.log.Errorf("failed to get dms_db_service_id from cache: %v", err)
1051-
return fmt.Errorf("failed to get dms_db_service_id from cache: %v", err)
1053+
return errors.New(locale.Bundle.LocalizeMsgByCtx(c.Request().Context(), locale.SqlWorkbenchAuditGetDBServiceMappingErr))
10521054
}
10531055

10541056
if dmsDBServiceID == "" {
10551057
sqlWorkbenchService.log.Debugf("dms_db_service_id not found in cache for datasource: %s", datasourceID)
1056-
return fmt.Errorf("dms_db_service_id not found in cache for datasource: %s", datasourceID)
1058+
return errors.New(locale.Bundle.LocalizeMsgByCtx(c.Request().Context(), locale.SqlWorkbenchAuditDBServiceMappingNotFoundErr))
10571059
}
10581060

10591061
// 获取 DBService 信息
10601062
dbService, err := sqlWorkbenchService.dbServiceUsecase.GetDBService(c.Request().Context(), dmsDBServiceID)
10611063
if err != nil {
10621064
sqlWorkbenchService.log.Errorf("failed to get DBService: %v", err)
1063-
return fmt.Errorf("failed to get DBService: %v", err)
1065+
return errors.New(locale.Bundle.LocalizeMsgByCtx(c.Request().Context(), locale.SqlWorkbenchAuditGetDBServiceErr))
10641066
}
10651067

10661068
// 检查是否启用 SQL 审核
10671069
if !sqlWorkbenchService.isEnableSQLAudit(dbService) {
10681070
sqlWorkbenchService.log.Debugf("SQL audit is not enabled for DBService: %s", dmsDBServiceID)
1069-
return fmt.Errorf("SQL audit is not enabled for DBService: %s", dmsDBServiceID)
1071+
return errors.New(locale.Bundle.LocalizeMsgByCtx(c.Request().Context(), locale.SqlWorkbenchAuditNotEnabledErr))
10701072
}
10711073

10721074
// 调用 SQLE 审核接口
10731075
auditResult, err := sqlWorkbenchService.callSQLEAudit(c.Request().Context(), sql, dbService)
10741076
if err != nil {
10751077
sqlWorkbenchService.log.Errorf("call SQLE audit failed: %v", err)
1076-
return fmt.Errorf("call SQLE audit failed: %v", err)
1078+
return errors.New(locale.Bundle.LocalizeMsgByCtx(c.Request().Context(), locale.SqlWorkbenchAuditCallSQLEErr))
10771079
}
10781080

10791081
// 拦截响应并添加审核结果

0 commit comments

Comments
 (0)