datadog-checks-base 37.9.0__tar.gz → 37.10.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (390) hide show
  1. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/PKG-INFO +10 -9
  2. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/base/__about__.py +1 -1
  3. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/base/checks/openmetrics/v2/scraper.py +17 -6
  4. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/base/utils/db/statement_metrics.py +23 -3
  5. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/pyproject.toml +11 -8
  6. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/tests/base/checks/openmetrics/test_v2/test_first_scrape_handler.py +45 -38
  7. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/tests/base/utils/db/test_db_statements.py +121 -0
  8. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/.gitignore +0 -0
  9. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/README.md +0 -0
  10. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/__init__.py +0 -0
  11. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/base/__init__.py +0 -0
  12. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/base/__init__.pyi +0 -0
  13. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/base/agent.py +0 -0
  14. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/base/checks/__init__.py +0 -0
  15. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/base/checks/__init__.pyi +0 -0
  16. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/base/checks/base.py +0 -0
  17. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/base/checks/kube_leader/__init__.py +0 -0
  18. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/base/checks/kube_leader/__init__.pyi +0 -0
  19. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/base/checks/kube_leader/base_check.py +0 -0
  20. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/base/checks/kube_leader/mixins.py +0 -0
  21. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/base/checks/kube_leader/record.py +0 -0
  22. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/base/checks/kubelet_base/__init__.py +0 -0
  23. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/base/checks/kubelet_base/__init__.pyi +0 -0
  24. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/base/checks/kubelet_base/base.py +0 -0
  25. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/base/checks/libs/__init__.py +0 -0
  26. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/base/checks/libs/prometheus.py +0 -0
  27. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/base/checks/libs/thread_pool.py +0 -0
  28. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/base/checks/libs/timer.py +0 -0
  29. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/base/checks/libs/vmware/__init__.py +0 -0
  30. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/base/checks/libs/vmware/all_metrics.py +0 -0
  31. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/base/checks/libs/vmware/basic_metrics.py +0 -0
  32. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/base/checks/logs/__init__.py +0 -0
  33. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/base/checks/logs/crawler/__init__.py +0 -0
  34. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/base/checks/logs/crawler/base.py +0 -0
  35. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/base/checks/logs/crawler/stream.py +0 -0
  36. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/base/checks/network.py +0 -0
  37. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/base/checks/openmetrics/__init__.py +0 -0
  38. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/base/checks/openmetrics/__init__.pyi +0 -0
  39. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/base/checks/openmetrics/base_check.py +0 -0
  40. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/base/checks/openmetrics/mixins.py +0 -0
  41. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/base/checks/openmetrics/v2/__init__.py +0 -0
  42. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/base/checks/openmetrics/v2/base.py +0 -0
  43. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/base/checks/openmetrics/v2/first_scrape_handler.py +0 -0
  44. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/base/checks/openmetrics/v2/labels.py +0 -0
  45. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/base/checks/openmetrics/v2/metrics.py +0 -0
  46. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/base/checks/openmetrics/v2/transform.py +0 -0
  47. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/base/checks/openmetrics/v2/transformers/__init__.py +0 -0
  48. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/base/checks/openmetrics/v2/transformers/__init__.pyi +0 -0
  49. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/base/checks/openmetrics/v2/transformers/counter.py +0 -0
  50. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/base/checks/openmetrics/v2/transformers/counter_gauge.py +0 -0
  51. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/base/checks/openmetrics/v2/transformers/gauge.py +0 -0
  52. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/base/checks/openmetrics/v2/transformers/histogram.py +0 -0
  53. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/base/checks/openmetrics/v2/transformers/metadata.py +0 -0
  54. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/base/checks/openmetrics/v2/transformers/rate.py +0 -0
  55. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/base/checks/openmetrics/v2/transformers/service_check.py +0 -0
  56. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/base/checks/openmetrics/v2/transformers/summary.py +0 -0
  57. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/base/checks/openmetrics/v2/transformers/temporal_percent.py +0 -0
  58. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/base/checks/openmetrics/v2/transformers/time_elapsed.py +0 -0
  59. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/base/checks/openmetrics/v2/utils.py +0 -0
  60. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/base/checks/prometheus/__init__.py +0 -0
  61. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/base/checks/prometheus/__init__.pyi +0 -0
  62. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/base/checks/prometheus/base_check.py +0 -0
  63. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/base/checks/prometheus/mixins.py +0 -0
  64. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/base/checks/prometheus/prometheus_base.py +0 -0
  65. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/base/checks/win/__init__.py +0 -0
  66. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/base/checks/win/__init__.pyi +0 -0
  67. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/base/checks/win/winpdh.py +0 -0
  68. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/base/checks/win/winpdh_base.py +0 -0
  69. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/base/checks/win/winpdh_stub.py +0 -0
  70. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/base/checks/win/wmi/__init__.py +0 -0
  71. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/base/checks/win/wmi/__init__.pyi +0 -0
  72. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/base/checks/win/wmi/base.py +0 -0
  73. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/base/checks/win/wmi/counter_type.py +0 -0
  74. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/base/checks/win/wmi/sampler.py +0 -0
  75. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/base/checks/win/wmi/types.py +0 -0
  76. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/base/checks/windows/__init__.py +0 -0
  77. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/base/checks/windows/perf_counters/__init__.py +0 -0
  78. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/base/checks/windows/perf_counters/base.py +0 -0
  79. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/base/checks/windows/perf_counters/connection.py +0 -0
  80. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/base/checks/windows/perf_counters/constants.py +0 -0
  81. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/base/checks/windows/perf_counters/counter.py +0 -0
  82. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/base/checks/windows/perf_counters/transform.py +0 -0
  83. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/base/checks/windows/perf_counters/transformers/__init__.py +0 -0
  84. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/base/checks/windows/perf_counters/transformers/count.py +0 -0
  85. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/base/checks/windows/perf_counters/transformers/gauge.py +0 -0
  86. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/base/checks/windows/perf_counters/transformers/monotonic_count.py +0 -0
  87. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/base/checks/windows/perf_counters/transformers/rate.py +0 -0
  88. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/base/checks/windows/perf_counters/transformers/service_check.py +0 -0
  89. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/base/checks/windows/perf_counters/transformers/temporal_percent.py +0 -0
  90. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/base/checks/windows/perf_counters/transformers/time_elapsed.py +0 -0
  91. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/base/checks/windows/perf_counters/utils.py +0 -0
  92. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/base/checks/windows/perf_counters/utils_win32pdh_fix.py +0 -0
  93. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/base/config.py +0 -0
  94. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/base/constants.py +0 -0
  95. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/base/errors.py +0 -0
  96. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/base/log.py +0 -0
  97. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/base/stubs/__init__.py +0 -0
  98. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/base/stubs/_util.py +0 -0
  99. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/base/stubs/aggregator.py +0 -0
  100. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/base/stubs/common.py +0 -0
  101. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/base/stubs/datadog_agent.py +0 -0
  102. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/base/stubs/log.py +0 -0
  103. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/base/stubs/similar.py +0 -0
  104. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/base/stubs/tagging.py +0 -0
  105. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/base/types.py +0 -0
  106. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/base/utils/__init__.py +0 -0
  107. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/base/utils/_http_utils.py +0 -0
  108. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/base/utils/agent/__init__.py +0 -0
  109. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/base/utils/agent/common.py +0 -0
  110. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/base/utils/agent/debug.py +0 -0
  111. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/base/utils/agent/memory.py +0 -0
  112. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/base/utils/agent/packages.py +0 -0
  113. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/base/utils/agent/utils.py +0 -0
  114. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/base/utils/aws.py +0 -0
  115. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/base/utils/common.py +0 -0
  116. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/base/utils/concurrency/__init__.py +0 -0
  117. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/base/utils/concurrency/limiter.py +0 -0
  118. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/base/utils/constants.py +0 -0
  119. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/base/utils/containers.py +0 -0
  120. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/base/utils/date.py +0 -0
  121. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/base/utils/db/__init__.py +0 -0
  122. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/base/utils/db/__init__.pyi +0 -0
  123. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/base/utils/db/core.py +0 -0
  124. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/base/utils/db/query.py +0 -0
  125. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/base/utils/db/sql.py +0 -0
  126. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/base/utils/db/sql_commenter.py +0 -0
  127. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/base/utils/db/timed_cache.py +0 -0
  128. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/base/utils/db/transform.py +0 -0
  129. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/base/utils/db/types.py +0 -0
  130. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/base/utils/db/utils.py +0 -0
  131. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/base/utils/diagnose.py +0 -0
  132. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/base/utils/discovery/__init__.py +0 -0
  133. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/base/utils/discovery/__init__.pyi +0 -0
  134. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/base/utils/discovery/cache.py +0 -0
  135. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/base/utils/discovery/discovery.py +0 -0
  136. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/base/utils/discovery/filter.py +0 -0
  137. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/base/utils/fips.py +0 -0
  138. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/base/utils/format/__init__.py +0 -0
  139. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/base/utils/format/_json.py +0 -0
  140. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/base/utils/format/json.py +0 -0
  141. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/base/utils/functions.py +0 -0
  142. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/base/utils/headers.py +0 -0
  143. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/base/utils/http.py +0 -0
  144. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/base/utils/limiter.py +0 -0
  145. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/base/utils/metadata/__init__.py +0 -0
  146. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/base/utils/metadata/__init__.pyi +0 -0
  147. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/base/utils/metadata/constants.py +0 -0
  148. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/base/utils/metadata/core.py +0 -0
  149. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/base/utils/metadata/utils.py +0 -0
  150. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/base/utils/metadata/version.py +0 -0
  151. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/base/utils/models/__init__.py +0 -0
  152. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/base/utils/models/types.py +0 -0
  153. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/base/utils/models/validation/__init__.py +0 -0
  154. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/base/utils/models/validation/core.py +0 -0
  155. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/base/utils/models/validation/utils.py +0 -0
  156. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/base/utils/network.py +0 -0
  157. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/base/utils/platform.py +0 -0
  158. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/base/utils/prometheus/__init__.py +0 -0
  159. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/base/utils/prometheus/__init__.pyi +0 -0
  160. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/base/utils/prometheus/functions.py +0 -0
  161. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/base/utils/prometheus/metrics_pb2.py +0 -0
  162. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/base/utils/replay/__init__.py +0 -0
  163. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/base/utils/replay/constants.py +0 -0
  164. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/base/utils/replay/execute.py +0 -0
  165. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/base/utils/replay/redirect.py +0 -0
  166. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/base/utils/secrets.py +0 -0
  167. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/base/utils/serialization.py +0 -0
  168. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/base/utils/subprocess_output.py +0 -0
  169. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/base/utils/tagging.py +0 -0
  170. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/base/utils/tailfile.py +0 -0
  171. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/base/utils/time.py +0 -0
  172. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/base/utils/timeout.py +0 -0
  173. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/base/utils/tls.py +0 -0
  174. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/base/utils/tracing.py +0 -0
  175. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/base/utils/tracking.py +0 -0
  176. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/checks/__init__.py +0 -0
  177. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/checks/base.py +0 -0
  178. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/checks/libs/__init__.py +0 -0
  179. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/checks/libs/thread_pool.py +0 -0
  180. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/checks/libs/timer.py +0 -0
  181. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/checks/libs/vmware/__init__.py +0 -0
  182. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/checks/libs/vmware/all_metrics.py +0 -0
  183. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/checks/libs/vmware/basic_metrics.py +0 -0
  184. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/checks/libs/wmi/__init__.py +0 -0
  185. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/checks/libs/wmi/sampler.py +0 -0
  186. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/checks/network.py +0 -0
  187. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/checks/network_checks.py +0 -0
  188. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/checks/openmetrics/__init__.py +0 -0
  189. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/checks/openmetrics/base_check.py +0 -0
  190. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/checks/openmetrics/mixins.py +0 -0
  191. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/checks/prometheus/__init__.py +0 -0
  192. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/checks/prometheus/base_check.py +0 -0
  193. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/checks/prometheus/mixins.py +0 -0
  194. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/checks/prometheus/prometheus_base.py +0 -0
  195. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/checks/prometheus_check/__init__.py +0 -0
  196. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/checks/win/__init__.py +0 -0
  197. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/checks/win/winpdh.py +0 -0
  198. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/checks/win/winpdh_base.py +0 -0
  199. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/checks/win/winpdh_stub.py +0 -0
  200. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/checks/win/wmi/__init__.py +0 -0
  201. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/checks/win/wmi/counter_type.py +0 -0
  202. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/checks/win/wmi/sampler.py +0 -0
  203. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/checks/winwmi_check.py +0 -0
  204. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/config.py +0 -0
  205. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/errors.py +0 -0
  206. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/log.py +0 -0
  207. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/py.typed +0 -0
  208. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/stubs/__init__.py +0 -0
  209. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/stubs/_util.py +0 -0
  210. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/stubs/aggregator.py +0 -0
  211. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/stubs/datadog_agent.py +0 -0
  212. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/utils/__init__.py +0 -0
  213. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/utils/common.py +0 -0
  214. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/utils/containers.py +0 -0
  215. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/utils/headers.py +0 -0
  216. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/utils/limiter.py +0 -0
  217. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/utils/platform.py +0 -0
  218. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/utils/prometheus/__init__.py +0 -0
  219. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/utils/prometheus/functions.py +0 -0
  220. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/utils/prometheus/metrics_pb2.py +0 -0
  221. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/utils/proxy.py +0 -0
  222. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/utils/subprocess_output.py +0 -0
  223. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/utils/tailfile.py +0 -0
  224. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/utils/timeout.py +0 -0
  225. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/datadog_checks/utils/tracing.py +0 -0
  226. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/hatch.toml +0 -0
  227. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/tests/__init__.py +0 -0
  228. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/tests/base/__init__.py +0 -0
  229. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/tests/base/checks/__init__.py +0 -0
  230. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/tests/base/checks/logs/__init__.py +0 -0
  231. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/tests/base/checks/logs/crawler/__init__.py +0 -0
  232. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/tests/base/checks/logs/crawler/test_base.py +0 -0
  233. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/tests/base/checks/openmetrics/__init__.py +0 -0
  234. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/tests/base/checks/openmetrics/bench_utils.py +0 -0
  235. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/tests/base/checks/openmetrics/test_legacy/__init__.py +0 -0
  236. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/tests/base/checks/openmetrics/test_legacy/test_bench.py +0 -0
  237. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/tests/base/checks/openmetrics/test_legacy/test_compat_scraper.py +0 -0
  238. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/tests/base/checks/openmetrics/test_legacy/test_openmetrics.py +0 -0
  239. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/tests/base/checks/openmetrics/test_legacy/test_openmetrics_base_check.py +0 -0
  240. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/tests/base/checks/openmetrics/test_legacy/utils.py +0 -0
  241. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/tests/base/checks/openmetrics/test_v2/__init__.py +0 -0
  242. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/tests/base/checks/openmetrics/test_v2/test_bench.py +0 -0
  243. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/tests/base/checks/openmetrics/test_v2/test_config.py +0 -0
  244. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/tests/base/checks/openmetrics/test_v2/test_interface.py +0 -0
  245. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/tests/base/checks/openmetrics/test_v2/test_options.py +0 -0
  246. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/tests/base/checks/openmetrics/test_v2/test_transformers/__init__.py +0 -0
  247. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/tests/base/checks/openmetrics/test_v2/test_transformers/test_counter.py +0 -0
  248. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/tests/base/checks/openmetrics/test_v2/test_transformers/test_counter_gauge.py +0 -0
  249. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/tests/base/checks/openmetrics/test_v2/test_transformers/test_gauge.py +0 -0
  250. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/tests/base/checks/openmetrics/test_v2/test_transformers/test_histogram.py +0 -0
  251. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/tests/base/checks/openmetrics/test_v2/test_transformers/test_metadata.py +0 -0
  252. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/tests/base/checks/openmetrics/test_v2/test_transformers/test_native_dynamic.py +0 -0
  253. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/tests/base/checks/openmetrics/test_v2/test_transformers/test_rate.py +0 -0
  254. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/tests/base/checks/openmetrics/test_v2/test_transformers/test_service_check.py +0 -0
  255. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/tests/base/checks/openmetrics/test_v2/test_transformers/test_summary.py +0 -0
  256. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/tests/base/checks/openmetrics/test_v2/test_transformers/test_temporal_percent.py +0 -0
  257. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/tests/base/checks/openmetrics/test_v2/test_transformers/test_time_elapsed.py +0 -0
  258. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/tests/base/checks/openmetrics/test_v2/test_transformers/test_type_override.py +0 -0
  259. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/tests/base/checks/openmetrics/test_v2/utils.py +0 -0
  260. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/tests/base/checks/prometheus/__init__.py +0 -0
  261. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/tests/base/checks/prometheus/test_prometheus.py +0 -0
  262. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/tests/base/checks/prometheus/test_prometheus_base_check.py +0 -0
  263. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/tests/base/checks/test_agent_check.py +0 -0
  264. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/tests/base/checks/test_kube_leader.py +0 -0
  265. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/tests/base/checks/test_kubelet_base.py +0 -0
  266. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/tests/base/checks/utils.py +0 -0
  267. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/tests/base/checks/win/__init__.py +0 -0
  268. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/tests/base/checks/win/test_pdhbasecheck.py +0 -0
  269. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/tests/base/checks/win/test_winpdh.py +0 -0
  270. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/tests/base/checks/win/test_wmicheck.py +0 -0
  271. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/tests/base/checks/win/test_wmisampler.py +0 -0
  272. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/tests/base/checks/windows/__init__.py +0 -0
  273. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/tests/base/checks/windows/conftest.py +0 -0
  274. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/tests/base/checks/windows/perf_counters/__init__.py +0 -0
  275. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/tests/base/checks/windows/perf_counters/test_aggregation.py +0 -0
  276. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/tests/base/checks/windows/perf_counters/test_config.py +0 -0
  277. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/tests/base/checks/windows/perf_counters/test_filter.py +0 -0
  278. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/tests/base/checks/windows/perf_counters/test_health.py +0 -0
  279. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/tests/base/checks/windows/perf_counters/test_integration.py +0 -0
  280. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/tests/base/checks/windows/perf_counters/test_legacy_support.py +0 -0
  281. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/tests/base/checks/windows/perf_counters/test_localization.py +0 -0
  282. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/tests/base/checks/windows/perf_counters/test_refresh.py +0 -0
  283. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/tests/base/checks/windows/perf_counters/test_subclass.py +0 -0
  284. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/tests/base/checks/windows/perf_counters/transformers/__init__.py +0 -0
  285. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/tests/base/checks/windows/perf_counters/transformers/test_count.py +0 -0
  286. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/tests/base/checks/windows/perf_counters/transformers/test_gauge.py +0 -0
  287. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/tests/base/checks/windows/perf_counters/transformers/test_monotonic_count.py +0 -0
  288. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/tests/base/checks/windows/perf_counters/transformers/test_rate.py +0 -0
  289. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/tests/base/checks/windows/perf_counters/transformers/test_service_check.py +0 -0
  290. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/tests/base/checks/windows/perf_counters/transformers/test_temporal_percent.py +0 -0
  291. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/tests/base/checks/windows/perf_counters/transformers/test_time_elapsed.py +0 -0
  292. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/tests/base/checks/windows/perf_counters/utils.py +0 -0
  293. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/tests/base/test_constants.py +0 -0
  294. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/tests/base/utils/__init__.py +0 -0
  295. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/tests/base/utils/concurrency/__init__.py +0 -0
  296. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/tests/base/utils/concurrency/test_limiter.py +0 -0
  297. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/tests/base/utils/db/__init__.py +0 -0
  298. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/tests/base/utils/db/common.py +0 -0
  299. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/tests/base/utils/db/test_custom_queries.py +0 -0
  300. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/tests/base/utils/db/test_db_sql.py +0 -0
  301. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/tests/base/utils/db/test_query_executor.py +0 -0
  302. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/tests/base/utils/db/test_query_manager.py +0 -0
  303. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/tests/base/utils/db/test_query_result.py +0 -0
  304. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/tests/base/utils/db/test_sql_commenter.py +0 -0
  305. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/tests/base/utils/db/test_timed_cache.py +0 -0
  306. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/tests/base/utils/db/test_transformers.py +0 -0
  307. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/tests/base/utils/db/test_util.py +0 -0
  308. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/tests/base/utils/discovery/test_discovery.py +0 -0
  309. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/tests/base/utils/format/__init__.py +0 -0
  310. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/tests/base/utils/format/test_json.py +0 -0
  311. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/tests/base/utils/http/__init__.py +0 -0
  312. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/tests/base/utils/http/common.py +0 -0
  313. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/tests/base/utils/http/test_api.py +0 -0
  314. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/tests/base/utils/http/test_auth.py +0 -0
  315. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/tests/base/utils/http/test_authtoken.py +0 -0
  316. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/tests/base/utils/http/test_config.py +0 -0
  317. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/tests/base/utils/http/test_headers.py +0 -0
  318. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/tests/base/utils/http/test_http.py +0 -0
  319. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/tests/base/utils/http/test_kerberos_int.py +0 -0
  320. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/tests/base/utils/http/test_kerberos_unit.py +0 -0
  321. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/tests/base/utils/http/test_proxy.py +0 -0
  322. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/tests/base/utils/http/test_socks5_proxy_integration.py +0 -0
  323. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/tests/base/utils/http/test_tls_and_certs.py +0 -0
  324. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/tests/base/utils/replay/__init__.py +0 -0
  325. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/tests/base/utils/replay/test_check.py +0 -0
  326. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/tests/base/utils/test_agent_packages.py +0 -0
  327. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/tests/base/utils/test_agent_utils.py +0 -0
  328. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/tests/base/utils/test_aws.py +0 -0
  329. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/tests/base/utils/test_diagnose.py +0 -0
  330. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/tests/base/utils/test_fips.py +0 -0
  331. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/tests/base/utils/test_time.py +0 -0
  332. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/tests/base/utils/test_tls.py +0 -0
  333. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/tests/base/utils/test_tracing.py +0 -0
  334. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/tests/base/utils/test_tracking.py +0 -0
  335. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/tests/base/utils/test_utils.py +0 -0
  336. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/tests/compose/kerberos/kerberos-agent/Dockerfile +0 -0
  337. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/tests/compose/kerberos/kerberos-agent/configurekerberos.sh +0 -0
  338. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/tests/compose/kerberos/kerberos-agent/configurenginx.sh +0 -0
  339. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/tests/compose/kerberos/kerberos-agent/entrypoint.sh +0 -0
  340. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/tests/compose/kerberos/kerberos-agent/nginx.yaml +0 -0
  341. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/tests/compose/kerberos/kerberos-agent.yaml +0 -0
  342. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/tests/compose/kerberos/kerberos-kdc/Dockerfile +0 -0
  343. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/tests/compose/kerberos/kerberos-kdc/init.sh +0 -0
  344. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/tests/compose/kerberos/kerberos-kdc/kdc.conf +0 -0
  345. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/tests/compose/kerberos/kerberos-kdc/krb5.conf +0 -0
  346. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/tests/compose/kerberos/kerberos-nginx/Dockerfile +0 -0
  347. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/tests/compose/kerberos/kerberos-nginx/configurekerberos.sh +0 -0
  348. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/tests/compose/kerberos/kerberos-nginx/configurenginx.sh +0 -0
  349. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/tests/compose/kerberos/kerberos-nginx/entrypoint.sh +0 -0
  350. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/tests/compose/kerberos/kerberos-nginx/nginx.conf +0 -0
  351. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/tests/compose/kerberos/kerberos-nginx/setupkeytab.sh +0 -0
  352. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/tests/compose/kerberos/kerberos.yaml +0 -0
  353. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/tests/compose/socks5-proxy.yaml +0 -0
  354. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/tests/compose/uds/uds-nginx/nginx.conf +0 -0
  355. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/tests/compose/uds/uds-nginx/templates/default.conf.template +0 -0
  356. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/tests/compose/uds/uds.yaml +0 -0
  357. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/tests/conftest.py +0 -0
  358. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/tests/fixtures/bearer_tokens/custom_token +0 -0
  359. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/tests/fixtures/bearer_tokens/default_token +0 -0
  360. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/tests/fixtures/dcos/private-key.pem +0 -0
  361. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/tests/fixtures/dcos/public-key.pem +0 -0
  362. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/tests/fixtures/kerberos/krb5.conf +0 -0
  363. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/tests/fixtures/kubelet_base/pod_list_raw.dat +0 -0
  364. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/tests/fixtures/kubelet_base/pod_list_raw.json +0 -0
  365. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/tests/fixtures/prometheus/amazon_msk_jmx_metrics.txt +0 -0
  366. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/tests/fixtures/prometheus/deprecated.txt +0 -0
  367. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/tests/fixtures/prometheus/ksm.txt +0 -0
  368. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/tests/fixtures/prometheus/metrics.txt +0 -0
  369. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/tests/fixtures/prometheus/protobuf.bin +0 -0
  370. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/tests/models/__init__.py +0 -0
  371. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/tests/models/config_models/__init__.py +0 -0
  372. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/tests/models/config_models/defaults.py +0 -0
  373. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/tests/models/config_models/deprecations.py +0 -0
  374. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/tests/models/config_models/instance.py +0 -0
  375. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/tests/models/config_models/shared.py +0 -0
  376. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/tests/models/config_models/validators.py +0 -0
  377. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/tests/models/data/spec.yaml +0 -0
  378. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/tests/models/test_interface.py +0 -0
  379. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/tests/models/test_types.py +0 -0
  380. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/tests/stubs/test_aggregator_metric_has_tag.py +0 -0
  381. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/tests/stubs/test_aggregator_no_duplicate.py +0 -0
  382. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/tests/stubs/test_aggregator_service_checks.py +0 -0
  383. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/tests/stubs/test_aggregator_similar.py +0 -0
  384. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/tests/stubs/test_assert_metric.py +0 -0
  385. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/tests/stubs/test_datadog_agent.py +0 -0
  386. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/tests/test_config.py +0 -0
  387. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/tests/test_log.py +0 -0
  388. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/tests/test_metadata.py +0 -0
  389. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/tests/test_serialization.py +0 -0
  390. {datadog_checks_base-37.9.0 → datadog_checks_base-37.10.0}/tests/test_zzz_run_last.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: datadog-checks-base
