Documentation ¶
Overview ¶
Package traceid provide a simple mechanism to save/extract a Trace ID HTTP header to/from a context.Context and http.Request.
Index ¶
- Constants
- func FromContext(ctx context.Context, defaultValue string) string
- func FromHTTPRequestHeader(r *http.Request, header, defaultValue string) string
- func NewContext(ctx context.Context, id string) context.Context
- func SetHTTPRequestHeaderFromContext(ctx context.Context, r *http.Request, header, defaultValue string) string
Examples ¶
Constants ¶
const ( // DefaultHeader is the default header name for the trace ID. DefaultHeader = "X-Request-ID" // DefaultValue is the default trace ID value. DefaultValue = "" // DefaultLogKey is the default log field key for the Trace ID. DefaultLogKey = "traceid" )
Variables ¶
This section is empty.
Functions ¶
func FromContext ¶
FromContext returns the trace ID associated with the context. If no trace ID is associated, then the default value returned.
Example ¶
package main import ( "context" "fmt" "github.com/Vonage/gosrvlib/pkg/traceid" ) func main() { // context without set id, should return the default value id1 := traceid.FromContext(context.Background(), "default-1-206951") fmt.Println(id1) // context with set id, should return the existing value ctx := traceid.NewContext(context.Background(), "default-2-616841") id2 := traceid.FromContext(ctx, "default-3-67890") fmt.Println(id2) }
Output: default-1-206951 default-2-616841
func FromHTTPRequestHeader ¶
FromHTTPRequestHeader retrieves the trace ID from an HTTP Request. If not found the default value is returned instead.
Example ¶
package main import ( "context" "fmt" "log" "net/http" "github.com/Vonage/gosrvlib/pkg/traceid" ) func main() { ctx := context.Background() // header not set should return default r1, err := http.NewRequestWithContext(ctx, http.MethodGet, "/", nil) if err != nil { log.Fatal(err) } v1 := traceid.FromHTTPRequestHeader(r1, traceid.DefaultHeader, "default-1-103993") fmt.Println(v1) // header set should return actual value r2, err := http.NewRequestWithContext(ctx, http.MethodGet, "/", nil) if err != nil { log.Fatal(err) } r2.Header.Add(traceid.DefaultHeader, "test-1-413579") v2 := traceid.FromHTTPRequestHeader(r2, traceid.DefaultHeader, "default-2-968041") fmt.Println(v2) }
Output: default-1-103993 test-1-413579
func NewContext ¶
NewContext stores the trace ID value in the context if not already present.
Example ¶
package main import ( "context" "fmt" "github.com/Vonage/gosrvlib/pkg/traceid" ) func main() { // store value in context ctx := traceid.NewContext(context.Background(), "test-1-218549") // load the value from context and ignore default el1 := traceid.FromContext(ctx, "default-104173") fmt.Println(el1) // do not override the value in context ctx1 := traceid.NewContext(ctx, "test-2-563011") fmt.Println(ctx1) }
Output: test-1-218549 context.Background.WithValue(type traceid.ctxKey, val test-1-218549)
func SetHTTPRequestHeaderFromContext ¶
func SetHTTPRequestHeaderFromContext(ctx context.Context, r *http.Request, header, defaultValue string) string
SetHTTPRequestHeaderFromContext set the trace ID HTTP Request Header with the value retrieved from the context. If the traceid is not found in the context, then the default value is set. Returns the set ID.
Example ¶
package main import ( "context" "fmt" "log" "net/http" "github.com/Vonage/gosrvlib/pkg/traceid" ) func main() { ctx := context.Background() // header not set r1, err := http.NewRequestWithContext(ctx, http.MethodGet, "/", nil) if err != nil { log.Fatal(err) } id1 := traceid.SetHTTPRequestHeaderFromContext(context.Background(), r1, traceid.DefaultHeader, traceid.DefaultValue) fmt.Println(id1) fmt.Println(r1.Header.Get(traceid.DefaultHeader)) // header set r2, err := http.NewRequestWithContext(ctx, http.MethodGet, "/", nil) if err != nil { log.Fatal(err) } ctx = traceid.NewContext(ctx, "test-904117") r2 = r2.WithContext(ctx) id2 := traceid.SetHTTPRequestHeaderFromContext(ctx, r2, traceid.DefaultHeader, traceid.DefaultValue) fmt.Println(id2) fmt.Println(r2.Header.Get(traceid.DefaultHeader)) }
Output: test-904117 test-904117
Types ¶
This section is empty.