1 Star 0 Fork 0

寻根 / goweb

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
database.go 2.49 KB
一键复制 编辑 原始数据 按行查看 历史
lemonzheng(郑刚) 提交于 2024-04-12 15:45 . 代码优化
package webx
import (
"encoding/json"
"fmt"
"gitee.com/xungen/goweb/dbx"
"gitee.com/xungen/goweb/utils"
_ "github.com/go-sql-driver/mysql"
_ "github.com/mattn/go-sqlite3"
)
func GetDB(ctx *Context, name ...interface{}) (*dbx.DBConnect, error) {
var key = utils.Sprint(name...)
if conn := dbx.Get(ctx, key); conn != nil {
return conn, nil
}
var open = func(cfg *dbx.Config) (*dbx.DBConnect, error) {
if conn, err := dbx.Open(cfg); err == nil {
return dbx.Set(key, conn, ctx), nil
} else {
return nil, err
}
}
if key == "" {
if cfg := &GetConfig().Datebase; cfg.Name == "" {
return nil, utils.NOTFOUND.Copy("database config missing")
} else {
return open(cfg)
}
} else if node := confignode.Child("database." + key); node != nil {
cfg := &dbx.Config{}
node.Object(cfg, true)
return open(cfg)
} else {
if cfg, err := GetRemoteDBConfig(ctx, key); err == nil {
return open(cfg)
} else {
return nil, err
}
}
}
func GetRemoteDBConfig(ctx *Context, name string) (*dbx.Config, error) {
type Item struct {
Port string `json:"port"`
Host string `json:"host"`
Type string `json:"type"`
Name string `json:"name"`
User string `json:"user"`
Enabled string `json:"enabled"`
Charset string `json:"charset"`
Password string `json:"password"`
}
type Result struct {
Code int `json:"code"`
List []Item `json:"list"`
}
var host = GetRouteHost()
if host == nil {
return nil, utils.SYSERR.Copy("route center config missing")
}
var res Result
var link = fmt.Sprintf("http://%s:%d/getrecordlist?tabid=${database}&id=%s", host.Host, host.Port, name)
if buff := GetHttpResult(ctx, link); len(buff) == 0 {
ctx.Error("grasp database[%s] config failed", name)
return nil, utils.NETERR.Copy("grasp database config failed")
} else if err := json.Unmarshal(buff, &res); err != nil {
ctx.Error("grasp database[%s] config failed[%s]", name, err.Error())
return nil, utils.DATAERR.Copy(err.Error())
} else if res.Code < 0 {
ctx.Error("grasp database[%s] config failed[%s]", name, string(buff))
return nil, utils.ERROR
} else {
for _, v := range res.List {
if name == v.Name {
if utils.Atoi(v.Enabled) <= 0 {
ctx.Notice("database[%s] unavailable", name)
return nil, utils.NOTFOUND.Copy("database config unavailable")
}
var cfg = &dbx.Config{}
utils.Copy(cfg, v)
return cfg, nil
}
}
ctx.Notice("database[%s] config not found", name)
return nil, utils.NOTFOUND.Copy("database config not found")
}
}
Go
1
https://gitee.com/xungen/goweb.git
git@gitee.com:xungen/goweb.git
xungen
goweb
goweb
v0.0.8

搜索帮助