package main import ( "context" "fmt" "log" "net/http" "os" "os/signal" "time" "go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp" ) func main() { ctx, stop := signal.NotifyContext(context.Background(), os.Interrupt) defer stop() shutdown, err := setupTracing(ctx) if err != nil { log.Fatal(err) } defer func() { shutdownCtx, cancel := context.WithTimeout(context.Background(), 5*time.Second) defer cancel() if err := shutdown(shutdownCtx); err != nil { log.Printf("trace shutdown failed: %v", err) } }() mux := http.NewServeMux() mux.HandleFunc("/hello", func(w http.ResponseWriter, r *http.Request) { fmt.Fprintln(w, "hello from checkout-api") }) handler := otelhttp.NewHandler(mux, "checkout-api") server := &http.Server{ Addr: ":8080", Handler: handler, ReadHeaderTimeout: 5 * time.Second, } go func() { log.Println("listening on :8080") if err := server.ListenAndServe(); err != nil && err != http.ErrServerClosed { log.Printf("server stopped: %v", err) } }() <-ctx.Done() shutdownCtx, cancel := context.WithTimeout(context.Background(), 5*time.Second) defer cancel() _ = server.Shutdown(shutdownCtx) }