Enha: tracing [WIP]
This commit is contained in:
		| @@ -4,4 +4,5 @@ services: | |||||||
|     image: jaegertracing/all-in-one:latest |     image: jaegertracing/all-in-one:latest | ||||||
|     ports: |     ports: | ||||||
|       - "6831:6831/udp" |       - "6831:6831/udp" | ||||||
|  |       - "14268:14268" | ||||||
|       - "16686:16686" |       - "16686:16686" | ||||||
|   | |||||||
							
								
								
									
										22
									
								
								main.go
									
									
									
									
									
								
							
							
						
						
									
										22
									
								
								main.go
									
									
									
									
									
								
							| @@ -9,6 +9,7 @@ import ( | |||||||
| 	"gralias/telemetry" | 	"gralias/telemetry" | ||||||
| 	"log/slog" | 	"log/slog" | ||||||
| 	"net/http" | 	"net/http" | ||||||
|  | 	_ "net/http/pprof" | ||||||
| 	"os" | 	"os" | ||||||
| 	"os/signal" | 	"os/signal" | ||||||
| 	"path/filepath" | 	"path/filepath" | ||||||
| @@ -111,16 +112,33 @@ func main() { | |||||||
| 	cm := crons.NewCronManager(repo, slog.Default()) | 	cm := crons.NewCronManager(repo, slog.Default()) | ||||||
| 	cm.Start() | 	cm.Start() | ||||||
| 	server := ListenToRequests(cfg.ServerConfig.Port) | 	server := ListenToRequests(cfg.ServerConfig.Port) | ||||||
|  | 	pprofPort := "6060" | ||||||
|  | 	pprofServer := &http.Server{ | ||||||
|  | 		Addr: ":" + pprofPort, | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	go func() { | ||||||
|  | 		slog.Info("Pprof server listening", "addr", pprofPort) | ||||||
|  | 		if err := pprofServer.ListenAndServe(); err != nil && err != http.ErrServerClosed { | ||||||
|  | 			slog.Error("Pprof server failed", "error", err) | ||||||
|  | 		} | ||||||
|  | 	}() | ||||||
|  |  | ||||||
| 	go func() { | 	go func() { | ||||||
| 		if err := server.ListenAndServe(); err != nil && err != http.ErrServerClosed { | 		if err := server.ListenAndServe(); err != nil && err != http.ErrServerClosed { | ||||||
| 			panic(err) | 			panic(err) | ||||||
| 		} | 		} | ||||||
| 	}() | 	}() | ||||||
|  |  | ||||||
| 	<-stop | 	<-stop | ||||||
| 	slog.Info("Shutting down server...") | 	slog.Info("Shutting down servers...") | ||||||
| 	ctx, cancel := context.WithTimeout(context.Background(), 2*time.Second) | 	ctx, cancel := context.WithTimeout(context.Background(), 2*time.Second) | ||||||
| 	defer cancel() | 	defer cancel() | ||||||
|  |  | ||||||
| 	if err := server.Shutdown(ctx); err != nil { | 	if err := server.Shutdown(ctx); err != nil { | ||||||
| 		slog.Error("server shutdown failed", "error", err) | 		slog.Error("Main server shutdown failed", "error", err) | ||||||
|  | 	} | ||||||
|  | 	if err := pprofServer.Shutdown(ctx); err != nil { | ||||||
|  | 		slog.Error("Pprof server shutdown failed", "error", err) | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
|   | |||||||
| @@ -36,7 +36,11 @@ func NewTracerProvider(exp sdktrace.SpanExporter) *sdktrace.TracerProvider { | |||||||
|  |  | ||||||
| // OtelMiddleware wraps the provided http.Handler with OpenTelemetry tracing. | // OtelMiddleware wraps the provided http.Handler with OpenTelemetry tracing. | ||||||
| func OtelMiddleware(handler http.Handler) http.Handler { | func OtelMiddleware(handler http.Handler) http.Handler { | ||||||
| 	return otelhttp.NewHandler(handler, "http.server") | 	return otelhttp.NewHandler(handler, "http.server", | ||||||
|  | 		otelhttp.WithSpanNameFormatter(func(operation string, r *http.Request) string { | ||||||
|  | 			return r.URL.Path | ||||||
|  | 		}), | ||||||
|  | 	) | ||||||
| } | } | ||||||
|  |  | ||||||
| func InitTracer() func() { | func InitTracer() func() { | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Grail Finder
					Grail Finder