3
- Version: 37.9.0
3
+ Version: 37.10.0
4
4
  Summary: The Datadog Check Toolkit
5
5
  Project-URL: Source, https://github.com/DataDog/integrations-core
6
6
  Author-email: Datadog <packages@datadoghq.com>
@@ -17,33 +17,34 @@ Requires-Dist: mmh3==5.1.0; extra == 'db'
17
17
  Provides-Extra: deps
18
18
  Requires-Dist: binary==1.0.1; extra == 'deps'
19
19
  Requires-Dist: cachetools==5.5.2; extra == 'deps'
20
- Requires-Dist: cryptography==44.0.1; extra == 'deps'
21
- Requires-Dist: ddtrace==2.10.6; extra == 'deps'
20
+ Requires-Dist: cryptography==44.0.2; extra == 'deps'
21
+ Requires-Dist: ddtrace==2.21.4; extra == 'deps'
22
22
  Requires-Dist: jellyfish==1.1.3; extra == 'deps'
23
23
  Requires-Dist: lazy-loader==0.4; extra == 'deps'
24
24
  Requires-Dist: prometheus-client==0.21.1; extra == 'deps'
25
- Requires-Dist: protobuf==5.29.3; extra == 'deps'
26
- Requires-Dist: pydantic==2.10.6; extra == 'deps'
25
+ Requires-Dist: protobuf==6.30.2; extra == 'deps'
26
+ Requires-Dist: pydantic==2.11.1; extra == 'deps'
27
27
  Requires-Dist: python-dateutil==2.9.0.post0; extra == 'deps'
