Enable db text/binary mode set in override, config

This commit is contained in:
lash 2025-01-22 09:37:11 +00:00
parent d5e636fbd6
commit 8530c45074
Signed by: lash
GPG Key ID: 21D2E7BB88C2A746
4 changed files with 62 additions and 14 deletions

View File

@ -15,12 +15,27 @@ var (
DefaultLanguage string DefaultLanguage string
dbConn string dbConn string
dbConnMissing bool dbConnMissing bool
dbConnMode storage.DbMode
stateDbConn string stateDbConn string
stateDbConnMode storage.DbMode
resourceDbConn string resourceDbConn string
resourceDbConnMode storage.DbMode
userDbConn string userDbConn string
userDbConnMode storage.DbMode
Languages []string Languages []string
) )
type Override struct {
DbConn *string
DbConnMode storage.DbMode
StateConn *string
StateConnMode storage.DbMode
ResourceConn *string
ResourceConnMode storage.DbMode
UserConn *string
UserConnMode storage.DbMode
}
func setLanguage() error { func setLanguage() error {
defaultLanguage = env.GetEnv("DEFAULT_LANGUAGE", defaultLanguage) defaultLanguage = env.GetEnv("DEFAULT_LANGUAGE", defaultLanguage)
languages = strings.Split(env.GetEnv("LANGUAGES", defaultLanguage), ",") languages = strings.Split(env.GetEnv("LANGUAGES", defaultLanguage), ",")
@ -47,19 +62,24 @@ func setConn() error {
return nil return nil
} }
func ApplyConn(connStr *string, stateConnStr *string, resourceConnStr *string, userConnStr *string) { func ApplyConn(override *Override) {
logg.Infof("applyconn", "state", stateConnStr, "user", userConnStr) if override.DbConn != nil {
if connStr != nil { dbConn = *override.DbConn
dbConn = *connStr dbConnMode = override.DbConnMode
} }
if stateConnStr != nil { if override.StateConn != nil {
stateDbConn = *stateConnStr stateDbConn = *override.StateConn
stateDbConnMode = override.StateConnMode
} }
if resourceConnStr != nil { if override.ResourceConn != nil {
resourceDbConn = *resourceConnStr resourceDbConn = *override.ResourceConn
resourceDbConnMode = override.ResourceConnMode
} }
if userConnStr != nil { if override.UserConn != nil {
userDbConn = *userConnStr userDbConn = *override.UserConn
if override.UserConnMode != storage.DBMODE_BINARY {
logg.Warnf("user db non-binary mode ignored")
}
} }
if dbConn == "?" { if dbConn == "?" {
@ -68,28 +88,31 @@ func ApplyConn(connStr *string, stateConnStr *string, resourceConnStr *string, u
if stateDbConn == "?" { if stateDbConn == "?" {
stateDbConn = dbConn stateDbConn = dbConn
stateDbConnMode = dbConnMode
} }
if resourceDbConn == "?" { if resourceDbConn == "?" {
resourceDbConn = dbConn resourceDbConn = dbConn
resourceDbConnMode = dbConnMode
} }
if userDbConn == "?" { if userDbConn == "?" {
userDbConn = dbConn userDbConn = dbConn
//userDbConnMode = dbConnMode
} }
} }
func GetConns() (storage.Conns, error) { func GetConns() (storage.Conns, error) {
o := storage.NewConns() o := storage.NewConns()
c, err := storage.ToConnData(stateDbConn) c, err := storage.ToConnDataMode(stateDbConn, stateDbConnMode)
if err != nil { if err != nil {
return o, err return o, err
} }
o.Set(c, storage.STORETYPE_STATE) o.Set(c, storage.STORETYPE_STATE)
c, err = storage.ToConnData(resourceDbConn) c, err = storage.ToConnDataMode(resourceDbConn, resourceDbConnMode)
if err != nil { if err != nil {
return o, err return o, err
} }
o.Set(c, storage.STORETYPE_RESOURCE) o.Set(c, storage.STORETYPE_RESOURCE)
c, err = storage.ToConnData(userDbConn) c, err = storage.ToConnDataMode(userDbConn, userDbConnMode)
if err != nil { if err != nil {
return o, err return o, err
} }

View File

@ -5,6 +5,8 @@ import (
"net/url" "net/url"
) )
type DbMode uint8
const ( const (
DBTYPE_NONE = iota DBTYPE_NONE = iota
DBTYPE_MEM DBTYPE_MEM
@ -13,6 +15,11 @@ const (
DBTYPE_POSTGRES DBTYPE_POSTGRES
) )
const (
DBMODE_BINARY DbMode = iota
DBMODE_TEXT
)
const ( const (
STORETYPE_STATE = iota STORETYPE_STATE = iota
STORETYPE_RESOURCE STORETYPE_RESOURCE
@ -52,6 +59,7 @@ type ConnData struct {
typ int typ int
str string str string
domain string domain string
mode DbMode
} }
func (cd *ConnData) DbType() int { func (cd *ConnData) DbType() int {
@ -66,6 +74,10 @@ func (cd *ConnData) Domain() string {
return cd.domain return cd.domain
} }
func (cd *ConnData) Mode() DbMode {
return cd.mode
}
func (cd *ConnData) Path() string { func (cd *ConnData) Path() string {
v, _ := url.Parse(cd.str) v, _ := url.Parse(cd.str)
v.RawQuery = "" v.RawQuery = ""

View File

@ -61,6 +61,15 @@ func probeMem(s string) (string, string, bool) {
return "", "", true return "", "", true
} }
func ToConnDataMode(connStr string, mode DbMode) (ConnData, error) {
o, err := ToConnData(connStr)
if err != nil {
return o, err
}
o.mode = mode
return o, nil
}
func ToConnData(connStr string) (ConnData, error) { func ToConnData(connStr string) (ConnData, error) {
var o ConnData var o ConnData

View File

@ -105,7 +105,11 @@ func (ms *MenuStorageService) getOrCreateDb(ctx context.Context, section string,
if err != nil { if err != nil {
return nil, err return nil, err
} }
newDb = fsdb.NewFsDb().WithBinary() fsdbInstance := fsdb.NewFsDb()
if connData.Mode() == DBMODE_BINARY {
fsdbInstance = fsdbInstance.WithBinary()
}
newDb = fsdbInstance
} else if dbTyp == DBTYPE_MEM { } else if dbTyp == DBTYPE_MEM {
logg.WarnCtxf(ctx, "using volatile storage (memdb)") logg.WarnCtxf(ctx, "using volatile storage (memdb)")
newDb = memdb.NewMemDb() newDb = memdb.NewMemDb()