From 1acd9ae025a27d28cd36dd61c622172b0fe81dd0 Mon Sep 17 00:00:00 2001 From: restitux Date: Sat, 14 Jan 2023 00:19:43 -0700 Subject: [PATCH] Extended database and refactored to enable export --- database/db.go | 38 ++++++++++++++++++++++++++++++++------ 1 file changed, 32 insertions(+), 6 deletions(-) diff --git a/database/db.go b/database/db.go index a5a606c..be8ce73 100644 --- a/database/db.go +++ b/database/db.go @@ -14,6 +14,10 @@ import ( var log = logging.MustGetLogger("cursorius-server") +type Database struct { + Conn *pgx.Conn +} + func LaunchDB(conf config.DBConfig) error { dbURL := fmt.Sprintf( @@ -33,13 +37,13 @@ func LaunchDB(conf config.DBConfig) error { conf.Name, ) - var conn *pgx.Conn + db := Database{} + var err error for i := 0; i < 10; i++ { log.Infof("Connecting to database with URL \"%v\" (attempt %v)", dbURLNoPasswd, i) - conn, err = pgx.Connect(context.Background(), dbURL) + db.Conn, err = pgx.Connect(context.Background(), dbURL) if err == nil { - defer conn.Close(context.Background()) break } time.Sleep(2 * time.Second) @@ -58,7 +62,7 @@ SELECT EXISTS ( );` var versionTableExists bool - err = conn.QueryRow(context.Background(), versionTableExistsQuery).Scan(&versionTableExists) + err = db.Conn.QueryRow(context.Background(), versionTableExistsQuery).Scan(&versionTableExists) if err != nil { return fmt.Errorf("Could not check if database was initalized: %w", err) } @@ -67,7 +71,7 @@ SELECT EXISTS ( // TODO: migrations } else { log.Info("New database found, initializing....") - err = initDB(conn) + err = initDB(db.Conn) if err != nil { return fmt.Errorf("Could not initalize database: %w", err) } @@ -104,7 +108,29 @@ CREATE TABLE runners ( id SERIAL PRIMARY KEY, name TEXT, secret TEXT -);` +); + +CREATE TABLE runs ( + id SERIAL PRIMARY KEY + +); + +CREATE TABLE command_executions ( + id SERIAL PRIMARY KEY, + run_id SERIAL, + command TEXT, + return_code TEXT, + stdout TEXT, + stderr TEXT, + start_time TIMESTAMP, + end_time TIMESTAMP, + + CONSTRAINT fk_run_id + FOREIGN KEY(run_id) + REFERENCES runs(id) +); + +` _, err := conn.Exec(context.Background(), createTablesQuery) if err != nil {