From 13aade9bccad714493815e96087c8d7c03af994a Mon Sep 17 00:00:00 2001 From: Thomas Rudin <thomas@rudin.io> Date: Sat, 9 Feb 2019 18:54:26 +0100 Subject: [PATCH] postgres wip --- server/app/setup.go | 8 ++++++++ server/db/postgres/logger.go | 11 +++++++++++ server/db/postgres/postgres.go | 33 ++++++++++++++++++++++++++++++--- 3 files changed, 49 insertions(+), 3 deletions(-) create mode 100644 server/db/postgres/logger.go diff --git a/server/app/setup.go b/server/app/setup.go index 83add34..b32bda7 100644 --- a/server/app/setup.go +++ b/server/app/setup.go @@ -2,6 +2,7 @@ package app import ( "mapserver/colormapping" + "mapserver/db/postgres" "mapserver/db/sqlite" "mapserver/eventbus" "mapserver/mapblockaccessor" @@ -39,6 +40,13 @@ func Setup(p params.ParamsType, cfg *Config) *App { if err != nil { panic(err) } + + case worldconfig.BACKEND_POSTGRES: + a.Blockdb, err = postgres.New(a.Worldconfig[worldconfig.CONFIG_PSQL_CONNECTION]) + if err != nil { + panic(err) + } + default: panic(errors.New("map-backend not supported: " + a.Worldconfig[worldconfig.CONFIG_BACKEND])) } diff --git a/server/db/postgres/logger.go b/server/db/postgres/logger.go new file mode 100644 index 0000000..731fe64 --- /dev/null +++ b/server/db/postgres/logger.go @@ -0,0 +1,11 @@ +package postgres + +import ( + "github.com/sirupsen/logrus" +) + +var log *logrus.Entry + +func init() { + log = logrus.WithFields(logrus.Fields{"prefix": "postgres-db"}) +} diff --git a/server/db/postgres/postgres.go b/server/db/postgres/postgres.go index 91e6fca..634ed12 100644 --- a/server/db/postgres/postgres.go +++ b/server/db/postgres/postgres.go @@ -2,9 +2,12 @@ package postgres import ( "database/sql" - _ "github.com/lib/pq" "mapserver/coords" "mapserver/db" + "time" + + _ "github.com/lib/pq" + "github.com/sirupsen/logrus" ) type PostgresAccessor struct { @@ -12,6 +15,24 @@ type PostgresAccessor struct { } func (db *PostgresAccessor) Migrate() error { + hasMtime := true + _, err := db.db.Query("select max(mtime) from blocks") + if err != nil { + hasMtime = false + } + + if !hasMtime { + log.Info("Migrating database") + start := time.Now() + _, err = db.db.Exec(migrateScript) + if err != nil { + return err + } + t := time.Now() + elapsed := t.Sub(start) + log.WithFields(logrus.Fields{"elapsed": elapsed}).Info("Migration completed") + } + return nil } @@ -121,6 +142,12 @@ func (this *PostgresAccessor) GetBlock(pos *coords.MapBlockCoords) (*db.Block, e return nil, nil } -func NewPostgresAccessor(connStr string) (*PostgresAccessor, error) { - return nil, nil +func New(connStr string) (*PostgresAccessor, error) { + db, err := sql.Open("postgres", connStr) + if err != nil { + return nil, err + } + + sq := &PostgresAccessor{db: db} + return sq, nil }