go_dreamfactory/cmd/v2/service/dbServer.go
2022-08-26 17:11:24 +08:00

140 lines
3.0 KiB
Go

package service
import (
"encoding/json"
"fmt"
"go_dreamfactory/cmd/v2/lib/common"
"go_dreamfactory/cmd/v2/model"
"log"
"time"
"github.com/boltdb/bolt"
"github.com/sirupsen/logrus"
)
type DbService interface {
// 保存鲁班工具配置
SaveLubanConf(conf *model.GenTool) error
// 获取鲁班工具配置
GetLubanConf(key string) *model.GenTool
// 保存SSH连接信息
SaveSSHConf(conf *model.SSHModel) error
//获取终端配置
GetSSHConf(key string) *model.SSHModel
}
type DbServiceImpl struct {
}
var dbservice DbService
func NewDbService() DbService {
dbservice = &DbServiceImpl{}
return dbservice
}
func GetDbService() DbService {
return dbservice
}
func (this *DbServiceImpl) save(key string, model interface{}) error {
boltDb = GetBoltDb()
defer boltDb.Close()
if err := boltDb.Update(func(tx *bolt.Tx) error {
b, err2 := json.Marshal(model)
if err2 != nil {
return err
}
c := tx.Bucket([]byte(common.BOLTDB_BUCKETNAME))
if c == nil {
return fmt.Errorf("Bucket %s not found!", common.BOLTDB_BUCKETNAME)
}
return c.Put([]byte(key), b)
}); err != nil {
logrus.Errorf("save err: %v", err)
return err
}
return nil
}
func (this *DbServiceImpl) SaveLubanConf(conf *model.GenTool) error {
return this.save(common.BUCKET_LUBANCONF, conf)
}
func (this *DbServiceImpl) GetLubanConf(key string) *model.GenTool {
boltDb = GetBoltDb()
defer boltDb.Close()
model := &model.GenTool{}
if err = boltDb.View(func(tx *bolt.Tx) error {
b := tx.Bucket([]byte(common.BOLTDB_BUCKETNAME))
if b == nil {
return fmt.Errorf("Bucket %s not found!", common.BOLTDB_BUCKETNAME)
}
val := b.Get([]byte(key))
if err = json.Unmarshal(val, model); err != nil {
logrus.Errorf("get gen conf err:%v", err)
return nil
}
return nil
}); err != nil {
logrus.Errorf("get db conf err: %v", err)
return nil
}
return model
}
func (this *DbServiceImpl) SaveSSHConf(conf *model.SSHModel) error {
return this.save(common.BUCKET_SSHCONF, conf)
}
func (this *DbServiceImpl) GetSSHConf(key string) *model.SSHModel {
boltDb = GetBoltDb()
defer boltDb.Close()
model := &model.SSHModel{}
if err = boltDb.View(func(tx *bolt.Tx) error {
b := tx.Bucket([]byte(common.BOLTDB_BUCKETNAME))
if b == nil {
return fmt.Errorf("Bucket %s not found!", common.BOLTDB_BUCKETNAME)
}
val := b.Get([]byte(key))
if err = json.Unmarshal(val, model); err != nil {
logrus.Errorf("get gen conf err:%v", err)
return nil
}
return nil
}); err != nil {
logrus.Errorf("get db conf err: %v", err)
return nil
}
return model
}
var (
boltDb *bolt.DB
bucket *bolt.Bucket
err error
)
func GetBoltDb() *bolt.DB {
boltDb, err = bolt.Open(common.BOLTDB_NAME, 0600, &bolt.Options{Timeout: 5 * time.Second})
if err != nil {
log.Fatal(err)
}
boltDb.Update(func(tx *bolt.Tx) error {
b := tx.Bucket([]byte(common.BOLTDB_BUCKETNAME))
if b != nil {
bucket = b
} else {
bucket, err = tx.CreateBucket([]byte(common.BOLTDB_BUCKETNAME))
if err != nil {
return fmt.Errorf("create bucket: %s", err)
}
}
return nil
})
return boltDb
}