datadog-checks-base 37.8.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 (393) hide show
  1. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/PKG-INFO +10 -9
  2. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/base/__about__.py +1 -1
  3. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/base/checks/base.py +25 -16
  4. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/base/checks/openmetrics/v2/scraper.py +17 -6
  5. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/base/stubs/aggregator.py +2 -0
  6. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/base/stubs/datadog_agent.py +1 -1
  7. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/base/utils/db/statement_metrics.py +23 -3
  8. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/pyproject.toml +11 -8
  9. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/tests/base/checks/openmetrics/test_v2/test_first_scrape_handler.py +45 -38
  10. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/tests/base/checks/test_agent_check.py +6 -1
  11. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/tests/base/utils/db/test_db_statements.py +121 -0
  12. datadog_checks_base-37.10.0/tests/stubs/test_assert_metric.py +17 -0
  13. datadog_checks_base-37.8.0/datadog_checks/base/ddyaml.py +0 -171
  14. datadog_checks_base-37.8.0/tests/base/test_ddyaml.py +0 -103
  15. datadog_checks_base-37.8.0/tests/fixtures/ddyaml/valid_conf.yaml +0 -4
  16. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/.gitignore +0 -0
  17. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/README.md +0 -0
  18. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/__init__.py +0 -0
  19. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/base/__init__.py +0 -0
  20. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/base/__init__.pyi +0 -0
  21. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/base/agent.py +0 -0
  22. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/base/checks/__init__.py +0 -0
  23. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/base/checks/__init__.pyi +0 -0
  24. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/base/checks/kube_leader/__init__.py +0 -0
  25. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/base/checks/kube_leader/__init__.pyi +0 -0
  26. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/base/checks/kube_leader/base_check.py +0 -0
  27. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/base/checks/kube_leader/mixins.py +0 -0
  28. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/base/checks/kube_leader/record.py +0 -0
  29. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/base/checks/kubelet_base/__init__.py +0 -0
  30. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/base/checks/kubelet_base/__init__.pyi +0 -0
  31. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/base/checks/kubelet_base/base.py +0 -0
  32. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/base/checks/libs/__init__.py +0 -0
  33. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/base/checks/libs/prometheus.py +0 -0
  34. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/base/checks/libs/thread_pool.py +0 -0
  35. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/base/checks/libs/timer.py +0 -0
  36. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/base/checks/libs/vmware/__init__.py +0 -0
  37. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/base/checks/libs/vmware/all_metrics.py +0 -0
  38. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/base/checks/libs/vmware/basic_metrics.py +0 -0
  39. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/base/checks/logs/__init__.py +0 -0
  40. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/base/checks/logs/crawler/__init__.py +0 -0
  41. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/base/checks/logs/crawler/base.py +0 -0
  42. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/base/checks/logs/crawler/stream.py +0 -0
  43. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/base/checks/network.py +0 -0
  44. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/base/checks/openmetrics/__init__.py +0 -0
  45. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/base/checks/openmetrics/__init__.pyi +0 -0
  46. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/base/checks/openmetrics/base_check.py +0 -0
  47. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/base/checks/openmetrics/mixins.py +0 -0
  48. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/base/checks/openmetrics/v2/__init__.py +0 -0
  49. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/base/checks/openmetrics/v2/base.py +0 -0
  50. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/base/checks/openmetrics/v2/first_scrape_handler.py +0 -0
  51. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/base/checks/openmetrics/v2/labels.py +0 -0
  52. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/base/checks/openmetrics/v2/metrics.py +0 -0
  53. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/base/checks/openmetrics/v2/transform.py +0 -0
  54. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/base/checks/openmetrics/v2/transformers/__init__.py +0 -0
  55. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/base/checks/openmetrics/v2/transformers/__init__.pyi +0 -0
  56. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/base/checks/openmetrics/v2/transformers/counter.py +0 -0
  57. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/base/checks/openmetrics/v2/transformers/counter_gauge.py +0 -0
  58. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/base/checks/openmetrics/v2/transformers/gauge.py +0 -0
  59. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/base/checks/openmetrics/v2/transformers/histogram.py +0 -0
  60. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/base/checks/openmetrics/v2/transformers/metadata.py +0 -0
  61. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/base/checks/openmetrics/v2/transformers/rate.py +0 -0
  62. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/base/checks/openmetrics/v2/transformers/service_check.py +0 -0
  63. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/base/checks/openmetrics/v2/transformers/summary.py +0 -0
  64. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/base/checks/openmetrics/v2/transformers/temporal_percent.py +0 -0
  65. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/base/checks/openmetrics/v2/transformers/time_elapsed.py +0 -0
  66. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/base/checks/openmetrics/v2/utils.py +0 -0
  67. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/base/checks/prometheus/__init__.py +0 -0
  68. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/base/checks/prometheus/__init__.pyi +0 -0
  69. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/base/checks/prometheus/base_check.py +0 -0
  70. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/base/checks/prometheus/mixins.py +0 -0
  71. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/base/checks/prometheus/prometheus_base.py +0 -0
  72. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/base/checks/win/__init__.py +0 -0
  73. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/base/checks/win/__init__.pyi +0 -0
  74. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/base/checks/win/winpdh.py +0 -0
  75. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/base/checks/win/winpdh_base.py +0 -0
  76. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/base/checks/win/winpdh_stub.py +0 -0
  77. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/base/checks/win/wmi/__init__.py +0 -0
  78. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/base/checks/win/wmi/__init__.pyi +0 -0
  79. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/base/checks/win/wmi/base.py +0 -0
  80. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/base/checks/win/wmi/counter_type.py +0 -0
  81. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/base/checks/win/wmi/sampler.py +0 -0
  82. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/base/checks/win/wmi/types.py +0 -0
  83. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/base/checks/windows/__init__.py +0 -0
  84. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/base/checks/windows/perf_counters/__init__.py +0 -0
  85. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/base/checks/windows/perf_counters/base.py +0 -0
  86. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/base/checks/windows/perf_counters/connection.py +0 -0
  87. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/base/checks/windows/perf_counters/constants.py +0 -0
  88. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/base/checks/windows/perf_counters/counter.py +0 -0
  89. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/base/checks/windows/perf_counters/transform.py +0 -0
  90. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/base/checks/windows/perf_counters/transformers/__init__.py +0 -0
  91. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/base/checks/windows/perf_counters/transformers/count.py +0 -0
  92. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/base/checks/windows/perf_counters/transformers/gauge.py +0 -0
  93. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/base/checks/windows/perf_counters/transformers/monotonic_count.py +0 -0
  94. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/base/checks/windows/perf_counters/transformers/rate.py +0 -0
  95. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/base/checks/windows/perf_counters/transformers/service_check.py +0 -0
  96. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/base/checks/windows/perf_counters/transformers/temporal_percent.py +0 -0
  97. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/base/checks/windows/perf_counters/transformers/time_elapsed.py +0 -0
  98. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/base/checks/windows/perf_counters/utils.py +0 -0
  99. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/base/checks/windows/perf_counters/utils_win32pdh_fix.py +0 -0
  100. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/base/config.py +0 -0
  101. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/base/constants.py +0 -0
  102. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/base/errors.py +0 -0
  103. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/base/log.py +0 -0
  104. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/base/stubs/__init__.py +0 -0
  105. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/base/stubs/_util.py +0 -0
  106. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/base/stubs/common.py +0 -0
  107. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/base/stubs/log.py +0 -0
  108. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/base/stubs/similar.py +0 -0
  109. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/base/stubs/tagging.py +0 -0
  110. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/base/types.py +0 -0
  111. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/base/utils/__init__.py +0 -0
  112. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/base/utils/_http_utils.py +0 -0
  113. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/base/utils/agent/__init__.py +0 -0
  114. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/base/utils/agent/common.py +0 -0
  115. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/base/utils/agent/debug.py +0 -0
  116. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/base/utils/agent/memory.py +0 -0
  117. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/base/utils/agent/packages.py +0 -0
  118. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/base/utils/agent/utils.py +0 -0
  119. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/base/utils/aws.py +0 -0
  120. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/base/utils/common.py +0 -0
  121. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/base/utils/concurrency/__init__.py +0 -0
  122. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/base/utils/concurrency/limiter.py +0 -0
  123. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/base/utils/constants.py +0 -0
  124. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/base/utils/containers.py +0 -0
  125. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/base/utils/date.py +0 -0
  126. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/base/utils/db/__init__.py +0 -0
  127. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/base/utils/db/__init__.pyi +0 -0
  128. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/base/utils/db/core.py +0 -0
  129. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/base/utils/db/query.py +0 -0
  130. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/base/utils/db/sql.py +0 -0
  131. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/base/utils/db/sql_commenter.py +0 -0
  132. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/base/utils/db/timed_cache.py +0 -0
  133. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/base/utils/db/transform.py +0 -0
  134. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/base/utils/db/types.py +0 -0
  135. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/base/utils/db/utils.py +0 -0
  136. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/base/utils/diagnose.py +0 -0
  137. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/base/utils/discovery/__init__.py +0 -0
  138. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/base/utils/discovery/__init__.pyi +0 -0
  139. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/base/utils/discovery/cache.py +0 -0
  140. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/base/utils/discovery/discovery.py +0 -0
  141. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/base/utils/discovery/filter.py +0 -0
  142. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/base/utils/fips.py +0 -0
  143. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/base/utils/format/__init__.py +0 -0
  144. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/base/utils/format/_json.py +0 -0
  145. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/base/utils/format/json.py +0 -0
  146. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/base/utils/functions.py +0 -0
  147. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/base/utils/headers.py +0 -0
  148. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/base/utils/http.py +0 -0
  149. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/base/utils/limiter.py +0 -0
  150. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/base/utils/metadata/__init__.py +0 -0
  151. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/base/utils/metadata/__init__.pyi +0 -0
  152. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/base/utils/metadata/constants.py +0 -0
  153. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/base/utils/metadata/core.py +0 -0
  154. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/base/utils/metadata/utils.py +0 -0
  155. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/base/utils/metadata/version.py +0 -0
  156. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/base/utils/models/__init__.py +0 -0
  157. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/base/utils/models/types.py +0 -0
  158. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/base/utils/models/validation/__init__.py +0 -0
  159. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/base/utils/models/validation/core.py +0 -0
  160. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/base/utils/models/validation/utils.py +0 -0
  161. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/base/utils/network.py +0 -0
  162. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/base/utils/platform.py +0 -0
  163. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/base/utils/prometheus/__init__.py +0 -0
  164. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/base/utils/prometheus/__init__.pyi +0 -0
  165. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/base/utils/prometheus/functions.py +0 -0
  166. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/base/utils/prometheus/metrics_pb2.py +0 -0
  167. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/base/utils/replay/__init__.py +0 -0
  168. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/base/utils/replay/constants.py +0 -0
  169. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/base/utils/replay/execute.py +0 -0
  170. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/base/utils/replay/redirect.py +0 -0
  171. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/base/utils/secrets.py +0 -0
  172. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/base/utils/serialization.py +0 -0
  173. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/base/utils/subprocess_output.py +0 -0
  174. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/base/utils/tagging.py +0 -0
  175. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/base/utils/tailfile.py +0 -0
  176. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/base/utils/time.py +0 -0
  177. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/base/utils/timeout.py +0 -0
  178. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/base/utils/tls.py +0 -0
  179. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/base/utils/tracing.py +0 -0
  180. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/base/utils/tracking.py +0 -0
  181. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/checks/__init__.py +0 -0
  182. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/checks/base.py +0 -0
  183. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/checks/libs/__init__.py +0 -0
  184. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/checks/libs/thread_pool.py +0 -0
  185. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/checks/libs/timer.py +0 -0
  186. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/checks/libs/vmware/__init__.py +0 -0
  187. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/checks/libs/vmware/all_metrics.py +0 -0
  188. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/checks/libs/vmware/basic_metrics.py +0 -0
  189. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/checks/libs/wmi/__init__.py +0 -0
  190. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/checks/libs/wmi/sampler.py +0 -0
  191. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/checks/network.py +0 -0
  192. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/checks/network_checks.py +0 -0
  193. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/checks/openmetrics/__init__.py +0 -0
  194. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/checks/openmetrics/base_check.py +0 -0
  195. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/checks/openmetrics/mixins.py +0 -0
  196. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/checks/prometheus/__init__.py +0 -0
  197. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/checks/prometheus/base_check.py +0 -0
  198. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/checks/prometheus/mixins.py +0 -0
  199. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/checks/prometheus/prometheus_base.py +0 -0
  200. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/checks/prometheus_check/__init__.py +0 -0
  201. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/checks/win/__init__.py +0 -0
  202. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/checks/win/winpdh.py +0 -0
  203. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/checks/win/winpdh_base.py +0 -0
  204. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/checks/win/winpdh_stub.py +0 -0
  205. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/checks/win/wmi/__init__.py +0 -0
  206. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/checks/win/wmi/counter_type.py +0 -0
  207. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/checks/win/wmi/sampler.py +0 -0
  208. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/checks/winwmi_check.py +0 -0
  209. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/config.py +0 -0
  210. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/errors.py +0 -0
  211. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/log.py +0 -0
  212. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/py.typed +0 -0
  213. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/stubs/__init__.py +0 -0
  214. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/stubs/_util.py +0 -0
  215. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/stubs/aggregator.py +0 -0
  216. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/stubs/datadog_agent.py +0 -0
  217. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/utils/__init__.py +0 -0
  218. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/utils/common.py +0 -0
  219. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/utils/containers.py +0 -0
  220. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/utils/headers.py +0 -0
  221. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/utils/limiter.py +0 -0
  222. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/utils/platform.py +0 -0
  223. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/utils/prometheus/__init__.py +0 -0
  224. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/utils/prometheus/functions.py +0 -0
  225. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/utils/prometheus/metrics_pb2.py +0 -0
  226. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/utils/proxy.py +0 -0
  227. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/utils/subprocess_output.py +0 -0
  228. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/utils/tailfile.py +0 -0
  229. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/utils/timeout.py +0 -0
  230. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/datadog_checks/utils/tracing.py +0 -0
  231. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/hatch.toml +0 -0
  232. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/tests/__init__.py +0 -0
  233. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/tests/base/__init__.py +0 -0
  234. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/tests/base/checks/__init__.py +0 -0
  235. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/tests/base/checks/logs/__init__.py +0 -0
  236. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/tests/base/checks/logs/crawler/__init__.py +0 -0
  237. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/tests/base/checks/logs/crawler/test_base.py +0 -0
  238. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/tests/base/checks/openmetrics/__init__.py +0 -0
  239. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/tests/base/checks/openmetrics/bench_utils.py +0 -0
  240. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/tests/base/checks/openmetrics/test_legacy/__init__.py +0 -0
  241. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/tests/base/checks/openmetrics/test_legacy/test_bench.py +0 -0
  242. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/tests/base/checks/openmetrics/test_legacy/test_compat_scraper.py +0 -0
  243. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/tests/base/checks/openmetrics/test_legacy/test_openmetrics.py +0 -0
  244. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/tests/base/checks/openmetrics/test_legacy/test_openmetrics_base_check.py +0 -0
  245. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/tests/base/checks/openmetrics/test_legacy/utils.py +0 -0
  246. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/tests/base/checks/openmetrics/test_v2/__init__.py +0 -0
  247. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/tests/base/checks/openmetrics/test_v2/test_bench.py +0 -0
  248. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/tests/base/checks/openmetrics/test_v2/test_config.py +0 -0
  249. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/tests/base/checks/openmetrics/test_v2/test_interface.py +0 -0
  250. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/tests/base/checks/openmetrics/test_v2/test_options.py +0 -0
  251. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/tests/base/checks/openmetrics/test_v2/test_transformers/__init__.py +0 -0
  252. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/tests/base/checks/openmetrics/test_v2/test_transformers/test_counter.py +0 -0
  253. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/tests/base/checks/openmetrics/test_v2/test_transformers/test_counter_gauge.py +0 -0
  254. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/tests/base/checks/openmetrics/test_v2/test_transformers/test_gauge.py +0 -0
  255. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/tests/base/checks/openmetrics/test_v2/test_transformers/test_histogram.py +0 -0
  256. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/tests/base/checks/openmetrics/test_v2/test_transformers/test_metadata.py +0 -0
  257. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/tests/base/checks/openmetrics/test_v2/test_transformers/test_native_dynamic.py +0 -0
  258. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/tests/base/checks/openmetrics/test_v2/test_transformers/test_rate.py +0 -0
  259. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/tests/base/checks/openmetrics/test_v2/test_transformers/test_service_check.py +0 -0
  260. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/tests/base/checks/openmetrics/test_v2/test_transformers/test_summary.py +0 -0
  261. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/tests/base/checks/openmetrics/test_v2/test_transformers/test_temporal_percent.py +0 -0
  262. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/tests/base/checks/openmetrics/test_v2/test_transformers/test_time_elapsed.py +0 -0
  263. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/tests/base/checks/openmetrics/test_v2/test_transformers/test_type_override.py +0 -0
  264. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/tests/base/checks/openmetrics/test_v2/utils.py +0 -0
  265. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/tests/base/checks/prometheus/__init__.py +0 -0
  266. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/tests/base/checks/prometheus/test_prometheus.py +0 -0
  267. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/tests/base/checks/prometheus/test_prometheus_base_check.py +0 -0
  268. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/tests/base/checks/test_kube_leader.py +0 -0
  269. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/tests/base/checks/test_kubelet_base.py +0 -0
  270. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/tests/base/checks/utils.py +0 -0
  271. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/tests/base/checks/win/__init__.py +0 -0
  272. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/tests/base/checks/win/test_pdhbasecheck.py +0 -0
  273. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/tests/base/checks/win/test_winpdh.py +0 -0
  274. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/tests/base/checks/win/test_wmicheck.py +0 -0
  275. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/tests/base/checks/win/test_wmisampler.py +0 -0
  276. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/tests/base/checks/windows/__init__.py +0 -0
  277. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/tests/base/checks/windows/conftest.py +0 -0
  278. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/tests/base/checks/windows/perf_counters/__init__.py +0 -0
  279. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/tests/base/checks/windows/perf_counters/test_aggregation.py +0 -0
  280. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/tests/base/checks/windows/perf_counters/test_config.py +0 -0
  281. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/tests/base/checks/windows/perf_counters/test_filter.py +0 -0
  282. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/tests/base/checks/windows/perf_counters/test_health.py +0 -0
  283. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/tests/base/checks/windows/perf_counters/test_integration.py +0 -0
  284. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/tests/base/checks/windows/perf_counters/test_legacy_support.py +0 -0
  285. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/tests/base/checks/windows/perf_counters/test_localization.py +0 -0
  286. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/tests/base/checks/windows/perf_counters/test_refresh.py +0 -0
  287. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/tests/base/checks/windows/perf_counters/test_subclass.py +0 -0
  288. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/tests/base/checks/windows/perf_counters/transformers/__init__.py +0 -0
  289. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/tests/base/checks/windows/perf_counters/transformers/test_count.py +0 -0
  290. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/tests/base/checks/windows/perf_counters/transformers/test_gauge.py +0 -0
  291. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/tests/base/checks/windows/perf_counters/transformers/test_monotonic_count.py +0 -0
  292. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/tests/base/checks/windows/perf_counters/transformers/test_rate.py +0 -0
  293. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/tests/base/checks/windows/perf_counters/transformers/test_service_check.py +0 -0
  294. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/tests/base/checks/windows/perf_counters/transformers/test_temporal_percent.py +0 -0
  295. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/tests/base/checks/windows/perf_counters/transformers/test_time_elapsed.py +0 -0
  296. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/tests/base/checks/windows/perf_counters/utils.py +0 -0
  297. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/tests/base/test_constants.py +0 -0
  298. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/tests/base/utils/__init__.py +0 -0
  299. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/tests/base/utils/concurrency/__init__.py +0 -0
  300. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/tests/base/utils/concurrency/test_limiter.py +0 -0
  301. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/tests/base/utils/db/__init__.py +0 -0
  302. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/tests/base/utils/db/common.py +0 -0
  303. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/tests/base/utils/db/test_custom_queries.py +0 -0
  304. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/tests/base/utils/db/test_db_sql.py +0 -0
  305. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/tests/base/utils/db/test_query_executor.py +0 -0
  306. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/tests/base/utils/db/test_query_manager.py +0 -0
  307. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/tests/base/utils/db/test_query_result.py +0 -0
  308. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/tests/base/utils/db/test_sql_commenter.py +0 -0
  309. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/tests/base/utils/db/test_timed_cache.py +0 -0
  310. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/tests/base/utils/db/test_transformers.py +0 -0
  311. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/tests/base/utils/db/test_util.py +0 -0
  312. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/tests/base/utils/discovery/test_discovery.py +0 -0
  313. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/tests/base/utils/format/__init__.py +0 -0
  314. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/tests/base/utils/format/test_json.py +0 -0
  315. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/tests/base/utils/http/__init__.py +0 -0
  316. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/tests/base/utils/http/common.py +0 -0
  317. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/tests/base/utils/http/test_api.py +0 -0
  318. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/tests/base/utils/http/test_auth.py +0 -0
  319. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/tests/base/utils/http/test_authtoken.py +0 -0
  320. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/tests/base/utils/http/test_config.py +0 -0
  321. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/tests/base/utils/http/test_headers.py +0 -0
  322. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/tests/base/utils/http/test_http.py +0 -0
  323. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/tests/base/utils/http/test_kerberos_int.py +0 -0
  324. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/tests/base/utils/http/test_kerberos_unit.py +0 -0
  325. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/tests/base/utils/http/test_proxy.py +0 -0
  326. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/tests/base/utils/http/test_socks5_proxy_integration.py +0 -0
  327. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/tests/base/utils/http/test_tls_and_certs.py +0 -0
  328. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/tests/base/utils/replay/__init__.py +0 -0
  329. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/tests/base/utils/replay/test_check.py +0 -0
  330. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/tests/base/utils/test_agent_packages.py +0 -0
  331. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/tests/base/utils/test_agent_utils.py +0 -0
  332. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/tests/base/utils/test_aws.py +0 -0
  333. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/tests/base/utils/test_diagnose.py +0 -0
  334. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/tests/base/utils/test_fips.py +0 -0
  335. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/tests/base/utils/test_time.py +0 -0
  336. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/tests/base/utils/test_tls.py +0 -0
  337. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/tests/base/utils/test_tracing.py +0 -0
  338. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/tests/base/utils/test_tracking.py +0 -0
  339. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/tests/base/utils/test_utils.py +0 -0
  340. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/tests/compose/kerberos/kerberos-agent/Dockerfile +0 -0
  341. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/tests/compose/kerberos/kerberos-agent/configurekerberos.sh +0 -0
  342. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/tests/compose/kerberos/kerberos-agent/configurenginx.sh +0 -0
  343. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/tests/compose/kerberos/kerberos-agent/entrypoint.sh +0 -0
  344. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/tests/compose/kerberos/kerberos-agent/nginx.yaml +0 -0
  345. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/tests/compose/kerberos/kerberos-agent.yaml +0 -0
  346. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/tests/compose/kerberos/kerberos-kdc/Dockerfile +0 -0
  347. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/tests/compose/kerberos/kerberos-kdc/init.sh +0 -0
  348. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/tests/compose/kerberos/kerberos-kdc/kdc.conf +0 -0
  349. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/tests/compose/kerberos/kerberos-kdc/krb5.conf +0 -0
  350. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/tests/compose/kerberos/kerberos-nginx/Dockerfile +0 -0
  351. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/tests/compose/kerberos/kerberos-nginx/configurekerberos.sh +0 -0
  352. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/tests/compose/kerberos/kerberos-nginx/configurenginx.sh +0 -0
  353. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/tests/compose/kerberos/kerberos-nginx/entrypoint.sh +0 -0
  354. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/tests/compose/kerberos/kerberos-nginx/nginx.conf +0 -0
  355. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/tests/compose/kerberos/kerberos-nginx/setupkeytab.sh +0 -0
  356. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/tests/compose/kerberos/kerberos.yaml +0 -0
  357. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/tests/compose/socks5-proxy.yaml +0 -0
  358. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/tests/compose/uds/uds-nginx/nginx.conf +0 -0
  359. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/tests/compose/uds/uds-nginx/templates/default.conf.template +0 -0
  360. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/tests/compose/uds/uds.yaml +0 -0
  361. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/tests/conftest.py +0 -0
  362. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/tests/fixtures/bearer_tokens/custom_token +0 -0
  363. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/tests/fixtures/bearer_tokens/default_token +0 -0
  364. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/tests/fixtures/dcos/private-key.pem +0 -0
  365. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/tests/fixtures/dcos/public-key.pem +0 -0
  366. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/tests/fixtures/kerberos/krb5.conf +0 -0
  367. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/tests/fixtures/kubelet_base/pod_list_raw.dat +0 -0
  368. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/tests/fixtures/kubelet_base/pod_list_raw.json +0 -0
  369. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/tests/fixtures/prometheus/amazon_msk_jmx_metrics.txt +0 -0
  370. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/tests/fixtures/prometheus/deprecated.txt +0 -0
  371. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/tests/fixtures/prometheus/ksm.txt +0 -0
  372. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/tests/fixtures/prometheus/metrics.txt +0 -0
  373. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/tests/fixtures/prometheus/protobuf.bin +0 -0
  374. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/tests/models/__init__.py +0 -0
  375. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/tests/models/config_models/__init__.py +0 -0
  376. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/tests/models/config_models/defaults.py +0 -0
  377. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/tests/models/config_models/deprecations.py +0 -0
  378. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/tests/models/config_models/instance.py +0 -0
  379. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/tests/models/config_models/shared.py +0 -0
  380. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/tests/models/config_models/validators.py +0 -0
  381. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/tests/models/data/spec.yaml +0 -0
  382. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/tests/models/test_interface.py +0 -0
  383. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/tests/models/test_types.py +0 -0
  384. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/tests/stubs/test_aggregator_metric_has_tag.py +0 -0
  385. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/tests/stubs/test_aggregator_no_duplicate.py +0 -0
  386. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/tests/stubs/test_aggregator_service_checks.py +0 -0
  387. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/tests/stubs/test_aggregator_similar.py +0 -0
  388. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/tests/stubs/test_datadog_agent.py +0 -0
  389. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/tests/test_config.py +0 -0
  390. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/tests/test_log.py +0 -0
  391. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/tests/test_metadata.py +0 -0
  392. {datadog_checks_base-37.8.0 → datadog_checks_base-37.10.0}/tests/test_serialization.py +0 -0
  393. {datadog_checks_base-37.8.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.8.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.8.0"
4
+ __version__ = "37.10.0"
@@ -57,11 +57,6 @@ else:
57
57
 
58
58
  init_logging()
59
59
 
60
- if datadog_agent.get_config('disable_unsafe_yaml'):
61
- from ..ddyaml import monkey_patch_pyyaml
62
-
63
- monkey_patch_pyyaml()
64
-
65
60
  if datadog_agent.get_config('integration_tracing'):
66
61
  from ddtrace import patch
67
62
 
@@ -386,17 +381,6 @@ class AgentCheck(object):
386
381
 
387
382
  return limit
388
383
 
389
- @staticmethod
390
- def load_config(yaml_str):
391
- # type: (str) -> Any
392
- """
393
- Convenience wrapper to ease programmatic use of this class from the C API.
394
- """
395
- # See Performance Optimizations in this package's README.md.
396
- import yaml
397
-
398
- return yaml.safe_load(yaml_str)
399
-
400
384
  @property
401
385
  def http(self) -> RequestsWrapper:
402
386
  """
@@ -1485,3 +1469,28 @@ class AgentCheck(object):
1485
1469
 
1486
1470
  for m in metrics:
1487
1471
  self.gauge(m.name, m.value, tags=tags, raw=True)
1472
+
1473
+ @staticmethod
1474
+ def load_config(yaml_str: str) -> Any:
1475
+ """
1476
+ Convenience wrapper to ease programmatic use of this class from the C API.
1477
+ """
1478
+ import subprocess
1479
+ import sys
1480
+
1481
+ process = subprocess.Popen(
1482
+ [sys.executable, '-c', 'import sys, yaml; print(yaml.safe_load(sys.stdin.read()))'],
1483
+ stdin=subprocess.PIPE,
1484
+ stdout=subprocess.PIPE,
1485
+ stderr=subprocess.PIPE,
1486
+ )
1487
+ stdout, stderr = process.communicate(yaml_str.encode())
1488
+ if process.returncode != 0:
1489
+ raise ValueError(f'Failed to load config: {stderr.decode()}')
1490
+
1491
+ decoded = stdout.strip().decode()
1492
+ try:
1493
+ return eval(decoded)
1494
+ # a single, literal unquoted string
1495
+ except Exception:
1496
+ return decoded
@@ -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)
@@ -341,6 +341,8 @@ class AggregatorStub(object):
341
341
  if expected_tags and expected_tags != sorted(metric.tags):
342
342
  continue
343
343
 
344
+ # to assert hostname is None, pass in hostname as '':
345
+ # https://github.com/DataDog/integrations-core/blob/7.65.x/datadog_checks_base/datadog_checks/base/checks/base.py#L760
344
346
  if hostname is not None and hostname != metric.hostname:
345
347
  continue
346
348
 
@@ -29,7 +29,7 @@ class DatadogAgentStub(object):
29
29
  self._sent_telemetry = defaultdict(list)
30
30
 
31
31
  def get_default_config(self):
32
- return {'enable_metadata_collection': True, 'disable_unsafe_yaml': True}
32
+ return {'enable_metadata_collection': True}
33
33
 
34
34
  def reset(self):
35
35
  self._sent_logs.clear()
@@ -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
@@ -42,7 +42,12 @@ def test_check_version():
42
42
 
43
43
 
44
44
  def test_load_config():
45
- assert AgentCheck.load_config("raw_foo: bar") == {'raw_foo': 'bar'}
45
+ assert AgentCheck.load_config('raw_foo: bar') == {'raw_foo': 'bar'}
46
+ assert AgentCheck.load_config('invalid:mapping') == 'invalid:mapping'
47
+ assert AgentCheck.load_config('') is None
48
+
49
+ with pytest.raises(ValueError, match='Failed to load config: '):
50
+ AgentCheck.load_config(':')
46
51
 
47
52
 
48
53
  def test_persistent_cache(datadog_agent):
@@ -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
@@ -0,0 +1,17 @@
1
+ # (C) Datadog, Inc. 2025-present
2
+ # All rights reserved
3
+ # Licensed under a 3-clause BSD style license (see LICENSE)
4
+
5
+ from datadog_checks.base import AgentCheck
6
+
7
+
8
+ class TestAssertMetric:
9
+
10
+ def test_assert_metric_hostname(self, aggregator):
11
+ check = AgentCheck()
12
+
13
+ check.gauge('test.metric', 1, hostname=None)
14
+ check.gauge('test.metric_host', 1, hostname='hello')
15
+
16
+ aggregator.assert_metric('test.metric', 1, hostname='')
17
+ aggregator.assert_metric('test.metric_host', 1, hostname='hello')