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  }