Compare commits

..

No commits in common. "master" and "lash/custom-engine" have entirely different histories.

18 changed files with 222 additions and 246 deletions

View File

@ -1,16 +1,15 @@
package config
import (
"strconv"
"strings"
"git.defalsify.org/vise.git/logging"
"git.grassecon.net/grassrootseconomics/visedriver/env"
"git.grassecon.net/grassrootseconomics/visedriver/storage"
slogging "github.com/grassrootseconomics/go-vise/slog"
)
var (
logg = slogging.Get().With("component", "visedriver-config")
logg = logging.NewVanilla().WithDomain("visedriver-config")
defaultLanguage = "eng"
languages []string
DefaultLanguage string
@ -24,7 +23,6 @@ var (
userDbConn string
userDbConnMode storage.DbMode
Languages []string
configManager *Config
)
type Override struct {
@ -136,17 +134,6 @@ func GetConns() (storage.Conns, error) {
// LoadConfig initializes the configuration values after environment variables are loaded.
func LoadConfig() error {
configManager = NewConfig()
// Add configuration keys with validation
configManager.AddKey("HOST", "127.0.0.1", false, nil)
configManager.AddKey("PORT", "7123", false, func(v string) error {
_, err := strconv.Atoi(v)
return err
})
configManager.AddKey("DB_CONN", "", true, nil)
// ... add other keys ? or is enough :/ ...
err := setConn()
if err != nil {
return err
@ -158,7 +145,5 @@ func LoadConfig() error {
DefaultLanguage = defaultLanguage
Languages = languages
// Report configuration
configManager.Report("INFO")
return nil
}

View File

@ -1,64 +0,0 @@
//go:build configreport
// +build configreport
package config
import (
"fmt"
"os"
"testing"
slogging "github.com/grassrootseconomics/go-vise/slog"
)
// go test -tags configreport ./config/... ---> run with tag
func TestConfig(t *testing.T) {
logger := slogging.Get().With("component", "test")
cfg := NewConfig(logger)
t.Run("Default Values", func(t *testing.T) {
cfg.AddKey("TEST_KEY", "default", false, nil)
value, err := cfg.GetValue("TEST_KEY")
t.Logf("Got value: %q, error: %v", value, err)
if err != nil {
t.Errorf("unexpected error: %v", err)
}
if value != "default" {
t.Errorf("expected 'default', got '%s'", value)
}
})
t.Run("Environment Override", func(t *testing.T) {
os.Setenv("TEST_ENV_KEY", "override")
defer os.Unsetenv("TEST_ENV_KEY")
cfg.AddKey("TEST_ENV_KEY", "default", false, nil)
value, err := cfg.GetValue("TEST_ENV_KEY")
t.Logf("Got value: %q, error: %v", value, err)
if err != nil {
t.Errorf("unexpected error: %v", err)
}
if value != "override" {
t.Errorf("expected 'override', got '%s'", value)
}
})
t.Run("Validation", func(t *testing.T) {
validator := func(v string) error {
if v != "valid" {
return fmt.Errorf("invalid value")
}
return nil
}
cfg.AddKey("VALIDATED_KEY", "valid", false, validator)
os.Setenv("VALIDATED_KEY", "invalid")
defer os.Unsetenv("VALIDATED_KEY")
value, err := cfg.GetValue("VALIDATED_KEY")
t.Logf("Got value: %q, error: %v", value, err)
if err == nil {
t.Error("expected validation error, got nil")
}
})
}

View File

@ -1,84 +0,0 @@
//go:build configreport
package config
import (
"fmt"
"git.grassecon.net/grassrootseconomics/visedriver/env"
slogging "github.com/grassrootseconomics/go-vise/slog"
)
// ConfigValue represents a configuration key-value pair
type ConfigValue struct {
Key string
Default string
Validator func(string) error
Sensitive bool
}
// Config handles configuration management and reporting
type Config struct {
values map[string]ConfigValue
logger *slogging.Slog
}
func NewConfig(logging interface{}) *Config {
return &Config{
values: make(map[string]ConfigValue),
logger: slogging.Get().With("component", "visedriver-config-reporter"),
}
}
// AddKey registers a new configuration key with optional validation
func (c *Config) AddKey(key string, defaultValue string, sensitive bool, validator func(string) error) {
c.values[key] = ConfigValue{
Key: key,
Default: defaultValue,
Validator: validator,
Sensitive: sensitive,
}
}
// GetValue returns the value for a given key, applying environment override if present
func (c *Config) GetValue(key string) (string, error) {
// Find config value by key
var cv ConfigValue
for _, v := range c.values {
if v.Key == key {
cv = v
break
}
}
if cv.Key == "" {
return "", fmt.Errorf("configuration key not found: %s", key)
}
// Get value from environment or default
value := env.GetEnv(key, cv.Default)
// Validate if validator exists
if cv.Validator != nil && cv.Validator(value) != nil {
return "", fmt.Errorf("invalid value for key %s", key)
}
return value, nil
}
// Report outputs all configuration values at the specified log level
func (c *Config) Report(level string) {
for _, cv := range c.values {
value, err := c.GetValue(cv.Key)
if err != nil {
c.logger.Errorf("Error getting value for %s: %v", cv.Key, err)
continue
}
if cv.Sensitive {
value = "****"
}
c.logger.Debugf("config set", cv.Key, value)
}
}

View File

@ -1,18 +0,0 @@
//go:build !configreport
package config
type Config struct{}
func NewConfig() *Config {
return &Config{}
}
func (c *Config) AddKey(key string, defaultValue string, sensitive bool, validator func(string) error) {
}
func (c *Config) GetValue(key string) (string, error) {
return "", nil
}
func (c *Config) Report(level string) {}

View File

@ -10,7 +10,7 @@ This document describes component versions:
## User profile data
All user profile items are stored under keys matching the user's session id, prefixed with the 8-bit value `github.com/grassrootseconomics/go-vise/db.DATATYPE_USERDATA` (32), and followed with a 16-big big-endian value subprefix.
All user profile items are stored under keys matching the user's session id, prefixed with the 8-bit value `git.defalsify.org/vise.git/db.DATATYPE_USERDATA` (32), and followed with a 16-big big-endian value subprefix.
For example, given the sessionId `+254123` and the key `git.grassecon.net/urdt-ussd/common.DATA_PUBLIC_KEY` (2) will be stored under the key:

View File

@ -3,8 +3,8 @@ package entry
import (
"context"
"github.com/grassrootseconomics/go-vise/persist"
"github.com/grassrootseconomics/go-vise/resource"
"git.defalsify.org/vise.git/persist"
"git.defalsify.org/vise.git/resource"
)
type EntryHandler interface {

20
go.mod
View File

@ -1,27 +1,27 @@
module git.grassecon.net/grassrootseconomics/visedriver
go 1.24
toolchain go1.24.6
go 1.23.0
require (
github.com/grassrootseconomics/go-vise v0.5.0
github.com/jackc/pgx/v5 v5.7.5
git.defalsify.org/vise.git v0.2.3-0.20250204132233-2bffe532f21e
github.com/jackc/pgx/v5 v5.7.1
github.com/joho/godotenv v1.5.1
)
require (
github.com/barbashov/iso639-3 v0.0.0-20211020172741-1f4ffb2d8d1c // indirect
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
github.com/fxamacker/cbor/v2 v2.9.0 // indirect
github.com/fxamacker/cbor/v2 v2.4.0 // indirect
github.com/graygnuorg/go-gdbm v0.0.0-20220711140707-71387d66dce4 // indirect
github.com/jackc/pgpassfile v1.0.0 // indirect
github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761 // indirect
github.com/jackc/puddle/v2 v2.2.2 // indirect
github.com/leonelquinteros/gotext v1.7.2 // indirect
github.com/mattn/kinako v0.0.0-20170717041458-332c0a7e205a // indirect
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
github.com/stretchr/testify v1.9.0 // indirect
github.com/x448/float16 v0.8.4 // indirect
golang.org/x/crypto v0.40.0 // indirect
golang.org/x/sync v0.16.0 // indirect
golang.org/x/text v0.27.0 // indirect
golang.org/x/crypto v0.27.0 // indirect
golang.org/x/sync v0.8.0 // indirect
golang.org/x/text v0.18.0 // indirect
gopkg.in/leonelquinteros/gotext.v1 v1.3.1 // indirect
)

38
go.sum
View File

@ -1,28 +1,28 @@
git.defalsify.org/vise.git v0.2.3-0.20250204132233-2bffe532f21e h1:gtB9OdX6x5gQRM3W824dEurXuuf/YPInqgtv2KAp5Zo=
git.defalsify.org/vise.git v0.2.3-0.20250204132233-2bffe532f21e/go.mod h1:jyBMe1qTYUz3mmuoC9JQ/TvFeW0vTanCUcPu3H8p4Ck=
github.com/barbashov/iso639-3 v0.0.0-20211020172741-1f4ffb2d8d1c h1:H9Nm+I7Cg/YVPpEV1RzU3Wq2pjamPc/UtHDgItcb7lE=
github.com/barbashov/iso639-3 v0.0.0-20211020172741-1f4ffb2d8d1c/go.mod h1:rGod7o6KPeJ+hyBpHfhi4v7blx9sf+QsHsA7KAsdN6U=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM=
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/fxamacker/cbor/v2 v2.9.0 h1:NpKPmjDBgUfBms6tr6JZkTHtfFGcMKsw3eGcmD/sapM=
github.com/fxamacker/cbor/v2 v2.9.0/go.mod h1:vM4b+DJCtHn+zz7h3FFp/hDAI9WNWCsZj23V5ytsSxQ=
github.com/grassrootseconomics/go-vise v0.5.0 h1:FRg2de55Eb5SisrgTBeFWfWX+sXwp5q9r7YWtKWDwsk=
github.com/grassrootseconomics/go-vise v0.5.0/go.mod h1:b2/q4jfTu2i1wyUwYUu7FYq4m2f1AZv8MpiDM3ZcoGo=
github.com/fxamacker/cbor/v2 v2.4.0 h1:ri0ArlOR+5XunOP8CRUowT0pSJOwhW098ZCUyskZD88=
github.com/fxamacker/cbor/v2 v2.4.0/go.mod h1:TA1xS00nchWmaBnEIxPSE5oHLuJBAVvqrtAnWBwBCVo=
github.com/graygnuorg/go-gdbm v0.0.0-20220711140707-71387d66dce4 h1:U4kkNYryi/qfbBF8gh7Vsbuz+cVmhf5kt6pE9bYYyLo=
github.com/graygnuorg/go-gdbm v0.0.0-20220711140707-71387d66dce4/go.mod h1:zpZDgZFzeq9s0MIeB1P50NIEWDFFHSFBohI/NbaTD/Y=
github.com/jackc/pgpassfile v1.0.0 h1:/6Hmqy13Ss2zCq62VdNG8tM1wchn8zjSGOBJ6icpsIM=
github.com/jackc/pgpassfile v1.0.0/go.mod h1:CEx0iS5ambNFdcRtxPj5JhEz+xB6uRky5eyVu/W2HEg=
github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761 h1:iCEnooe7UlwOQYpKFhBabPMi4aNAfoODPEFNiAnClxo=
github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761/go.mod h1:5TJZWKEWniPve33vlWYSoGYefn3gLQRzjfDlhSJ9ZKM=
github.com/jackc/pgx/v5 v5.7.5 h1:JHGfMnQY+IEtGM63d+NGMjoRpysB2JBwDr5fsngwmJs=
github.com/jackc/pgx/v5 v5.7.5/go.mod h1:aruU7o91Tc2q2cFp5h4uP3f6ztExVpyVv88Xl/8Vl8M=
github.com/jackc/pgx/v5 v5.7.1 h1:x7SYsPBYDkHDksogeSmZZ5xzThcTgRz++I5E+ePFUcs=
github.com/jackc/pgx/v5 v5.7.1/go.mod h1:e7O26IywZZ+naJtWWos6i6fvWK+29etgITqrqHLfoZA=
github.com/jackc/puddle/v2 v2.2.2 h1:PR8nw+E/1w0GLuRFSmiioY6UooMp6KJv0/61nB7icHo=
github.com/jackc/puddle/v2 v2.2.2/go.mod h1:vriiEXHvEE654aYKXXjOvZM39qJ0q+azkZFrfEOc3H4=
github.com/joho/godotenv v1.5.1 h1:7eLL/+HRGLY0ldzfGMeQkb7vMd0as4CfYvUVzLqw0N0=
github.com/joho/godotenv v1.5.1/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4=
github.com/leonelquinteros/gotext v1.7.2 h1:bDPndU8nt+/kRo1m4l/1OXiiy2v7Z7dfPQ9+YP7G1Mc=
github.com/leonelquinteros/gotext v1.7.2/go.mod h1:9/haCkm5P7Jay1sxKDGJ5WIg4zkz8oZKw4ekNpALob8=
github.com/lmittmann/tint v1.1.2 h1:2CQzrL6rslrsyjqLDwD11bZ5OpLBPU+g3G/r5LSfS8w=
github.com/lmittmann/tint v1.1.2/go.mod h1:HIS3gSy7qNwGCj+5oRjAutErFBl4BzdQP6cJZ0NfMwE=
github.com/pashagolub/pgxmock/v4 v4.7.0 h1:de2ORuFYyjwOQR7NBm57+321RnZxpYiuUjsmqRiqgh8=
github.com/pashagolub/pgxmock/v4 v4.7.0/go.mod h1:9L57pC193h2aKRHVyiiE817avasIPZnPwPlw3JczWvM=
github.com/mattn/kinako v0.0.0-20170717041458-332c0a7e205a h1:0Q3H0YXzMHiciXtRcM+j0jiCe8WKPQHoRgQiRTnfcLY=
github.com/mattn/kinako v0.0.0-20170717041458-332c0a7e205a/go.mod h1:CdTTBOYzS5E4mWS1N8NWP6AHI19MP0A2B18n3hLzRMk=
github.com/pashagolub/pgxmock/v4 v4.3.0 h1:DqT7fk0OCK6H0GvqtcMsLpv8cIwWqdxWgfZNLeHCb/s=
github.com/pashagolub/pgxmock/v4 v4.3.0/go.mod h1:9VoVHXwS3XR/yPtKGzwQvwZX1kzGB9sM8SviDcHDa3A=
github.com/peteole/testdata-loader v0.3.0 h1:8jckE9KcyNHgyv/VPoaljvKZE0Rqr8+dPVYH6rfNr9I=
github.com/peteole/testdata-loader v0.3.0/go.mod h1:Mt0ZbRtb56u8SLJpNP+BnQbENljMorYBpqlvt3cS83U=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
@ -35,13 +35,15 @@ github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsT
github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
github.com/x448/float16 v0.8.4 h1:qLwI1I70+NjRFUR3zs1JPUCgaCXSh3SW62uAKT1mSBM=
github.com/x448/float16 v0.8.4/go.mod h1:14CWIYCyZA/cWjXOioeEpHeN/83MdbZDRQHoFcYsOfg=
golang.org/x/crypto v0.40.0 h1:r4x+VvoG5Fm+eJcxMaY8CQM7Lb0l1lsmjGBQ6s8BfKM=
golang.org/x/crypto v0.40.0/go.mod h1:Qr1vMER5WyS2dfPHAlsOj01wgLbsyWtFn/aY+5+ZdxY=
golang.org/x/sync v0.16.0 h1:ycBJEhp9p4vXvUZNszeOq0kGTPghopOL8q0fq3vstxw=
golang.org/x/sync v0.16.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA=
golang.org/x/text v0.27.0 h1:4fGWRpyh641NLlecmyl4LOe6yDdfaYNrGb2zdfo4JV4=
golang.org/x/text v0.27.0/go.mod h1:1D28KMCvyooCX9hBiosv5Tz/+YLxj0j7XhWjpSUF7CU=
golang.org/x/crypto v0.27.0 h1:GXm2NjJrPaiv/h1tb2UH8QfgC/hOf/+z0p6PT8o1w7A=
golang.org/x/crypto v0.27.0/go.mod h1:1Xngt8kV6Dvbssa53Ziq6Eqn0HqbZi5Z6R0ZpwQzt70=
golang.org/x/sync v0.8.0 h1:3NFvSEYkUoMifnESzZl15y791HH1qU2xm6eCJU5ZPXQ=
golang.org/x/sync v0.8.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
golang.org/x/text v0.18.0 h1:XvMDiNzPAl0jr17s6W9lcaIhGUfUORdGCNsuLmPG224=
golang.org/x/text v0.18.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/leonelquinteros/gotext.v1 v1.3.1 h1:8d9/fdTG0kn/B7NNGV1BsEyvektXFAbkMsTZS2sFSCc=
gopkg.in/leonelquinteros/gotext.v1 v1.3.1/go.mod h1:X1WlGDeAFIYsW6GjgMm4VwUwZ2XjI7Zan2InxSUQWrU=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=

View File

@ -3,10 +3,10 @@ package request
import (
"context"
"github.com/grassrootseconomics/go-vise/db"
"github.com/grassrootseconomics/go-vise/engine"
"github.com/grassrootseconomics/go-vise/persist"
"github.com/grassrootseconomics/go-vise/resource"
"git.defalsify.org/vise.git/db"
"git.defalsify.org/vise.git/engine"
"git.defalsify.org/vise.git/persist"
"git.defalsify.org/vise.git/resource"
"git.grassecon.net/grassrootseconomics/visedriver/entry"
"git.grassecon.net/grassrootseconomics/visedriver/errors"
"git.grassecon.net/grassrootseconomics/visedriver/storage"

View File

@ -4,13 +4,13 @@ import (
"net/http"
"strconv"
"git.defalsify.org/vise.git/logging"
"git.grassecon.net/grassrootseconomics/visedriver/errors"
"git.grassecon.net/grassrootseconomics/visedriver/request"
slogging "github.com/grassrootseconomics/go-vise/slog"
)
var (
logg = slogging.Get().With("component", "visedriver.http.session")
logg = logging.NewVanilla().WithDomain("visedriver.http.session")
)
// HTTPRequestHandler implements the session handler for HTTP

View File

@ -8,7 +8,7 @@ import (
"net/http/httptest"
"testing"
"github.com/grassrootseconomics/go-vise/engine"
"git.defalsify.org/vise.git/engine"
viseerrors "git.grassecon.net/grassrootseconomics/visedriver/errors"
"git.grassecon.net/grassrootseconomics/visedriver/request"
"git.grassecon.net/grassrootseconomics/visedriver/testutil/mocks/httpmocks"

View File

@ -4,15 +4,15 @@ import (
"context"
"io"
"git.defalsify.org/vise.git/engine"
"git.defalsify.org/vise.git/logging"
"git.defalsify.org/vise.git/persist"
"git.defalsify.org/vise.git/resource"
"git.grassecon.net/grassrootseconomics/visedriver/storage"
"github.com/grassrootseconomics/go-vise/engine"
"github.com/grassrootseconomics/go-vise/persist"
"github.com/grassrootseconomics/go-vise/resource"
slogging "github.com/grassrootseconomics/go-vise/slog"
)
var (
logg = slogging.Get().With("component", "visedriver.request")
logg = logging.NewVanilla().WithDomain("visedriver.request")
)
type RequestSession struct {

147
storage/db/gdbm/gdbm.go Normal file
View File

@ -0,0 +1,147 @@
package storage
import (
"context"
"git.defalsify.org/vise.git/db"
gdbmdb "git.defalsify.org/vise.git/db/gdbm"
"git.defalsify.org/vise.git/lang"
"git.defalsify.org/vise.git/logging"
)
var (
logg = logging.NewVanilla().WithDomain("gdbmstorage")
)
var (
dbC map[string]chan db.Db
)
type ThreadGdbmDb struct {
db db.Db
connStr string
}
func NewThreadGdbmDb() *ThreadGdbmDb {
if dbC == nil {
dbC = make(map[string]chan db.Db)
}
return &ThreadGdbmDb{}
}
func (tdb *ThreadGdbmDb) Connect(ctx context.Context, connStr string) error {
var ok bool
_, ok = dbC[connStr]
if ok {
logg.WarnCtxf(ctx, "already registered thread gdbm, skipping", "connStr", connStr)
return nil
}
gdb := gdbmdb.NewGdbmDb()
err := gdb.Connect(ctx, connStr)
if err != nil {
return err
}
dbC[connStr] = make(chan db.Db, 1)
dbC[connStr] <- gdb
tdb.connStr = connStr
return nil
}
func (tdb *ThreadGdbmDb) reserve() {
if tdb.db == nil {
tdb.db = <-dbC[tdb.connStr]
}
}
func (tdb *ThreadGdbmDb) release() {
if tdb.db == nil {
return
}
dbC[tdb.connStr] <- tdb.db
tdb.db = nil
}
func (tdb *ThreadGdbmDb) SetPrefix(pfx uint8) {
tdb.reserve()
tdb.db.SetPrefix(pfx)
}
func (tdb *ThreadGdbmDb) SetSession(sessionId string) {
tdb.reserve()
tdb.db.SetSession(sessionId)
}
func (tdb *ThreadGdbmDb) SetLanguage(lng *lang.Language) {
tdb.reserve()
tdb.db.SetLanguage(lng)
}
func (tdb *ThreadGdbmDb) Safe() bool {
tdb.reserve()
v := tdb.db.Safe()
tdb.release()
return v
}
func (tdb *ThreadGdbmDb) Prefix() uint8 {
tdb.reserve()
v := tdb.db.Prefix()
tdb.release()
return v
}
func (tdb *ThreadGdbmDb) SetLock(typ uint8, locked bool) error {
tdb.reserve()
err := tdb.db.SetLock(typ, locked)
tdb.release()
return err
}
func (tdb *ThreadGdbmDb) Put(ctx context.Context, key []byte, val []byte) error {
tdb.reserve()
err := tdb.db.Put(ctx, key, val)
tdb.release()
return err
}
func (tdb *ThreadGdbmDb) Get(ctx context.Context, key []byte) ([]byte, error) {
tdb.reserve()
v, err := tdb.db.Get(ctx, key)
tdb.release()
return v, err
}
func (tdb *ThreadGdbmDb) Close(ctx context.Context) error {
tdb.reserve()
close(dbC[tdb.connStr])
delete(dbC, tdb.connStr)
err := tdb.db.Close(ctx)
tdb.db = nil
return err
}
func (tdb *ThreadGdbmDb) Dump(ctx context.Context, key []byte) (*db.Dumper, error) {
tdb.reserve()
defer tdb.release()
return tdb.db.Dump(ctx, key)
}
func (tdb *ThreadGdbmDb) DecodeKey(ctx context.Context, key []byte) ([]byte, error) {
return tdb.db.DecodeKey(ctx, key)
}
func (tdb *ThreadGdbmDb) Abort(ctx context.Context) {
tdb.db.Abort(ctx)
}
func (tdb *ThreadGdbmDb) Start(ctx context.Context) error {
return tdb.db.Start(ctx)
}
func (tdb *ThreadGdbmDb) Stop(ctx context.Context) error {
return tdb.db.Stop(ctx)
}
func (tdb *ThreadGdbmDb) Connection() string {
return tdb.db.Connection()
}

View File

@ -3,8 +3,8 @@ package storage
import (
"context"
"github.com/grassrootseconomics/go-vise/db"
"github.com/grassrootseconomics/go-vise/persist"
"git.defalsify.org/vise.git/db"
"git.defalsify.org/vise.git/persist"
)
const (

View File

@ -5,20 +5,22 @@ import (
"errors"
"fmt"
"os"
"path"
"github.com/grassrootseconomics/go-vise/db"
fsdb "github.com/grassrootseconomics/go-vise/db/fs"
memdb "github.com/grassrootseconomics/go-vise/db/mem"
"github.com/grassrootseconomics/go-vise/db/postgres"
"github.com/grassrootseconomics/go-vise/lang"
"github.com/grassrootseconomics/go-vise/persist"
"github.com/grassrootseconomics/go-vise/resource"
slogging "github.com/grassrootseconomics/go-vise/slog"
"git.defalsify.org/vise.git/db"
fsdb "git.defalsify.org/vise.git/db/fs"
memdb "git.defalsify.org/vise.git/db/mem"
"git.defalsify.org/vise.git/db/postgres"
"git.defalsify.org/vise.git/lang"
"git.defalsify.org/vise.git/logging"
"git.defalsify.org/vise.git/persist"
"git.defalsify.org/vise.git/resource"
gdbmstorage "git.grassecon.net/grassrootseconomics/visedriver/storage/db/gdbm"
"github.com/jackc/pgx/v5/pgxpool"
)
var (
logg = slogging.Get().With("component", "storage")
logg = logging.NewVanilla().WithDomain("storage")
)
type StorageService interface {
@ -92,7 +94,13 @@ func (ms *MenuStorageService) getOrCreateDb(ctx context.Context, section string,
return nil, err
}
newDb = postgres.NewPgDb().WithSchema(connData.Domain())
} else if dbTyp == DBTYPE_GDBM {
err = ms.ensureDbDir(connStr)
if err != nil {
return nil, err
}
connStr = path.Join(connStr, section)
newDb = gdbmstorage.NewThreadGdbmDb()
} else if dbTyp == DBTYPE_FS {
err = ms.ensureDbDir(connStr)
if err != nil {

View File

@ -5,7 +5,7 @@ import (
"os"
"testing"
fsdb "github.com/grassrootseconomics/go-vise/db/fs"
fsdb "git.defalsify.org/vise.git/db/fs"
)
func TestMenuStorageServiceOneSet(t *testing.T) {

View File

@ -3,10 +3,10 @@ package httpmocks
import (
"context"
"git.defalsify.org/vise.git/engine"
"git.defalsify.org/vise.git/persist"
"git.defalsify.org/vise.git/resource"
"git.grassecon.net/grassrootseconomics/visedriver/request"
"github.com/grassrootseconomics/go-vise/engine"
"github.com/grassrootseconomics/go-vise/persist"
"github.com/grassrootseconomics/go-vise/resource"
)
// MockRequestHandler implements request.RequestHandler interface for testing

View File

@ -3,10 +3,10 @@ package mocks
import (
"context"
"github.com/grassrootseconomics/go-vise/db"
memdb "github.com/grassrootseconomics/go-vise/db/mem"
"github.com/grassrootseconomics/go-vise/persist"
"github.com/grassrootseconomics/go-vise/resource"
"git.defalsify.org/vise.git/db"
memdb "git.defalsify.org/vise.git/db/mem"
"git.defalsify.org/vise.git/persist"
"git.defalsify.org/vise.git/resource"
)
type MemStorageService struct {