github.com/diadata-org/diadata@v1.4.593/pkg/dia/helpers/db/postgres.go (about) 1 package db 2 3 import ( 4 "bufio" 5 "context" 6 "github.com/diadata-org/diadata/pkg/utils" 7 "github.com/jackc/pgx/v4/pgxpool" 8 "os" 9 ) 10 11 const ( 12 postgresKey = "postgres_credentials.txt" 13 14 // reconnectWaitSeconds = 5 15 // maxRetry = 120 16 ) 17 18 func PostgresDatabase() *pgxpool.Pool { 19 pool, err := pgxpool.Connect(context.Background(), GetPostgresURL()) 20 if err != nil { 21 log.Error(err) 22 } 23 return pool 24 25 } 26 27 /* 28 var postgresClient *pgxpool.Pool 29 func GetPostgresClient() (*pgx.Conn, error) { 30 var err error 31 log.Info("connect to postgres server...") 32 postgresClient, err = pgxpool.Connect(context.Background(), GetPostgresURL()) 33 if err != nil { 34 log.Error(err) 35 return &pgx.Conn{}, err 36 } 37 log.Info("...connection to postgres server established.") 38 39 return postgresClient.Conn(), err 40 } 41 42 func PostgresDatabase() *pgx.Conn { 43 connected := false 44 var err error 45 if postgresClient == nil { 46 // during startup - if it does not exist, create it 47 postgresClient, err = GetPostgresClient() 48 if err == nil { 49 connected = true 50 } 51 } 52 53 count := 0 54 for (!connected || postgresClient.IsClosed()) && count < maxRetry { 55 log.Info("Connection to Postgres was lost. Waiting for 5s...") 56 time.Sleep(reconnectWaitSeconds * time.Second) 57 log.Info("Reconnecting to Postgres...") 58 postgresClient, err = GetPostgresClient() 59 if err == nil { 60 connected = true 61 } 62 count++ 63 } 64 return postgresClient 65 } 66 */ 67 68 func GetPostgresURL() (url string) { 69 if utils.Getenv("USE_ENV", "false") == "true" { 70 return "postgresql://" + os.Getenv("POSTGRES_USER") + ":" + os.Getenv("POSTGRES_PASSWORD") + "@" + os.Getenv("POSTGRES_HOST") + "/" + os.Getenv("POSTGRES_DB") 71 } 72 if utils.Getenv("EXEC_MODE", "local") == "production" { 73 return "postgresql://postgres/postgres?user=postgres&password=" + getPostgresKeyFromSecrets() 74 } 75 return "postgresql://localhost/postgres?user=postgres&password=" + getPostgresKeyFromSecrets() 76 } 77 78 func getPostgresKeyFromSecrets() string { 79 var lines []string 80 var file *os.File 81 var err error 82 if utils.Getenv("EXEC_MODE", "") == "production" { 83 pwd, _ := os.Getwd() 84 log.Info("current directory: ", pwd) 85 file, err = os.Open("/run/secrets/" + "postgres_credentials") 86 if err != nil { 87 log.Fatal(err) 88 } 89 } else { 90 file, err = os.Open(os.Getenv("GOPATH") + "/src/github.com/diadata-org/diadata/secrets/" + postgresKey) 91 if err != nil { 92 log.Fatal(err) 93 } 94 } 95 scanner := bufio.NewScanner(file) 96 for scanner.Scan() { 97 lines = append(lines, scanner.Text()) 98 } 99 if err = scanner.Err(); err != nil { 100 log.Fatal(err) 101 } 102 if len(lines) != 1 { 103 log.Fatal("Secrets file should have exactly one line") 104 } 105 err = file.Close() 106 if err != nil { 107 log.Error(err) 108 } 109 return lines[0] 110 }