diff --git a/README.md b/README.md index 0cbe0714..ab1d1ad7 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ ## Usage -Datadog needs to be able to read context from the incoming Lambda event, in order to enable distributed tracing. +Datadog needs to be able to read headers from the incoming Lambda event, in order to add datadog metadata to the go context. Wrap your lambda handler like so. ```go @@ -13,11 +13,19 @@ import ( "github.com/DataDog/dd-lambda-go" ) -func myHandler() (string, error) { - return "Success", nil -} - func main() { + // Wrap your lambda handler like this lambda.Start( ddlambda.WrapHandler(myHandler)) } + +func myHandler(ctx context.Context, event MyEvent) (string, error) { + // Add headers to outbound using the context object + req, err := http.NewRequest("GET", "http://api.youcompany.com/status") + ddlambda.AddTraceHeaders(ctx) + + client := http.Client{} + client.Do(req) + + return "Success", nil +} ``` \ No newline at end of file diff --git a/ddlambda.go b/ddlambda.go index f55b60be..b64eb56d 100644 --- a/ddlambda.go +++ b/ddlambda.go @@ -3,6 +3,7 @@ package ddlambda import ( "context" "encoding/json" + "net/http" "github.com/DataDog/dd-lambda-go/internal/trace" ) @@ -24,6 +25,14 @@ func GetTraceHeaders(ctx context.Context) map[string]string { return result } +// AddTraceHeaders adds DataDog trace headers to a HTTP Request +func AddTraceHeaders(req *http.Request) { + headers := GetTraceHeaders(req.Context()) + for key, value := range headers { + req.Header.Add(key, value) + } +} + func (hl *handlerListener) HandlerStarted(ctx context.Context, msg json.RawMessage) context.Context { ctx, _ = trace.ExtractTraceContext(ctx, msg) return ctx