代码拉取完成,页面将自动刷新
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")
}
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。