Compare commits
	
		
			No commits in common. "master" and "feature/6-config-reporter-new" have entirely different histories.
		
	
	
		
			master
			...
			feature/6-
		
	
		
| @ -4,13 +4,13 @@ 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 | ||||
| @ -136,7 +136,7 @@ func GetConns() (storage.Conns, error) { | ||||
| 
 | ||||
| // LoadConfig initializes the configuration values after environment variables are loaded.
 | ||||
| func LoadConfig() error { | ||||
| 	configManager = NewConfig() | ||||
| 	configManager = NewConfig(logg) | ||||
| 
 | ||||
| 	// Add configuration keys with validation
 | ||||
| 	configManager.AddKey("HOST", "127.0.0.1", false, nil) | ||||
|  | ||||
| @ -1,6 +1,3 @@ | ||||
| //go:build configreport
 | ||||
| // +build configreport
 | ||||
| 
 | ||||
| package config | ||||
| 
 | ||||
| import ( | ||||
| @ -8,12 +5,12 @@ import ( | ||||
| 	"os" | ||||
| 	"testing" | ||||
| 
 | ||||
| 	slogging "github.com/grassrootseconomics/go-vise/slog" | ||||
| 	"git.defalsify.org/vise.git/logging" | ||||
| ) | ||||
| 
 | ||||
| // go test -tags configreport ./config/...   ---> run with tag
 | ||||
| func TestConfig(t *testing.T) { | ||||
| 	logger := slogging.Get().With("component", "test") | ||||
| 	logger := logging.NewVanilla().WithDomain("test") | ||||
| 	cfg := NewConfig(logger) | ||||
| 
 | ||||
| 	t.Run("Default Values", func(t *testing.T) { | ||||
|  | ||||
| @ -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 *slogging.Slog | ||||
| 	logger logging.Vanilla | ||||
| } | ||||
| 
 | ||||
| func NewConfig(logging interface{}) *Config { | ||||
| func NewConfig(logger logging.Vanilla) *Config { | ||||
| 	return &Config{ | ||||
| 		values: make(map[string]ConfigValue), | ||||
| 		logger: slogging.Get().With("component", "visedriver-config-reporter"), | ||||
| 		logger: logger, | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| @ -79,6 +79,17 @@ func (c *Config) Report(level string) { | ||||
| 			value = "****" | ||||
| 		} | ||||
| 
 | ||||
| 		c.logger.Debugf("config set", cv.Key, 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) | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
|  | ||||
| @ -2,17 +2,20 @@ | ||||
| 
 | ||||
| package config | ||||
| 
 | ||||
| import ( | ||||
|     "git.defalsify.org/vise.git/logging" | ||||
| ) | ||||
| 
 | ||||
| type Config struct{} | ||||
| 
 | ||||
| func NewConfig() *Config { | ||||
| 	return &Config{} | ||||
| func NewConfig(logger logging.Vanilla) *Config { | ||||
|     return &Config{} | ||||
| } | ||||
| 
 | ||||
| func (c *Config) AddKey(key string, defaultValue string, sensitive bool, validator func(string) error) { | ||||
| } | ||||
| func (c *Config) AddKey(key string, defaultValue string, sensitive bool, validator func(string) error) {} | ||||
| 
 | ||||
| func (c *Config) GetValue(key string) (string, error) { | ||||
| 	return "", nil | ||||
|     return "", nil | ||||
| } | ||||
| 
 | ||||
| func (c *Config) Report(level string) {} | ||||
| func (c *Config) Report(level string) {}  | ||||
| @ -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: | ||||
| 
 | ||||
|  | ||||
| @ -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
									
									
									
									
									
								
							
							
						
						
									
										20
									
								
								go.mod
									
									
									
									
									
								
							| @ -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
									
									
									
									
									
								
							
							
						
						
									
										38
									
								
								go.sum
									
									
									
									
									
								
							| @ -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= | ||||
|  | ||||
| @ -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" | ||||
|  | ||||
| @ -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
 | ||||
|  | ||||
| @ -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" | ||||
|  | ||||
| @ -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
									
								
							
							
						
						
									
										147
									
								
								storage/db/gdbm/gdbm.go
									
									
									
									
									
										Normal 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() | ||||
| } | ||||
| @ -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 ( | ||||
|  | ||||
| @ -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 { | ||||
|  | ||||
| @ -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) { | ||||
|  | ||||
| @ -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
 | ||||
|  | ||||
| @ -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 { | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user