github.com/newrelic/go-agent@v3.26.0+incompatible/internal/cross_process_http.go (about) 1 // Copyright 2020 New Relic Corporation. All rights reserved. 2 // SPDX-License-Identifier: Apache-2.0 3 4 package internal 5 6 import ( 7 "net/http" 8 9 "github.com/newrelic/go-agent/internal/cat" 10 ) 11 12 // InboundHTTPRequest adds the inbound request metadata to the TxnCrossProcess. 13 func (txp *TxnCrossProcess) InboundHTTPRequest(hdr http.Header) error { 14 return txp.handleInboundRequestHeaders(HTTPHeaderToMetadata(hdr)) 15 } 16 17 // AppDataToHTTPHeader encapsulates the given appData value in the correct HTTP 18 // header. 19 func AppDataToHTTPHeader(appData string) http.Header { 20 header := http.Header{} 21 22 if appData != "" { 23 header.Add(cat.NewRelicAppDataName, appData) 24 } 25 26 return header 27 } 28 29 // HTTPHeaderToAppData gets the appData value from the correct HTTP header. 30 func HTTPHeaderToAppData(header http.Header) string { 31 if header == nil { 32 return "" 33 } 34 35 return header.Get(cat.NewRelicAppDataName) 36 } 37 38 // HTTPHeaderToMetadata gets the cross process metadata from the relevant HTTP 39 // headers. 40 func HTTPHeaderToMetadata(header http.Header) CrossProcessMetadata { 41 if header == nil { 42 return CrossProcessMetadata{} 43 } 44 45 return CrossProcessMetadata{ 46 ID: header.Get(cat.NewRelicIDName), 47 TxnData: header.Get(cat.NewRelicTxnName), 48 Synthetics: header.Get(cat.NewRelicSyntheticsName), 49 } 50 } 51 52 // MetadataToHTTPHeader creates a set of HTTP headers to represent the given 53 // cross process metadata. 54 func MetadataToHTTPHeader(metadata CrossProcessMetadata) http.Header { 55 header := http.Header{} 56 57 if metadata.ID != "" { 58 header.Add(cat.NewRelicIDName, metadata.ID) 59 } 60 61 if metadata.TxnData != "" { 62 header.Add(cat.NewRelicTxnName, metadata.TxnData) 63 } 64 65 if metadata.Synthetics != "" { 66 header.Add(cat.NewRelicSyntheticsName, metadata.Synthetics) 67 } 68 69 return header 70 }