OtelCarrier.hpp 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. #ifndef OTEL_CARRIER_HPP
  2. #define OTEL_CARRIER_HPP
  3. #include "opentelemetry/context/propagation/text_map_propagator.h"
  4. #include "opentelemetry/trace/propagation/http_trace_context.h"
  5. namespace nostd = opentelemetry::nostd;
  6. namespace ZeroTier {
  7. template <typename T> class OtelCarrier : public opentelemetry::context::propagation::TextMapCarrier {
  8. public:
  9. OtelCarrier<T>(T& headers) : headers_(headers)
  10. {
  11. }
  12. OtelCarrier() = default;
  13. virtual nostd::string_view Get(nostd::string_view key) const noexcept override
  14. {
  15. std::string key_to_compare = key.data();
  16. if (key == opentelemetry::trace::propagation::kTraceParent) {
  17. key_to_compare = "traceparent";
  18. }
  19. else if (key == opentelemetry::trace::propagation::kTraceState) {
  20. key_to_compare = "tracestate";
  21. }
  22. auto it = headers_.find(key_to_compare);
  23. if (it != headers_.end()) {
  24. return it->second;
  25. }
  26. return "";
  27. }
  28. virtual void Set(nostd::string_view key, nostd::string_view value) noexcept override
  29. {
  30. headers_.insert(std::pair<std::string, std::string>(std::string(key), std::string(value)));
  31. }
  32. T& headers_;
  33. };
  34. } // namespace ZeroTier
  35. #endif // OTEL_CARRIER_HPP