28
- Requires-Dist: pywin32==308; (sys_platform == 'win32') and extra == 'deps'
28
+ Requires-Dist: pywin32==310; (sys_platform == 'win32') and extra == 'deps'
29
29
  Requires-Dist: pyyaml==6.0.2; extra == 'deps'
30
30
  Requires-Dist: requests-toolbelt==1.0.0; extra == 'deps'
31
31
  Requires-Dist: requests-unixsocket2==0.4.2; extra == 'deps'
32
32
  Requires-Dist: requests==2.32.3; extra == 'deps'
33
33
  Requires-Dist: simplejson==3.20.1; extra == 'deps'
34
+ Requires-Dist: urllib3==2.3.0; extra == 'deps'
34
35
  Requires-Dist: wrapt==1.17.2; extra == 'deps'
35
36
  Provides-Extra: http
36
37
  Requires-Dist: aws-requests-auth==0.4.3; extra == 'http'
37
- Requires-Dist: botocore==1.36.26; extra == 'http'
38
+ Requires-Dist: botocore==1.37.23; extra == 'http'
38
39
  Requires-Dist: oauthlib==3.2.2; extra == 'http'
39
40
  Requires-Dist: pyjwt==2.10.1; extra == 'http'
40
- Requires-Dist: pyopenssl==24.3.0; extra == 'http'
41
+ Requires-Dist: pyopenssl==25.0.0; extra == 'http'
41
42
  Requires-Dist: pysocks==1.7.1; extra == 'http'
