Compare commits

...

4 Commits

6 changed files with 34 additions and 180 deletions

View File

@@ -5,8 +5,8 @@ package config
import (
"fmt"
"git.defalsify.org/vise.git/logging"
"git.grassecon.net/grassrootseconomics/visedriver/env"
slogging "github.com/grassrootseconomics/go-vise/slog"
)
// ConfigValue represents a configuration key-value pair
@@ -20,13 +20,13 @@ type ConfigValue struct {
// Config handles configuration management and reporting
type Config struct {
values map[string]ConfigValue
logger logging.Vanilla
logger *slogging.Slog
}
func NewConfig(logger logging.Vanilla) *Config {
func NewConfig(logging interface{}) *Config {
return &Config{
values: make(map[string]ConfigValue),
logger: logger,
logger: slogging.Get().With("component", "visedriver-config-reporter"),
}
}
@@ -79,17 +79,6 @@ func (c *Config) Report(level string) {
value = "****"
}
switch level {
case "DEBUG":
c.logger.Debugf("config set", cv.Key, value)
case "INFO":
c.logger.Infof("config set", cv.Key, value)
case "WARN":
c.logger.Warnf("config set", cv.Key, value)
case "ERROR":
c.logger.Errorf("config set", cv.Key, value)
default:
c.logger.Infof("config set", cv.Key, value)
}
c.logger.Debugf("config set", cv.Key, value)
}
}

3
go.mod
View File

@@ -5,7 +5,6 @@ go 1.24
toolchain go1.24.6
require (
git.defalsify.org/vise.git v0.2.3-0.20250204132233-2bffe532f21e
github.com/grassrootseconomics/go-vise v0.5.0
github.com/jackc/pgx/v5 v5.7.5
github.com/joho/godotenv v1.5.1
@@ -15,13 +14,13 @@ 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/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/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
github.com/stretchr/testify v1.9.0 // indirect
github.com/uptrace/bunrouter v1.0.23 // 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

6
go.sum
View File

@@ -1,5 +1,3 @@
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=
@@ -9,8 +7,6 @@ github.com/fxamacker/cbor/v2 v2.9.0 h1:NpKPmjDBgUfBms6tr6JZkTHtfFGcMKsw3eGcmD/sa
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/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=
@@ -37,6 +33,8 @@ github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UV
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
github.com/uptrace/bunrouter v1.0.23 h1:Bi7NKw3uCQkcA/GUCtDNPq5LE5UdR9pe+UyWbjHB/wU=
github.com/uptrace/bunrouter v1.0.23/go.mod h1:O3jAcl+5qgnF+ejhgkmbceEk0E/mqaK+ADOocdNpY8M=
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=

View File

@@ -7,6 +7,7 @@ import (
"git.grassecon.net/grassrootseconomics/visedriver/errors"
"git.grassecon.net/grassrootseconomics/visedriver/request"
slogging "github.com/grassrootseconomics/go-vise/slog"
"github.com/uptrace/bunrouter"
)
var (
@@ -16,6 +17,7 @@ var (
// HTTPRequestHandler implements the session handler for HTTP
type HTTPRequestHandler struct {
request.RequestHandler
router *bunrouter.Router
}
func (f *HTTPRequestHandler) WriteError(w http.ResponseWriter, code int, err error) {
@@ -30,12 +32,25 @@ func (f *HTTPRequestHandler) WriteError(w http.ResponseWriter, code int, err err
}
func NewHTTPRequestHandler(h request.RequestHandler) *HTTPRequestHandler {
return &HTTPRequestHandler{
handler := &HTTPRequestHandler{
RequestHandler: h,
router: bunrouter.New(),
}
// Route all requests to existing vise logic
handler.router.GET("/*path", handler.handleViseRequest)
handler.router.POST("/*path", handler.handleViseRequest)
handler.router.PUT("/*path", handler.handleViseRequest)
handler.router.DELETE("/*path", handler.handleViseRequest)
return handler
}
func (hh *HTTPRequestHandler) ServeHTTP(w http.ResponseWriter, req *http.Request) {
hh.router.ServeHTTP(w, req)
}
func (hh *HTTPRequestHandler) handleViseRequest(w http.ResponseWriter, req bunrouter.Request) error {
var code int
var err error
var perr error
@@ -47,17 +62,18 @@ func (hh *HTTPRequestHandler) ServeHTTP(w http.ResponseWriter, req *http.Request
rp := hh.GetRequestParser()
cfg := hh.GetConfig()
cfg.SessionId, err = rp.GetSessionId(req.Context(), req)
cfg.SessionId, err = rp.GetSessionId(req.Context(), req.Request)
if err != nil {
logg.ErrorCtxf(rqs.Ctx, "", "header processing error", err)
hh.WriteError(w, 400, err)
return err
}
rqs.Config = cfg
rqs.Input, err = rp.GetInput(req)
rqs.Input, err = rp.GetInput(req.Request)
if err != nil {
logg.ErrorCtxf(rqs.Ctx, "", "header processing error", err)
hh.WriteError(w, 400, err)
return
return err
}
rqs, err = hh.Process(rqs)
@@ -74,7 +90,7 @@ func (hh *HTTPRequestHandler) ServeHTTP(w http.ResponseWriter, req *http.Request
if code != 200 {
hh.WriteError(w, 500, err)
return
return err
}
w.WriteHeader(200)
@@ -83,10 +99,11 @@ func (hh *HTTPRequestHandler) ServeHTTP(w http.ResponseWriter, req *http.Request
rqs, perr = hh.Reset(rqs.Ctx, rqs)
if err != nil {
hh.WriteError(w, 500, err)
return
return err
}
if perr != nil {
hh.WriteError(w, 500, perr)
return
return perr
}
return nil
}

View File

@@ -99,9 +99,7 @@ func TestRequestHandler_ServeHTTP(t *testing.T) {
},
}
sessionHandler := &HTTPRequestHandler{
RequestHandler: mockRequestHandler,
}
sessionHandler := NewHTTPRequestHandler(mockRequestHandler)
req := httptest.NewRequest(http.MethodPost, "/", bytes.NewBuffer(tt.input))
req.Header.Set("X-Vise-Session", tt.sessionID)
@@ -119,7 +117,7 @@ func TestRequestHandler_ServeHTTP(t *testing.T) {
}
func TestRequestHandler_WriteError(t *testing.T) {
handler := &HTTPRequestHandler{}
handler := NewHTTPRequestHandler(&httpmocks.MockRequestHandler{})
mockWriter := &httpmocks.MockWriter{}
err := errors.New("test error")

View File

@@ -1,147 +0,0 @@
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()
}