Merge branch 'refs/heads/feat-db-manager' into release

This commit is contained in:
junleea 2025-09-09 20:45:19 +08:00
commit ff3e032d6d
5 changed files with 43 additions and 2 deletions

View File

@ -7,11 +7,15 @@ import (
"gorm.io/driver/sqlite"
"gorm.io/gorm"
"log"
"sync"
"videoplayer/proto"
)
var DB *gorm.DB
var DBMMap map[uint]*proto.DBValue
var DBMMapRWMutex = &sync.RWMutex{} //dbm日志
func Init() error {
var db *gorm.DB
var err error

View File

@ -232,6 +232,7 @@ func myTask() {
RunGeneralCron()
service.ShellWillRunFromServer()
service.SyncTokenSecretFromUserCenter()
service.DelDBMMap() //定时处理DBMMap中的数据
}

View File

@ -27,13 +27,13 @@ var SigningKeyIsValid = true // 是否有效的签名密钥
const (
MYSQL_USER = "video_t2"
MYSQL_DB = "video_t2"
MYSQL_PASSWORD = "2t2SKHmWEYj2xFKF"
MYSQL_PASSWORD = "2fdreYj2xFKF"
MYSQL_PORT = "3306"
MYSQL_HOST = "127.0.0.1"
MYSQL_DSN = MYSQL_USER + ":" + MYSQL_PASSWORD + "@tcp(" + MYSQL_HOST + ":" + MYSQL_PORT + ")/" + MYSQL_DB + "?charset=utf8mb4&parseTime=True&loc=Local"
REDIS_ADDR = "127.0.0.1:6379"
REDIS_PASSWORD = "lj502138"
REDIS_PASSWORD = "lgybvueiogvter"
REIDS_DB = 2
TOKEN_SECRET = "mfjurnc_32ndj9dfhj"
@ -43,6 +43,8 @@ const (
// 以下是文件上传的配置
FILE_BASE_DIR = "/home/lijun/file/"
DBMMap_Max_Keep_Time = 10 * 60 //DBMap中的数据最大保持时间10min
)
const (

View File

@ -111,3 +111,8 @@ type DBTableAttribute struct {
ColumnName string `json:"column_name"` // 列名
ColumnType string `json:"column_type"` // 列类型
}
type DBValue struct {
LastUserTime int64 `json:"last_user_time"`
Value *gorm.DB `json:"value"`
}

View File

@ -8,6 +8,7 @@ import (
"strconv"
"videoplayer/dao"
"videoplayer/proto"
"videoplayer/worker"
)
func RunSQL(req *proto.RunSQLRequest) (*proto.SQLResult, error) {
@ -37,6 +38,16 @@ func RunSQL(req *proto.RunSQLRequest) (*proto.SQLResult, error) {
}
func GetGORMDBObject(dbmInfo *proto.DBManage) (db_ *gorm.DB, err error) {
dao.DBMMapRWMutex.RLock()
defer dao.DBMMapRWMutex.RUnlock()
if dao.DBMMap != nil {
dbValue := dao.DBMMap[dbmInfo.ID]
if dbValue != nil {
dbValue.LastUserTime = worker.GetCurrentTimestamp()
return dbValue.Value, nil
}
}
switch dbmInfo.DB_Type {
case proto.DB_TYPE_MYSQL: // MySQL
dsn := dbmInfo.DB_User + ":" + dbmInfo.DB_Password + "@tcp(" + dbmInfo.DB_IP + ":" + strconv.Itoa(int(dbmInfo.DB_Port)) + ")/" + dbmInfo.DB_NAME + "?charset=utf8mb4&parseTime=True&loc=Local"
@ -53,6 +64,13 @@ func GetGORMDBObject(dbmInfo *proto.DBManage) (db_ *gorm.DB, err error) {
default:
err = errors.New("unsupported database type")
}
dao.DBMMapRWMutex.Lock()
defer dao.DBMMapRWMutex.Unlock()
var dbValue *proto.DBValue
dbValue.Value = db_
dbValue.LastUserTime = worker.GetCurrentTimestamp()
dao.DBMMap[dbmInfo.ID] = dbValue
return db_, err
}
@ -218,3 +236,14 @@ func GetDBTableDesc(req *proto.GetDBTableDescReq, userId int) (*proto.SQLResult,
//}
return nil, nil
}
func DelDBMMap() {
dao.DBMMapRWMutex.Lock()
defer dao.DBMMapRWMutex.Unlock()
cur := worker.GetCurrentTimestamp()
for k, v := range dao.DBMMap {
if cur-v.LastUserTime < proto.DBMMap_Max_Keep_Time {
delete(dao.DBMMap, k) //删除
}
}
}