package db import ( "time" "github.com/elastic/go-elasticsearch/v6" "gorm.io/gorm" "model-engine/config" "model-engine/db/es" "model-engine/pkg/logger" "model-engine/pkg/mysqlx" ) // Init 初始化mysql和es func Init() error { if err := mysqlx.Init(config.MysqlConf, logger.GetLogger()); err != nil { return err } if err := es.InitClient([]string{"http://" + config.EsInfo.Ip + ":" + config.EsInfo.Port}); err != nil { return err } InitDefaultData() return nil } // GetDB ... func GetDB() *gorm.DB { return mysqlx.GetDB() } func GetEsClient() *elasticsearch.Client { return es.EsClient } func WithTransaction(fn func(*gorm.DB) error) error { var err error tx := mysqlx.GetDB().Begin() defer func() { if r := recover(); r != nil { tx.Rollback() return } else if err == nil { tx.Commit() return } }() err = fn(tx) if err != nil { tx.Rollback() return err } return nil } // InitDefaultData 初始化数据 func InitDefaultData() error { var models = []Model{ { BaseModel: BaseModel{ ID: ModelIdGather, CreatedAt: time.Time{}, UpdatedAt: time.Time{}, }, Name: "疑似聚集", Description: "通用聚集模型", Version: "v1.0.0", Enabled: false, }, } for i := range models { GetDB().Save(&models[i]) } var rules = []ModelRule{ { Id: "bfbdba7f-ee39-41fb-b188-b4c114a51eaa", ModelId: ModelIdGather, Scope: "", RuleArg: RuleArg{ Alias: "gatherPersons", Name: "聚集人数", Type: "input", Must: true, Unit: "人", Range: "1,100", Value: "2", ValType: "int", Operator: ">=", Sort: 0, }, }, { Id: "941bef84-ff7f-4460-b5dc-2ac6060304a4", ModelId: ModelIdGather, Scope: "", RuleArg: RuleArg{ Alias: "appearInterval", Name: "出现间隔", Type: "input", Must: true, Unit: "秒", Range: "1,7200", Value: "60", ValType: "int", Operator: ">=", Sort: 1, }, }, { Id: "a9b50bae-2c40-40a1-9ebc-ac34850db964", ModelId: ModelIdGather, Scope: "", RuleArg: RuleArg{ Alias: "threshold", Name: "出现次数", Type: "input", Must: true, Unit: "次", Range: "1,60", Value: "1", ValType: "int", Operator: ">=", Sort: 2, }, }, { Id: "aed7f95e-1ce6-4fa2-b1b3-aaf59ed86c50", ModelId: ModelIdGather, Scope: "", RuleArg: RuleArg{ Alias: "daysWindow", Name: "监控时间", Type: "input", Must: true, Unit: "天内", Range: "1,7", Value: "1", ValType: "int", Operator: "==", Sort: 2, }, }, } for i := range rules { GetDB().Save(&rules[i]) } return nil }