42
43
  Requires-Dist: requests-kerberos==0.15.0; extra == 'http'
43
44
  Requires-Dist: requests-ntlm==1.3.0; extra == 'http'
44
45
  Requires-Dist: requests-oauthlib==2.0.0; extra == 'http'
45
46
  Provides-Extra: json
46
- Requires-Dist: orjson==3.10.15; extra == 'json'
47
+ Requires-Dist: orjson==3.10.16; extra == 'json'
47
48
  Provides-Extra: kube
48
49
  Requires-Dist: kubernetes==32.0.1; extra == 'kube'
49
50
  Requires-Dist: requests-oauthlib==2.0.0; extra == 'kube'
@@ -1,4 +1,4 @@
1
1
  # (C) Datadog, Inc. 2018-present
2
2
  # All rights reserved
3
3
  # Licensed under a 3-clause BSD style license (see LICENSE)
4
- __version__ = "37.9.0"
4
+ __version__ = "37.10.0"
@@ -230,13 +230,13 @@ class OpenMetricsScraper:
230
230
  self.use_process_start_time = is_affirmative(config.get('use_process_start_time'))
231
231
 
232
232
  # Used for monotonic counts
233
- self.flush_first_value = False
233
+ self.flush_first_value = None
234
234
 
235
- def scrape(self):
235
+ def _scrape(self):
236
236
  """
237
237
  Execute a scrape, and for each metric collected, transform the metric.
238
238
  """
