From 2dc58d4c5631ca84d9b55a41c92eae9d848d59ce Mon Sep 17 00:00:00 2001 From: actiontech-zihan Date: Thu, 16 Apr 2026 08:01:00 +0000 Subject: [PATCH] =?UTF-8?q?feat:=20Oracle=20TopSQL=20=E5=A2=9E=E5=8A=A0=20?= =?UTF-8?q?top=5Fn=20=E5=8F=82=E6=95=B0=E5=A3=B0=E6=98=8E=E5=92=8C=20db=5F?= =?UTF-8?q?user=20=E7=AD=9B=E9=80=89=E8=BF=87=E6=BB=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Oracle TopSQL Params() 添加 top_n 参数(默认10) - Oracle TopSQL 新增 Filters() 方法,支持 sql/rule_name/priority/db_user 四项筛选 - ExtractSQL() 使用 paramKeyCollectIntervalMinute 常量替代硬编码字符串 Closes: actiontech/sqle#3253 --- .../auditplan/task_type_oracle_topsql.go | 40 ++++++++++++++++++- 1 file changed, 39 insertions(+), 1 deletion(-) diff --git a/sqle/server/auditplan/task_type_oracle_topsql.go b/sqle/server/auditplan/task_type_oracle_topsql.go index f951ade73c..98c20868d4 100644 --- a/sqle/server/auditplan/task_type_oracle_topsql.go +++ b/sqle/server/auditplan/task_type_oracle_topsql.go @@ -39,6 +39,12 @@ func (at *OracleTopSQLTaskV2) Params(instanceId ...string) params.Params { Type: params.ParamTypeInt, I18nDesc: locale.Bundle.LocalizeAll(locale.ParamCollectIntervalMinuteOracle), }, + { + Key: "top_n", + Value: "10", + Type: params.ParamTypeInt, + I18nDesc: locale.Bundle.LocalizeAll(locale.ParamTopN), + }, } } @@ -125,7 +131,7 @@ func (at *OracleTopSQLTaskV2) ExtractSQL(logger *logrus.Entry, ap *AuditPlan, pe notInUser = append(notInUser, blacklist.FilterContent) } // filter db user by - sqls, err := db.QueryTopSQLs(ctx, ap.Params.GetParam("collect_interval_minute").String(), ap.Params.GetParam("top_n").Int(), notInUser, ap.Params.GetParam("order_by_column").String()) + sqls, err := db.QueryTopSQLs(ctx, ap.Params.GetParam(paramKeyCollectIntervalMinute).String(), ap.Params.GetParam("top_n").Int(), notInUser, ap.Params.GetParam("order_by_column").String()) if err != nil { return nil, fmt.Errorf("query top sql fail, error: %v", err) } @@ -230,6 +236,38 @@ func (at *OracleTopSQLTaskV2) Head(ap *AuditPlan) []Head { } } +func (at *OracleTopSQLTaskV2) Filters(ctx context.Context, logger *logrus.Entry, ap *AuditPlan, persist *model.Storage) []FilterMeta { + return []FilterMeta{ + { + Name: "sql", + Desc: locale.ApSQLStatement, + FilterInputType: FilterInputTypeString, + FilterOpType: FilterOpTypeEqual, + }, + { + Name: "rule_name", + Desc: locale.ApRuleName, + FilterInputType: FilterInputTypeString, + FilterOpType: FilterOpTypeEqual, + FilterTips: GetSqlManagerRuleTips(ctx, logger, ap.ID, persist), + }, + { + Name: "priority", + Desc: locale.ApPriority, + FilterInputType: FilterInputTypeString, + FilterOpType: FilterOpTypeEqual, + FilterTips: GetSqlManagerPriorityTips(ctx, logger), + }, + { + Name: MetricNameDBUser, + Desc: locale.ApMetricNameDBUser, + FilterInputType: FilterInputTypeString, + FilterOpType: FilterOpTypeEqual, + FilterTips: GetSqlManagerMetricTips(logger, ap.ID, persist, MetricNameDBUser), + }, + } +} + func (at *OracleTopSQLTaskV2) GetSQLData(ctx context.Context, ap *AuditPlan, persist *model.Storage, filters []Filter, orderBy string, isAsc bool, limit, offset int) ([]map[string] /* head name */ string, uint64, error) { auditPlanSQLs, count, err := persist.GetInstanceAuditPlanSQLsByReqV2(ap.ID, ap.Type, limit, offset, checkAndGetOrderByName(at.Head(ap), orderBy), isAsc, genArgsByFilters(filters)) if err != nil {