64 lines
1.9 KiB
Go
64 lines
1.9 KiB
Go
package middleware
|
|
|
|
import (
|
|
"context"
|
|
"net/http"
|
|
|
|
"github.com/gin-gonic/gin"
|
|
)
|
|
|
|
// GetRequestIDFromContext extrait le request_id depuis le contexte Gin ou Go
|
|
// Essaie d'abord le contexte Gin, puis le contexte Go standard
|
|
func GetRequestIDFromContext(c *gin.Context) string {
|
|
// Essayer depuis le contexte Gin
|
|
if requestID, exists := c.Get("request_id"); exists {
|
|
if id, ok := requestID.(string); ok && id != "" {
|
|
return id
|
|
}
|
|
}
|
|
return ""
|
|
}
|
|
|
|
// GetRequestIDFromGoContext extrait le request_id depuis un contexte Go standard
|
|
func GetRequestIDFromGoContext(ctx context.Context) string {
|
|
// Le request_id peut être stocké dans le contexte Go avec une clé spécifique
|
|
if requestID := ctx.Value("request_id"); requestID != nil {
|
|
if id, ok := requestID.(string); ok {
|
|
return id
|
|
}
|
|
}
|
|
return ""
|
|
}
|
|
|
|
// PropagateRequestID ajoute le header X-Request-ID à une requête HTTP sortante
|
|
// si le request_id est disponible dans le contexte
|
|
func PropagateRequestID(c *gin.Context, req *http.Request) {
|
|
requestID := GetRequestIDFromContext(c)
|
|
if requestID != "" {
|
|
req.Header.Set("X-Request-ID", requestID)
|
|
}
|
|
|
|
// Propager aussi le trace_id si disponible
|
|
if traceID := GetTraceID(c); traceID != "" {
|
|
req.Header.Set("X-Trace-ID", traceID)
|
|
}
|
|
|
|
// Propager aussi le span_id si disponible
|
|
if spanID := GetSpanID(c); spanID != "" {
|
|
req.Header.Set("X-Span-ID", spanID)
|
|
}
|
|
}
|
|
|
|
// PropagateRequestIDFromContext ajoute le header X-Request-ID à une requête HTTP sortante
|
|
// depuis un contexte Go standard
|
|
func PropagateRequestIDFromContext(ctx context.Context, req *http.Request) {
|
|
requestID := GetRequestIDFromGoContext(ctx)
|
|
if requestID != "" {
|
|
req.Header.Set("X-Request-ID", requestID)
|
|
}
|
|
|
|
// Propager aussi le trace_id si disponible (via tracing package)
|
|
// Note: Cette fonctionnalité nécessiterait l'import du package tracing
|
|
// Pour l'instant, on se concentre sur le request_id
|
|
}
|
|
|