From 1b435074cb55d969988c32732c8be649002c0dac Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Wed, 19 Feb 2025 21:31:16 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=B8=8Eomc=E4=B8=BB=E7=A8=8B=E5=BA=8F?= =?UTF-8?q?=E8=A7=A3=E8=80=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sshsvc/dborm/dborm.go | 161 ++++++++++++++++++++++++++++++++++++++++ sshsvc/sshsvc.go | 2 +- sshsvc/telnet/telnet.go | 2 +- 3 files changed, 163 insertions(+), 2 deletions(-) create mode 100644 sshsvc/dborm/dborm.go diff --git a/sshsvc/dborm/dborm.go b/sshsvc/dborm/dborm.go new file mode 100644 index 00000000..45449317 --- /dev/null +++ b/sshsvc/dborm/dborm.go @@ -0,0 +1,161 @@ +package dborm + +import ( + "database/sql" + "fmt" + "time" + + "be.ems/lib/log" + + _ "github.com/go-sql-driver/mysql" + "xorm.io/xorm" + "xorm.io/xorm/core" +) + +const ( + TableNameMeasureTask = "measure_task" + TableNameNeInfo = "ne_info" +) + +type Menu struct { + Id int `json:"id"` + Title string `json:"title"` + Icon string `json:"icon"` + Href string `json:"href"` + ParentId int `json:"parent_id"` + Remark int `json:"remark"` +} + +type DatabaseClient struct { + dbType string + dbUrl string + dbConnMaxLifetime time.Duration + dbMaxIdleConns int + dbMaxOpenConns int + IsShowSQL bool + + XEngine *xorm.Engine +} + +var DbClient DatabaseClient + +func InitDbClient(dbType, dbUser, dbPassword, dbHost, dbPort, dbName, dbParam string) error { + DbClient.dbUrl = fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?%s", + dbUser, dbPassword, dbHost, dbPort, dbName, dbParam) + DbClient.dbType = dbType + DbClient.dbConnMaxLifetime = 0 + DbClient.dbMaxIdleConns = 0 + DbClient.dbMaxOpenConns = 0 + if log.GetLevel() == log.LOG_TRACE { + DbClient.IsShowSQL = true + } + log.Debugf("dbType:%s dbUrl:%s:", dbType, DbClient.dbUrl) + + var err error + DbClient.XEngine, err = xorm.NewEngine(DbClient.dbType, DbClient.dbUrl) + if err != nil { + log.Error("Failed to connet database:", err) + return err + } + DbClient.XEngine.SetConnMaxLifetime(DbClient.dbConnMaxLifetime) + DbClient.XEngine.SetMaxIdleConns(DbClient.dbMaxIdleConns) + DbClient.XEngine.SetMaxOpenConns(DbClient.dbMaxOpenConns) + DbClient.XEngine.DatabaseTZ = time.Local // 必须 + DbClient.XEngine.TZLocation = time.Local // 必须 + if DbClient.IsShowSQL { + DbClient.XEngine.ShowSQL(true) + } + + xEngine = DbClient.XEngine + + return nil +} + +// func InitDbClient() error { +// db := config.GetYamlConfig().Database +// DbClient.dbUrl = fmt.Sprintf("%s:%s@tcp(%s:%s)/%s", db.User, db.Password, db.Host, db.Port, db.Name) +// DbClient.dbType = db.Type +// DbClient.dbConnMaxLifetime = 0 +// DbClient.dbMaxIdleConns = 0 +// DbClient.dbMaxOpenConns = 0 +// if log.GetLevel() == log.LOG_TRACE { +// DbClient.IsShowSQL = true +// } +// log.Debugf("dbType:%s dbUrl:%s:******@tcp(%s:%s)/%s", DbClient.dbType, db.User, db.Host, db.Port, db.Name) +// var err error +// DbClient.XEngine, err = xorm.NewEngine(DbClient.dbType, DbClient.dbUrl) +// if err != nil { +// log.Error("Failed to connet database:", err) +// return err +// } +// DbClient.XEngine.SetConnMaxLifetime(DbClient.dbConnMaxLifetime) +// DbClient.XEngine.SetMaxIdleConns(DbClient.dbMaxIdleConns) +// DbClient.XEngine.SetMaxOpenConns(DbClient.dbMaxOpenConns) +// if DbClient.IsShowSQL { +// DbClient.XEngine.ShowSQL(true) +// } +// xEngine = DbClient.XEngine + +// return nil +// } + +var xEngine *xorm.Engine + +func XormConnectDatabase(dbType, dbUser, dbPassword, dbHost, dbPort, dbName string) (*xorm.Engine, error) { + sqlStr := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=utf8mb4&collation=utf8mb4_general_ci&parseTime=true&loc=Local", + dbUser, dbPassword, dbHost, dbPort, dbName) + log.Debugf("dbType:%s Connect to:%s:******@tcp(%s:%s)/%s?charset=utf8mb4&collation=utf8mb4_general_ci&parseTime=true&loc=Local", + dbType, dbUser, dbHost, dbPort, dbName) + var err error + xEngine, err = xorm.NewEngine(dbType, sqlStr) //1、Create xorm engine + if err != nil { + log.Error("Failed to connect database:", err) + return nil, err + } + if log.GetLevel() == log.LOG_TRACE { + xEngine.ShowSQL(true) + } + return xEngine, nil +} + +func XCoreDB() *core.DB { + return xEngine.DB() +} + +func XEngDB() *xorm.Engine { + return xEngine +} + +type Session struct { + Id int `json:"id" xorm:"pk 'id' autoincr"` + AccountId string `json:"accountId" xorm:"account_id"` + Name string `json:"name" xorm:"name"` + Host string `json:"host" xorm:"host"` + AccessToken string `json:"accessToken" xorm:"access_token"` + Expires uint32 `json:"expires" xorm:"expires"` + Status string `json:"status" xorm:"status"` + LoginTime string `json:"loginTime" xorm:"-"` + ShakeTime sql.NullTime `son:"shakeTime" xorm:"shake_time"` + LogoutTime sql.NullTime `json:"logoutTime" xorm:"logout_time"` +} + +// XormUpdateSession update session +func XormLogoutUpdateSession(token string) (Session, error) { + log.Info("XormLogoutUpdateSession processing... ") + + session := Session{Status: "offline", AccessToken: token} + session.LogoutTime.Valid = true + session.LogoutTime.Time = time.Now() + + xSession := xEngine.NewSession() + defer xSession.Close() + _, err := xSession.Table("session").Where("access_token = ?", token).Update(session) + xSession.Commit() + // 查询记录返回 + if err == nil { + session := Session{} + _, err = xSession.Table("session").Where("access_token = ?", token).Get(&session) + return session, err + } + return session, err +} diff --git a/sshsvc/sshsvc.go b/sshsvc/sshsvc.go index c8efe92a..03c3796c 100644 --- a/sshsvc/sshsvc.go +++ b/sshsvc/sshsvc.go @@ -12,11 +12,11 @@ import ( "sync" "time" - "be.ems/lib/dborm" "be.ems/lib/global" "be.ems/lib/log" "be.ems/lib/mmlp" "be.ems/sshsvc/config" + "be.ems/sshsvc/dborm" "be.ems/sshsvc/logmml" "be.ems/sshsvc/snmp" omctelnet "be.ems/sshsvc/telnet" diff --git a/sshsvc/telnet/telnet.go b/sshsvc/telnet/telnet.go index ce28993d..18e3ed9a 100644 --- a/sshsvc/telnet/telnet.go +++ b/sshsvc/telnet/telnet.go @@ -9,7 +9,7 @@ import ( "sync" "time" - "be.ems/lib/dborm" + "be.ems/sshsvc/dborm" ) type TelnetHandler struct {