From 3e5422a2c81d6a3cd8f3a42d8b7da3f16f327eaa Mon Sep 17 00:00:00 2001 From: rasmus Date: Fri, 13 Sep 2024 21:49:30 +0300 Subject: [PATCH] ctx and main() return fixup log.Fatal does not panic. --- main.go | 50 +++++++++++++++++++++++++++++++++++--------------- 1 file changed, 35 insertions(+), 15 deletions(-) diff --git a/main.go b/main.go index 4bc7fad..85bcb98 100644 --- a/main.go +++ b/main.go @@ -39,7 +39,7 @@ var ( redirectNoPath = os.Getenv("GOREDIRECT_NOPATH") ) -func wrapper(coll *mongo.Collection) func(w http.ResponseWriter, r *http.Request) { +func lookupHandler(ctx context.Context, coll *mongo.Collection) func(w http.ResponseWriter, r *http.Request) { return func(w http.ResponseWriter, r *http.Request) { counterQueries.Inc() slug := r.URL.Path[1:] @@ -65,9 +65,9 @@ func wrapper(coll *mongo.Collection) func(w http.ResponseWriter, r *http.Request // Query var doc inventoryItemType - err := coll.FindOne(context.TODO(), bson.M{"shortener.slug": slug}).Decode(&doc) - if err != nil { + if err := coll.FindOne(ctx, bson.M{"shortener.slug": slug}).Decode(&doc); err != nil { counterNotFound.Inc() + if redirectNotFound == "" { http.NotFound(w, r) return @@ -113,8 +113,10 @@ var ( ) func main() { + ctx := context.Background() + if val := os.Getenv("GOREDIRECT_REGEX"); val != "" { - reValid = regexp.MustCompile(val) + regexValid = regexp.MustCompile(val) } if val := os.Getenv("MONGO_URI"); val != "" { @@ -122,29 +124,47 @@ func main() { } if val := os.Getenv("GOREDIRECT_COLLECTION"); val != "" { - collectionName = val + mongoCollection = val } + // Mongo database // + cs, err := connstring.ParseAndValidate(mongoURI) + if err != nil { + log.Fatal(err) + + os.Exit(1) + } + client, err := mongo.NewClient(options.Client().ApplyURI(mongoURI)) if err != nil { log.Fatal(err) + + os.Exit(1) } - ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) - err = client.Connect(ctx) - if err != nil { + + connectCtx, cancel := context.WithTimeout(ctx, 10*time.Second) + + if err := client.Connect(connectCtx); err != nil { log.Fatal(err) + + os.Exit(1) } cancel() - coll := client.Database(cs.Database).Collection(collectionName) + + coll := client.Database(cs.Database).Collection(mongoCollection) defer client.Disconnect(ctx) + + // HTTP Server // + http.Handle("/metrics", promhttp.Handler()) - http.HandleFunc("/", wrapper(coll)) + http.HandleFunc("/", lookupHandler(ctx, coll)) - log.Printf("Starting HTTP server\n") - err2 := http.ListenAndServe(":8080", nil) - if err2 != nil { - log.Fatal("ListenAndServe: ", err2) + log.Printf("Starting HTTP server on :8080\n") + + if err := http.ListenAndServe(":8080", nil); err != nil { + log.Fatal("ListenAndServe: ", err) + + os.Exit(1) } - }