239
- runtime_data = {'flush_first_value': self.flush_first_value, 'static_tags': self.static_tags}
239
+ runtime_data = {'flush_first_value': bool(self.flush_first_value), 'static_tags': self.static_tags}
240
240
 
241
241
  # Determine which consume method to use based on target_info config
242
242
  if self.target_info:
@@ -251,7 +251,18 @@ class OpenMetricsScraper:
251
251
 
252
252
  transformer(metric, self.generate_sample_data(metric), runtime_data)
253
253
 
254
- self.flush_first_value = True
254
+ def scrape(self):
255
+ try:
256
+ self._scrape()
257
+ self.flush_first_value = True
258
+ except:
259
+ # Don't flush new monotonic counts on next scrape:
260
+ # 1. Previous value may have expired in the aggregator, causing a spike
261
+ # 2. New counter itself may be too old and large when we discover it next time.
262
+ # If we didn't have a successful scrape yet, keep the initial value (use process_start_time to decide).
263
+ if self.flush_first_value:
264
+ self.flush_first_value = False
265
+ raise
255
266
 
256
267
  def consume_metrics(self, runtime_data):
257
268
  """
@@ -260,7 +271,7 @@ class OpenMetricsScraper:
260
271
 
261
272
  metric_parser = self.parse_metrics()
262
273
 
263
- if not self.flush_first_value and self.use_process_start_time:
274
+ if self.flush_first_value is None and self.use_process_start_time:
264
275
  metric_parser = first_scrape_handler(metric_parser, runtime_data, datadog_agent.get_process_start_time())
265
276
  if self.label_aggregator.configured:
266
277
  metric_parser = self.label_aggregator(metric_parser)
@@ -283,7 +294,7 @@ class OpenMetricsScraper:
283
294
 
284
295
  metric_parser = self.parse_metrics()
285
296
 
286
- if not self.flush_first_value and self.use_process_start_time:
297
+ if self.flush_first_value is None and self.use_process_start_time:
287
298
  metric_parser = first_scrape_handler(metric_parser, runtime_data, datadog_agent.get_process_start_time())
288
299
  if self.label_aggregator.configured:
289
300
  metric_parser = self.label_aggregator(metric_parser)
@@ -13,9 +13,7 @@ class StatementMetrics:
13
13
 
14
14
  - Postgres: pg_stat_statements
15
15
  - MySQL: performance_schema.events_statements_summary_by_digest
16
- - Oracle: V$SQLAREA
17
16
  - SQL Server: sys.dm_exec_query_stats
18
- - DB2: mon_db_summary
19
17
 
20
18
  These tables are monotonically increasing, so the metrics are computed from the difference
21
19
  in values between check runs.
@@ -24,7 +22,7 @@ class StatementMetrics:
24
22
  def __init__(self):
25
23
  self._previous_statements = {}
26
24
 
27
- def compute_derivative_rows(self, rows, metrics, key):
25
+ def compute_derivative_rows(self, rows, metrics, key, execution_indicators=None):
28
26
  """
