From 265aec187e3cf34bfe225aa79d4cfac0855b82bf Mon Sep 17 00:00:00 2001 From: Prad Date: Thu, 19 Dec 2024 00:48:42 +0000 Subject: [PATCH] fix: Sink --- Makefile | 2 +- Taskfile.yml | 44 +++++++++++++++++-- cmd/motr/main.go | 8 ++-- deploy/sink/db_init.sql | 29 ++++++++++++ deploy/sink/db_reset.sql | 19 ++++++++ .../sink/query_highway.sql | 0 .../query.sql => deploy/sink/query_vault.sql | 0 .../sink/schema_highway.sql | 0 .../schema.sql => sink/schema_indexer.sql} | 9 ++++ .../sink/schema_vault.sql | 0 deploy/sink/sink.go | 8 ++++ deploy/sqlc.yaml | 19 ++++++++ internal/models/sink/sqlite/embed.go | 8 ---- internal/models/sqlc.yaml | 19 -------- .../drivers/hwayorm => pkg/gateway/orm}/db.go | 2 +- .../hwayorm => pkg/gateway/orm}/models.go | 2 +- .../gateway/orm/query_highway.sql.go | 4 +- .../drivers/motrorm => pkg/vault/orm}/db.go | 2 +- .../motrorm => pkg/vault/orm}/models.go | 2 +- .../vault/orm/query_vault.sql.go | 4 +- 20 files changed, 138 insertions(+), 43 deletions(-) create mode 100644 deploy/sink/db_init.sql create mode 100644 deploy/sink/db_reset.sql rename internal/models/sink/postgres/query.sql => deploy/sink/query_highway.sql (100%) rename internal/models/sink/sqlite/query.sql => deploy/sink/query_vault.sql (100%) rename internal/models/sink/postgres/schema.sql => deploy/sink/schema_highway.sql (100%) rename deploy/{indexer/schema.sql => sink/schema_indexer.sql} (89%) rename internal/models/sink/sqlite/schema.sql => deploy/sink/schema_vault.sql (100%) create mode 100644 deploy/sink/sink.go create mode 100644 deploy/sqlc.yaml delete mode 100644 internal/models/sink/sqlite/embed.go delete mode 100644 internal/models/sqlc.yaml rename {internal/models/drivers/hwayorm => pkg/gateway/orm}/db.go (97%) rename {internal/models/drivers/hwayorm => pkg/gateway/orm}/models.go (99%) rename internal/models/drivers/hwayorm/query.sql.go => pkg/gateway/orm/query_highway.sql.go (99%) rename {internal/models/drivers/motrorm => pkg/vault/orm}/db.go (97%) rename {internal/models/drivers/motrorm => pkg/vault/orm}/models.go (99%) rename internal/models/drivers/motrorm/query.sql.go => pkg/vault/orm/query_vault.sql.go (99%) diff --git a/Makefile b/Makefile index 7caf9693d..0914b76f5 100644 --- a/Makefile +++ b/Makefile @@ -314,7 +314,7 @@ gen-pkl: init-env pkl-gen-go pkl/sonr.net/Motr.pkl gen-sqlc: init-env - @cd internal/models && sqlc generate + @sqlc generate -f deploy/sqlc.yaml gen-templ: init-env @templ generate diff --git a/Taskfile.yml b/Taskfile.yml index e13b79117..1eeb2bfe0 100644 --- a/Taskfile.yml +++ b/Taskfile.yml @@ -7,17 +7,33 @@ vars: sh: git rev-parse --short HEAD ROOT_DIR: sh: git rev-parse --show-toplevel + OS: + sh: uname -s + TASKS: + sh: task -l tasks: default: cmds: - - echo "{{.VERSION}}" - - echo "{{.COMMIT}}" - - echo "{{.ROOT_DIR}}" + - gh run ls -L 3 + - gum format -- "# Sonr ({{.OS}}-{{.VERSION}})" "({{.COMMIT}}) {{.ROOT_DIR}}" "### {{ .TASKS }}" + silent: true + + clean: + desc: Clean build artifacts + cmds: + - sh ./scripts/init_env.sh + - rm -rf ./build + - rm -rf ./dist + - rm -rf ./static silent: true build: + desc: Build all binaries silent: true cmds: + - task: clean + - mkdir -p ./build + - mkdir -p ./static/wasm - task: build:motr - task: build:sonr - task: build:hway @@ -36,3 +52,25 @@ tasks: internal: true silent: true cmd: goreleaser build --snapshot --id hway --single-target --clean -o ./build/hway + + init:db: + desc: Initialize the database + silent: true + platforms: + - linux + cmds: + - sudo -u postgres psql -f ./deploy/sink/db_seed.sql + - sudo -u postgres psql -d chainindex -f ./deploy/sink/schema_indexer.sql + + reset:db: + desc: Reset the database + silent: true + platforms: + - linux + cmd: gum confirm "Reset chainindex, highway, and matrixhs?" --default=false --affirmative "Yes" && sudo -u postgres psql -f ./deploy/sink/db_reset.sql|| echo "No selected" + + init:ipfs: + desc: Initialize the ipfs node + silent: true + cmds: + - sh ./scripts/ipfs_config.sh diff --git a/cmd/motr/main.go b/cmd/motr/main.go index d1c946a3a..2b88503ec 100644 --- a/cmd/motr/main.go +++ b/cmd/motr/main.go @@ -13,8 +13,8 @@ import ( _ "github.com/ncruces/go-sqlite3/driver" _ "github.com/ncruces/go-sqlite3/embed" "github.com/onsonr/sonr/cmd/motr/wasm" + sink "github.com/onsonr/sonr/deploy/sink" "github.com/onsonr/sonr/internal/config/motr" - sink "github.com/onsonr/sonr/internal/models/sink/sqlite" vault "github.com/onsonr/sonr/pkg/vault/routes" ) @@ -58,15 +58,15 @@ func main() { wasm.ServeFetch(e) } -// NewDB initializes and returns a configured database connection -func NewDB() (*sql.DB, error) { +// createDB initializes and returns a configured database connection +func createDB() (*sql.DB, error) { db, err := sql.Open("sqlite3", ":memory:") if err != nil { return nil, err } // create tables - if _, err := db.ExecContext(context.Background(), sink.SchemaMotrSQL); err != nil { + if _, err := db.ExecContext(context.Background(), sink.SchemaVaultSQL); err != nil { return nil, err } return db, nil diff --git a/deploy/sink/db_init.sql b/deploy/sink/db_init.sql new file mode 100644 index 000000000..8cdd6feab --- /dev/null +++ b/deploy/sink/db_init.sql @@ -0,0 +1,29 @@ +-- Connect to postgres default database +\c postgres; + +-- Create databases +CREATE DATABASE chainindex; +CREATE DATABASE highway; +CREATE DATABASE matrixhs; + +-- Create users with passwords +CREATE USER chainindex_user WITH PASSWORD 'chainindex_password123'; +CREATE USER highway_user WITH PASSWORD 'highway_password123'; +CREATE USER matrixhs_user WITH PASSWORD 'matrixhs_password123'; + +-- Grant privileges for each database to their respective users +\c chainindex; +GRANT ALL PRIVILEGES ON DATABASE chainindex TO chainindex_user; +GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO chainindex_user; +ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL PRIVILEGES ON TABLES TO chainindex_user; + +\c highway; +GRANT ALL PRIVILEGES ON DATABASE highway TO highway_user; +GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO highway_user; +ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL PRIVILEGES ON TABLES TO highway_user; + +\c matrixhs; +GRANT ALL PRIVILEGES ON DATABASE matrixhs TO matrixhs_user; +GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO matrixhs_user; +ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL PRIVILEGES ON TABLES TO matrixhs_user; + diff --git a/deploy/sink/db_reset.sql b/deploy/sink/db_reset.sql new file mode 100644 index 000000000..e59217b04 --- /dev/null +++ b/deploy/sink/db_reset.sql @@ -0,0 +1,19 @@ +-- Connect to a different database first (postgres) since we can't drop a database while connected to it +\c postgres; + +-- Terminate all connections to the databases +SELECT pg_terminate_backend(pid) +FROM pg_stat_activity +WHERE datname IN ('chainindex', 'highway', 'matrixhs') +AND pid <> pg_backend_pid(); + +-- Drop the databases if they exist +DROP DATABASE IF EXISTS chainindex; +DROP DATABASE IF EXISTS highway; +DROP DATABASE IF EXISTS matrixhs; + +-- Drop the users if they exist +DROP USER IF EXISTS chainindex_user; +DROP USER IF EXISTS highway_user; +DROP USER IF EXISTS matrixhs_user; + diff --git a/internal/models/sink/postgres/query.sql b/deploy/sink/query_highway.sql similarity index 100% rename from internal/models/sink/postgres/query.sql rename to deploy/sink/query_highway.sql diff --git a/internal/models/sink/sqlite/query.sql b/deploy/sink/query_vault.sql similarity index 100% rename from internal/models/sink/sqlite/query.sql rename to deploy/sink/query_vault.sql diff --git a/internal/models/sink/postgres/schema.sql b/deploy/sink/schema_highway.sql similarity index 100% rename from internal/models/sink/postgres/schema.sql rename to deploy/sink/schema_highway.sql diff --git a/deploy/indexer/schema.sql b/deploy/sink/schema_indexer.sql similarity index 89% rename from deploy/indexer/schema.sql rename to deploy/sink/schema_indexer.sql index ce5a241ba..a18663b72 100644 --- a/deploy/indexer/schema.sql +++ b/deploy/sink/schema_indexer.sql @@ -4,6 +4,9 @@ this schema before using the database to index events. */ +-- First, ensure we're connected to the chainindex database +\c chainindex; + -- The blocks table records metadata about each block. -- The block record does not include its events or transactions (see tx_results). CREATE TABLE blocks ( @@ -83,3 +86,9 @@ CREATE VIEW tx_events AS FROM blocks JOIN tx_results ON (blocks.rowid = tx_results.block_id) JOIN event_attributes ON (tx_results.rowid = event_attributes.tx_id) WHERE event_attributes.tx_id IS NOT NULL; + +-- Grant privileges for each database to their respective users +GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO chainindex_user; +GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO chainindex_user; +GRANT ALL PRIVILEGES ON ALL FUNCTIONS IN SCHEMA public TO chainindex_user; + diff --git a/internal/models/sink/sqlite/schema.sql b/deploy/sink/schema_vault.sql similarity index 100% rename from internal/models/sink/sqlite/schema.sql rename to deploy/sink/schema_vault.sql diff --git a/deploy/sink/sink.go b/deploy/sink/sink.go new file mode 100644 index 000000000..a93e1535c --- /dev/null +++ b/deploy/sink/sink.go @@ -0,0 +1,8 @@ +package sink + +import ( + _ "embed" +) + +//go:embed schema_vault.sql +var SchemaVaultSQL string diff --git a/deploy/sqlc.yaml b/deploy/sqlc.yaml new file mode 100644 index 000000000..c6de5a430 --- /dev/null +++ b/deploy/sqlc.yaml @@ -0,0 +1,19 @@ +version: "2" +sql: + - engine: "sqlite" + queries: "./sink/query_vault.sql" + schema: "./sink/schema_vault.sql" + gen: + go: + package: "orm" + out: "../pkg/vault/orm" + + - engine: "postgresql" + queries: "./sink/query_highway.sql" + schema: "./sink/schema_highway.sql" + gen: + go: + package: "orm" + out: "../pkg/gateway/orm" + sql_package: "pgx/v5" + diff --git a/internal/models/sink/sqlite/embed.go b/internal/models/sink/sqlite/embed.go deleted file mode 100644 index a59af487f..000000000 --- a/internal/models/sink/sqlite/embed.go +++ /dev/null @@ -1,8 +0,0 @@ -package sqlite - -import ( - _ "embed" -) - -//go:embed schema.sql -var SchemaMotrSQL string diff --git a/internal/models/sqlc.yaml b/internal/models/sqlc.yaml deleted file mode 100644 index 5dfdaf15a..000000000 --- a/internal/models/sqlc.yaml +++ /dev/null @@ -1,19 +0,0 @@ -version: "2" -sql: - - engine: "sqlite" - queries: "./sink/sqlite/query.sql" - schema: "./sink/sqlite/schema.sql" - gen: - go: - package: "motrorm" - out: "drivers/motrorm" - - - engine: "postgresql" - queries: "./sink/postgres/query.sql" - schema: "./sink/postgres/schema.sql" - gen: - go: - package: "hwayorm" - out: "drivers/hwayorm" - sql_package: "pgx/v5" - diff --git a/internal/models/drivers/hwayorm/db.go b/pkg/gateway/orm/db.go similarity index 97% rename from internal/models/drivers/hwayorm/db.go rename to pkg/gateway/orm/db.go index 976fb26f7..044d80730 100644 --- a/internal/models/drivers/hwayorm/db.go +++ b/pkg/gateway/orm/db.go @@ -2,7 +2,7 @@ // versions: // sqlc v1.27.0 -package hwayorm +package orm import ( "context" diff --git a/internal/models/drivers/hwayorm/models.go b/pkg/gateway/orm/models.go similarity index 99% rename from internal/models/drivers/hwayorm/models.go rename to pkg/gateway/orm/models.go index 7ae444f28..bf07a5967 100644 --- a/internal/models/drivers/hwayorm/models.go +++ b/pkg/gateway/orm/models.go @@ -2,7 +2,7 @@ // versions: // sqlc v1.27.0 -package hwayorm +package orm import ( "github.com/jackc/pgx/v5/pgtype" diff --git a/internal/models/drivers/hwayorm/query.sql.go b/pkg/gateway/orm/query_highway.sql.go similarity index 99% rename from internal/models/drivers/hwayorm/query.sql.go rename to pkg/gateway/orm/query_highway.sql.go index 0bd3f7b94..7cda7c3f0 100644 --- a/internal/models/drivers/hwayorm/query.sql.go +++ b/pkg/gateway/orm/query_highway.sql.go @@ -1,9 +1,9 @@ // Code generated by sqlc. DO NOT EDIT. // versions: // sqlc v1.27.0 -// source: query.sql +// source: query_highway.sql -package hwayorm +package orm import ( "context" diff --git a/internal/models/drivers/motrorm/db.go b/pkg/vault/orm/db.go similarity index 97% rename from internal/models/drivers/motrorm/db.go rename to pkg/vault/orm/db.go index 93a2528e3..fe1e9908e 100644 --- a/internal/models/drivers/motrorm/db.go +++ b/pkg/vault/orm/db.go @@ -2,7 +2,7 @@ // versions: // sqlc v1.27.0 -package motrorm +package orm import ( "context" diff --git a/internal/models/drivers/motrorm/models.go b/pkg/vault/orm/models.go similarity index 99% rename from internal/models/drivers/motrorm/models.go rename to pkg/vault/orm/models.go index f8ca9c617..470618d79 100644 --- a/internal/models/drivers/motrorm/models.go +++ b/pkg/vault/orm/models.go @@ -2,7 +2,7 @@ // versions: // sqlc v1.27.0 -package motrorm +package orm import ( "database/sql" diff --git a/internal/models/drivers/motrorm/query.sql.go b/pkg/vault/orm/query_vault.sql.go similarity index 99% rename from internal/models/drivers/motrorm/query.sql.go rename to pkg/vault/orm/query_vault.sql.go index f28411b9e..fb7d80f16 100644 --- a/internal/models/drivers/motrorm/query.sql.go +++ b/pkg/vault/orm/query_vault.sql.go @@ -1,9 +1,9 @@ // Code generated by sqlc. DO NOT EDIT. // versions: // sqlc v1.27.0 -// source: query.sql +// source: query_vault.sql -package motrorm +package orm import ( "context"