@@ -30,10 +30,11 @@ import (
30
30
var ErrRuleTemplateNotExist = errors .New (errors .DataNotExist , fmt .Errorf ("rule template not exist" ))
31
31
32
32
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"`
37
38
}
38
39
39
40
type RuleReqV1 struct {
@@ -176,10 +177,11 @@ func CreateRuleTemplate(c echo.Context) error {
176
177
}
177
178
178
179
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 ,
183
185
}
184
186
templateRules := []model.RuleTemplateRule {}
185
187
templateCustomRules := []model.RuleTemplateCustomRule {}
@@ -277,10 +279,11 @@ type GetRuleTemplateResV1 struct {
277
279
}
278
280
279
281
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"`
284
287
}
285
288
286
289
func convertRuleTemplateToRes (ctx context.Context , template * model.RuleTemplate ) * RuleTemplateDetailResV1 {
@@ -298,10 +301,11 @@ func convertRuleTemplateToRes(ctx context.Context, template *model.RuleTemplate)
298
301
ruleList = append (ruleList , convertCustomRuleToRuleResV1 (r .GetRule ()))
299
302
}
300
303
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 ,
305
309
}
306
310
}
307
311
@@ -402,9 +406,10 @@ type GetRuleTemplatesResV1 struct {
402
406
}
403
407
404
408
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"`
408
413
}
409
414
410
415
// @Summary 全局规则模板列表
@@ -454,9 +459,10 @@ func convertDefaultRuleTemplatesToRes(ctx context.Context, ruleTemplates []*mode
454
459
ruleTemplatesReq := make ([]RuleTemplateResV1 , 0 , len (ruleTemplates ))
455
460
for _ , ruleTemplate := range ruleTemplates {
456
461
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 ,
460
466
}
461
467
ruleTemplatesReq = append (ruleTemplatesReq , ruleTemplateReq )
462
468
}
@@ -467,6 +473,7 @@ type GetRulesReqV1 struct {
467
473
FilterDBType string `json:"filter_db_type" query:"filter_db_type"`
468
474
FilterGlobalRuleTemplateName string `json:"filter_global_rule_template_name" query:"filter_global_rule_template_name"`
469
475
FilterRuleNames string `json:"filter_rule_names" query:"filter_rule_names"`
476
+ FilterRuleVersion string `json:"filter_rule_version" query:"filter_rule_version"`
470
477
FuzzyKeywordRule string `json:"fuzzy_keyword_rule" query:"fuzzy_keyword_rule"`
471
478
Tags string `json:"tags" query:"tags"`
472
479
}
@@ -591,6 +598,7 @@ func convertRulesToRes(ctx context.Context, rules interface{}) []RuleResV1 {
591
598
// @Param fuzzy_keyword_rule query string false "fuzzy rule,keyword for desc and annotation"
592
599
// @Param filter_global_rule_template_name query string false "filter global rule template name"
593
600
// @Param filter_rule_names query string false "filter rule name list"
601
+ // @Param filter_rule_version query string false "filter rule version"
594
602
// @Param tags query string false "filter tags"
595
603
// @Success 200 {object} v1.GetRulesResV1
596
604
// @router /v1/rules [get]
@@ -608,6 +616,7 @@ func GetRules(c echo.Context) error {
608
616
"filter_global_rule_template_name" : req .FilterGlobalRuleTemplateName ,
609
617
"filter_db_type" : req .FilterDBType ,
610
618
"filter_rule_names" : req .FilterRuleNames ,
619
+ "filter_rule_version" : req .FilterRuleVersion ,
611
620
"fuzzy_keyword_rule" : req .FuzzyKeywordRule ,
612
621
"tags" : req .Tags ,
613
622
})
@@ -687,6 +696,7 @@ type RuleTemplateTipResV1 struct {
687
696
ID string `json:"rule_template_id"`
688
697
Name string `json:"rule_template_name"`
689
698
DBType string `json:"db_type"`
699
+ RuleVersion string `json:"rule_version"`
690
700
IsDefaultRuleTemplate bool `json:"is_default_rule_template"`
691
701
}
692
702
@@ -726,6 +736,7 @@ func getRuleTemplateTips(c echo.Context, projectId string, filterDBType string)
726
736
ID : roleTemplate .GetIDStr (),
727
737
Name : roleTemplate .Name ,
728
738
DBType : roleTemplate .DBType ,
739
+ RuleVersion : roleTemplate .RuleVersion ,
729
740
IsDefaultRuleTemplate : isDefaultRuleTemplate ,
730
741
}
731
742
ruleTemplateTipsRes = append (ruleTemplateTipsRes , ruleTemplateTipRes )
@@ -776,10 +787,11 @@ func CloneRuleTemplate(c echo.Context) error {
776
787
}
777
788
778
789
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 ,
783
795
}
784
796
err = s .Save (ruleTemplate )
785
797
if err != nil {
@@ -814,10 +826,11 @@ func CheckRuleTemplateCanBeBindEachInstance(s *model.Storage, tplName string, in
814
826
}
815
827
816
828
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"`
821
834
}
822
835
823
836
// CreateProjectRuleTemplate
@@ -851,10 +864,11 @@ func CreateProjectRuleTemplate(c echo.Context) error {
851
864
}
852
865
853
866
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 ,
858
872
}
859
873
templateRules := []model.RuleTemplateRule {}
860
874
templateCustomRules := []model.RuleTemplateCustomRule {}
@@ -980,10 +994,11 @@ type GetProjectRuleTemplateResV1 struct {
980
994
}
981
995
982
996
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"`
987
1002
}
988
1003
989
1004
type ProjectRuleTemplateInstance struct {
@@ -1044,10 +1059,11 @@ func convertProjectRuleTemplateToRes(ctx context.Context, template *model.RuleTe
1044
1059
ruleList = append (ruleList , convertCustomRuleToRuleResV1 (r .GetRule ()))
1045
1060
}
1046
1061
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 ,
1051
1067
}
1052
1068
}
1053
1069
@@ -1244,10 +1260,11 @@ func CloneProjectRuleTemplate(c echo.Context) error {
1244
1260
// }
1245
1261
1246
1262
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 ,
1251
1268
}
1252
1269
err = s .Save (ruleTemplate )
1253
1270
if err != nil {
@@ -1298,10 +1315,11 @@ type ParseProjectRuleTemplateFileResV1 struct {
1298
1315
}
1299
1316
1300
1317
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"`
1305
1323
}
1306
1324
1307
1325
// ParseProjectRuleTemplateFile parse rule template
@@ -1345,8 +1363,19 @@ var ErrRule = e.New("rule has error")
1345
1363
1346
1364
func checkRuleList (file * ParseProjectRuleTemplateFileResDataV1 ) (* RuleTemplateExportErr , error ) {
1347
1365
ruleNameList := make ([]string , 0 , len (file .RuleList ))
1366
+ var hasNewRule , hasOldRule bool
1348
1367
for _ , rule := range file .RuleList {
1349
1368
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
+ }
1350
1379
}
1351
1380
1352
1381
s := model .GetStorage ()
0 commit comments