prometheus_test_helper.h 9.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235
  1. // Copyright The OpenTelemetry Authors
  2. // SPDX-License-Identifier: Apache-2.0
  3. #pragma once
  4. #include "opentelemetry/sdk/instrumentationscope/instrumentation_scope.h"
  5. #include "opentelemetry/sdk/resource/resource.h"
  6. #include "opentelemetry/version.h"
  7. namespace metric_sdk = opentelemetry::sdk::metrics;
  8. namespace nostd = opentelemetry::nostd;
  9. namespace exportermetrics = opentelemetry::exporter::metrics;
  10. namespace
  11. {
  12. using opentelemetry::sdk::instrumentationscope::InstrumentationScope;
  13. using opentelemetry::sdk::resource::Resource;
  14. using opentelemetry::sdk::resource::ResourceAttributes;
  15. struct TestDataPoints
  16. {
  17. Resource resource = Resource::Create(ResourceAttributes{});
  18. nostd::unique_ptr<InstrumentationScope> instrumentation_scope =
  19. InstrumentationScope::Create("library_name", "1.2.0");
  20. /**
  21. * Helper function to create ResourceMetrics
  22. */
  23. inline metric_sdk::ResourceMetrics CreateSumPointData()
  24. {
  25. metric_sdk::SumPointData sum_point_data{};
  26. sum_point_data.value_ = 10.0;
  27. metric_sdk::SumPointData sum_point_data2{};
  28. sum_point_data2.value_ = 20.0;
  29. metric_sdk::ResourceMetrics data;
  30. data.resource_ = &resource;
  31. metric_sdk::MetricData metric_data{
  32. metric_sdk::InstrumentDescriptor{"library_name", "description", "unit",
  33. metric_sdk::InstrumentType::kCounter,
  34. metric_sdk::InstrumentValueType::kDouble},
  35. metric_sdk::AggregationTemporality::kDelta, opentelemetry::common::SystemTimestamp{},
  36. opentelemetry::common::SystemTimestamp{},
  37. std::vector<metric_sdk::PointDataAttributes>{
  38. {metric_sdk::PointAttributes{{"a1", "b1"}}, sum_point_data},
  39. {metric_sdk::PointAttributes{{"a2", "b2"}}, sum_point_data2}}};
  40. data.scope_metric_data_ = std::vector<metric_sdk::ScopeMetrics>{
  41. {instrumentation_scope.get(), std::vector<metric_sdk::MetricData>{metric_data}}};
  42. return data;
  43. }
  44. inline metric_sdk::ResourceMetrics CreateHistogramPointData()
  45. {
  46. metric_sdk::HistogramPointData histogram_point_data{};
  47. histogram_point_data.boundaries_ = {10.1, 20.2, 30.2};
  48. histogram_point_data.count_ = 3;
  49. histogram_point_data.counts_ = {200, 300, 400, 500};
  50. histogram_point_data.sum_ = 900.5;
  51. metric_sdk::HistogramPointData histogram_point_data2{};
  52. histogram_point_data2.boundaries_ = {10.0, 20.0, 30.0};
  53. histogram_point_data2.count_ = 3;
  54. histogram_point_data2.counts_ = {200, 300, 400, 500};
  55. histogram_point_data2.sum_ = static_cast<int64_t>(900);
  56. metric_sdk::ResourceMetrics data;
  57. data.resource_ = &resource;
  58. metric_sdk::MetricData metric_data{
  59. metric_sdk::InstrumentDescriptor{"library_name", "description", "unit",
  60. metric_sdk::InstrumentType::kHistogram,
  61. metric_sdk::InstrumentValueType::kDouble},
  62. metric_sdk::AggregationTemporality::kDelta, opentelemetry::common::SystemTimestamp{},
  63. opentelemetry::common::SystemTimestamp{},
  64. std::vector<metric_sdk::PointDataAttributes>{
  65. {metric_sdk::PointAttributes{{"a1", "b1"}}, histogram_point_data},
  66. {metric_sdk::PointAttributes{{"a2", "b2"}}, histogram_point_data2}}};
  67. data.scope_metric_data_ = std::vector<metric_sdk::ScopeMetrics>{
  68. {instrumentation_scope.get(), std::vector<metric_sdk::MetricData>{metric_data}}};
  69. return data;
  70. }
  71. inline metric_sdk::ResourceMetrics CreateLastValuePointData()
  72. {
  73. metric_sdk::ResourceMetrics data;
  74. data.resource_ = &resource;
  75. metric_sdk::LastValuePointData last_value_point_data{};
  76. last_value_point_data.value_ = 10.0;
  77. last_value_point_data.is_lastvalue_valid_ = true;
  78. last_value_point_data.sample_ts_ = opentelemetry::common::SystemTimestamp{};
  79. metric_sdk::LastValuePointData last_value_point_data2{};
  80. last_value_point_data2.value_ = static_cast<int64_t>(20);
  81. last_value_point_data2.is_lastvalue_valid_ = true;
  82. last_value_point_data2.sample_ts_ = opentelemetry::common::SystemTimestamp{};
  83. metric_sdk::MetricData metric_data{
  84. metric_sdk::InstrumentDescriptor{"library_name", "description", "unit",
  85. metric_sdk::InstrumentType::kCounter,
  86. metric_sdk::InstrumentValueType::kDouble},
  87. metric_sdk::AggregationTemporality::kDelta, opentelemetry::common::SystemTimestamp{},
  88. opentelemetry::common::SystemTimestamp{},
  89. std::vector<metric_sdk::PointDataAttributes>{
  90. {metric_sdk::PointAttributes{{"a1", "b1"}}, last_value_point_data},
  91. {metric_sdk::PointAttributes{{"a2", "b2"}}, last_value_point_data2}}};
  92. data.scope_metric_data_ = std::vector<metric_sdk::ScopeMetrics>{
  93. {instrumentation_scope.get(), std::vector<metric_sdk::MetricData>{metric_data}}};
  94. return data;
  95. }
  96. inline metric_sdk::ResourceMetrics CreateDropPointData()
  97. {
  98. metric_sdk::ResourceMetrics data;
  99. data.resource_ = &resource;
  100. metric_sdk::DropPointData drop_point_data{};
  101. metric_sdk::DropPointData drop_point_data2{};
  102. metric_sdk::MetricData metric_data{
  103. metric_sdk::InstrumentDescriptor{"library_name", "description", "unit",
  104. metric_sdk::InstrumentType::kCounter,
  105. metric_sdk::InstrumentValueType::kDouble},
  106. metric_sdk::AggregationTemporality::kDelta, opentelemetry::common::SystemTimestamp{},
  107. opentelemetry::common::SystemTimestamp{},
  108. std::vector<metric_sdk::PointDataAttributes>{
  109. {metric_sdk::PointAttributes{{"a1", "b1"}}, drop_point_data},
  110. {metric_sdk::PointAttributes{{"a2", "b2"}}, drop_point_data2}}};
  111. data.scope_metric_data_ = std::vector<metric_sdk::ScopeMetrics>{
  112. {instrumentation_scope.get(), std::vector<metric_sdk::MetricData>{metric_data}}};
  113. return data;
  114. }
  115. };
  116. } // namespace
  117. OPENTELEMETRY_BEGIN_NAMESPACE
  118. namespace sdk
  119. {
  120. namespace metrics
  121. {
  122. inline bool operator==(const metric_sdk::MetricData &lhs, const metric_sdk::MetricData &rhs)
  123. {
  124. if (lhs.start_ts != rhs.start_ts)
  125. {
  126. return false;
  127. }
  128. if (lhs.end_ts != rhs.end_ts)
  129. {
  130. return false;
  131. }
  132. if (lhs.instrument_descriptor.description_ != rhs.instrument_descriptor.description_)
  133. {
  134. return false;
  135. }
  136. if (lhs.instrument_descriptor.name_ != rhs.instrument_descriptor.name_)
  137. {
  138. return false;
  139. }
  140. if (lhs.instrument_descriptor.type_ != rhs.instrument_descriptor.type_)
  141. {
  142. return false;
  143. }
  144. if (lhs.instrument_descriptor.unit_ != rhs.instrument_descriptor.unit_)
  145. {
  146. return false;
  147. }
  148. if (lhs.instrument_descriptor.value_type_ != rhs.instrument_descriptor.value_type_)
  149. {
  150. return false;
  151. }
  152. if (lhs.point_data_attr_.size() != rhs.point_data_attr_.size())
  153. {
  154. return false;
  155. }
  156. for (uint32_t idx = 0; idx < lhs.point_data_attr_.size(); ++idx)
  157. {
  158. if (lhs.point_data_attr_.at(idx).attributes != rhs.point_data_attr_.at(idx).attributes)
  159. {
  160. return false;
  161. }
  162. auto &lhs_point_data = lhs.point_data_attr_.at(idx).point_data;
  163. auto &rhs_point_data = rhs.point_data_attr_.at(idx).point_data;
  164. if (nostd::holds_alternative<metric_sdk::SumPointData>(lhs_point_data))
  165. {
  166. if (nostd::get<metric_sdk::SumPointData>(lhs_point_data).value_ !=
  167. nostd::get<metric_sdk::SumPointData>(rhs_point_data).value_)
  168. {
  169. return false;
  170. }
  171. }
  172. else if (nostd::holds_alternative<metric_sdk::DropPointData>(lhs_point_data))
  173. {
  174. if (!nostd::holds_alternative<metric_sdk::DropPointData>(rhs_point_data))
  175. {
  176. return false;
  177. }
  178. }
  179. else if (nostd::holds_alternative<metric_sdk::HistogramPointData>(lhs_point_data))
  180. {
  181. auto &lhs_histogram_d = nostd::get<metric_sdk::HistogramPointData>(lhs_point_data);
  182. auto &rhs_histogram_d = nostd::get<metric_sdk::HistogramPointData>(rhs_point_data);
  183. if (lhs_histogram_d.count_ != rhs_histogram_d.count_)
  184. {
  185. return false;
  186. }
  187. if (lhs_histogram_d.counts_ != rhs_histogram_d.counts_)
  188. {
  189. return false;
  190. }
  191. if (lhs_histogram_d.boundaries_ != rhs_histogram_d.boundaries_)
  192. {
  193. return false;
  194. }
  195. if (lhs_histogram_d.sum_ != rhs_histogram_d.sum_)
  196. {
  197. return false;
  198. }
  199. }
  200. else if (nostd::holds_alternative<metric_sdk::LastValuePointData>(lhs_point_data))
  201. {
  202. auto &lhs_last_value_d = nostd::get<metric_sdk::LastValuePointData>(lhs_point_data);
  203. auto &rhs_last_value_d = nostd::get<metric_sdk::LastValuePointData>(rhs_point_data);
  204. if (lhs_last_value_d.is_lastvalue_valid_ != rhs_last_value_d.is_lastvalue_valid_)
  205. {
  206. return false;
  207. }
  208. if (lhs_last_value_d.sample_ts_ != rhs_last_value_d.sample_ts_)
  209. {
  210. return false;
  211. }
  212. if (lhs_last_value_d.value_ != rhs_last_value_d.value_)
  213. {
  214. return false;
  215. }
  216. }
  217. }
  218. return true;
  219. }
  220. } // namespace metrics
  221. } // namespace sdk
  222. OPENTELEMETRY_END_NAMESPACE