pgm/db/db.go
2020-10-25 10:27:09 -05:00

63 lines
1.5 KiB
Go

package db
import (
"context"
"database/sql"
"fmt"
_ "github.com/lib/pq"
"os"
"pgm/data"
"pgm/logger"
)
func DbConn(c data.HostDetails) *sql.DB {
var h string
var u string
var pw string
var dbn string
var psqlInfo string
h = c.Hostname
u = c.Username
pw = c.Secret
dbn = c.DatabaseName
logger.Logger("[LOG] connection details: host = " + h + " username = " + u)
found, testUserName := data.ViperPgmConfig("test_user", "r")
if found == true {
logger.Logger("[LOG] found test user in .pgm.yaml")
}
psqlInfo = fmt.Sprintf("host=%s port=%d user=%s "+
"password=%s dbname=%s sslmode=disable",
h, 5432, u, pw, dbn)
db, err := sql.Open("postgres", psqlInfo)
if err != nil {
switch u {
case testUserName:
logger.Logger("[ERROR] go tests expects to connect with the docker compose database." +
"[ERROR] run \"docker-compose up\" and re-run tests")
fmt.Println("local db is closed, please run docker-compose up")
os.Exit(1)
default:
logger.Logger("[ERROR] db error: " + err.Error())
}
}
logger.Logger("[LOG] pinging db " + dbn)
ctx := context.Background()
err = db.PingContext(ctx)
if err != nil {
switch u {
case testUserName:
logger.Logger("[ERROR] db error, unable to ping: " + err.Error()+
"[ERROR] ensure docker database is running and re-run tests")
fmt.Println("local db is closed, please run docker-compose up")
os.Exit(1)
default:
logger.Logger("[ERROR] db error: " + err.Error())
}
}
return db
}