Compare commits

..

No commits in common. "c3cbe1cd927df9c94faa73d8a6417a71d18986bb" and "dc1674ec551c9ba24a16886d7076a3a91eefdd64" have entirely different histories.

12 changed files with 76 additions and 249 deletions

View File

@ -8,7 +8,6 @@ import (
"os" "os"
"os/signal" "os/signal"
"path" "path"
"path/filepath"
"strconv" "strconv"
"syscall" "syscall"
@ -16,10 +15,11 @@ import (
"git.defalsify.org/vise.git/logging" "git.defalsify.org/vise.git/logging"
"git.defalsify.org/vise.git/resource" "git.defalsify.org/vise.git/resource"
"git.grassecon.net/urdt/ussd/common"
"git.grassecon.net/urdt/ussd/config" "git.grassecon.net/urdt/ussd/config"
"git.grassecon.net/urdt/ussd/initializers" "git.grassecon.net/urdt/ussd/initializers"
"git.grassecon.net/urdt/ussd/internal/handlers" "git.grassecon.net/urdt/ussd/internal/handlers"
"git.grassecon.net/urdt/ussd/internal/http/at" httpserver "git.grassecon.net/urdt/ussd/internal/http/at"
"git.grassecon.net/urdt/ussd/internal/storage" "git.grassecon.net/urdt/ussd/internal/storage"
"git.grassecon.net/urdt/ussd/remote" "git.grassecon.net/urdt/ussd/remote"
) )
@ -37,32 +37,23 @@ func init() {
func main() { func main() {
config.LoadConfig() config.LoadConfig()
var connStr string var dbDir string
var resourceDir string var resourceDir string
var size uint var size uint
var database string var database string
var engineDebug bool var engineDebug bool
var host string var host string
var port uint var port uint
var err error flag.StringVar(&dbDir, "dbdir", ".state", "database dir to read from")
flag.StringVar(&resourceDir, "resourcedir", path.Join("services", "registration"), "resource dir") flag.StringVar(&resourceDir, "resourcedir", path.Join("services", "registration"), "resource dir")
flag.StringVar(&connStr, "c", ".", "connection string") flag.StringVar(&database, "db", "gdbm", "database to be used")
flag.BoolVar(&engineDebug, "d", false, "use engine debug output") flag.BoolVar(&engineDebug, "d", false, "use engine debug output")
flag.UintVar(&size, "s", 160, "max size of output") flag.UintVar(&size, "s", 160, "max size of output")
flag.StringVar(&host, "h", initializers.GetEnv("HOST", "127.0.0.1"), "http host") flag.StringVar(&host, "h", initializers.GetEnv("HOST", "127.0.0.1"), "http host")
flag.UintVar(&port, "p", initializers.GetEnvUint("PORT", 7123), "http port") flag.UintVar(&port, "p", initializers.GetEnvUint("PORT", 7123), "http port")
flag.Parse() flag.Parse()
if connStr == "." { logg.Infof("start command", "build", build, "dbdir", dbDir, "resourcedir", resourceDir, "outputsize", size)
connStr, err = filepath.Abs(".state/state.gdbm")
if err != nil {
fmt.Fprintf(os.Stderr, "auto connstr generate error: %v", err)
os.Exit(1)
}
}
logg.Infof("start command", "build", build, "dbdir", connStr, "resourcedir", resourceDir, "outputsize", size)
ctx := context.Background() ctx := context.Background()
ctx = context.WithValue(ctx, "Database", database) ctx = context.WithValue(ctx, "Database", database)
@ -79,14 +70,14 @@ func main() {
cfg.EngineDebug = true cfg.EngineDebug = true
} }
menuStorageService := storage.NewMenuStorageService(resourceDir) menuStorageService := storage.NewMenuStorageService(dbDir, resourceDir)
err = menuStorageService.SetConn(connStr) rs, err := menuStorageService.GetResource(ctx)
if err != nil { if err != nil {
fmt.Fprintf(os.Stderr, err.Error()) fmt.Fprintf(os.Stderr, err.Error())
os.Exit(1) os.Exit(1)
} }
rs, err := menuStorageService.GetResource(ctx) err = menuStorageService.EnsureDbDir()
if err != nil { if err != nil {
fmt.Fprintf(os.Stderr, err.Error()) fmt.Fprintf(os.Stderr, err.Error())
os.Exit(1) os.Exit(1)
@ -131,10 +122,10 @@ func main() {
defer stateStore.Close() defer stateStore.Close()
rp := &at.ATRequestParser{ rp := &at.ATRequestParser{
Context: ctx, context: ctx,
} }
bsh := handlers.NewBaseSessionHandler(cfg, rs, stateStore, userdataStore, rp, hl) bsh := handlers.NewBaseSessionHandler(cfg, rs, stateStore, userdataStore, rp, hl)
sh := at.NewATSessionHandler(bsh) sh := httpserver.NewATSessionHandler(bsh)
mux := http.NewServeMux() mux := http.NewServeMux()
mux.Handle(initializers.GetEnv("AT_ENDPOINT", "/"), sh) mux.Handle(initializers.GetEnv("AT_ENDPOINT", "/"), sh)

View File

@ -7,7 +7,6 @@ import (
"os" "os"
"os/signal" "os/signal"
"path" "path"
"path/filepath"
"syscall" "syscall"
"git.defalsify.org/vise.git/engine" "git.defalsify.org/vise.git/engine"
@ -48,33 +47,24 @@ func main() {
config.LoadConfig() config.LoadConfig()
var sessionId string var sessionId string
var connStr string var dbDir string
var resourceDir string var resourceDir string
var size uint var size uint
var database string var database string
var engineDebug bool var engineDebug bool
var host string var host string
var port uint var port uint
var err error
flag.StringVar(&sessionId, "session-id", "075xx2123", "session id") flag.StringVar(&sessionId, "session-id", "075xx2123", "session id")
flag.StringVar(&dbDir, "dbdir", ".state", "database dir to read from")
flag.StringVar(&resourceDir, "resourcedir", path.Join("services", "registration"), "resource dir") flag.StringVar(&resourceDir, "resourcedir", path.Join("services", "registration"), "resource dir")
flag.StringVar(&connStr, "c", ".", "connection string") flag.StringVar(&database, "db", "gdbm", "database to be used")
flag.BoolVar(&engineDebug, "d", false, "use engine debug output") flag.BoolVar(&engineDebug, "d", false, "use engine debug output")
flag.UintVar(&size, "s", 160, "max size of output") flag.UintVar(&size, "s", 160, "max size of output")
flag.StringVar(&host, "h", initializers.GetEnv("HOST", "127.0.0.1"), "http host") flag.StringVar(&host, "h", initializers.GetEnv("HOST", "127.0.0.1"), "http host")
flag.UintVar(&port, "p", initializers.GetEnvUint("PORT", 7123), "http port") flag.UintVar(&port, "p", initializers.GetEnvUint("PORT", 7123), "http port")
flag.Parse() flag.Parse()
if connStr == "." { logg.Infof("start command", "dbdir", dbDir, "resourcedir", resourceDir, "outputsize", size, "sessionId", sessionId)
connStr, err = filepath.Abs(".state/state.gdbm")
if err != nil {
fmt.Fprintf(os.Stderr, "auto connstr generate error: %v", err)
os.Exit(1)
}
}
logg.Infof("start command", "connstr", connStr, "resourcedir", resourceDir, "outputsize", size, "sessionId", sessionId)
ctx := context.Background() ctx := context.Background()
ctx = context.WithValue(ctx, "Database", database) ctx = context.WithValue(ctx, "Database", database)
@ -91,19 +81,18 @@ func main() {
cfg.EngineDebug = true cfg.EngineDebug = true
} }
menuStorageService := storage.NewMenuStorageService(resourceDir) menuStorageService := storage.NewMenuStorageService(dbDir, resourceDir)
err = menuStorageService.SetConn(connStr)
if err != nil {
fmt.Fprintf(os.Stderr, err.Error())
os.Exit(1)
}
rs, err := menuStorageService.GetResource(ctx) rs, err := menuStorageService.GetResource(ctx)
if err != nil { if err != nil {
fmt.Fprintf(os.Stderr, err.Error()) fmt.Fprintf(os.Stderr, err.Error())
os.Exit(1) os.Exit(1)
} }
err = menuStorageService.EnsureDbDir()
if err != nil {
fmt.Fprintf(os.Stderr, err.Error())
os.Exit(1)
}
userdataStore, err := menuStorageService.GetUserdataDb(ctx) userdataStore, err := menuStorageService.GetUserdataDb(ctx)
if err != nil { if err != nil {

View File

@ -8,7 +8,6 @@ import (
"os" "os"
"os/signal" "os/signal"
"path" "path"
"path/filepath"
"strconv" "strconv"
"syscall" "syscall"
@ -37,32 +36,23 @@ func init() {
func main() { func main() {
config.LoadConfig() config.LoadConfig()
var connStr string var dbDir string
var resourceDir string var resourceDir string
var size uint var size uint
var database string var database string
var engineDebug bool var engineDebug bool
var host string var host string
var port uint var port uint
var err error flag.StringVar(&dbDir, "dbdir", ".state", "database dir to read from")
flag.StringVar(&resourceDir, "resourcedir", path.Join("services", "registration"), "resource dir") flag.StringVar(&resourceDir, "resourcedir", path.Join("services", "registration"), "resource dir")
flag.StringVar(&connStr, "c", ".", "connection string") flag.StringVar(&database, "db", "gdbm", "database to be used")
flag.BoolVar(&engineDebug, "d", false, "use engine debug output") flag.BoolVar(&engineDebug, "d", false, "use engine debug output")
flag.UintVar(&size, "s", 160, "max size of output") flag.UintVar(&size, "s", 160, "max size of output")
flag.StringVar(&host, "h", initializers.GetEnv("HOST", "127.0.0.1"), "http host") flag.StringVar(&host, "h", initializers.GetEnv("HOST", "127.0.0.1"), "http host")
flag.UintVar(&port, "p", initializers.GetEnvUint("PORT", 7123), "http port") flag.UintVar(&port, "p", initializers.GetEnvUint("PORT", 7123), "http port")
flag.Parse() flag.Parse()
if connStr == "." { logg.Infof("start command", "dbdir", dbDir, "resourcedir", resourceDir, "outputsize", size)
connStr, err = filepath.Abs(".state/state.gdbm")
if err != nil {
fmt.Fprintf(os.Stderr, "auto connstr generate error: %v", err)
os.Exit(1)
}
}
logg.Infof("start command", "connstr", connStr, "resourcedir", resourceDir, "outputsize", size)
ctx := context.Background() ctx := context.Background()
ctx = context.WithValue(ctx, "Database", database) ctx = context.WithValue(ctx, "Database", database)
@ -79,14 +69,14 @@ func main() {
cfg.EngineDebug = true cfg.EngineDebug = true
} }
menuStorageService := storage.NewMenuStorageService(resourceDir) menuStorageService := storage.NewMenuStorageService(dbDir, resourceDir)
err = menuStorageService.SetConn(connStr) rs, err := menuStorageService.GetResource(ctx)
if err != nil { if err != nil {
fmt.Fprintf(os.Stderr, err.Error()) fmt.Fprintf(os.Stderr, err.Error())
os.Exit(1) os.Exit(1)
} }
rs, err := menuStorageService.GetResource(ctx) err = menuStorageService.EnsureDbDir()
if err != nil { if err != nil {
fmt.Fprintf(os.Stderr, err.Error()) fmt.Fprintf(os.Stderr, err.Error())
os.Exit(1) os.Exit(1)

View File

@ -6,7 +6,6 @@ import (
"fmt" "fmt"
"os" "os"
"path" "path"
"path/filepath"
"git.defalsify.org/vise.git/engine" "git.defalsify.org/vise.git/engine"
"git.defalsify.org/vise.git/logging" "git.defalsify.org/vise.git/logging"
@ -31,28 +30,19 @@ func init() {
func main() { func main() {
config.LoadConfig() config.LoadConfig()
var connStr string var dbDir string
var size uint var size uint
var sessionId string var sessionId string
var database string var database string
var engineDebug bool var engineDebug bool
var err error
flag.StringVar(&sessionId, "session-id", "075xx2123", "session id") flag.StringVar(&sessionId, "session-id", "075xx2123", "session id")
flag.StringVar(&connStr, "c", ".", "connection string") flag.StringVar(&database, "db", "gdbm", "database to be used")
flag.StringVar(&dbDir, "dbdir", ".state", "database dir to read from")
flag.BoolVar(&engineDebug, "d", false, "use engine debug output") flag.BoolVar(&engineDebug, "d", false, "use engine debug output")
flag.UintVar(&size, "s", 160, "max size of output") flag.UintVar(&size, "s", 160, "max size of output")
flag.Parse() flag.Parse()
if connStr == "." { logg.Infof("start command", "dbdir", dbDir, "outputsize", size)
connStr, err = filepath.Abs(".state/state.gdbm")
if err != nil {
fmt.Fprintf(os.Stderr, "auto connstr generate error: %v", err)
os.Exit(1)
}
}
logg.Infof("start command", "connstr", connStr, "outputsize", size)
ctx := context.Background() ctx := context.Background()
ctx = context.WithValue(ctx, "SessionId", sessionId) ctx = context.WithValue(ctx, "SessionId", sessionId)
@ -68,9 +58,9 @@ func main() {
} }
resourceDir := scriptDir resourceDir := scriptDir
menuStorageService := storage.NewMenuStorageService(resourceDir) menuStorageService := storage.NewMenuStorageService(dbDir, resourceDir)
err = menuStorageService.SetConn(connStr) err := menuStorageService.EnsureDbDir()
if err != nil { if err != nil {
fmt.Fprintf(os.Stderr, err.Error()) fmt.Fprintf(os.Stderr, err.Error())
os.Exit(1) os.Exit(1)

View File

@ -23,19 +23,17 @@ type StorageServices interface {
GetPersister(ctx context.Context) (*persist.Persister, error) GetPersister(ctx context.Context) (*persist.Persister, error)
GetUserdataDb(ctx context.Context) (db.Db, error) GetUserdataDb(ctx context.Context) (db.Db, error)
GetResource(ctx context.Context) (resource.Resource, error) GetResource(ctx context.Context) (resource.Resource, error)
SetConn(connStr string) error EnsureDbDir() error
} }
type StorageService struct { type StorageService struct {
svc *storage.MenuStorageService svc *storage.MenuStorageService
} }
func NewStorageService(connStr string) (*StorageService, error) { func NewStorageService(dbDir string) *StorageService {
svc := &StorageService{ return &StorageService{
svc: storage.NewMenuStorageService(""), svc: storage.NewMenuStorageService(dbDir, ""),
} }
err := svc.SetConn(connStr)
return svc, err
} }
func(ss *StorageService) GetPersister(ctx context.Context) (*persist.Persister, error) { func(ss *StorageService) GetPersister(ctx context.Context) (*persist.Persister, error) {
@ -50,6 +48,6 @@ func(ss *StorageService) GetResource(ctx context.Context) (resource.Resource, er
return nil, errors.New("not implemented") return nil, errors.New("not implemented")
} }
func(ss *StorageService) SetConn(connStr string) error { func(ss *StorageService) EnsureDbDir() error {
return ss.svc.SetConn(connStr) return ss.svc.EnsureDbDir()
} }

View File

@ -7,7 +7,6 @@ import (
"fmt" "fmt"
"os" "os"
"path" "path"
"path/filepath"
"git.defalsify.org/vise.git/logging" "git.defalsify.org/vise.git/logging"
"git.grassecon.net/urdt/ussd/config" "git.grassecon.net/urdt/ussd/config"
@ -29,38 +28,23 @@ func init() {
func main() { func main() {
config.LoadConfig() config.LoadConfig()
var connStr string var dbDir string
var sessionId string var sessionId string
var database string var database string
var engineDebug bool var engineDebug bool
var err error
flag.StringVar(&sessionId, "session-id", "075xx2123", "session id") flag.StringVar(&sessionId, "session-id", "075xx2123", "session id")
flag.StringVar(&connStr, "c", ".", "connection string") flag.StringVar(&database, "db", "gdbm", "database to be used")
flag.StringVar(&dbDir, "dbdir", ".state", "database dir to read from")
flag.BoolVar(&engineDebug, "d", false, "use engine debug output") flag.BoolVar(&engineDebug, "d", false, "use engine debug output")
flag.Parse() flag.Parse()
if connStr == "." {
connStr, err = filepath.Abs(".state/state.gdbm")
if err != nil {
fmt.Fprintf(os.Stderr, "auto connstr generate error: %v", err)
os.Exit(1)
}
}
logg.Infof("start command", "connstr", connStr)
ctx := context.Background() ctx := context.Background()
ctx = context.WithValue(ctx, "SessionId", sessionId) ctx = context.WithValue(ctx, "SessionId", sessionId)
ctx = context.WithValue(ctx, "Database", database) ctx = context.WithValue(ctx, "Database", database)
resourceDir := scriptDir resourceDir := scriptDir
menuStorageService := storage.NewMenuStorageService(resourceDir) menuStorageService := storage.NewMenuStorageService(dbDir, resourceDir)
err = menuStorageService.SetConn(connStr)
if err != nil {
fmt.Fprintf(os.Stderr, "connection string error: %v", err)
os.Exit(1)
}
store, err := menuStorageService.GetUserdataDb(ctx) store, err := menuStorageService.GetUserdataDb(ctx)
if err != nil { if err != nil {

View File

@ -6,7 +6,6 @@ import (
"fmt" "fmt"
"os" "os"
"path" "path"
"path/filepath"
"git.grassecon.net/urdt/ussd/config" "git.grassecon.net/urdt/ussd/config"
"git.grassecon.net/urdt/ussd/initializers" "git.grassecon.net/urdt/ussd/initializers"
@ -29,36 +28,23 @@ func init() {
func main() { func main() {
config.LoadConfig() config.LoadConfig()
var connStr string var dbDir string
var sessionId string var sessionId string
var database string var database string
var engineDebug bool var engineDebug bool
var err error
flag.StringVar(&sessionId, "session-id", "075xx2123", "session id") flag.StringVar(&sessionId, "session-id", "075xx2123", "session id")
flag.StringVar(&connStr, "c", ".state", "connection string") flag.StringVar(&database, "db", "gdbm", "database to be used")
flag.StringVar(&dbDir, "dbdir", ".state", "database dir to read from")
flag.BoolVar(&engineDebug, "d", false, "use engine debug output") flag.BoolVar(&engineDebug, "d", false, "use engine debug output")
flag.Parse() flag.Parse()
if connStr == "." {
connStr, err = filepath.Abs(".state/state.gdbm")
if err != nil {
fmt.Fprintf(os.Stderr, "auto connstr generate error: %v", err)
os.Exit(1)
}
}
ctx := context.Background() ctx := context.Background()
ctx = context.WithValue(ctx, "SessionId", sessionId) ctx = context.WithValue(ctx, "SessionId", sessionId)
ctx = context.WithValue(ctx, "Database", database) ctx = context.WithValue(ctx, "Database", database)
resourceDir := scriptDir resourceDir := scriptDir
menuStorageService := storage.NewMenuStorageService(resourceDir) menuStorageService := storage.NewMenuStorageService(dbDir, resourceDir)
err = menuStorageService.SetConn(connStr)
if err != nil {
fmt.Fprintf(os.Stderr, "connection string error: %v", err)
os.Exit(1)
}
store, err := menuStorageService.GetUserdataDb(ctx) store, err := menuStorageService.GetUserdataDb(ctx)
if err != nil { if err != nil {

View File

@ -15,7 +15,7 @@ import (
) )
type ATRequestParser struct { type ATRequestParser struct {
Context context.Context context context.Context
} }
func (arp *ATRequestParser) GetSessionId(rq any) (string, error) { func (arp *ATRequestParser) GetSessionId(rq any) (string, error) {
@ -43,7 +43,7 @@ func (arp *ATRequestParser) GetSessionId(rq any) (string, error) {
decodedStr := string(logBytes) decodedStr := string(logBytes)
sessionId, err := extractATSessionId(decodedStr) sessionId, err := extractATSessionId(decodedStr)
if err != nil { if err != nil {
context.WithValue(arp.Context, "at-session-id", sessionId) context.WithValue(arp.context, "at-session-id", sessionId)
} }
logg.Debugf("Received request:", decodedStr) logg.Debugf("Received request:", decodedStr)
} }

View File

@ -1,11 +1,5 @@
package storage package storage
import (
"fmt"
"net/url"
"path"
)
const ( const (
DBTYPE_MEM = iota DBTYPE_MEM = iota
DBTYPE_GDBM DBTYPE_GDBM
@ -17,56 +11,11 @@ type connData struct {
str string str string
} }
func (cd *connData) DbType() int { func toConnData(s string) connData {
return cd.typ
}
func (cd *connData) String() string {
return cd.str
}
func probePostgres(s string) (string, bool) {
v, err := url.Parse(s)
if err != nil {
return "", false
}
if v.Scheme != "postgres" {
return "", false
}
return s, true
}
func probeGdbm(s string) (string, bool) {
if !path.IsAbs(s) {
return "", false
}
if path.Ext(s) != ".gdbm" {
return "", false
}
s = path.Clean(s)
return s, true
}
func toConnData(connStr string) (connData, error) {
var o connData var o connData
if connStr == "" { if s == "" {
return o, nil return o
} }
return o
v, ok := probePostgres(connStr)
if ok {
o.typ = DBTYPE_POSTGRES
o.str = v
return o, nil
}
v, ok = probeGdbm(connStr)
if ok {
o.typ = DBTYPE_GDBM
o.str = v
return o, nil
}
return o, fmt.Errorf("invalid connection string: %s", connStr)
} }

View File

@ -1,37 +0,0 @@
package storage
import (
"testing"
)
func TestParseConnStr(t *testing.T) {
svc := NewMenuStorageService("")
err := svc.SetConn("postgres://foo:bar@localhost:5432/baz")
if err != nil {
t.Fatal(err)
}
err = svc.SetConn("/foo/bar/baz.gdbm")
if err != nil {
t.Fatal(err)
}
err = svc.SetConn("foo/bar/baz.gdbm")
if err == nil {
t.Fatalf("expected error")
}
err = svc.SetConn("http://foo/bar")
if err == nil {
t.Fatalf("expected error")
}
err = svc.SetConn("foo/bar/baz.txt")
if err == nil {
t.Fatalf("expected error")
}
err = svc.SetConn("/foo/bar")
if err == nil {
t.Fatalf("expected error")
}
err = svc.SetConn("foo/bar")
if err == nil {
t.Fatalf("expected error")
}
}

View File

@ -4,6 +4,7 @@ import (
"context" "context"
"fmt" "fmt"
"os" "os"
"path"
"git.defalsify.org/vise.git/db" "git.defalsify.org/vise.git/db"
fsdb "git.defalsify.org/vise.git/db/fs" fsdb "git.defalsify.org/vise.git/db/fs"
@ -23,12 +24,11 @@ type StorageService interface {
GetPersister(ctx context.Context) (*persist.Persister, error) GetPersister(ctx context.Context) (*persist.Persister, error)
GetUserdataDb(ctx context.Context) db.Db GetUserdataDb(ctx context.Context) db.Db
GetResource(ctx context.Context) (resource.Resource, error) GetResource(ctx context.Context) (resource.Resource, error)
SetConn(connStr string) error EnsureDbDir() error
} }
type MenuStorageService struct { type MenuStorageService struct {
//dbDir string dbDir string
conn connData
resourceDir string resourceDir string
resourceStore db.Db resourceStore db.Db
stateStore db.Db stateStore db.Db
@ -51,47 +51,36 @@ func buildConnStr() string {
return connString return connString
} }
func NewMenuStorageService(resourceDir string) *MenuStorageService { func NewMenuStorageService(dbDir string, resourceDir string) *MenuStorageService {
return &MenuStorageService{ return &MenuStorageService{
dbDir: dbDir,
resourceDir: resourceDir, resourceDir: resourceDir,
} }
} }
func (ms *MenuStorageService) SetConn(connStr string) error {
o, err := toConnData(connStr)
if err != nil {
return err
}
ms.conn = o
return nil
}
func (ms *MenuStorageService) getOrCreateDb(ctx context.Context, existingDb db.Db, fileName string) (db.Db, error) { func (ms *MenuStorageService) getOrCreateDb(ctx context.Context, existingDb db.Db, fileName string) (db.Db, error) {
var newDb db.Db database, ok := ctx.Value("Database").(string)
var err error if !ok {
// database, ok := ctx.Value("Database").(string) return nil, fmt.Errorf("failed to select the database")
// if !ok { }
// return nil, fmt.Errorf("failed to select the database")
// }
if existingDb != nil { if existingDb != nil {
return existingDb, nil return existingDb, nil
} }
var newDb db.Db
var err error
dbTyp := ms.conn.DbType() if database == "postgres" {
if dbTyp == DBTYPE_POSTGRES {
newDb = postgres.NewPgDb() newDb = postgres.NewPgDb()
} else if dbTyp == DBTYPE_GDBM { connStr := buildConnStr()
err = ms.ensureDbDir() err = newDb.Connect(ctx, connStr)
if err != nil {
return nil, err
}
newDb = gdbmstorage.NewThreadGdbmDb()
} else { } else {
return nil, fmt.Errorf("unsupported connection string: %s", ms.conn.String()) newDb = gdbmstorage.NewThreadGdbmDb()
storeFile := path.Join(ms.dbDir, fileName)
err = newDb.Connect(ctx, storeFile)
} }
err = newDb.Connect(ctx, ms.conn.String())
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -148,8 +137,8 @@ func (ms *MenuStorageService) GetStateStore(ctx context.Context) (db.Db, error)
return ms.stateStore, nil return ms.stateStore, nil
} }
func (ms *MenuStorageService) ensureDbDir() error { func (ms *MenuStorageService) EnsureDbDir() error {
err := os.MkdirAll(ms.conn.String(), 0700) err := os.MkdirAll(ms.dbDir, 0700)
if err != nil { if err != nil {
return fmt.Errorf("state dir create exited with error: %v\n", err) return fmt.Errorf("state dir create exited with error: %v\n", err)
} }

View File

@ -41,11 +41,9 @@ func TestEngine(sessionId string) (engine.Engine, func(), chan bool) {
dbDir := ".test_state" dbDir := ".test_state"
resourceDir := scriptDir resourceDir := scriptDir
//menuStorageService := storage.NewMenuStorageService(dbDir, resourceDir) menuStorageService := storage.NewMenuStorageService(dbDir, resourceDir)
menuStorageService := storage.NewMenuStorageService(resourceDir)
//err := menuStorageService.EnsureDbDir() err := menuStorageService.EnsureDbDir()
err := menuStorageService.SetConn(dbDir)
if err != nil { if err != nil {
fmt.Fprintf(os.Stderr, err.Error()) fmt.Fprintf(os.Stderr, err.Error())
os.Exit(1) os.Exit(1)