29
27
  Compute the first derivative of column-based metrics for a given set of rows. This function
30
28
  takes the difference of the previous check run's values and the current check run's values
@@ -41,10 +39,20 @@ class StatementMetrics:
41
39
  :params rows (_List[dict]_): rows from current check run
42
40
  :params metrics (_List[str]_): the metrics to compute for each row
43
41
  :params key (_callable_): function for an ID which uniquely identifies a row across runs
42
+ :params execution_indicators (_List[str]_): list of metrics that must change to consider a query as executed.
43
+ These are typically metrics that increment only when a query actually executes, such as:
44
+ - PostgreSQL: 'calls' from pg_stat_statements
45
+ - MySQL: 'exec_count' from performance_schema.events_statements_summary_by_digest
46
+ - SQL Server: 'execution_count' from sys.dm_exec_query_stats
47
+ This helps filter out cases where a normalized query was evicted then re-inserted with same call count
48
+ (usually 1) and slight duration change. In this case, the new normalized query entry should be treated
49
+ as the baseline for future diffs.
44
50
  :return (_List[dict]_): a list of rows with the first derivative of the metrics
45
51
  """
46
52
  result = []
47
53
  metrics = set(metrics)
54
+ if execution_indicators:
55
+ execution_indicators = set(execution_indicators)
48
56
 
49
57
  merged_rows, dropped_metrics = _merge_duplicate_rows(rows, metrics, key)
50
58
  if dropped_metrics:
@@ -69,6 +77,12 @@ class StatementMetrics:
69
77
  # 2. No changes since the previous run: There is no need to store metrics of 0, since that is implied by
70
78
  # the absence of metrics. On any given check run, most rows will have no difference so this optimization
71
79
  # avoids having to send a lot of unnecessary metrics.
80
+ #
81
+ # 3. Execution indicators: If execution_indicators is specified, only consider a query as changed if at
82
+ # least one of the execution indicator metrics has changed. This helps filter out cases where an old or
83
+ # less frequently executed normalized query was evicted due to the stats table being full, and then
84
+ # re-inserted to the stats table with a small call count and slight duration change. In this case,
85
+ # the new normalized query entry should be treated as the baseline for future diffs.
72
86
 
73
87
  diffed_row = {k: row[k] - prev[k] if k in metric_columns else row[k] for k in row.keys()}
74
88
 
@@ -79,6 +93,12 @@ class StatementMetrics:
79
93
  # of potentially including truncated rows that exceed previous run counts.
80
94
  continue
81
95
 
96
+ # If execution_indicators is specified, check if any of the execution indicator metrics have changed
97
+ if execution_indicators:
98
+ indicator_columns = execution_indicators & metric_columns
99
+ if not any(diffed_row[k] > 0 for k in indicator_columns):
100
+ continue
101
+
82
102
  # No changes to the query; no metric needed
83
103
  if all(diffed_row[k] == 0 for k in metric_columns):
84
104
  continue
@@ -36,35 +36,38 @@ db = [
36
36
  deps = [
37
37
  "binary==1.0.1",
38
38
  "cachetools==5.5.2",
39
- "cryptography==44.0.1",
40
- "ddtrace==2.10.6",
39
+ "cryptography==44.0.2",
40
+ "ddtrace==2.21.4",
41
41
  "jellyfish==1.1.3",
42
42
  "lazy-loader==0.4",
43
43
  "prometheus-client==0.21.1",
44
- "protobuf==5.29.3",
45
- "pydantic==2.10.6",
44
+ "protobuf==6.30.2",
45
+ "pydantic==2.11.1",
46
46
  "python-dateutil==2.9.0.post0",
47
- "pywin32==308; sys_platform == 'win32'",
47
+ "pywin32==310; sys_platform == 'win32'",
48
48
  "pyyaml==6.0.2",
49
49
  "requests-toolbelt==1.0.0",
50
50
  "requests-unixsocket2==0.4.2",
51
51
  "requests==2.32.3",
52
52
  "simplejson==3.20.1",
53
+ # urllib3 is a dependency of requests that we explicitly
54
+ # make use of in a few places
55
+ "urllib3==2.3.0",
53
56
  "wrapt==1.17.2",
54
57
  ]
55
58
  http = [
56
59
  "aws-requests-auth==0.4.3",
57
- "botocore==1.36.26",
60
+ "botocore==1.37.23",
58
61
  "oauthlib==3.2.2",
59
62
  "pyjwt==2.10.1",
60
- "pyopenssl==24.3.0",
63
+ "pyopenssl==25.0.0",
61
64
  "pysocks==1.7.1",
62
65
  "requests-kerberos==0.15.0",
63
66
  "requests-ntlm==1.3.0",
64
67
  "requests-oauthlib==2.0.0",
65
68
  ]
66
69
  json = [
67
- "orjson==3.10.15",
70
+ "orjson==3.10.16",
68
71
  ]
69
72
  kube = [
70
73
  "kubernetes==32.0.1",
@@ -86,8 +86,6 @@ def test_first_scrape_handler(
86
86
  agent_start_time,
87
87
  process_start_time,
88
88
  ):
89
- mock_http_response(_make_test_data(process_start_time))
90
-
91
89
  check = get_check(
92
90
  {
93
91
  'metrics': ['.*'],
@@ -98,53 +96,62 @@ def test_first_scrape_handler(
98
96
 
99
97
  datadog_agent.set_process_start_time(agent_start_time)
100
98
 
101
- for _ in range(0, 5):
99
+ for idx in range(0, 10):
102
100
  aggregator.reset()
103
- dd_run_check(check)
104
101
 
105
- aggregator.assert_metric(
106
- 'test.go_memstats_alloc_bytes.count',
107
- metric_type=aggregator.MONOTONIC_COUNT,
108
- count=1,
109
- flush_first_value=expect_first_flush,
110
- )
111
- aggregator.assert_metric(
112
- 'test.go_gc_duration_seconds.count',
113
- metric_type=aggregator.MONOTONIC_COUNT,
114
- count=1,
115
- flush_first_value=expect_first_flush,
116
- )
102
+ if idx != 5:
103
+ mock_http_response(_make_test_data(process_start_time))
104
+ dd_run_check(check)
117
105
 
118
- if with_buckets:
119
- aggregator.assert_histogram_bucket(
120
- 'test.skydns_skydns_dns_request_duration_seconds',
121
- None,
122
- None,
123
- None,
124
- True,
125
- None,
126
- None,
127
- count=2,
128
- flush_first_value=expect_first_flush,
129
- )
130
- else:
131
- aggregator.assert_metric(
132
- 'test.skydns_skydns_dns_request_duration_seconds.count',
133
- metric_type=aggregator.MONOTONIC_COUNT,
134
- count=1,
135
- flush_first_value=expect_first_flush,
136
- )
137
106
  aggregator.assert_metric(
138
- 'test.skydns_skydns_dns_request_duration_seconds.sum',
107
+ 'test.go_memstats_alloc_bytes.count',
139
108
  metric_type=aggregator.MONOTONIC_COUNT,
140
109
  count=1,
141
110
  flush_first_value=expect_first_flush,
142
111
  )
143
112
  aggregator.assert_metric(
144
- 'test.skydns_skydns_dns_request_duration_seconds.bucket',
113
+ 'test.go_gc_duration_seconds.count',
145
114
  metric_type=aggregator.MONOTONIC_COUNT,
146
115
  count=1,
147
116
  flush_first_value=expect_first_flush,
148
117
  )
149
118
 
150
- expect_first_flush = True
119
+ if with_buckets:
120
+ aggregator.assert_histogram_bucket(
121
+ 'test.skydns_skydns_dns_request_duration_seconds',
122
+ None,
123
+ None,
124
+ None,
125
+ True,
126
+ None,
127
+ None,
128
+ count=2,
129
+ flush_first_value=expect_first_flush,
130
+ )
131
+ else:
132
+ aggregator.assert_metric(
133
+ 'test.skydns_skydns_dns_request_duration_seconds.count',
134
+ metric_type=aggregator.MONOTONIC_COUNT,
135
+ count=1,
136
+ flush_first_value=expect_first_flush,
137
+ )
138
+ aggregator.assert_metric(
139
+ 'test.skydns_skydns_dns_request_duration_seconds.sum',
140
+ metric_type=aggregator.MONOTONIC_COUNT,
141
+ count=1,
142
+ flush_first_value=expect_first_flush,
143
+ )
144
+ aggregator.assert_metric(
145
+ 'test.skydns_skydns_dns_request_duration_seconds.bucket',
146
+ metric_type=aggregator.MONOTONIC_COUNT,
147
+ count=1,
148
+ flush_first_value=expect_first_flush,
149
+ )
150
+
151
+ expect_first_flush = True
152
+ else:
153
+ mock_http_response("", status_code=500)
154
+ with pytest.raises(Exception):
155
+ dd_run_check(check)
156
+
157
+ expect_first_flush = False
@@ -303,3 +303,124 @@ class TestStatementMetrics:
303
303
  def test_compute_derivative_rows_benchmark(self, benchmark):
304
304
  sm = StatementMetrics()
305
305
  benchmark(self.__run_compute_derivative_rows, sm)
306
+
307
+ def test_compute_derivative_rows_with_execution_indicators(self):
308
+ sm = StatementMetrics()
309
+
310
+ def key(row):
311
+ return (row['query'], row['db'], row['user'])
312
+
313
+ metrics = ['calls', 'total_time', 'rows']
314
+ execution_indicators = ['calls']
315
+
316
+ # Initial state
317
+ rows1 = [
318
+ {'calls': 10, 'total_time': 1000, 'rows': 50, 'query': 'SELECT 1', 'db': 'test', 'user': 'user1'},
319
+ {'calls': 5, 'total_time': 500, 'rows': 25, 'query': 'SELECT 2', 'db': 'test', 'user': 'user1'},
320
+ ]
321
+
322
+ sm.compute_derivative_rows(rows1, metrics, key=key, execution_indicators=execution_indicators)
323
+
324
+ # Second run - only duration changes (should be ignored)
325
+ rows2 = [
326
+ {'calls': 10, 'total_time': 1001, 'rows': 50, 'query': 'SELECT 1', 'db': 'test', 'user': 'user1'},
327
+ {'calls': 5, 'total_time': 501, 'rows': 25, 'query': 'SELECT 2', 'db': 'test', 'user': 'user1'},
328
+ ]
329
+ assert [] == sm.compute_derivative_rows(rows2, metrics, key=key, execution_indicators=execution_indicators)
330
+
331
+ # Third run - calls change (should be included)
332
+ rows3 = [
333
+ {'calls': 11, 'total_time': 1002, 'rows': 51, 'query': 'SELECT 1', 'db': 'test', 'user': 'user1'},
334
+ {'calls': 5, 'total_time': 502, 'rows': 25, 'query': 'SELECT 2', 'db': 'test', 'user': 'user1'},
335
+ ]
336
+ result = sm.compute_derivative_rows(rows3, metrics, key=key, execution_indicators=execution_indicators)
337
+ assert len(result) == 1
338
+ assert result[0]['calls'] == 1
339
+ assert result[0]['total_time'] == 1
340
+ assert result[0]['rows'] == 1
341
+
342
+ def test_compute_derivative_rows_with_multiple_execution_indicators(self):
343
+ sm = StatementMetrics()
344
+
345
+ def key(row):
346
+ return (row['query'], row['db'], row['user'])
347
+
348
+ metrics = ['calls', 'executions', 'total_time', 'rows']
349
+ execution_indicators = ['calls', 'executions']
350
+
351
+ # Initial state
352
+ rows1 = [
353
+ {
354
+ 'calls': 10,
355
+ 'executions': 10,
356
+ 'total_time': 1000,
357
+ 'rows': 50,
358
+ 'query': 'SELECT 1',
359
+ 'db': 'test',
360
+ 'user': 'user1',
361
+ },
362
+ ]
363
+
364
+ sm.compute_derivative_rows(rows1, metrics, key=key, execution_indicators=execution_indicators)
365
+
366
+ # Second run - only one execution indicator changes
367
+ rows2 = [
368
+ {
369
+ 'calls': 11,
370
+ 'executions': 10,
371
+ 'total_time': 1001,
372
+ 'rows': 50,
373
+ 'query': 'SELECT 1',
374
+ 'db': 'test',
375
+ 'user': 'user1',
376
+ },
377
+ ]
378
+ result = sm.compute_derivative_rows(rows2, metrics, key=key, execution_indicators=execution_indicators)
379
+ assert len(result) == 1
380
+ assert result[0]['calls'] == 1
381
+ assert result[0]['executions'] == 0
382
+ assert result[0]['total_time'] == 1
383
+ assert result[0]['rows'] == 0
384
+
385
+ # Third run - both execution indicators change
386
+ rows3 = [
387
+ {
388
+ 'calls': 12,
389
+ 'executions': 11,
390
+ 'total_time': 1002,
391
+ 'rows': 51,
392
+ 'query': 'SELECT 1',
393
+ 'db': 'test',
394
+ 'user': 'user1',
395
+ },
396
+ ]
397
+ result = sm.compute_derivative_rows(rows3, metrics, key=key, execution_indicators=execution_indicators)
398
+ assert len(result) == 1
399
+ assert result[0]['calls'] == 1
400
+ assert result[0]['executions'] == 1
401
+ assert result[0]['total_time'] == 1
402
+ assert result[0]['rows'] == 1
403
+
404
+ def test_compute_derivative_rows_with_invalid_execution_indicators(self):
405
+ sm = StatementMetrics()
406
+
407
+ def key(row):
408
+ return (row['query'], row['db'], row['user'])
409
+
410
+ metrics = ['calls', 'total_time', 'rows']
411
+
412
+ # Test with empty execution indicators
413
+ rows1 = [
414
+ {'calls': 10, 'total_time': 1000, 'rows': 50, 'query': 'SELECT 1', 'db': 'test', 'user': 'user1'},
415
+ ]
416
+ rows2 = [
417
+ {'calls': 11, 'total_time': 1001, 'rows': 51, 'query': 'SELECT 1', 'db': 'test', 'user': 'user1'},
418
+ ]
419
+
420
+ # Empty execution indicators should behave like no execution indicators specified
421
+ _ = sm.compute_derivative_rows(rows1, metrics, key=key, execution_indicators=[])
422
+ result = sm.compute_derivative_rows(rows2, metrics, key=key, execution_indicators=[])
423
+ assert len(result) == 1
424
+ assert result[0]['calls'] == 1
425
+ assert result[0]['total_time'] == 1
426
+ assert result[0]['rows'] == 1