From 162a2638fa3e74f844ac89df8dcb13e85a282bb5 Mon Sep 17 00:00:00 2001 From: matst80 Date: Wed, 5 Nov 2025 17:18:09 +0100 Subject: [PATCH] more changes --- cmd/cart/main.go | 44 +++++++++++++++++++++++--------- cmd/cart/pool-server.go | 56 ++++++++++++++++++++--------------------- 2 files changed, 60 insertions(+), 40 deletions(-) diff --git a/cmd/cart/main.go b/cmd/cart/main.go index bb8b84f..b5b231d 100644 --- a/cmd/cart/main.go +++ b/cmd/cart/main.go @@ -5,12 +5,12 @@ import ( "encoding/json" "fmt" "log" + "net" "net/http" "net/http/pprof" "os" "os/signal" "strings" - "syscall" "time" "git.tornberg.me/go-cart-actor/pkg/actor" @@ -159,16 +159,15 @@ func main() { // go diskStorage.SaveLoop(10 * time.Second) UseDiscovery(pool) - sigs := make(chan os.Signal, 1) - done := make(chan bool, 1) - signal.Notify(sigs, syscall.SIGTERM) + ctx, stop := signal.NotifyContext(context.Background(), os.Interrupt) + defer stop() - otelShutdown, err := setupOTelSDK(context.Background()) + otelShutdown, err := setupOTelSDK(ctx) if err != nil { log.Fatalf("Unable to start otel %v", err) } - mux.Handle("/cart/", http.StripPrefix("/cart", syncedServer.Serve())) + mux.Handle("/cart/", syncedServer.Serve()) // only for local mux.HandleFunc("GET /add/remote/{host}", func(w http.ResponseWriter, r *http.Request) { pool.AddRemote(r.PathValue("host")) @@ -212,20 +211,41 @@ func main() { mux.HandleFunc("/openapi.json", ServeEmbeddedOpenAPI) - go func() { - sig := <-sigs - fmt.Println("Shutting down due to signal:", sig) + srv := &http.Server{ + Addr: ":8080", + BaseContext: func(net.Listener) context.Context { return ctx }, + ReadTimeout: 10 * time.Second, + WriteTimeout: 20 * time.Second, + Handler: mux, + } + + defer func() { + + fmt.Println("Shutting down due to signal") otelShutdown(context.Background()) diskStorage.Close() pool.Close() - done <- true + }() + + srvErr := make(chan error, 1) + go func() { + srvErr <- srv.ListenAndServe() }() log.Print("Server started at port 8080") - go http.ListenAndServe(":8080", mux) + go http.ListenAndServe(":8081", debugMux) - <-done + + select { + case err = <-srvErr: + // Error when starting HTTP server. + log.Fatalf("Unable to start server: %v", err) + case <-ctx.Done(): + // Wait for first CTRL+C. + // Stop receiving signal notifications as soon as possible. + stop() + } } diff --git a/cmd/cart/pool-server.go b/cmd/cart/pool-server.go index 4aa063f..0dca476 100644 --- a/cmd/cart/pool-server.go +++ b/cmd/cart/pool-server.go @@ -579,36 +579,36 @@ func (s *PoolServer) Serve() *http.ServeMux { mux.Handle(pattern, handler) } - handleFunc("GET /", CookieCartIdHandler(s.ProxyHandler(s.GetCartHandler))) - handleFunc("GET /add/{sku}", CookieCartIdHandler(s.ProxyHandler(s.AddSkuToCartHandler))) - handleFunc("POST /add", CookieCartIdHandler(s.ProxyHandler(s.AddMultipleItemHandler))) - handleFunc("POST /", CookieCartIdHandler(s.ProxyHandler(s.AddSkuRequestHandler))) - handleFunc("POST /set", CookieCartIdHandler(s.ProxyHandler(s.SetCartItemsHandler))) - handleFunc("DELETE /{itemId}", CookieCartIdHandler(s.ProxyHandler(s.DeleteItemHandler))) - handleFunc("PUT /", CookieCartIdHandler(s.ProxyHandler(s.QuantityChangeHandler))) - handleFunc("DELETE /", CookieCartIdHandler(s.ProxyHandler(s.RemoveCartCookie))) - handleFunc("POST /delivery", CookieCartIdHandler(s.ProxyHandler(s.SetDeliveryHandler))) - handleFunc("DELETE /delivery/{deliveryId}", CookieCartIdHandler(s.ProxyHandler(s.RemoveDeliveryHandler))) - handleFunc("PUT /delivery/{deliveryId}/pickupPoint", CookieCartIdHandler(s.ProxyHandler(s.SetPickupPointHandler))) - handleFunc("PUT /voucher", CookieCartIdHandler(s.ProxyHandler(s.AddVoucherHandler))) - handleFunc("PUT /subscription-details", CookieCartIdHandler(s.ProxyHandler(s.SubscriptionDetailsHandler))) - handleFunc("DELETE /voucher/{voucherId}", CookieCartIdHandler(s.ProxyHandler(s.RemoveVoucherHandler))) + handleFunc("GET /cart/", CookieCartIdHandler(s.ProxyHandler(s.GetCartHandler))) + handleFunc("GET /cart/add/{sku}", CookieCartIdHandler(s.ProxyHandler(s.AddSkuToCartHandler))) + handleFunc("POST /cart/add", CookieCartIdHandler(s.ProxyHandler(s.AddMultipleItemHandler))) + handleFunc("POST /cart/", CookieCartIdHandler(s.ProxyHandler(s.AddSkuRequestHandler))) + handleFunc("POST /cart/set", CookieCartIdHandler(s.ProxyHandler(s.SetCartItemsHandler))) + handleFunc("DELETE /cart/{itemId}", CookieCartIdHandler(s.ProxyHandler(s.DeleteItemHandler))) + handleFunc("PUT /cart/", CookieCartIdHandler(s.ProxyHandler(s.QuantityChangeHandler))) + handleFunc("DELETE /cart/", CookieCartIdHandler(s.ProxyHandler(s.RemoveCartCookie))) + handleFunc("POST /cart/delivery", CookieCartIdHandler(s.ProxyHandler(s.SetDeliveryHandler))) + handleFunc("DELETE /cart/delivery/{deliveryId}", CookieCartIdHandler(s.ProxyHandler(s.RemoveDeliveryHandler))) + handleFunc("PUT /cart/delivery/{deliveryId}/pickupPoint", CookieCartIdHandler(s.ProxyHandler(s.SetPickupPointHandler))) + handleFunc("PUT /cart/voucher", CookieCartIdHandler(s.ProxyHandler(s.AddVoucherHandler))) + handleFunc("PUT /cart/subscription-details", CookieCartIdHandler(s.ProxyHandler(s.SubscriptionDetailsHandler))) + handleFunc("DELETE /cart/voucher/{voucherId}", CookieCartIdHandler(s.ProxyHandler(s.RemoveVoucherHandler))) - //mux.HandleFunc("GET /checkout", CookieCartIdHandler(s.ProxyHandler(s.HandleCheckout))) - //mux.HandleFunc("GET /confirmation/{orderId}", CookieCartIdHandler(s.ProxyHandler(s.HandleConfirmation))) + //mux.HandleFunc("GET /cart/checkout", CookieCartIdHandler(s.ProxyHandler(s.HandleCheckout))) + //mux.HandleFunc("GET /cart/confirmation/{orderId}", CookieCartIdHandler(s.ProxyHandler(s.HandleConfirmation))) - mux.HandleFunc("GET /byid/{id}", CartIdHandler(s.ProxyHandler(s.GetCartHandler))) - mux.HandleFunc("GET /byid/{id}/add/{sku}", CartIdHandler(s.ProxyHandler(s.AddSkuToCartHandler))) - mux.HandleFunc("POST /byid/{id}", CartIdHandler(s.ProxyHandler(s.AddSkuRequestHandler))) - mux.HandleFunc("DELETE /byid/{id}/{itemId}", CartIdHandler(s.ProxyHandler(s.DeleteItemHandler))) - mux.HandleFunc("PUT /byid/{id}", CartIdHandler(s.ProxyHandler(s.QuantityChangeHandler))) - mux.HandleFunc("POST /byid/{id}/delivery", CartIdHandler(s.ProxyHandler(s.SetDeliveryHandler))) - mux.HandleFunc("DELETE /byid/{id}/delivery/{deliveryId}", CartIdHandler(s.ProxyHandler(s.RemoveDeliveryHandler))) - mux.HandleFunc("PUT /byid/{id}/delivery/{deliveryId}/pickupPoint", CartIdHandler(s.ProxyHandler(s.SetPickupPointHandler))) - mux.HandleFunc("PUT /byid/{id}/voucher", CookieCartIdHandler(s.ProxyHandler(s.AddVoucherHandler))) - mux.HandleFunc("DELETE /byid/{id}/voucher/{voucherId}", CookieCartIdHandler(s.ProxyHandler(s.RemoveVoucherHandler))) - //mux.HandleFunc("GET /byid/{id}/checkout", CartIdHandler(s.ProxyHandler(s.HandleCheckout))) - //mux.HandleFunc("GET /byid/{id}/confirmation", CartIdHandler(s.ProxyHandler(s.HandleConfirmation))) + handleFunc("GET /cart/byid/{id}", CartIdHandler(s.ProxyHandler(s.GetCartHandler))) + handleFunc("GET /cart/byid/{id}/add/{sku}", CartIdHandler(s.ProxyHandler(s.AddSkuToCartHandler))) + handleFunc("POST /cart/byid/{id}", CartIdHandler(s.ProxyHandler(s.AddSkuRequestHandler))) + handleFunc("DELETE /cart/byid/{id}/{itemId}", CartIdHandler(s.ProxyHandler(s.DeleteItemHandler))) + handleFunc("PUT /cart/byid/{id}", CartIdHandler(s.ProxyHandler(s.QuantityChangeHandler))) + handleFunc("POST /cart/byid/{id}/delivery", CartIdHandler(s.ProxyHandler(s.SetDeliveryHandler))) + handleFunc("DELETE /cart/byid/{id}/delivery/{deliveryId}", CartIdHandler(s.ProxyHandler(s.RemoveDeliveryHandler))) + handleFunc("PUT /cart/byid/{id}/delivery/{deliveryId}/pickupPoint", CartIdHandler(s.ProxyHandler(s.SetPickupPointHandler))) + handleFunc("PUT /cart/byid/{id}/voucher", CookieCartIdHandler(s.ProxyHandler(s.AddVoucherHandler))) + handleFunc("DELETE /cart/byid/{id}/voucher/{voucherId}", CookieCartIdHandler(s.ProxyHandler(s.RemoveVoucherHandler))) + //mux.HandleFunc("GET /cart/byid/{id}/checkout", CartIdHandler(s.ProxyHandler(s.HandleCheckout))) + //mux.HandleFunc("GET /cart/byid/{id}/confirmation", CartIdHandler(s.ProxyHandler(s.HandleConfirmation))) return mux }