Skip to content

Commit 9f4dca2

Browse files
Merge pull request #2900 from actiontech/feat-MySQL-ai-rules-ce
Feat my sql ai rules ce
2 parents 918b895 + 088cd00 commit 9f4dca2

File tree

297 files changed

+30133
-145
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

297 files changed

+30133
-145
lines changed

sqle/api/controller/v1/rule.go

Lines changed: 79 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -30,10 +30,11 @@ import (
3030
var ErrRuleTemplateNotExist = errors.New(errors.DataNotExist, fmt.Errorf("rule template not exist"))
3131

3232
type CreateRuleTemplateReqV1 struct {
33-
Name string `json:"rule_template_name" valid:"required,name"`
34-
Desc string `json:"desc"`
35-
DBType string `json:"db_type" valid:"required"`
36-
RuleList []RuleReqV1 `json:"rule_list" form:"rule_list" valid:"required,dive,required"`
33+
Name string `json:"rule_template_name" valid:"required,name"`
34+
Desc string `json:"desc"`
35+
DBType string `json:"db_type" valid:"required"`
36+
RuleVersion string `json:"rule_version"`
37+
RuleList []RuleReqV1 `json:"rule_list" form:"rule_list" valid:"required,dive,required"`
3738
}
3839

3940
type RuleReqV1 struct {
@@ -176,10 +177,11 @@ func CreateRuleTemplate(c echo.Context) error {
176177
}
177178

178179
ruleTemplate := &model.RuleTemplate{
179-
ProjectId: model.ProjectIdForGlobalRuleTemplate,
180-
Name: req.Name,
181-
Desc: req.Desc,
182-
DBType: req.DBType,
180+
ProjectId: model.ProjectIdForGlobalRuleTemplate,
181+
Name: req.Name,
182+
Desc: req.Desc,
183+
DBType: req.DBType,
184+
RuleVersion: req.RuleVersion,
183185
}
184186
templateRules := []model.RuleTemplateRule{}
185187
templateCustomRules := []model.RuleTemplateCustomRule{}
@@ -277,10 +279,11 @@ type GetRuleTemplateResV1 struct {
277279
}
278280

279281
type RuleTemplateDetailResV1 struct {
280-
Name string `json:"rule_template_name"`
281-
Desc string `json:"desc"`
282-
DBType string `json:"db_type"`
283-
RuleList []RuleResV1 `json:"rule_list,omitempty"`
282+
Name string `json:"rule_template_name"`
283+
Desc string `json:"desc"`
284+
DBType string `json:"db_type"`
285+
RuleVersion string `json:"rule_version"`
286+
RuleList []RuleResV1 `json:"rule_list,omitempty"`
284287
}
285288

286289
func convertRuleTemplateToRes(ctx context.Context, template *model.RuleTemplate) *RuleTemplateDetailResV1 {
@@ -298,10 +301,11 @@ func convertRuleTemplateToRes(ctx context.Context, template *model.RuleTemplate)
298301
ruleList = append(ruleList, convertCustomRuleToRuleResV1(r.GetRule()))
299302
}
300303
return &RuleTemplateDetailResV1{
301-
Name: template.Name,
302-
Desc: template.Desc,
303-
DBType: template.DBType,
304-
RuleList: ruleList,
304+
Name: template.Name,
305+
Desc: template.Desc,
306+
DBType: template.DBType,
307+
RuleVersion: template.RuleVersion,
308+
RuleList: ruleList,
305309
}
306310
}
307311

@@ -402,9 +406,10 @@ type GetRuleTemplatesResV1 struct {
402406
}
403407

404408
type RuleTemplateResV1 struct {
405-
Name string `json:"rule_template_name"`
406-
Desc string `json:"desc"`
407-
DBType string `json:"db_type"`
409+
Name string `json:"rule_template_name"`
410+
Desc string `json:"desc"`
411+
DBType string `json:"db_type"`
412+
RuleVersion string `json:"rule_version"`
408413
}
409414

410415
// @Summary 全局规则模板列表
@@ -454,9 +459,10 @@ func convertDefaultRuleTemplatesToRes(ctx context.Context, ruleTemplates []*mode
454459
ruleTemplatesReq := make([]RuleTemplateResV1, 0, len(ruleTemplates))
455460
for _, ruleTemplate := range ruleTemplates {
456461
ruleTemplateReq := RuleTemplateResV1{
457-
Name: ruleTemplate.Name,
458-
Desc: locale.Bundle.LocalizeMsgByCtx(ctx, locale.DefaultRuleTemplatesDesc),
459-
DBType: ruleTemplate.DBType,
462+
Name: ruleTemplate.Name,
463+
Desc: locale.Bundle.LocalizeMsgByCtx(ctx, locale.DefaultRuleTemplatesDesc),
464+
DBType: ruleTemplate.DBType,
465+
RuleVersion: ruleTemplate.RuleVersion,
460466
}
461467
ruleTemplatesReq = append(ruleTemplatesReq, ruleTemplateReq)
462468
}
@@ -467,6 +473,7 @@ type GetRulesReqV1 struct {
467473
FilterDBType string `json:"filter_db_type" query:"filter_db_type"`
468474
FilterGlobalRuleTemplateName string `json:"filter_global_rule_template_name" query:"filter_global_rule_template_name"`
469475
FilterRuleNames string `json:"filter_rule_names" query:"filter_rule_names"`
476+
FilterRuleVersion string `json:"filter_rule_version" query:"filter_rule_version"`
470477
FuzzyKeywordRule string `json:"fuzzy_keyword_rule" query:"fuzzy_keyword_rule"`
471478
Tags string `json:"tags" query:"tags"`
472479
}
@@ -591,6 +598,7 @@ func convertRulesToRes(ctx context.Context, rules interface{}) []RuleResV1 {
591598
// @Param fuzzy_keyword_rule query string false "fuzzy rule,keyword for desc and annotation"
592599
// @Param filter_global_rule_template_name query string false "filter global rule template name"
593600
// @Param filter_rule_names query string false "filter rule name list"
601+
// @Param filter_rule_version query string false "filter rule version"
594602
// @Param tags query string false "filter tags"
595603
// @Success 200 {object} v1.GetRulesResV1
596604
// @router /v1/rules [get]
@@ -608,6 +616,7 @@ func GetRules(c echo.Context) error {
608616
"filter_global_rule_template_name": req.FilterGlobalRuleTemplateName,
609617
"filter_db_type": req.FilterDBType,
610618
"filter_rule_names": req.FilterRuleNames,
619+
"filter_rule_version": req.FilterRuleVersion,
611620
"fuzzy_keyword_rule": req.FuzzyKeywordRule,
612621
"tags": req.Tags,
613622
})
@@ -687,6 +696,7 @@ type RuleTemplateTipResV1 struct {
687696
ID string `json:"rule_template_id"`
688697
Name string `json:"rule_template_name"`
689698
DBType string `json:"db_type"`
699+
RuleVersion string `json:"rule_version"`
690700
IsDefaultRuleTemplate bool `json:"is_default_rule_template"`
691701
}
692702

@@ -726,6 +736,7 @@ func getRuleTemplateTips(c echo.Context, projectId string, filterDBType string)
726736
ID: roleTemplate.GetIDStr(),
727737
Name: roleTemplate.Name,
728738
DBType: roleTemplate.DBType,
739+
RuleVersion: roleTemplate.RuleVersion,
729740
IsDefaultRuleTemplate: isDefaultRuleTemplate,
730741
}
731742
ruleTemplateTipsRes = append(ruleTemplateTipsRes, ruleTemplateTipRes)
@@ -776,10 +787,11 @@ func CloneRuleTemplate(c echo.Context) error {
776787
}
777788

778789
ruleTemplate := &model.RuleTemplate{
779-
ProjectId: model.ProjectIdForGlobalRuleTemplate,
780-
Name: req.Name,
781-
Desc: req.Desc,
782-
DBType: sourceTpl.DBType,
790+
ProjectId: model.ProjectIdForGlobalRuleTemplate,
791+
Name: req.Name,
792+
Desc: req.Desc,
793+
DBType: sourceTpl.DBType,
794+
RuleVersion: sourceTpl.RuleVersion,
783795
}
784796
err = s.Save(ruleTemplate)
785797
if err != nil {
@@ -814,10 +826,11 @@ func CheckRuleTemplateCanBeBindEachInstance(s *model.Storage, tplName string, in
814826
}
815827

816828
type CreateProjectRuleTemplateReqV1 struct {
817-
Name string `json:"rule_template_name" valid:"required,name"`
818-
Desc string `json:"desc"`
819-
DBType string `json:"db_type" valid:"required"`
820-
RuleList []RuleReqV1 `json:"rule_list" form:"rule_list" valid:"required,dive,required"`
829+
Name string `json:"rule_template_name" valid:"required,name"`
830+
Desc string `json:"desc"`
831+
DBType string `json:"db_type" valid:"required"`
832+
RuleVersion string `json:"rule_version"`
833+
RuleList []RuleReqV1 `json:"rule_list" form:"rule_list" valid:"required,dive,required"`
821834
}
822835

823836
// CreateProjectRuleTemplate
@@ -851,10 +864,11 @@ func CreateProjectRuleTemplate(c echo.Context) error {
851864
}
852865

853866
ruleTemplate := &model.RuleTemplate{
854-
ProjectId: model.ProjectUID(projectUid),
855-
Name: req.Name,
856-
Desc: req.Desc,
857-
DBType: req.DBType,
867+
ProjectId: model.ProjectUID(projectUid),
868+
Name: req.Name,
869+
Desc: req.Desc,
870+
DBType: req.DBType,
871+
RuleVersion: req.RuleVersion,
858872
}
859873
templateRules := []model.RuleTemplateRule{}
860874
templateCustomRules := []model.RuleTemplateCustomRule{}
@@ -980,10 +994,11 @@ type GetProjectRuleTemplateResV1 struct {
980994
}
981995

982996
type RuleProjectTemplateDetailResV1 struct {
983-
Name string `json:"rule_template_name"`
984-
Desc string `json:"desc"`
985-
DBType string `json:"db_type"`
986-
RuleList []RuleResV1 `json:"rule_list,omitempty"`
997+
Name string `json:"rule_template_name"`
998+
Desc string `json:"desc"`
999+
DBType string `json:"db_type"`
1000+
RuleVersion string `json:"rule_version"`
1001+
RuleList []RuleResV1 `json:"rule_list,omitempty"`
9871002
}
9881003

9891004
type ProjectRuleTemplateInstance struct {
@@ -1044,10 +1059,11 @@ func convertProjectRuleTemplateToRes(ctx context.Context, template *model.RuleTe
10441059
ruleList = append(ruleList, convertCustomRuleToRuleResV1(r.GetRule()))
10451060
}
10461061
return &RuleProjectTemplateDetailResV1{
1047-
Name: template.Name,
1048-
Desc: template.Desc,
1049-
DBType: template.DBType,
1050-
RuleList: ruleList,
1062+
Name: template.Name,
1063+
Desc: template.Desc,
1064+
DBType: template.DBType,
1065+
RuleVersion: template.RuleVersion,
1066+
RuleList: ruleList,
10511067
}
10521068
}
10531069

@@ -1244,10 +1260,11 @@ func CloneProjectRuleTemplate(c echo.Context) error {
12441260
// }
12451261

12461262
ruleTemplate := &model.RuleTemplate{
1247-
ProjectId: model.ProjectUID(projectUid),
1248-
Name: req.Name,
1249-
Desc: req.Desc,
1250-
DBType: sourceTpl.DBType,
1263+
ProjectId: model.ProjectUID(projectUid),
1264+
Name: req.Name,
1265+
Desc: req.Desc,
1266+
DBType: sourceTpl.DBType,
1267+
RuleVersion: sourceTpl.RuleVersion,
12511268
}
12521269
err = s.Save(ruleTemplate)
12531270
if err != nil {
@@ -1298,10 +1315,11 @@ type ParseProjectRuleTemplateFileResV1 struct {
12981315
}
12991316

13001317
type ParseProjectRuleTemplateFileResDataV1 struct {
1301-
Name string `json:"name"`
1302-
Desc string `json:"desc"`
1303-
DBType string `json:"db_type"`
1304-
RuleList []RuleResV1 `json:"rule_list"`
1318+
Name string `json:"name"`
1319+
Desc string `json:"desc"`
1320+
DBType string `json:"db_type"`
1321+
RuleVersion string `json:"rule_version"`
1322+
RuleList []RuleResV1 `json:"rule_list"`
13051323
}
13061324

13071325
// ParseProjectRuleTemplateFile parse rule template
@@ -1345,8 +1363,19 @@ var ErrRule = e.New("rule has error")
13451363

13461364
func checkRuleList(file *ParseProjectRuleTemplateFileResDataV1) (*RuleTemplateExportErr, error) {
13471365
ruleNameList := make([]string, 0, len(file.RuleList))
1366+
var hasNewRule, hasOldRule bool
13481367
for _, rule := range file.RuleList {
13491368
ruleNameList = append(ruleNameList, rule.Name)
1369+
if file.DBType == driverV2.DriverTypeMySQL {
1370+
hasNewRule = hasNewRule || strings.HasPrefix(rule.Name, "SQLE")
1371+
hasOldRule = hasOldRule || !strings.HasPrefix(rule.Name, "SQLE")
1372+
if hasOldRule && hasNewRule {
1373+
return nil, fmt.Errorf("cannot import rule template that contains both old and new rules")
1374+
}
1375+
if hasNewRule {
1376+
file.RuleVersion = "v2"
1377+
}
1378+
}
13501379
}
13511380

13521381
s := model.GetStorage()

sqle/docs/docs.go

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8781,6 +8781,12 @@ var doc = `{
87818781
"name": "filter_rule_names",
87828782
"in": "query"
87838783
},
8784+
{
8785+
"type": "string",
8786+
"description": "filter rule version",
8787+
"name": "filter_rule_version",
8788+
"in": "query"
8789+
},
87848790
{
87858791
"type": "string",
87868792
"description": "filter tags",
@@ -12860,6 +12866,9 @@ var doc = `{
1286012866
},
1286112867
"rule_template_name": {
1286212868
"type": "string"
12869+
},
12870+
"rule_version": {
12871+
"type": "string"
1286312872
}
1286412873
}
1286512874
},
@@ -12931,6 +12940,9 @@ var doc = `{
1293112940
},
1293212941
"rule_template_name": {
1293312942
"type": "string"
12943+
},
12944+
"rule_version": {
12945+
"type": "string"
1293412946
}
1293512947
}
1293612948
},
@@ -16651,6 +16663,9 @@ var doc = `{
1665116663
"items": {
1665216664
"$ref": "#/definitions/v1.RuleResV1"
1665316665
}
16666+
},
16667+
"rule_version": {
16668+
"type": "string"
1665416669
}
1665516670
}
1665616671
},
@@ -17060,6 +17075,9 @@ var doc = `{
1706017075
},
1706117076
"rule_template_name": {
1706217077
"type": "string"
17078+
},
17079+
"rule_version": {
17080+
"type": "string"
1706317081
}
1706417082
}
1706517083
},
@@ -17170,6 +17188,9 @@ var doc = `{
1717017188
},
1717117189
"rule_template_name": {
1717217190
"type": "string"
17191+
},
17192+
"rule_version": {
17193+
"type": "string"
1717317194
}
1717417195
}
1717517196
},
@@ -17184,6 +17205,9 @@ var doc = `{
1718417205
},
1718517206
"rule_template_name": {
1718617207
"type": "string"
17208+
},
17209+
"rule_version": {
17210+
"type": "string"
1718717211
}
1718817212
}
1718917213
},
@@ -17201,6 +17225,9 @@ var doc = `{
1720117225
},
1720217226
"rule_template_name": {
1720317227
"type": "string"
17228+
},
17229+
"rule_version": {
17230+
"type": "string"
1720417231
}
1720517232
}
1720617233
},

0 commit comments

Comments
 (0)