46 lines
948 B
Go
46 lines
948 B
Go
|
|
package tools
|
||
|
|
|
||
|
|
import (
|
||
|
|
"context"
|
||
|
|
"sync"
|
||
|
|
"time"
|
||
|
|
|
||
|
|
"github.com/jackc/pgx/v5/pgxpool"
|
||
|
|
)
|
||
|
|
|
||
|
|
var Database *pgxpool.Pool
|
||
|
|
|
||
|
|
func SetupDatabase(stop context.Context, await *sync.WaitGroup) {
|
||
|
|
|
||
|
|
var err error
|
||
|
|
t := time.Now()
|
||
|
|
ctx, cancel := context.WithTimeout(context.Background(), time.Second)
|
||
|
|
defer cancel()
|
||
|
|
|
||
|
|
// Create and Test Client
|
||
|
|
cfg, err := pgxpool.ParseConfig(DATABASE_URL)
|
||
|
|
if err != nil {
|
||
|
|
LoggerDatabase.Log(FATAL, "Invalid Database URI: %s", err)
|
||
|
|
return
|
||
|
|
}
|
||
|
|
if Database, err = pgxpool.NewWithConfig(ctx, cfg); err != nil {
|
||
|
|
LoggerDatabase.Log(FATAL, "Failed to create pool: %s", err.Error())
|
||
|
|
return
|
||
|
|
}
|
||
|
|
if err = Database.Ping(ctx); err != nil {
|
||
|
|
LoggerDatabase.Log(FATAL, "Failed to ping database: %s", err.Error())
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
// Shutdown Logic
|
||
|
|
await.Add(1)
|
||
|
|
go func() {
|
||
|
|
defer await.Done()
|
||
|
|
<-stop.Done()
|
||
|
|
Database.Close()
|
||
|
|
LoggerDatabase.Log(INFO, "Closed")
|
||
|
|
}()
|
||
|
|
|
||
|
|
LoggerDatabase.Log(INFO, "Ready in %s", time.Since(t))
|
||
|
|
}
|