From 6229c08900b24b33569b36d8cb95f65b37fbdd18 Mon Sep 17 00:00:00 2001 From: Michael Hohn Date: Sun, 16 Jun 2024 19:43:29 -0700 Subject: [PATCH] Remove postgres and references to it --- README.md | 85 ------------------------ cmd/postgres/pgmin.go | 32 --------- docker-compose.yml | 19 ------ go.mod | 9 +++ go.sum | 20 ++++++ init/postgres/dbinit.sh | 8 --- pkg/qpstore/container.go | 138 --------------------------------------- pkg/storage/container.go | 136 -------------------------------------- 8 files changed, 29 insertions(+), 418 deletions(-) delete mode 100644 cmd/postgres/pgmin.go delete mode 100755 init/postgres/dbinit.sh delete mode 100644 pkg/qpstore/container.go delete mode 100644 pkg/storage/container.go diff --git a/README.md b/README.md index b82e70d..ea70f72 100644 --- a/README.md +++ b/README.md @@ -72,93 +72,8 @@ These are simple steps using a single container. 5. check containers from server container docker exec -it server bash - curl -I postgres:5432 curl -I http://rabbitmq:15672 - -### Some postgres specific commands - -1. Access PostgreSQL - - psql -h localhost -p 5432 -U exampleuser -d exampledb - -1. List all tables - - \dt - -1. Examine a table - - select * from db_infos - -1. Show all columns in a specific table - - \d+ db_infos - -1. Miscellany - - \pset pager off - \lo_import FILE [COMMENT] - - -### Manually create needed postgres databases - -docker-compose now runs a db init script, but this information is useful for -debugging/manual work. - -~~This is still necessary after `docker-compose up` to avoid~~ - - [error] failed to initialize database, got error failed to connect to - `user=exampleuser database=server_db`: 172.25.0.3:5432 (postgres): server - error: FATAL: database "server_db" does not exist (SQLSTATE 3D000) - -from - - ./server -loglevel=debug -mode=container - -The steps: - - # on the host - psql -h localhost -p 5432 -U exampleuser -d postgres - - # Conditionally create dbs - SELECT 'CREATE DATABASE server_db' WHERE NOT EXISTS (SELECT FROM pg_database WHERE datname = 'server_db')\gexec - SELECT 'CREATE DATABASE querypack_db' WHERE NOT EXISTS (SELECT FROM pg_database WHERE datname = 'querypack_db')\gexec - SELECT 'CREATE DATABASE qldb_db' WHERE NOT EXISTS (SELECT FROM pg_database WHERE datname = 'qldb_db')\gexec - - # List all dbs - \l - -### To run pgmin, the minimal go/postgres test part of this repository - -1. Run pgmin - - ```sh - cd ~/work-gh/mrva/mrvacommander/cmd/postgres - GOOS=linux GOARCH=arm64 go build - docker exec -it server bash - /mrva/mrvacommander/cmd/postgres/postgres - ``` - - Exit the container. Back on the host: - - psql -h localhost -p 5432 -U exampleuser -d exampledb - \dt - - Should show - - List of relations - Schema | Name | Type | Owner - --------+-------------+-------+------------- - public | owner_repos | table | exampleuser - - -1. Check table contents - - exampledb=# select * from owner_repos; - owner | repo - -------+--------- - foo | foo/bar - ### Use the minio ql database db 1. Web access via diff --git a/cmd/postgres/pgmin.go b/cmd/postgres/pgmin.go deleted file mode 100644 index 66189da..0000000 --- a/cmd/postgres/pgmin.go +++ /dev/null @@ -1,32 +0,0 @@ -package main - -import ( - "gorm.io/driver/postgres" - "gorm.io/gorm" - - "mrvacommander/pkg/common" -) - -// TODO migrate this to test/ -// TODO add a reader test -// Minimal gorm example that takes a go struct, creates a postgres table, -// and writes the struct to the table. -func main() { - // Set up the database connection string - dsn := "host=postgres user=exampleuser dbname=exampledb sslmode=disable password=examplepass" - - // Open the database connection - db, err := gorm.Open(postgres.Open(dsn), &gorm.Config{}) - if err != nil { - panic("failed to connect database") - } - - // Migrate the schema: create the 'owner_repo' table from the struct - err = db.AutoMigrate(&common.NameWithOwner{}) - if err != nil { - panic("failed to migrate database") - } - - // Create an entry in the database - db.Create(&common.NameWithOwner{Owner: "foo", Repo: "foo/bar"}) -} diff --git a/docker-compose.yml b/docker-compose.yml index 6468d64..966cb4d 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,20 +1,4 @@ services: - postgres: - image: postgres:16.3-bookworm - container_name: postgres - environment: - POSTGRES_USER: exampleuser - POSTGRES_PASSWORD: examplepass - POSTGRES_DB: exampledb - volumes: - - ./postgres-data:/var/lib/postgresql/data - - ./init/postgres:/docker-entrypoint-initdb.d - ports: - - "5432:5432" # Exposing PostgreSQL to the host - expose: - - "5432" - networks: - - backend rabbitmq: image: rabbitmq:3-management @@ -51,7 +35,6 @@ services: volumes: - ./:/mrva/mrvacommander depends_on: - - postgres - rabbitmq networks: - backend @@ -110,6 +93,4 @@ networks: # Remove named volumes to use bind mounts # volumes: # minio-data: -# postgres_data: -# driver: local diff --git a/go.mod b/go.mod index 115193e..09b7a19 100644 --- a/go.mod +++ b/go.mod @@ -7,6 +7,7 @@ require ( github.com/elastic/go-sysinfo v1.14.0 github.com/google/uuid v1.6.0 github.com/gorilla/mux v1.8.1 + github.com/minio/minio-go/v7 v7.0.71 github.com/rabbitmq/amqp091-go v1.10.0 golang.org/x/exp v0.0.0-20240613232115-7f521ea00fb8 gopkg.in/yaml.v3 v3.0.1 @@ -15,20 +16,28 @@ require ( ) require ( + github.com/dustin/go-humanize v1.0.1 // indirect github.com/elastic/go-windows v1.0.1 // indirect + github.com/goccy/go-json v0.10.2 // indirect github.com/jackc/pgpassfile v1.0.0 // indirect github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761 // indirect github.com/jackc/pgx/v5 v5.6.0 // indirect github.com/jackc/puddle/v2 v2.2.1 // indirect github.com/jinzhu/inflection v1.0.0 // indirect github.com/jinzhu/now v1.1.5 // indirect + github.com/klauspost/compress v1.17.6 // indirect + github.com/klauspost/cpuid/v2 v2.2.6 // indirect github.com/kr/text v0.2.0 // indirect + github.com/minio/md5-simd v1.1.2 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/prometheus/procfs v0.15.1 // indirect github.com/rogpeppe/go-internal v1.12.0 // indirect + github.com/rs/xid v1.5.0 // indirect golang.org/x/crypto v0.24.0 // indirect + golang.org/x/net v0.23.0 // indirect golang.org/x/sync v0.7.0 // indirect golang.org/x/sys v0.21.0 // indirect golang.org/x/text v0.16.0 // indirect + gopkg.in/ini.v1 v1.67.0 // indirect howett.net/plist v1.0.1 // indirect ) diff --git a/go.sum b/go.sum index 88085e0..d8813b4 100644 --- a/go.sum +++ b/go.sum @@ -4,10 +4,14 @@ github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ3 github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY= +github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto= github.com/elastic/go-sysinfo v1.14.0 h1:dQRtiqLycoOOla7IflZg3aN213vqJmP0lpVpKQ9lUEY= github.com/elastic/go-sysinfo v1.14.0/go.mod h1:FKUXnZWhnYI0ueO7jhsGV3uQJ5hiz8OqM5b3oGyaRr8= github.com/elastic/go-windows v1.0.1 h1:AlYZOldA+UJ0/2nBuqWdo90GFCgG9xuyw9SYzGUtJm0= github.com/elastic/go-windows v1.0.1/go.mod h1:FoVvqWSun28vaDQPbj2Elfc0JahhPB7WQEGa3c814Ss= +github.com/goccy/go-json v0.10.2 h1:CrxCmQqYDkv1z7lO7Wbh2HN93uovUHgrECaO5ZrCXAU= +github.com/goccy/go-json v0.10.2/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= @@ -27,10 +31,19 @@ github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc= github.com/jinzhu/now v1.1.5 h1:/o9tlHleP7gOFmsnYNz3RGnqzefHA47wQpKrrdTIwXQ= github.com/jinzhu/now v1.1.5/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8= +github.com/klauspost/compress v1.17.6 h1:60eq2E/jlfwQXtvZEeBUYADs+BwKBWURIY+Gj2eRGjI= +github.com/klauspost/compress v1.17.6/go.mod h1:/dCuZOvVtNoHsyb+cuJD3itjs3NbnF6KH9zAO4BDxPM= +github.com/klauspost/cpuid/v2 v2.0.1/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= +github.com/klauspost/cpuid/v2 v2.2.6 h1:ndNyv040zDGIDh8thGkXYjnFtiN02M1PVVF+JE/48xc= +github.com/klauspost/cpuid/v2 v2.2.6/go.mod h1:Lcz8mBdAVJIBVzewtcLocK12l3Y+JytZYpaMropDUws= github.com/kr/pretty v0.3.0 h1:WgNl7dwNpEZ6jJ9k1snq4pZsg7DOEN8hP9Xw0Tsjwk0= github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= +github.com/minio/md5-simd v1.1.2 h1:Gdi1DZK69+ZVMoNHRXJyNcxrMA4dSxoYHZSQbirFg34= +github.com/minio/md5-simd v1.1.2/go.mod h1:MzdKDxYpY2BT9XQFocsiZf/NKVtR7nkE4RoEpN+20RM= +github.com/minio/minio-go/v7 v7.0.71 h1:No9XfOKTYi6i0GnBj+WZwD8WP5GZfL7n7GOjRqCdAjA= +github.com/minio/minio-go/v7 v7.0.71/go.mod h1:4yBA8v80xGA30cfM3fz0DKYMXunWl/AV/6tWEs9ryzo= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= @@ -42,6 +55,8 @@ github.com/rabbitmq/amqp091-go v1.10.0 h1:STpn5XsHlHGcecLmMFCtg7mqq0RnD+zFr4uzuk github.com/rabbitmq/amqp091-go v1.10.0/go.mod h1:Hy4jKW5kQART1u+JkDTF9YYOQUHXqMuhrgxOEeS7G4o= github.com/rogpeppe/go-internal v1.12.0 h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU5NdKM8= github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99yedzYV+kq4uf4= +github.com/rs/xid v1.5.0 h1:mKX4bl4iPYJtEIxp6CYiUuLQ/8DYMoz0PUdtGgMFRVc= +github.com/rs/xid v1.5.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= @@ -53,9 +68,12 @@ golang.org/x/crypto v0.24.0 h1:mnl8DM0o513X8fdIkmyFE/5hTYxbwYOjDS/+rK6qpRI= golang.org/x/crypto v0.24.0/go.mod h1:Z1PMYSOR5nyMcyAVAIQSKCDwalqy85Aqn1x3Ws4L5DM= golang.org/x/exp v0.0.0-20240613232115-7f521ea00fb8 h1:yixxcjnhBmY0nkL253HFVIm0JsFHwrHdT3Yh6szTnfY= golang.org/x/exp v0.0.0-20240613232115-7f521ea00fb8/go.mod h1:jj3sYF3dwk5D+ghuXyeI3r5MFf+NT2An6/9dOA95KSI= +golang.org/x/net v0.23.0 h1:7EYJ93RZ9vYSZAIb2x3lnuvqO5zneoD6IvWjuhfxjTs= +golang.org/x/net v0.23.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg= golang.org/x/sync v0.7.0 h1:YsImfSBoP9QPYL0xyKJPq0gcaJdG3rInoqxTWbfQu9M= golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.21.0 h1:rF+pYz3DAGSQAxAu1CbC7catZg4ebC4UIeIhKxBZvws= golang.org/x/sys v0.21.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/text v0.16.0 h1:a94ExnEXNtEwYLGJSIUxnWoxoRz/ZcCsV63ROupILh4= @@ -63,6 +81,8 @@ golang.org/x/text v0.16.0/go.mod h1:GhwF1Be+LQoKShO3cGOHzqOgRrGaYc9AvblQOmPVHnI= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= +gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA= +gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/yaml.v1 v1.0.0-20140924161607-9f9df34309c0/go.mod h1:WDnlLJ4WF5VGsH/HVa3CI79GS0ol3YnhVnKP89i0kNg= 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= diff --git a/init/postgres/dbinit.sh b/init/postgres/dbinit.sh deleted file mode 100755 index 37b058d..0000000 --- a/init/postgres/dbinit.sh +++ /dev/null @@ -1,8 +0,0 @@ -#!/bin/bash -set -e - -psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" <<-EOSQL - SELECT 'CREATE DATABASE server_db' WHERE NOT EXISTS (SELECT FROM pg_database WHERE datname = 'server_db')\gexec - SELECT 'CREATE DATABASE querypack_db' WHERE NOT EXISTS (SELECT FROM pg_database WHERE datname = 'querypack_db')\gexec - SELECT 'CREATE DATABASE qldb_db' WHERE NOT EXISTS (SELECT FROM pg_database WHERE datname = 'qldb_db')\gexec -EOSQL diff --git a/pkg/qpstore/container.go b/pkg/qpstore/container.go deleted file mode 100644 index ed210e0..0000000 --- a/pkg/qpstore/container.go +++ /dev/null @@ -1,138 +0,0 @@ -package qpstore - -import ( - "fmt" - "log/slog" - "mrvacommander/pkg/common" - "mrvacommander/pkg/qldbstore" - "sync" - - "gorm.io/driver/postgres" - "gorm.io/gorm" -) - -var ( - DBmutex sync.Mutex -) - -type StorageVisibles struct{} - -type StorageContainer struct { - // Database version of StorageSingle - RequestID int - DB *gorm.DB - modules *StorageVisibles -} - -type DBSpec struct { - Host string - Port int - User string - Password string - DBname string -} - -func (s *StorageContainer) SetupTables() error { - // TODO set up query pack storage - return nil -} - -func (s *StorageContainer) LoadState() error { - // TODO load the state - return nil -} - -func (s *StorageContainer) hasTables() bool { - // TODO query to check for tables - return false -} - -func (s *StorageContainer) NextID() int { - // TODO update via db - return 12345 -} - -func (s *StorageContainer) SaveQueryPack(tgz []byte, sessionID int) (storagePath string, error error) { - // TODO save and return path - return "todo:no-path-yet", nil -} - -func (s *StorageContainer) FindAvailableDBs(analysisReposRequested []common.NameWithOwner) (notFoundRepos []common.NameWithOwner, analysisRepos *map[common.NameWithOwner]qldbstore.DBLocation) { - // TODO s.FindAvailableDBs() via postgres - analysisRepos = &map[common.NameWithOwner]qldbstore.DBLocation{} - notFoundRepos = []common.NameWithOwner{} - - return notFoundRepos, analysisRepos -} - -func (s *StorageContainer) Setup(v *StorageVisibles) { - s.modules = v -} - -func NewStore(startingID int) (Storage, error) { - // TODO drop the startingID - - db, err := ConnectDB(DBSpec{ - Host: "postgres", - Port: 5432, - User: "exampleuser", - Password: "examplepass", - DBname: "querypack_db", - }) - if err != nil { - return nil, err - } - - s := StorageContainer{RequestID: startingID, DB: db} - if err := s.SetupTables(); err != nil { - return nil, err - } - - if err = s.loadState(); err != nil { - return nil, err - } - - return &s, nil -} - -func NewServerStore(startingID int) (*StorageContainer, error) { - - db, err := ConnectDB(DBSpec{ - Host: "postgres", - Port: 5432, - User: "exampleuser", - Password: "examplepass", - DBname: "server_db", - }) - if err != nil { - return nil, err - } - - s := StorageContainer{RequestID: startingID, DB: db} - if err := s.SetupTables(); err != nil { - return nil, err - } - - if err = s.loadState(); err != nil { - return nil, err - } - - return &s, nil -} - -func ConnectDB(s DBSpec) (*gorm.DB, error) { - // Open the database connection - dsn := fmt.Sprintf("host=%s port=%d user=%s password=%s dbname=%s sslmode=disable", - s.Host, s.Port, s.User, s.Password, s.DBname) - db, err := gorm.Open(postgres.Open(dsn), &gorm.Config{}) - if err != nil { - slog.Error("Error connecting to the database", "err", err) - return nil, err - } - return db, nil -} - -func (s *StorageContainer) loadState() error { - // TODO load the state - return nil -} diff --git a/pkg/storage/container.go b/pkg/storage/container.go deleted file mode 100644 index 0422ae1..0000000 --- a/pkg/storage/container.go +++ /dev/null @@ -1,136 +0,0 @@ -package storage - -import ( - "fmt" - "log/slog" - "mrvacommander/pkg/common" - "sync" - - "gorm.io/driver/postgres" - "gorm.io/gorm" -) - -var ( - DBmutex sync.Mutex -) - -func (s *StorageContainer) NextID() int { - // TODO update via db - return 12345 -} - -func (s *StorageContainer) SaveQueryPack(tgz []byte, sessionID int) (storagePath string, error error) { - // TODO save and return path - return "todo:no-path-yet", nil -} - -func (s *StorageContainer) FindAvailableDBs(analysisReposRequested []common.NameWithOwner) (notFoundRepos []common.NameWithOwner, analysisRepos *map[common.NameWithOwner]DBLocation) { - // TODO s.FindAvailableDBs() via postgres - analysisRepos = &map[common.NameWithOwner]DBLocation{} - notFoundRepos = []common.NameWithOwner{} - - return notFoundRepos, analysisRepos -} - -func NewQLDBStore(startingID int, v *Visibles) (*StorageContainer, error) { - // TODO drop the startingID - db, err := ConnectDB(DBSpec{ - Host: "postgres", - Port: 5432, - User: "exampleuser", - Password: "examplepass", - DBname: "querypack_db", - }) - if err != nil { - return nil, err - } - - s := StorageContainer{RequestID: startingID, DB: db} - // TODO XX: set up qldb_db tables - if err := s.SetupTables(); err != nil { - return nil, err - } - - if err = s.loadState(); err != nil { - return nil, err - } - - // TODO XX: set up qldb_db - s.modules = v - - return &s, nil -} - -func NewServerStore(startingID int, v *Visibles) (*StorageContainer, error) { - db, err := ConnectDB(DBSpec{ - Host: "postgres", - Port: 5432, - User: "exampleuser", - Password: "examplepass", - DBname: "server_db", - }) - if err != nil { - return nil, err - } - - s := StorageContainer{RequestID: startingID, DB: db} - if err := s.SetupTables(); err != nil { - return nil, err - } - - if err = s.loadState(); err != nil { - return nil, err - } - - // TODO XX: set up qldb_db - s.modules = v - - return &s, nil -} - -func ConnectDB(s DBSpec) (*gorm.DB, error) { - // Open the database connection - dsn := fmt.Sprintf("host=%s port=%d user=%s password=%s dbname=%s sslmode=disable", - s.Host, s.Port, s.User, s.Password, s.DBname) - db, err := gorm.Open(postgres.Open(dsn), &gorm.Config{}) - if err != nil { - slog.Error("Error connecting to the database", "err", err) - return nil, err - } - return db, nil -} - -func (s *StorageContainer) SetupTables() error { - msg := "Failed to initialize database " - - if err := s.DB.AutoMigrate(&DBInfo{}); err != nil { - slog.Error(msg, "table", "dbinfo") - return err - } - if err := s.DB.AutoMigrate(&DBJobs{}); err != nil { - slog.Error(msg, "table", "dbjobs") - return err - } - if err := s.DB.AutoMigrate(&DBResult{}); err != nil { - slog.Error(msg, "table", "dbresult") - return err - } - if err := s.DB.AutoMigrate(&DBStatus{}); err != nil { - slog.Error(msg, "table", "dbstatus") - return err - } - - return nil -} - -func (s *StorageContainer) loadState() error { - // XX: - // TODO load the state - return nil -} - -func (s *StorageContainer) hasTables() bool { - // XX: - // TODO sql query to check for tables - return false -}