diff --git a/api/CMakeLists.txt b/api/CMakeLists.txt index 4bb6b88c89..14332e295b 100644 --- a/api/CMakeLists.txt +++ b/api/CMakeLists.txt @@ -17,13 +17,6 @@ if(OPENTELEMETRY_INSTALL) LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}) - install( - DIRECTORY include/opentelemetry - DESTINATION include - FILES_MATCHING - PATTERN "*.h" - PATTERN "metrics" EXCLUDE) - install( DIRECTORY include/opentelemetry DESTINATION include diff --git a/docs/cpp-ostream-exporter-design.md b/docs/cpp-ostream-exporter-design.md index 7deb369ab3..6da8bdd032 100644 --- a/docs/cpp-ostream-exporter-design.md +++ b/docs/cpp-ostream-exporter-design.md @@ -154,7 +154,7 @@ public: return sdktrace::ExportResult::kSuccess; } - bool Shutdown(std::chrono::microseconds timeout = std::chrono::microseconds::max()) noexcept + bool Shutdown(std::chrono::microseconds timeout = (std::chrono::microseconds::max)()) noexcept { isShutdown = true; return true; diff --git a/exporters/elasticsearch/include/opentelemetry/exporters/elasticsearch/es_log_record_exporter.h b/exporters/elasticsearch/include/opentelemetry/exporters/elasticsearch/es_log_record_exporter.h index 8579c99138..b72ff4f917 100644 --- a/exporters/elasticsearch/include/opentelemetry/exporters/elasticsearch/es_log_record_exporter.h +++ b/exporters/elasticsearch/include/opentelemetry/exporters/elasticsearch/es_log_record_exporter.h @@ -100,14 +100,14 @@ class ElasticsearchLogRecordExporter final : public opentelemetry::sdk::logs::Lo * @return return true when all data are exported, and false when timeout */ bool ForceFlush( - std::chrono::microseconds timeout = std::chrono::microseconds::max()) noexcept override; + std::chrono::microseconds timeout = (std::chrono::microseconds::max)()) noexcept override; /** * Shutdown this exporter. * @param timeout The maximum time to wait for the shutdown method to return */ bool Shutdown( - std::chrono::microseconds timeout = std::chrono::microseconds::max()) noexcept override; + std::chrono::microseconds timeout = (std::chrono::microseconds::max)()) noexcept override; private: // Stores if this exporter had its Shutdown() method called diff --git a/exporters/elasticsearch/src/es_log_record_exporter.cc b/exporters/elasticsearch/src/es_log_record_exporter.cc index c90072e4e4..e167faf3d9 100644 --- a/exporters/elasticsearch/src/es_log_record_exporter.cc +++ b/exporters/elasticsearch/src/es_log_record_exporter.cc @@ -430,7 +430,7 @@ bool ElasticsearchLogRecordExporter::ForceFlush( std::chrono::duration_cast(timeout); if (timeout_steady <= std::chrono::steady_clock::duration::zero()) { - timeout_steady = std::chrono::steady_clock::duration::max(); + timeout_steady = (std::chrono::steady_clock::duration::max)(); } std::unique_lock lk_cv(synchronization_data_->force_flush_cv_m); diff --git a/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_grpc_exporter.h b/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_grpc_exporter.h index 7aff1e24a5..870e5a043a 100644 --- a/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_grpc_exporter.h +++ b/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_grpc_exporter.h @@ -58,7 +58,7 @@ class OtlpGrpcExporter final : public opentelemetry::sdk::trace::SpanExporter * @return return true when all data are exported, and false when timeout */ bool ForceFlush( - std::chrono::microseconds timeout = std::chrono::microseconds::max()) noexcept override; + std::chrono::microseconds timeout = (std::chrono::microseconds::max)()) noexcept override; /** * Shut down the exporter. @@ -67,7 +67,7 @@ class OtlpGrpcExporter final : public opentelemetry::sdk::trace::SpanExporter * @return return the status of this operation */ bool Shutdown( - std::chrono::microseconds timeout = std::chrono::microseconds::max()) noexcept override; + std::chrono::microseconds timeout = (std::chrono::microseconds::max)()) noexcept override; private: // The configuration options associated with this exporter. diff --git a/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_grpc_log_record_exporter.h b/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_grpc_log_record_exporter.h index 29333703b1..f1cd96888c 100644 --- a/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_grpc_log_record_exporter.h +++ b/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_grpc_log_record_exporter.h @@ -60,14 +60,14 @@ class OtlpGrpcLogRecordExporter : public opentelemetry::sdk::logs::LogRecordExpo * @return return true when all data are exported, and false when timeout */ bool ForceFlush( - std::chrono::microseconds timeout = std::chrono::microseconds::max()) noexcept override; + std::chrono::microseconds timeout = (std::chrono::microseconds::max)()) noexcept override; /** * Shutdown this exporter. * @param timeout The maximum time to wait for the shutdown method to return. */ bool Shutdown( - std::chrono::microseconds timeout = std::chrono::microseconds::max()) noexcept override; + std::chrono::microseconds timeout = (std::chrono::microseconds::max)()) noexcept override; private: // Configuration options for the exporter diff --git a/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_http_exporter.h b/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_http_exporter.h index 1adbbc70b9..b5faf1a9b8 100644 --- a/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_http_exporter.h +++ b/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_http_exporter.h @@ -59,7 +59,7 @@ class OPENTELEMETRY_EXPORT OtlpHttpExporter final : public opentelemetry::sdk::t * @return return true when all data are exported, and false when timeout */ bool ForceFlush( - std::chrono::microseconds timeout = std::chrono::microseconds::max()) noexcept override; + std::chrono::microseconds timeout = (std::chrono::microseconds::max)()) noexcept override; /** * Shut down the exporter. @@ -68,7 +68,7 @@ class OPENTELEMETRY_EXPORT OtlpHttpExporter final : public opentelemetry::sdk::t * @return return the status of this operation */ bool Shutdown( - std::chrono::microseconds timeout = std::chrono::microseconds::max()) noexcept override; + std::chrono::microseconds timeout = (std::chrono::microseconds::max)()) noexcept override; private: // The configuration options associated with this exporter. diff --git a/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_http_log_record_exporter.h b/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_http_log_record_exporter.h index 4393345dfd..f481fdab0b 100644 --- a/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_http_log_record_exporter.h +++ b/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_http_log_record_exporter.h @@ -58,14 +58,14 @@ class OtlpHttpLogRecordExporter final : public opentelemetry::sdk::logs::LogReco * @return return true when all data are exported, and false when timeout */ bool ForceFlush( - std::chrono::microseconds timeout = std::chrono::microseconds::max()) noexcept override; + std::chrono::microseconds timeout = (std::chrono::microseconds::max)()) noexcept override; /** * Shutdown this exporter. * @param timeout The maximum time to wait for the shutdown method to return */ bool Shutdown( - std::chrono::microseconds timeout = std::chrono::microseconds::max()) noexcept override; + std::chrono::microseconds timeout = (std::chrono::microseconds::max)()) noexcept override; private: // Configuration options for the exporter diff --git a/exporters/otlp/src/otlp_http_client.cc b/exporters/otlp/src/otlp_http_client.cc index 9c57a9bd83..7814199ef2 100644 --- a/exporters/otlp/src/otlp_http_client.cc +++ b/exporters/otlp/src/otlp_http_client.cc @@ -782,7 +782,7 @@ bool OtlpHttpClient::ForceFlush(std::chrono::microseconds timeout) noexcept std::chrono::duration_cast(timeout); if (timeout_steady <= std::chrono::steady_clock::duration::zero()) { - timeout_steady = std::chrono::steady_clock::duration::max(); + timeout_steady = (std::chrono::steady_clock::duration::max)(); } while (timeout_steady > std::chrono::steady_clock::duration::zero()) diff --git a/exporters/prometheus/src/exporter_utils.cc b/exporters/prometheus/src/exporter_utils.cc index 511e481c44..19dc1e88d6 100644 --- a/exporters/prometheus/src/exporter_utils.cc +++ b/exporters/prometheus/src/exporter_utils.cc @@ -1,6 +1,7 @@ // Copyright The OpenTelemetry Authors // SPDX-License-Identifier: Apache-2.0 +#include #include #include #include @@ -13,6 +14,7 @@ #include "prometheus/metric_family.h" #include "prometheus/metric_type.h" +#include "opentelemetry/common/macros.h" #include "opentelemetry/exporters/prometheus/exporter_utils.h" #include "opentelemetry/sdk/metrics/export/metric_producer.h" #include "opentelemetry/sdk/resource/resource.h" @@ -280,11 +282,13 @@ std::string PrometheusExporterUtils::SanitizeNames(std::string name) return name; } +#if OPENTELEMETRY_HAVE_WORKING_REGEX std::regex INVALID_CHARACTERS_PATTERN("[^a-zA-Z0-9]"); std::regex CHARACTERS_BETWEEN_BRACES_PATTERN("\\{(.*?)\\}"); std::regex SANITIZE_LEADING_UNDERSCORES("^_+"); std::regex SANITIZE_TRAILING_UNDERSCORES("_+$"); std::regex SANITIZE_CONSECUTIVE_UNDERSCORES("[_]{2,}"); +#endif std::string PrometheusExporterUtils::GetEquivalentPrometheusUnit( const std::string &raw_metric_unit_name) @@ -360,7 +364,32 @@ std::string PrometheusExporterUtils::GetPrometheusPerUnit(const std::string &per std::string PrometheusExporterUtils::RemoveUnitPortionInBraces(const std::string &unit) { +#if OPENTELEMETRY_HAVE_WORKING_REGEX return std::regex_replace(unit, CHARACTERS_BETWEEN_BRACES_PATTERN, ""); +#else + bool in_braces = false; + std::string cleaned_unit; + cleaned_unit.reserve(unit.size()); + for (auto c : unit) + { + if (in_braces) + { + if (c == '}') + { + in_braces = false; + } + } + else if (c == '{') + { + in_braces = true; + } + else + { + cleaned_unit += c; + } + } + return cleaned_unit; +#endif } std::string PrometheusExporterUtils::ConvertRateExpressedToPrometheusUnit( @@ -389,12 +418,74 @@ std::string PrometheusExporterUtils::ConvertRateExpressedToPrometheusUnit( std::string PrometheusExporterUtils::CleanUpString(const std::string &str) { +#if OPENTELEMETRY_HAVE_WORKING_REGEX std::string cleaned_string = std::regex_replace(str, INVALID_CHARACTERS_PATTERN, "_"); cleaned_string = std::regex_replace(cleaned_string, SANITIZE_CONSECUTIVE_UNDERSCORES, "_"); cleaned_string = std::regex_replace(cleaned_string, SANITIZE_TRAILING_UNDERSCORES, ""); cleaned_string = std::regex_replace(cleaned_string, SANITIZE_LEADING_UNDERSCORES, ""); + return cleaned_string; +#else + std::string cleaned_string = str; + if (cleaned_string.empty()) + { + return cleaned_string; + } + std::transform(cleaned_string.begin(), cleaned_string.end(), cleaned_string.begin(), + [](const char c) { + if ((c >= '0' && c <= '9') || (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')) + { + return c; + } + return '_'; + }); + + std::string::size_type trim_start = 0; + std::string::size_type trim_end = 0; + bool previous_underscore = false; + for (std::string::size_type i = 0; i < cleaned_string.size(); ++i) + { + if (cleaned_string[i] == '_') + { + if (previous_underscore) + { + continue; + } + + previous_underscore = true; + } + else + { + previous_underscore = false; + } + + if (trim_end != i) + { + cleaned_string[trim_end] = cleaned_string[i]; + } + ++trim_end; + } + + while (trim_end > 0 && cleaned_string[trim_end - 1] == '_') + { + --trim_end; + } + while (trim_start < trim_end && cleaned_string[trim_start] == '_') + { + ++trim_start; + } + + // All characters are underscore + if (trim_start >= trim_end) + { + return "_"; + } + if (0 != trim_start || cleaned_string.size() != trim_end) + { + return cleaned_string.substr(trim_start, trim_end - trim_start); + } return cleaned_string; +#endif } std::string PrometheusExporterUtils::MapToPrometheusName( diff --git a/sdk/include/opentelemetry/sdk/logs/batch_log_record_processor.h b/sdk/include/opentelemetry/sdk/logs/batch_log_record_processor.h index e93ebf3d6b..d6a44df142 100644 --- a/sdk/include/opentelemetry/sdk/logs/batch_log_record_processor.h +++ b/sdk/include/opentelemetry/sdk/logs/batch_log_record_processor.h @@ -72,7 +72,7 @@ class BatchLogRecordProcessor : public LogRecordProcessor * NOTE: Timeout functionality not supported yet. */ bool ForceFlush( - std::chrono::microseconds timeout = std::chrono::microseconds::max()) noexcept override; + std::chrono::microseconds timeout = (std::chrono::microseconds::max)()) noexcept override; /** * Shuts down the processor and does any cleanup required. Completely drains the buffer/queue of @@ -82,7 +82,7 @@ class BatchLogRecordProcessor : public LogRecordProcessor * NOTE: Timeout functionality not supported yet. */ bool Shutdown( - std::chrono::microseconds timeout = std::chrono::microseconds::max()) noexcept override; + std::chrono::microseconds timeout = (std::chrono::microseconds::max)()) noexcept override; /** * Class destructor which invokes the Shutdown() method. diff --git a/sdk/include/opentelemetry/sdk/logs/multi_log_record_processor.h b/sdk/include/opentelemetry/sdk/logs/multi_log_record_processor.h index 335da7f668..8ca5cffcca 100644 --- a/sdk/include/opentelemetry/sdk/logs/multi_log_record_processor.h +++ b/sdk/include/opentelemetry/sdk/logs/multi_log_record_processor.h @@ -45,7 +45,7 @@ class MultiLogRecordProcessor : public LogRecordProcessor * @return a result code indicating whether it succeeded, failed or timed out */ bool ForceFlush( - std::chrono::microseconds timeout = std::chrono::microseconds::max()) noexcept override; + std::chrono::microseconds timeout = (std::chrono::microseconds::max)()) noexcept override; /** * Shuts down the processor and does any cleanup required. @@ -55,7 +55,7 @@ class MultiLogRecordProcessor : public LogRecordProcessor * @return true if the shutdown succeeded, false otherwise */ bool Shutdown( - std::chrono::microseconds timeout = std::chrono::microseconds::max()) noexcept override; + std::chrono::microseconds timeout = (std::chrono::microseconds::max)()) noexcept override; private: std::vector> processors_; diff --git a/sdk/include/opentelemetry/sdk/trace/batch_span_processor.h b/sdk/include/opentelemetry/sdk/trace/batch_span_processor.h index a748b06361..afbf4486b0 100644 --- a/sdk/include/opentelemetry/sdk/trace/batch_span_processor.h +++ b/sdk/include/opentelemetry/sdk/trace/batch_span_processor.h @@ -69,7 +69,7 @@ class BatchSpanProcessor : public SpanProcessor * NOTE: Timeout functionality not supported yet. */ bool ForceFlush( - std::chrono::microseconds timeout = std::chrono::microseconds::max()) noexcept override; + std::chrono::microseconds timeout = (std::chrono::microseconds::max)()) noexcept override; /** * Shuts down the processor and does any cleanup required. Completely drains the buffer/queue of @@ -79,7 +79,7 @@ class BatchSpanProcessor : public SpanProcessor * NOTE: Timeout functionality not supported yet. */ bool Shutdown( - std::chrono::microseconds timeout = std::chrono::microseconds::max()) noexcept override; + std::chrono::microseconds timeout = (std::chrono::microseconds::max)()) noexcept override; /** * Class destructor which invokes the Shutdown() method. The Shutdown() method is supposed to be