file_metric_main.cc 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. // Copyright The OpenTelemetry Authors
  2. // SPDX-License-Identifier: Apache-2.0
  3. #include <chrono>
  4. #include <memory>
  5. #include <string>
  6. #include <thread>
  7. #include <utility>
  8. #include "opentelemetry/common/attribute_value.h"
  9. #include "opentelemetry/exporters/otlp/otlp_file_client_options.h"
  10. #include "opentelemetry/exporters/otlp/otlp_file_metric_exporter_factory.h"
  11. #include "opentelemetry/exporters/otlp/otlp_file_metric_exporter_options.h"
  12. #include "opentelemetry/metrics/meter_provider.h"
  13. #include "opentelemetry/sdk/metrics/export/periodic_exporting_metric_reader_factory.h"
  14. #include "opentelemetry/sdk/metrics/export/periodic_exporting_metric_reader_options.h"
  15. #include "opentelemetry/sdk/metrics/meter_context.h"
  16. #include "opentelemetry/sdk/metrics/meter_context_factory.h"
  17. #include "opentelemetry/sdk/metrics/meter_provider.h"
  18. #include "opentelemetry/sdk/metrics/meter_provider_factory.h"
  19. #include "opentelemetry/sdk/metrics/metric_reader.h"
  20. #include "opentelemetry/sdk/metrics/provider.h"
  21. #include "opentelemetry/sdk/metrics/push_metric_exporter.h"
  22. #ifdef BAZEL_BUILD
  23. # include "examples/common/metrics_foo_library/foo_library.h"
  24. #else
  25. # include "metrics_foo_library/foo_library.h"
  26. #endif
  27. namespace metrics_sdk = opentelemetry::sdk::metrics;
  28. namespace common = opentelemetry::common;
  29. namespace metrics_api = opentelemetry::metrics;
  30. namespace otlp_exporter = opentelemetry::exporter::otlp;
  31. namespace
  32. {
  33. otlp_exporter::OtlpFileMetricExporterOptions exporter_options;
  34. void InitMetrics()
  35. {
  36. auto exporter = otlp_exporter::OtlpFileMetricExporterFactory::Create(exporter_options);
  37. std::string version{"1.2.0"};
  38. std::string schema{"https://opentelemetry.io/schemas/1.2.0"};
  39. // Initialize and set the global MeterProvider
  40. metrics_sdk::PeriodicExportingMetricReaderOptions reader_options;
  41. reader_options.export_interval_millis = std::chrono::milliseconds(1000);
  42. reader_options.export_timeout_millis = std::chrono::milliseconds(500);
  43. auto reader = metrics_sdk::PeriodicExportingMetricReaderFactory::Create(std::move(exporter),
  44. reader_options);
  45. auto context = metrics_sdk::MeterContextFactory::Create();
  46. context->AddMetricReader(std::move(reader));
  47. auto u_provider = metrics_sdk::MeterProviderFactory::Create(std::move(context));
  48. std::shared_ptr<opentelemetry::metrics::MeterProvider> provider(std::move(u_provider));
  49. metrics_sdk::Provider::SetMeterProvider(provider);
  50. }
  51. void CleanupMetrics()
  52. {
  53. std::shared_ptr<metrics_api::MeterProvider> none;
  54. metrics_sdk::Provider::SetMeterProvider(none);
  55. }
  56. } // namespace
  57. int main(int argc, char *argv[])
  58. {
  59. std::string example_type;
  60. if (argc > 1)
  61. {
  62. opentelemetry::exporter::otlp::OtlpFileClientFileSystemOptions fs_backend;
  63. fs_backend.file_pattern = argv[1];
  64. exporter_options.backend_options = fs_backend;
  65. if (argc > 2)
  66. {
  67. example_type = argv[2];
  68. }
  69. }
  70. // Removing this line will leave the default noop MetricProvider in place.
  71. InitMetrics();
  72. std::string name{"otlp_file_metric_example"};
  73. if (example_type == "counter")
  74. {
  75. foo_library::counter_example(name);
  76. }
  77. else if (example_type == "observable_counter")
  78. {
  79. foo_library::observable_counter_example(name);
  80. }
  81. else if (example_type == "histogram")
  82. {
  83. foo_library::histogram_example(name);
  84. }
  85. #if OPENTELEMETRY_ABI_VERSION_NO >= 2
  86. else if (example_type == "gauge")
  87. {
  88. foo_library::gauge_example(name);
  89. }
  90. #endif
  91. else
  92. {
  93. std::thread counter_example{&foo_library::counter_example, name};
  94. std::thread observable_counter_example{&foo_library::observable_counter_example, name};
  95. std::thread histogram_example{&foo_library::histogram_example, name};
  96. #if OPENTELEMETRY_ABI_VERSION_NO >= 2
  97. std::thread gauge_example{&foo_library::gauge_example, name};
  98. #endif
  99. counter_example.join();
  100. observable_counter_example.join();
  101. histogram_example.join();
  102. #if OPENTELEMETRY_ABI_VERSION_NO >= 2
  103. gauge_example.join();
  104. #endif
  105. }
  106. CleanupMetrics();
  107. return 0;
  108. }