From 9df049141aa97595086d79fad1a70060aa856827 Mon Sep 17 00:00:00 2001 From: codyshoffner Date: Fri, 24 Apr 2026 15:04:25 -0500 Subject: [PATCH] fix: posgres connection, bump image and chart --- .github/container-and-chart/docker/go.mod | 14 ++-- .github/container-and-chart/docker/go.sum | 30 ++++++++- .github/container-and-chart/docker/main.go | 65 ++++++++++--------- .../container-and-chart/docker/version.txt | 2 +- .../container-and-chart/helm/chart/Chart.yaml | 4 +- .../helm/chart/values.yaml | 2 +- 6 files changed, 78 insertions(+), 39 deletions(-) diff --git a/.github/container-and-chart/docker/go.mod b/.github/container-and-chart/docker/go.mod index 878c161..c9da2f0 100644 --- a/.github/container-and-chart/docker/go.mod +++ b/.github/container-and-chart/docker/go.mod @@ -2,21 +2,27 @@ module reference-package go 1.25.6 +require ( + github.com/coreos/go-oidc/v3 v3.17.0 + github.com/jackc/pgx/v5 v5.8.0 + github.com/prometheus/client_golang v1.23.2 + golang.org/x/oauth2 v0.34.0 +) + require ( github.com/beorn7/perks v1.0.1 // indirect github.com/cespare/xxhash/v2 v2.3.0 // indirect - github.com/coreos/go-oidc/v3 v3.17.0 // indirect github.com/go-jose/go-jose/v4 v4.1.3 // indirect github.com/jackc/pgpassfile v1.0.0 // indirect github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761 // indirect - github.com/jackc/pgx/v5 v5.8.0 // indirect + github.com/jackc/puddle/v2 v2.2.2 // indirect + github.com/kr/text v0.2.0 // indirect github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect - github.com/prometheus/client_golang v1.23.2 // indirect github.com/prometheus/client_model v0.6.2 // indirect github.com/prometheus/common v0.66.1 // indirect github.com/prometheus/procfs v0.16.1 // indirect go.yaml.in/yaml/v2 v2.4.2 // indirect - golang.org/x/oauth2 v0.34.0 // indirect + golang.org/x/sync v0.17.0 // indirect golang.org/x/sys v0.35.0 // indirect golang.org/x/text v0.29.0 // indirect google.golang.org/protobuf v1.36.8 // indirect diff --git a/.github/container-and-chart/docker/go.sum b/.github/container-and-chart/docker/go.sum index 9933b48..132e501 100644 --- a/.github/container-and-chart/docker/go.sum +++ b/.github/container-and-chart/docker/go.sum @@ -4,17 +4,33 @@ github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UF github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/coreos/go-oidc/v3 v3.17.0 h1:hWBGaQfbi0iVviX4ibC7bk8OKT5qNr4klBaCHVNvehc= github.com/coreos/go-oidc/v3 v3.17.0/go.mod h1:wqPbKFrVnE90vty060SB40FCJ8fTHTxSwyXJqZH+sI8= +github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/go-jose/go-jose/v4 v4.1.3 h1:CVLmWDhDVRa6Mi/IgCgaopNosCaHz7zrMeF9MlZRkrs= github.com/go-jose/go-jose/v4 v4.1.3/go.mod h1:x4oUasVrzR7071A4TnHLGSPpNOm2a21K9Kf04k1rs08= +github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= +github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU= github.com/jackc/pgpassfile v1.0.0 h1:/6Hmqy13Ss2zCq62VdNG8tM1wchn8zjSGOBJ6icpsIM= github.com/jackc/pgpassfile v1.0.0/go.mod h1:CEx0iS5ambNFdcRtxPj5JhEz+xB6uRky5eyVu/W2HEg= github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761 h1:iCEnooe7UlwOQYpKFhBabPMi4aNAfoODPEFNiAnClxo= github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761/go.mod h1:5TJZWKEWniPve33vlWYSoGYefn3gLQRzjfDlhSJ9ZKM= github.com/jackc/pgx/v5 v5.8.0 h1:TYPDoleBBme0xGSAX3/+NujXXtpZn9HBONkQC7IEZSo= github.com/jackc/pgx/v5 v5.8.0/go.mod h1:QVeDInX2m9VyzvNeiCJVjCkNFqzsNb43204HshNSZKw= +github.com/jackc/puddle/v2 v2.2.2 h1:PR8nw+E/1w0GLuRFSmiioY6UooMp6KJv0/61nB7icHo= +github.com/jackc/puddle/v2 v2.2.2/go.mod h1:vriiEXHvEE654aYKXXjOvZM39qJ0q+azkZFrfEOc3H4= +github.com/klauspost/compress v1.18.0 h1:c/Cqfb0r+Yi+JtIEq73FWXVkRonBlf0CRNYc8Zttxdo= +github.com/klauspost/compress v1.18.0/go.mod h1:2Pp+KzxcywXVXMr50+X0Q/Lsb43OQHYWRCY2AiWywWQ= +github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= +github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= +github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= +github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= +github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc= +github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/prometheus/client_golang v1.23.2 h1:Je96obch5RDVy3FDMndoUsjAhG5Edi49h0RJWRi/o0o= github.com/prometheus/client_golang v1.23.2/go.mod h1:Tb1a6LWHB3/SPIzCoaDXI4I8UHKeFTEQ1YCr+0Gyqmg= @@ -24,15 +40,21 @@ github.com/prometheus/common v0.66.1 h1:h5E0h5/Y8niHc5DlaLlWLArTQI7tMrsfQjHV+d9Z github.com/prometheus/common v0.66.1/go.mod h1:gcaUsgf3KfRSwHY4dIMXLPV0K/Wg1oZ8+SbZk/HH/dA= github.com/prometheus/procfs v0.16.1 h1:hZ15bTNuirocR6u0JZ6BAHHmwS1p8B4P6MRqxtzMyRg= github.com/prometheus/procfs v0.16.1/go.mod h1:teAbpZRB1iIAJYREa1LsoWUXykVXA1KlTmWl8x/U+Is= +github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ= +github.com/rogpeppe/go-internal v1.10.0/go.mod h1:UQnix2H7Ngw/k4C5ijL5+65zddjncjaFoBhdsK/akog= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U= +github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U= +go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= +go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= go.yaml.in/yaml/v2 v2.4.2 h1:DzmwEr2rDGHl7lsFgAHxmNz/1NlQ7xLIrlN2h5d1eGI= go.yaml.in/yaml/v2 v2.4.2/go.mod h1:081UH+NErpNdqlCXm3TtEran0rJZGxAYx9hb/ELlsPU= -golang.org/x/oauth2 v0.28.0 h1:CrgCKl8PPAVtLnU3c+EDw6x11699EWlsDeWNWKdIOkc= -golang.org/x/oauth2 v0.28.0/go.mod h1:onh5ek6nERTohokkhCD/y2cV4Do3fxFHFuAejCkRWT8= golang.org/x/oauth2 v0.34.0 h1:hqK/t4AKgbqWkdkcAeI8XLmbK+4m4G5YeQRrmiotGlw= golang.org/x/oauth2 v0.34.0/go.mod h1:lzm5WQJQwKZ3nwavOZ3IS5Aulzxi68dUSgRHujetwEA= +golang.org/x/sync v0.17.0 h1:l60nONMj9l5drqw6jlhIELNv9I0A4OFgRsG9k2oT9Ug= +golang.org/x/sync v0.17.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI= golang.org/x/sys v0.35.0 h1:vz1N37gP5bs89s7He8XuIYXpyY0+QlsKmzipCbUtyxI= golang.org/x/sys v0.35.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= golang.org/x/text v0.29.0 h1:1neNs90w9YzJ9BocxfsQNHKuAT4pkghyXc4nhZ6sJvk= @@ -40,4 +62,8 @@ golang.org/x/text v0.29.0/go.mod h1:7MhJOA9CD2qZyOKYazxdYMF85OwPdEr9jTtBpO7ydH4= google.golang.org/protobuf v1.36.8 h1:xHScyCOEuuwZEc6UtSOvPbAT4zRh0xcNRYekJwfqyMc= google.golang.org/protobuf v1.36.8/go.mod h1:fuxRtAxBytpl4zzqUh6/eyUujkJdNiuEkXntxiD/uRU= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/.github/container-and-chart/docker/main.go b/.github/container-and-chart/docker/main.go index 58cc224..08d38cd 100644 --- a/.github/container-and-chart/docker/main.go +++ b/.github/container-and-chart/docker/main.go @@ -18,7 +18,7 @@ import ( "time" "github.com/coreos/go-oidc/v3/oidc" - "github.com/jackc/pgx/v5" + "github.com/jackc/pgx/v5/pgxpool" "github.com/prometheus/client_golang/prometheus" "github.com/prometheus/client_golang/prometheus/promauto" "github.com/prometheus/client_golang/prometheus/promhttp" @@ -46,7 +46,7 @@ var ( ssoEnabled bool // DB State - dbConn *pgx.Conn + dbPool *pgxpool.Pool dbMu sync.RWMutex // Prometheus Metrics @@ -76,31 +76,38 @@ func main() { return } + pool, err := pgxpool.New(context.Background(), connStr) + if err != nil { + fmt.Printf("Failed to create Postgres pool: %v\n", err) + dbConnectedMetric.Set(0) + return + } + for { - conn, err := pgx.Connect(context.Background(), connStr) + pingCtx, cancel := context.WithTimeout(context.Background(), 5*time.Second) + err := pool.Ping(pingCtx) + cancel() if err == nil { fmt.Println("Successfully connected to Postgres!") - - // Initialize table - _, err = conn.Exec(context.Background(), "CREATE TABLE IF NOT EXISTS kv_store (key TEXT PRIMARY KEY, value TEXT)") - if err != nil { - fmt.Printf("Failed to initialize table: %v\n", err) - } - - dbMu.Lock() - dbConn = conn - dbMu.Unlock() - dbConnectedMetric.Set(1) - // Initialize KV count metric from DB - if err := updateKVCount(context.Background(), conn); err != nil { - fmt.Printf("Failed to initialize kv count metric: %v\n", err) - } break } fmt.Printf("Postgres not available yet, retrying in 5s... (%v)\n", err) dbConnectedMetric.Set(0) time.Sleep(5 * time.Second) } + + if _, err := pool.Exec(context.Background(), "CREATE TABLE IF NOT EXISTS kv_store (key TEXT PRIMARY KEY, value TEXT)"); err != nil { + fmt.Printf("Failed to initialize table: %v\n", err) + } + + dbMu.Lock() + dbPool = pool + dbMu.Unlock() + dbConnectedMetric.Set(1) + + if err := updateKVCount(context.Background(), pool); err != nil { + fmt.Printf("Failed to initialize kv count metric: %v\n", err) + } }() // --- 2. SSO Setup --- @@ -199,7 +206,7 @@ func main() { dbMu.RLock() defer dbMu.RUnlock() - if dbConn == nil { + if dbPool == nil { trackRequest("/set", "503") http.Error(w, "Database unavailable", http.StatusServiceUnavailable) return @@ -214,7 +221,7 @@ func main() { } // --- DB LOGGING END --- - _, err := dbConn.Exec(r.Context(), ` + _, err := dbPool.Exec(r.Context(), ` INSERT INTO kv_store (key, value) VALUES ($1, $2) ON CONFLICT (key) DO UPDATE SET value = EXCLUDED.value`, key, val) @@ -242,7 +249,7 @@ func main() { dbMu.RLock() defer dbMu.RUnlock() - if dbConn == nil { + if dbPool == nil { trackRequest("/delete", "503") http.Error(w, "Database unavailable", http.StatusServiceUnavailable) return @@ -261,7 +268,7 @@ func main() { } // --- DB LOGGING END --- - result, err := dbConn.Exec(r.Context(), "DELETE FROM kv_store WHERE key = $1", key) + result, err := dbPool.Exec(r.Context(), "DELETE FROM kv_store WHERE key = $1", key) if err != nil { trackRequest("/delete", "500") if os.Getenv("DB_LOG_LEVEL") == "debug" { @@ -294,7 +301,7 @@ func main() { dbMu.RLock() defer dbMu.RUnlock() - if dbConn == nil { + if dbPool == nil { trackRequest("/get-all", "503") w.Header().Set("Content-Type", "application/json") w.WriteHeader(http.StatusServiceUnavailable) @@ -308,7 +315,7 @@ func main() { } // --- DB LOGGING END --- - rows, err := dbConn.Query(r.Context(), "SELECT key, value FROM kv_store ORDER BY key ASC") + rows, err := dbPool.Query(r.Context(), "SELECT key, value FROM kv_store ORDER BY key ASC") if err != nil { trackRequest("/get-all", "500") if os.Getenv("DB_LOG_LEVEL") == "debug" { @@ -345,9 +352,9 @@ func trackRequest(path, status string) { // updateKVCount queries the provided connection for the number of rows in kv_store // and sets the kvCountMetric accordingly. -func updateKVCount(ctx context.Context, conn *pgx.Conn) error { +func updateKVCount(ctx context.Context, pool *pgxpool.Pool) error { var count int64 - row := conn.QueryRow(ctx, "SELECT COUNT(*) FROM kv_store") + row := pool.QueryRow(ctx, "SELECT COUNT(*) FROM kv_store") if err := row.Scan(&count); err != nil { return err } @@ -355,14 +362,14 @@ func updateKVCount(ctx context.Context, conn *pgx.Conn) error { return nil } -// refreshKVCount is a convenience wrapper that uses the global dbConn. +// refreshKVCount is a convenience wrapper that uses the global dbPool. func refreshKVCount(ctx context.Context) error { dbMu.RLock() defer dbMu.RUnlock() - if dbConn == nil { + if dbPool == nil { return fmt.Errorf("db not connected") } - return updateKVCount(ctx, dbConn) + return updateKVCount(ctx, dbPool) } func initSSO(ctx context.Context) error { diff --git a/.github/container-and-chart/docker/version.txt b/.github/container-and-chart/docker/version.txt index 9ff151c..a1c2c6a 100644 --- a/.github/container-and-chart/docker/version.txt +++ b/.github/container-and-chart/docker/version.txt @@ -1 +1 @@ -v0.1.0 \ No newline at end of file +v0.1.1 \ No newline at end of file diff --git a/.github/container-and-chart/helm/chart/Chart.yaml b/.github/container-and-chart/helm/chart/Chart.yaml index 8f9e65a..a5049fd 100644 --- a/.github/container-and-chart/helm/chart/Chart.yaml +++ b/.github/container-and-chart/helm/chart/Chart.yaml @@ -18,10 +18,10 @@ type: application # This is the chart version. This version number should be incremented each time you make changes # to the chart and its templates, including the app version. # Versions are expected to follow Semantic Versioning (https://semver.org/) -version: 0.1.0 +version: 0.1.1 # This is the version number of the application being deployed. This version number should be # incremented each time you make changes to the application. Versions are not expected to # follow Semantic Versioning. They should reflect the version the application is using. # It is recommended to use it with quotes. -appVersion: "0.1.0" +appVersion: "0.1.1" diff --git a/.github/container-and-chart/helm/chart/values.yaml b/.github/container-and-chart/helm/chart/values.yaml index 0dc2c02..fb0e3a5 100644 --- a/.github/container-and-chart/helm/chart/values.yaml +++ b/.github/container-and-chart/helm/chart/values.yaml @@ -3,7 +3,7 @@ image: repository: reference-package - tag: v0.1.0 + tag: v0.1.1 pullPolicy: IfNotPresent service: