2
0

http_main.cc 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. // Copyright The OpenTelemetry Authors
  2. // SPDX-License-Identifier: Apache-2.0
  3. #include <memory>
  4. #include <string>
  5. #include <utility>
  6. #include "opentelemetry/exporters/otlp/otlp_http.h"
  7. #include "opentelemetry/exporters/otlp/otlp_http_exporter_factory.h"
  8. #include "opentelemetry/exporters/otlp/otlp_http_exporter_options.h"
  9. #include "opentelemetry/sdk/common/global_log_handler.h"
  10. #include "opentelemetry/sdk/trace/exporter.h"
  11. #include "opentelemetry/sdk/trace/processor.h"
  12. #include "opentelemetry/sdk/trace/provider.h"
  13. #include "opentelemetry/sdk/trace/simple_processor_factory.h"
  14. #include "opentelemetry/sdk/trace/tracer_provider.h"
  15. #include "opentelemetry/sdk/trace/tracer_provider_factory.h"
  16. #include "opentelemetry/trace/tracer_provider.h"
  17. #ifdef BAZEL_BUILD
  18. # include "examples/common/foo_library/foo_library.h"
  19. #else
  20. # include "foo_library/foo_library.h"
  21. #endif
  22. namespace trace = opentelemetry::trace;
  23. namespace trace_sdk = opentelemetry::sdk::trace;
  24. namespace otlp = opentelemetry::exporter::otlp;
  25. namespace internal_log = opentelemetry::sdk::common::internal_log;
  26. namespace
  27. {
  28. opentelemetry::exporter::otlp::OtlpHttpExporterOptions opts;
  29. std::shared_ptr<opentelemetry::sdk::trace::TracerProvider> provider;
  30. void InitTracer()
  31. {
  32. // Create OTLP exporter instance
  33. auto exporter = otlp::OtlpHttpExporterFactory::Create(opts);
  34. auto processor = trace_sdk::SimpleSpanProcessorFactory::Create(std::move(exporter));
  35. provider = trace_sdk::TracerProviderFactory::Create(std::move(processor));
  36. // Set the global trace provider
  37. std::shared_ptr<opentelemetry::trace::TracerProvider> api_provider = provider;
  38. trace_sdk::Provider::SetTracerProvider(api_provider);
  39. }
  40. void CleanupTracer()
  41. {
  42. // We call ForceFlush to prevent to cancel running exportings, It's optional.
  43. if (provider)
  44. {
  45. provider->ForceFlush();
  46. }
  47. provider.reset();
  48. std::shared_ptr<opentelemetry::trace::TracerProvider> none;
  49. trace_sdk::Provider::SetTracerProvider(none);
  50. }
  51. } // namespace
  52. /*
  53. Usage:
  54. - example_otlp_http
  55. - example_otlp_http <URL>
  56. - example_otlp_http <URL> <DEBUG>
  57. - example_otlp_http <URL> <DEBUG> <BIN>
  58. <DEBUG> = yes|no, to turn console debug on or off
  59. <BIN> = bin, to export in binary format
  60. */
  61. int main(int argc, char *argv[])
  62. {
  63. if (argc > 1)
  64. {
  65. opts.url = argv[1];
  66. if (argc > 2)
  67. {
  68. std::string debug = argv[2];
  69. opts.console_debug = debug != "" && debug != "0" && debug != "no";
  70. }
  71. if (argc > 3)
  72. {
  73. std::string binary_mode = argv[3];
  74. if (binary_mode.size() >= 3 && binary_mode.substr(0, 3) == "bin")
  75. {
  76. opts.content_type = otlp::HttpRequestContentType::kBinary;
  77. }
  78. }
  79. }
  80. if (opts.console_debug)
  81. {
  82. internal_log::GlobalLogHandler::SetLogLevel(internal_log::LogLevel::Debug);
  83. }
  84. // Removing this line will leave the default noop TracerProvider in place.
  85. InitTracer();
  86. foo_library();
  87. CleanupTracer();
  88. return 0;
  89. }