Line data Source code
1 : #pragma once 2 : 3 : #include <memory> 4 : #include <string> 5 : 6 : #include "envoy/common/pure.h" 7 : #include "envoy/http/header_map.h" 8 : #include "envoy/tracing/trace_reason.h" 9 : 10 : namespace Envoy { 11 : namespace Http { 12 : 13 : /** 14 : * Abstract request id utilities for getting/setting the request IDs and tracing status of requests 15 : */ 16 : class RequestIDExtension { 17 : public: 18 310 : virtual ~RequestIDExtension() = default; 19 : 20 : /** 21 : * Get the request ID from the request headers. 22 : * @param request_headers supplies the incoming request headers for retrieving the request ID. 23 : * @return the string view or nullopt if the request ID is invalid. 24 : */ 25 : virtual absl::optional<absl::string_view> 26 : get(const Http::RequestHeaderMap& request_headers) const PURE; 27 : 28 : /** 29 : * Get and convert the request ID to a 64-bit integer representation for using in modulo, etc. 30 : * calculations. 31 : * @param request_headers supplies the incoming request headers for retrieving the request ID. 32 : * @return the integer or nullopt if the request ID is invalid. 33 : */ 34 : virtual absl::optional<uint64_t> 35 : getInteger(const Http::RequestHeaderMap& request_headers) const PURE; 36 : 37 : /** 38 : * Directly set a request ID into the provided request headers. Override any previous request ID 39 : * if any. 40 : * @param request_headers supplies the incoming request headers for setting a request ID. 41 : * @param force specifies if a new request ID should be forcefully set if one is already present. 42 : */ 43 : virtual void set(Http::RequestHeaderMap& request_headers, bool force) PURE; 44 : 45 : /** 46 : * Preserve request ID in response headers if any is set in the request headers. 47 : * @param response_headers supplies the downstream response headers for setting the request ID. 48 : * @param request_headers supplies the incoming request headers for retrieving the request ID. 49 : */ 50 : virtual void setInResponse(Http::ResponseHeaderMap& response_headers, 51 : const Http::RequestHeaderMap& request_headers) PURE; 52 : 53 : /** 54 : * Get the current tracing reason of a request given its headers. 55 : * @param request_headers supplies the incoming request headers for retrieving the request ID. 56 : * @return trace reason of the request based on the given headers. 57 : */ 58 : virtual Tracing::Reason getTraceReason(const Http::RequestHeaderMap& request_headers) PURE; 59 : 60 : /** 61 : * Set the tracing status of a request. 62 : * @param request_headers supplies the incoming request headers for setting the trace reason. 63 : * @param status the trace reason that should be set for this request. 64 : */ 65 : virtual void setTraceReason(Http::RequestHeaderMap& request_headers, Tracing::Reason reason) PURE; 66 : 67 : /** 68 : * Get whether to use request_id based sampling policy or not. 69 : * @return whether to use request_id based sampling policy or not. 70 : */ 71 : virtual bool useRequestIdForTraceSampling() const PURE; 72 : }; 73 : 74 : using RequestIDExtensionSharedPtr = std::shared_ptr<RequestIDExtension>; 75 : 76 : } // namespace Http 77 : } // namespace Envoy