5
5
"fmt"
6
6
"log"
7
7
"os"
8
+ "time"
8
9
9
10
_ "github.com/lib/pq"
10
11
@@ -36,15 +37,21 @@ func main() {
36
37
}
37
38
defer db .Close ()
38
39
39
- if err := initDB (db ); err != nil {
40
- log .Fatal (err )
41
- }
42
-
43
40
engine := html .New ("./views" , ".html" )
44
41
app := fiber .New (fiber.Config {
45
42
Views : engine ,
46
43
})
47
44
45
+ //checked by kubernetes to see if the pod is ready to receive traffic
46
+ app .Get ("/healthz" , func (c * fiber.Ctx ) error {
47
+ fmt .Println ("healthcheck" )
48
+ err := db .Ping ()
49
+ if err != nil {
50
+ c .SendString (err .Error ())
51
+ }
52
+ return err
53
+ })
54
+
48
55
app .Get ("/" , func (c * fiber.Ctx ) error {
49
56
return getTodos (c , db , version )
50
57
})
@@ -61,6 +68,27 @@ func main() {
61
68
app .Static ("/" , "./public" )
62
69
app .Use (logger .New ())
63
70
71
+ //we need to keep re-trying until successful, but don't want to block
72
+ //the api form starting, so we kick off a go-routine
73
+ go func () {
74
+ x := 0
75
+ for {
76
+ log .Println ("Attempting to connect to DB" )
77
+
78
+ if err := initDB (db ); err == nil {
79
+ break
80
+ }
81
+
82
+ if x > 60 {
83
+ log .Printf ("Retried %d times, exiting\n " , x )
84
+ log .Fatal (err )
85
+ }
86
+
87
+ log .Printf ("Failed to connect to DB, retry attempt %d/60. Err: %v\n " , x , err )
88
+ time .Sleep (time .Second )
89
+ x ++
90
+ }
91
+ }()
64
92
log .Println (app .Listen (fmt .Sprintf (":%v" , port )))
65
93
}
66
94
@@ -78,6 +106,7 @@ func getTodos(c *fiber.Ctx, db *sql.DB, version string) error {
78
106
rows .Scan (& res )
79
107
todos = append (todos , res )
80
108
}
109
+
81
110
return c .Render ("index" , fiber.Map {
82
111
"Todos" : todos ,
83
112
"Enterprise" : os .Getenv ("ENTERPRISE" ),
0 commit comments