requestid.go 778 B

1234567891011121314151617181920212223242526272829303132333435363738
  1. package middleware
  2. import (
  3. "github.com/gin-gonic/gin"
  4. uuid "github.com/satori/go.uuid"
  5. )
  6. const (
  7. XRequestIDKey = "X-Request-ID"
  8. )
  9. func RequestID() gin.HandlerFunc {
  10. return func(c *gin.Context) {
  11. // Check for incoming header, use it if exists
  12. rid := c.GetHeader(XRequestIDKey)
  13. if rid == "" {
  14. rid = uuid.Must(uuid.NewV4(), nil).String()
  15. c.Request.Header.Set(XRequestIDKey, rid)
  16. c.Set(XRequestIDKey, rid)
  17. }
  18. // Set XRequestIDKey header
  19. c.Writer.Header().Set(XRequestIDKey, rid)
  20. c.Next()
  21. }
  22. }
  23. // GetRequestIDFromContext returns 'RequestID' from the given context if present.
  24. func GetRequestIDFromContext(c *gin.Context) string {
  25. if v, ok := c.Get(XRequestIDKey); ok {
  26. if requestID, ok := v.(string); ok {
  27. return requestID
  28. }
  29. }
  30. return ""
  31. }