package main import ( "context" "fmt" "github.com/caarlos0/env/v6" "github.com/gin-gonic/gin" "github.com/jackc/pgx/v4/pgxpool" "log" "time" "trikotwaschliste/database/migrations" "trikotwaschliste/logbuffer" "trikotwaschliste/models" "trikotwaschliste/routes" ) func main() { //gin.SetMode(gin.ReleaseMode) r := gin.Default() var err error //get configuration cfg := models.Config{} if err := env.Parse(&cfg); err != nil { log.Printf("%+v\n", err) } //Start postgres connection pool := createDatabasePool(cfg) // Init the logging buffer for online log view logbuf := logbuffer.New() r.Use(logbuffer.UseLogBuffer(logbuf)) r.LoadHTMLGlob("html/**/*") r.Static("/static", "html/static") //r.StaticFile("/favicon.ico", "html/favicon.ico") //routes.RoutesInit(r, pool) routes.RoutesInit(r, pool, &cfg, logbuf) err = r.Run("0.0.0.0:8082") if err != nil { log.Println("Something went wrong!") } } func createDatabasePool(cfg models.Config) *pgxpool.Pool { log.Println("Checking for migration") migrations.RunMigration(cfg) //create the database url dburl := "postgresql://" + cfg.DB_USER + ":" + cfg.DB_PASSWORD + "@" + cfg.DB_HOST + ":" + fmt.Sprint(cfg.DB_PORT) + "/" + cfg.DB_DATABASE config, err := pgxpool.ParseConfig(dburl) if err != nil { log.Println("Can't parse pgx connection.") return nil } //Set the max amount of database connections config.MaxConns = int32(cfg.DB_MAXCONNECTIONS) //create connection pool pool, err := pgxpool.ConnectConfig(context.Background(), config) for err != nil { pool, err = pgxpool.ConnectConfig(context.Background(), config) if err != nil { log.Println("Can't establish postgres connection.") } time.Sleep(60 * time.Second) } return pool }