cross_process_http.go 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. package internal
  2. import (
  3. "net/http"
  4. "github.com/newrelic/go-agent/internal/cat"
  5. )
  6. // InboundHTTPRequest adds the inbound request metadata to the TxnCrossProcess.
  7. func (txp *TxnCrossProcess) InboundHTTPRequest(hdr http.Header) error {
  8. return txp.handleInboundRequestHeaders(HTTPHeaderToMetadata(hdr))
  9. }
  10. // AppDataToHTTPHeader encapsulates the given appData value in the correct HTTP
  11. // header.
  12. func AppDataToHTTPHeader(appData string) http.Header {
  13. header := http.Header{}
  14. if appData != "" {
  15. header.Add(cat.NewRelicAppDataName, appData)
  16. }
  17. return header
  18. }
  19. // HTTPHeaderToAppData gets the appData value from the correct HTTP header.
  20. func HTTPHeaderToAppData(header http.Header) string {
  21. if header == nil {
  22. return ""
  23. }
  24. return header.Get(cat.NewRelicAppDataName)
  25. }
  26. // HTTPHeaderToMetadata gets the cross process metadata from the relevant HTTP
  27. // headers.
  28. func HTTPHeaderToMetadata(header http.Header) CrossProcessMetadata {
  29. if header == nil {
  30. return CrossProcessMetadata{}
  31. }
  32. return CrossProcessMetadata{
  33. ID: header.Get(cat.NewRelicIDName),
  34. TxnData: header.Get(cat.NewRelicTxnName),
  35. Synthetics: header.Get(cat.NewRelicSyntheticsName),
  36. }
  37. }
  38. // MetadataToHTTPHeader creates a set of HTTP headers to represent the given
  39. // cross process metadata.
  40. func MetadataToHTTPHeader(metadata CrossProcessMetadata) http.Header {
  41. header := http.Header{}
  42. if metadata.ID != "" {
  43. header.Add(cat.NewRelicIDName, metadata.ID)
  44. }
  45. if metadata.TxnData != "" {
  46. header.Add(cat.NewRelicTxnName, metadata.TxnData)
  47. }
  48. if metadata.Synthetics != "" {
  49. header.Add(cat.NewRelicSyntheticsName, metadata.Synthetics)
  50. }
  51. return header
  52. }