datadog-checks-base 37.19.0__py2.py3-none-any.whl → 37.21.0__py2.py3-none-any.whl

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.
@@ -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.19.0"
4
+ __version__ = "37.21.0"
@@ -3,7 +3,7 @@
3
3
  # Licensed under a 3-clause BSD style license (see LICENSE)
4
4
  from .__about__ import __version__
5
5
  from .agent import datadog_agent
6
- from .checks import AgentCheck
6
+ from .checks import AgentCheck, DatabaseCheck
7
7
  from .checks.kube_leader import KubeLeaderElectionBaseCheck
8
8
  from .checks.openmetrics import OpenMetricsBaseCheck
9
9
  from .checks.openmetrics.v2.base import OpenMetricsBaseCheckV2
@@ -16,6 +16,7 @@ from .utils.common import ensure_bytes, ensure_unicode, to_native_string, to_str
16
16
  __all__ = [
17
17
  '__version__',
18
18
  'AgentCheck',
19
+ 'DatabaseCheck',
19
20
  'ConfigurationError',
20
21
  'KubeLeaderElectionBaseCheck',
21
22
  'OpenMetricsBaseCheck',
@@ -2,6 +2,7 @@
2
2
  # All rights reserved
3
3
  # Licensed under a 3-clause BSD style license (see LICENSE)
4
4
  from .base import AgentCheck
5
+ from .db import DatabaseCheck
5
6
  from .network import EventType, NetworkCheck, Status
6
7
 
7
- __all__ = ['AgentCheck', 'EventType', 'NetworkCheck', 'Status']
8
+ __all__ = ['AgentCheck', 'DatabaseCheck', 'EventType', 'NetworkCheck', 'Status']
@@ -11,19 +11,10 @@ import os
11
11
  import re
12
12
  from collections import deque
13
13
  from os.path import basename
14
- from typing import ( # noqa: F401
14
+ from typing import (
15
15
  TYPE_CHECKING,
16
16
  Any,
17
- AnyStr,
18
- Callable,
19
- Deque,
20
- Dict,
21
- List,
22
- Optional,
23
- Sequence,
24
- Set,
25
- Tuple,
26
- Union,
17
+ Deque, # noqa: F401
27
18
  )
28
19
 
29
20
  import lazy_loader
@@ -294,10 +285,16 @@ class AgentCheck(object):
294
285
  # Functions that will be called exactly once (if successful) before the first check run
295
286
  self.check_initializations = deque() # type: Deque[Callable[[], None]]
296
287
 
297
- self.check_initializations.append(self.load_configuration_models)
288
+ self.check_initializations.extend(
289
+ [
290
+ self.load_configuration_models,
291
+ self.__initialize_persistent_cache_key_prefix,
292
+ ]
293
+ )
298
294
 
299
295
  self.__formatted_tags = None
300
296
  self.__logs_enabled = None
297
+ self.__persistent_cache_key_prefix: str = ""
301
298
 
302
299
  if os.environ.get("GOFIPS", "0") == "1":
303
300
  enable_fips()
@@ -491,6 +488,18 @@ class AgentCheck(object):
491
488
  self._log_deprecation('in_developer_mode')
492
489
  return False
493
490
 
491
+ def persistent_cache_id(self) -> str:
492
+ """
493
+ Returns the ID that identifies this check instance in the Agent persistent cache.
494
+
495
+ Overriding this method modifies the default behavior of the AgentCheck and can
496
+ be used to customize when the persistent cache is invalidated. The default behavior
497
+ defines the persistent cache ID as the digest of the full check configuration.
498
+
499
+ Some per-check isolation is still applied to avoid different checks with the same ID to share the same keys.
500
+ """
501
+ return self.check_id.split(":")[-1]
502
+
494
503
  def log_typos_in_options(self, user_config, models_config, level):
495
504
  # See Performance Optimizations in this package's README.md.
496
505
  from jellyfish import jaro_winkler_similarity
@@ -1009,13 +1018,15 @@ class AgentCheck(object):
1009
1018
  attributes['timestamp'] = int(timestamp * 1000)
1010
1019
 
1011
1020
  datadog_agent.send_log(json.encode(attributes), self.check_id)
1021
+
1012
1022
  if cursor is not None:
1013
- self.write_persistent_cache('log_cursor_{}'.format(stream), json.encode(cursor))
1023
+ self.write_persistent_cache(f'log_cursor_{stream}', json.encode(cursor))
1014
1024
 
1015
1025
  def get_log_cursor(self, stream='default'):
1016
1026
  # type: (str) -> dict[str, Any] | None
1017
1027
  """Returns the most recent log cursor from disk."""
1018
- data = self.read_persistent_cache('log_cursor_{}'.format(stream))
1028
+ data = self.read_persistent_cache(f'log_cursor_{stream}')
1029
+
1019
1030
  return json.decode(data) if data else None
1020
1031
 
1021
1032
  def _log_deprecation(self, deprecation_key, *args):
@@ -1082,9 +1093,9 @@ class AgentCheck(object):
1082
1093
 
1083
1094
  return entrypoint
1084
1095
 
1085
- def _persistent_cache_id(self, key):
1086
- # type: (str) -> str
1087
- return '{}_{}'.format(self.check_id, key)
1096
+ def __initialize_persistent_cache_key_prefix(self):
1097
+ namespace = ':'.join(self.check_id.split(':')[:-1])
1098
+ self.__persistent_cache_key_prefix = f'{namespace}:{self.persistent_cache_id()}_'
1088
1099
 
1089
1100
  def read_persistent_cache(self, key):
1090
1101
  # type: (str) -> str
@@ -1094,9 +1105,9 @@ class AgentCheck(object):
1094
1105
  key (str):
1095
1106
  the key to retrieve
1096
1107
  """
1097
- return datadog_agent.read_persistent_cache(self._persistent_cache_id(key))
1108
+ return datadog_agent.read_persistent_cache(f"{self.__persistent_cache_key_prefix}{key}")
1098
1109
 
1099
- def write_persistent_cache(self, key, value):
1110
+ def write_persistent_cache(self, key: str, value: str):
1100
1111
  # type: (str, str) -> None
1101
1112
  """Stores `value` in a persistent cache for this check instance.
1102
1113
  The cache is located in a path where the agent is guaranteed to have read & write permissions. Namely in
@@ -1110,7 +1121,7 @@ class AgentCheck(object):
1110
1121
  value (str):
1111
1122
  the value to store
1112
1123
  """
1113
- datadog_agent.write_persistent_cache(self._persistent_cache_id(key), value)
1124
+ datadog_agent.write_persistent_cache(f"{self.__persistent_cache_key_prefix}{key}", value)
1114
1125
 
1115
1126
  def set_external_tags(self, external_tags):
1116
1127
  # type: (Sequence[ExternalTagType]) -> None
@@ -1282,13 +1293,7 @@ class AgentCheck(object):
1282
1293
 
1283
1294
  run_with_isolation(self, aggregator, datadog_agent)
1284
1295
  else:
1285
- while self.check_initializations:
1286
- initialization = self.check_initializations.popleft()
1287
- try:
1288
- initialization()
1289
- except Exception:
1290
- self.check_initializations.appendleft(initialization)
1291
- raise
1296
+ self.run_check_initializations()
1292
1297
 
1293
1298
  instance = copy.deepcopy(self.instances[0])
1294
1299
 
@@ -1328,6 +1333,15 @@ class AgentCheck(object):
1328
1333
 
1329
1334
  return error_report
1330
1335
 
1336
+ def run_check_initializations(self):
1337
+ while self.check_initializations:
1338
+ initialization = self.check_initializations.popleft()
1339
+ try:
1340
+ initialization()
1341
+ except Exception:
1342
+ self.check_initializations.appendleft(initialization)
1343
+ raise
1344
+
1331
1345
  def event(self, event):
1332
1346
  # type: (Event) -> None
1333
1347
  """Send an event.
@@ -0,0 +1,22 @@
1
+ # (C) Datadog, Inc. 2025-present
2
+ # All rights reserved
3
+ # Licensed under a 3-clause BSD style license (see LICENSE)
4
+
5
+ from . import AgentCheck
6
+
7
+
8
+ class DatabaseCheck(AgentCheck):
9
+ def database_monitoring_query_sample(self, raw_event: str):
10
+ self.event_platform_event(raw_event, "dbm-samples")
11
+
12
+ def database_monitoring_query_metrics(self, raw_event: str):
13
+ self.event_platform_event(raw_event, "dbm-metrics")
14
+
15
+ def database_monitoring_query_activity(self, raw_event: str):
16
+ self.event_platform_event(raw_event, "dbm-activity")
17
+
18
+ def database_monitoring_metadata(self, raw_event: str):
19
+ self.event_platform_event(raw_event, "dbm-metadata")
20
+
21
+ def database_monitoring_health(self, raw_event: str):
22
+ self.event_platform_event(raw_event, "dbm-health")
@@ -12,8 +12,7 @@ from typing import TYPE_CHECKING
12
12
  from datadog_checks.base.utils.serialization import json
13
13
 
14
14
  if TYPE_CHECKING:
15
- from datadog_checks.base import AgentCheck
16
-
15
+ from datadog_checks.base import DatabaseCheck
17
16
  try:
18
17
  import datadog_agent
19
18
  except ImportError:
@@ -42,7 +41,7 @@ class HealthStatus(Enum):
42
41
 
43
42
 
44
43
  class Health:
45
- def __init__(self, check: AgentCheck):
44
+ def __init__(self, check: DatabaseCheck):
46
45
  """
47
46
  Initialize the HealthCheck instance.
48
47
 
@@ -471,12 +471,13 @@ class TagManager:
471
471
  multiple times.
472
472
  """
473
473
 
474
- def __init__(self) -> None:
474
+ def __init__(self, normalizer: Optional[Callable[[Union[str, bytes]], str]] = None) -> None:
475
475
  self._tags: Dict[Union[str, TagType], List[str]] = {}
476
476
  self._cached_tag_list: Optional[tuple[str, ...]] = None
477
477
  self._keyless: TagType = TagType.KEYLESS
478
+ self._normalizer = normalizer
478
479
 
479
- def set_tag(self, key: Optional[str], value: str, replace: bool = False) -> None:
480
+ def set_tag(self, key: Optional[str], value: str, replace: bool = False, normalize: bool = False) -> None:
480
481
  """
481
482
  Set a tag with the given key and value.
482
483
  If key is None or empty, the value is stored as a keyless tag.
@@ -485,7 +486,11 @@ class TagManager:
485
486
  value (str): The tag value
486
487
  replace (bool): If True, replaces all existing values for this key
487
488
  If False, appends the value if it doesn't exist
489
+ normalize (bool): If True, applies tag normalization using the configured normalizer
488
490
  """
491
+ if normalize and self._normalizer:
492
+ value = self._normalizer(value)
493
+
489
494
  if not key:
490
495
  key = self._keyless
491
496
 
@@ -498,13 +503,14 @@ class TagManager:
498
503
  # Invalidate the cache since tags have changed
499
504
  self._cached_tag_list = None
500
505
 
501
- def set_tags_from_list(self, tag_list: List[str], replace: bool = False) -> None:
506
+ def set_tags_from_list(self, tag_list: List[str], replace: bool = False, normalize: bool = False) -> None:
502
507
  """
503
508
  Set multiple tags from a list of strings.
504
509
  Strings can be in "key:value" format or just "value" format.
505
510
  Args:
506
511
  tag_list (List[str]): List of tags in "key:value" format or just "value"
507
512
  replace (bool): If True, replaces all existing tags with the new tags list
513
+ normalize (bool): If True, applies tag normalization using the configured normalizer
508
514
  """
509
515
  if replace:
510
516
  self._tags.clear()
@@ -513,11 +519,11 @@ class TagManager:
513
519
  for tag in tag_list:
514
520
  if ':' in tag:
515
521
  key, value = tag.split(':', 1)
516
- self.set_tag(key, value)
522
+ self.set_tag(key, value, normalize=normalize)
517
523
  else:
518
- self.set_tag(None, tag)
524
+ self.set_tag(None, tag, normalize=normalize)
519
525
 
520
- def delete_tag(self, key: Optional[str], value: Optional[str] = None) -> bool:
526
+ def delete_tag(self, key: Optional[str], value: Optional[str] = None, normalize: bool = False) -> bool:
521
527
  """
522
528
  Delete a tag or specific value for a tag.
523
529
  For keyless tags, use None or empty string as the key.
@@ -525,9 +531,13 @@ class TagManager:
525
531
  key (str): The tag key to delete, or None/empty for keyless tags
526
532
  value (str, optional): If provided, only deletes this specific value for the key.
527
533
  If None, deletes all values for the key.
534
+ normalize (bool): If True, applies tag normalization to the value for lookup
528
535
  Returns:
529
536
  bool: True if something was deleted, False otherwise
530
537
  """
538
+ if normalize and self._normalizer and value:
539
+ value = self._normalizer(value)
540
+
531
541
  if not key:
532
542
  key = self._keyless
533
543
 
@@ -0,0 +1,33 @@
1
+ from collections.abc import Collection
2
+
3
+ from datadog_checks.base import AgentCheck
4
+ from datadog_checks.base.utils.containers import hash_mutable
5
+
6
+
7
+ def config_set_persistent_cache_id(
8
+ check: AgentCheck,
9
+ init_config_options: Collection[str] | None = None,
10
+ instance_config_options: Collection[str] | None = None,
11
+ ):
12
+ """
13
+ Returns an ID for the persisitent cache derives from a subset of the check's config options.
14
+
15
+ If the value of any of the provided options changes, the generate cache ID will change.
16
+
17
+ Parameters:
18
+ check: the check instance the key is going to be used for.
19
+ init_config_options: the subset of init_config options to use to generate the cache ID.
20
+ instance_config_options: the subset of config options to use to generate the cache ID.
21
+ """
22
+
23
+ if not init_config_options and not instance_config_options:
24
+ raise ValueError("At least one of init_config_options or instance_config_options must be provided")
25
+
26
+ set_init_config_options = set(init_config_options) if init_config_options else set()
27
+ set_instance_config_options = set(instance_config_options) if instance_config_options else set()
28
+
29
+ init_config_values = tuple(value for key, value in check.init_config.items() if key in set_init_config_options)
30
+ instance_config_values = tuple(value for key, value in check.instance.items() if key in set_instance_config_options)
31
+
32
+ selected_values = init_config_values + instance_config_values
33
+ return str(hash_mutable(selected_values)).replace("-", "")
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: datadog-checks-base
3
- Version: 37.19.0
3
+ Version: 37.21.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>
@@ -10,7 +10,7 @@ Classifier: Development Status :: 5 - Production/Stable
10
10
  Classifier: Intended Audience :: Developers
11
11
  Classifier: Intended Audience :: System Administrators
12
12
  Classifier: License :: OSI Approved :: BSD License
13
- Classifier: Programming Language :: Python :: 3.12
13
+ Classifier: Programming Language :: Python :: 3.13
14
14
  Classifier: Topic :: System :: Monitoring
15
15
  Provides-Extra: db
16
16
  Requires-Dist: mmh3==5.2.0; extra == 'db'
@@ -18,7 +18,7 @@ Provides-Extra: deps
18
18
  Requires-Dist: binary==1.0.2; extra == 'deps'
19
19
  Requires-Dist: cachetools==6.2.0; extra == 'deps'
20
20
  Requires-Dist: cryptography==45.0.6; extra == 'deps'
21
- Requires-Dist: ddtrace==3.12.3; extra == 'deps'
21
+ Requires-Dist: ddtrace==3.12.5; extra == 'deps'
22
22
  Requires-Dist: jellyfish==1.2.0; extra == 'deps'
23
23
  Requires-Dist: lazy-loader==0.4; extra == 'deps'
24
24
  Requires-Dist: prometheus-client==0.22.1; extra == 'deps'
@@ -3,9 +3,9 @@ datadog_checks/config.py,sha256=PrAXGdlLnoV2VMQff_noSaSJJ0wg4BAiGnw7jCQLSik,196
3
3
  datadog_checks/errors.py,sha256=eFwmnrX-batIgbu-iJyseqAPNO_4rk1UuaKK89evLhg,155
4
4
  datadog_checks/log.py,sha256=orvOgMKGNEsqSTLalCAQpWP-ouorpG1A7Gn-j2mRD80,301
5
5
  datadog_checks/py.typed,sha256=la67KBlbjXN-_-DfGNcdOcjYumVpKG_Tkw-8n5dnGB4,8
6
- datadog_checks/base/__about__.py,sha256=h0HfvDkf2Aa8iTSDyAr3hM2lptwVXJOKhEWgL-rgl0I,139
6
+ datadog_checks/base/__about__.py,sha256=pvycJFU0hkYwQYew20pwmnwFDOFZoWPr3etBDGeoKzI,139
7
7
  datadog_checks/base/__init__.py,sha256=yWegSLE-TZWIGSvAiJj9PSrUxzlOo_UVJLt2zORZ8Ek,363
8
- datadog_checks/base/__init__.pyi,sha256=eH8XhrtvnD6uE6FWfEyCmKwOaaLJxNolS08D6IRHZuU,995
8
+ datadog_checks/base/__init__.pyi,sha256=a4Y1JIcPJ8pz9tRkBAvjWdtvSQwZxbMZBuRmIiSs_4E,1031
9
9
  datadog_checks/base/agent.py,sha256=nX9x_BYYizRKGNYfXq5z7S0FZ9xcX_wd2tuxpGe3_8k,350
10
10
  datadog_checks/base/config.py,sha256=qcAA4X9sXQZRdwQe8DgiGd2980VBp1SQA0d695tX_tU,604
11
11
  datadog_checks/base/constants.py,sha256=cR19tAqVysMFbdBWqIGZoHIKk1kGTyqRsCn9FfFQOnw,197
@@ -13,9 +13,10 @@ datadog_checks/base/errors.py,sha256=fPcFaR3zHpSkMo8epvF3lRe9KrEnS8g4J0dXM_nvzsw
13
13
  datadog_checks/base/log.py,sha256=gSfzYimmg0z3Dgmn8NpXuyMNjgXwmTbn0NcyUX8B1ls,6283
14
14
  datadog_checks/base/types.py,sha256=anajZS0W0TsxUHJQw-JHOP2NSeuC9BisXSy9mAStlxQ,1623
15
15
  datadog_checks/base/checks/__init__.py,sha256=q7V6v-FwQWkQC1QWaVzKaPjZMaxPJHJcLd71C0uM7bA,211
16
- datadog_checks/base/checks/__init__.pyi,sha256=LASfm-daLNQIYe6-w0NPqBw4cl83nYIX5_B-VhV6ARo,262
16
+ datadog_checks/base/checks/__init__.pyi,sha256=ydetl6kEFCSChppYQhs8mvIP5l6vnZD5AbLABGhbFcM,309
17
17
  datadog_checks/base/checks/_config_ast.py,sha256=v1rAhwORF80b3kfZKhf6zXZ7S5D3A2QPUK4tSo8eo-Y,3268
18
- datadog_checks/base/checks/base.py,sha256=kcnZ8ySfleMGw5y6iLEvhLaF42WGCMes0LfylLo_v50,59857
18
+ datadog_checks/base/checks/base.py,sha256=xP56kjtCvW-CMWrdVN3ZC1yAhQr4jad9ORPDuOdz-eM,60654
19
+ datadog_checks/base/checks/db.py,sha256=HzEOH4uZaMDAaUTJYy0K5wV9FryNQDXsSMAOHXPVaf4,794
19
20
  datadog_checks/base/checks/network.py,sha256=UkgqkVHaoX7Hqi0WKEx-TvaFiF6-37VyF9A3m2aSaJM,1966
20
21
  datadog_checks/base/checks/kube_leader/__init__.py,sha256=q7V6v-FwQWkQC1QWaVzKaPjZMaxPJHJcLd71C0uM7bA,211
21
22
  datadog_checks/base/checks/kube_leader/__init__.pyi,sha256=UGDywoRwmCIz3Zii1uHsp7jiFGWRdn5fFMZZxgGGlQs,398
@@ -116,6 +117,7 @@ datadog_checks/base/utils/functions.py,sha256=iGlybxR6aPPElNxNb2ELOzbk328j9OVBAx
116
117
  datadog_checks/base/utils/headers.py,sha256=0SSdC71jwaB61BODfusahCVr1c56GvT9iwt7cidcHP0,1779
117
118
  datadog_checks/base/utils/http.py,sha256=ePSzL7x_xsb1dnXJyU2fBXIgOU0p5UFZIpG2AX_jZZA,44651
118
119
  datadog_checks/base/utils/limiter.py,sha256=YRTrPCX1S5EtHLVcP_-GEfzRots_LTcy1f_uHZVs90g,3027
120
+ datadog_checks/base/utils/persistent_cache.py,sha256=i5I9BKIb5V2BFEs0sVTf8bBQUIH21G2nL_tRQHC9GMk,1538
119
121
  datadog_checks/base/utils/platform.py,sha256=wW8f6XKo4JHxvu1sN0DpLDmYjS_cCu8GoKvfTjIj4yM,2499
120
122
  datadog_checks/base/utils/secrets.py,sha256=Tj5MBOoyGXXDWB3Hr-7UKDy5GV1NZJkFPY4T4v9PHHg,551
121
123
  datadog_checks/base/utils/serialization.py,sha256=pcRUzZIUZkOsfnGDGbxeUwGXrSsFl_9rLhA0ekD_AZ8,975
@@ -138,7 +140,7 @@ datadog_checks/base/utils/concurrency/limiter.py,sha256=is2ZpUEjfsI4nBGtXG2D0Zgv
138
140
  datadog_checks/base/utils/db/__init__.py,sha256=EVTc2FtnHWLHXI3M79jyMn9ypZAMa9eqG3EKLAiMF-M,211
139
141
  datadog_checks/base/utils/db/__init__.pyi,sha256=ewmGxxyJ52wAaYxNZahi2koEUnddfvHcn3HYxQ3RUr0,240
140
142
  datadog_checks/base/utils/db/core.py,sha256=bYanwXIqBzsSxK7b-Ofb0W1WiHbFBtKyYdUBonBLe_Q,11165
141
- datadog_checks/base/utils/db/health.py,sha256=OWdhGSUhEr8Rxr6anVxD__52wkG8kDaY7M015Y4fCkA,2361
143
+ datadog_checks/base/utils/db/health.py,sha256=rdcZPdlLMT4g9tepkietuViKtmP4gwPsjMGCvqC5s54,2366
142
144
  datadog_checks/base/utils/db/query.py,sha256=-PyxdqpbShkQ78h7sWnghQZVtjdLGVrm71n8OpHuPW4,14432
143
145
  datadog_checks/base/utils/db/sql.py,sha256=oiEzQa_vC_w3U65VFrFCoQHWj5GQLLRlSO0CfiSlp4A,2490
144
146
  datadog_checks/base/utils/db/sql_commenter.py,sha256=r_efK6TGRQxM_-Qj-ndEJdECk47J4nCFjkVyxu1XmvU,1522
@@ -146,7 +148,7 @@ datadog_checks/base/utils/db/statement_metrics.py,sha256=U7EtERkmFzfCtfyd3094fBa
146
148
  datadog_checks/base/utils/db/timed_cache.py,sha256=a9Ks5KKUvExB6GOATXTSCLamVtLD919Dn6HpweGKtFw,2114
147
149
  datadog_checks/base/utils/db/transform.py,sha256=H3JN8_MF0Pk0HaXvIZeX1A8iQrP8KBgS741MPeBiWDo,23969
148
150
  datadog_checks/base/utils/db/types.py,sha256=OLX2Oq58JQPFBD4oqUpCLkAP7ovRGN_i1vFk1E0N8Lg,267
149
- datadog_checks/base/utils/db/utils.py,sha256=6rYXjV9I7Hr_PhgkvhbTiZ0QCmyHWoZYETeUD4Qe3Js,22441
151
+ datadog_checks/base/utils/db/utils.py,sha256=g6GAG1OGvo4O-GrTB6nETvUZGfVUSpqYYJMBuhLs2pM,23130
150
152
  datadog_checks/base/utils/discovery/__init__.py,sha256=vPCOdsThBcBjFJRPhDm6IsZGOwk8HlvciwCe_l8dKLk,211
151
153
  datadog_checks/base/utils/discovery/__init__.pyi,sha256=ScVLU1Njj9ekZmewltb0cULI6BylssVHfn4CcPNeyr8,173
152
154
  datadog_checks/base/utils/discovery/cache.py,sha256=f9L3A7YZpZ-mpZpFIwjsa5ab9cZMGkqdetdr9EpalbI,887
@@ -220,6 +222,6 @@ datadog_checks/utils/tracing.py,sha256=HQbQakKM-Lw75MDkItaYJYipS6YO24Z_ymDVxDsx5
220
222
  datadog_checks/utils/prometheus/__init__.py,sha256=8WwXnM9g1sfS5267QYCJX_hd8MZl5kRgBgQ_SzdNdXs,161
221
223
  datadog_checks/utils/prometheus/functions.py,sha256=4vWsTGLgujHwdYZo0tlAQkqDPHofqUJM3k9eItJqERQ,197
222
224
  datadog_checks/utils/prometheus/metrics_pb2.py,sha256=xg3UdUHe4TjeR4s13LUKZ2U1WVSt6U6zjsVRG6lX6dc,173
223
- datadog_checks_base-37.19.0.dist-info/METADATA,sha256=eRGRbqzRaiIa1JBahGl2rN02TEj8dH3busevSN6hSHU,4245
224
- datadog_checks_base-37.19.0.dist-info/WHEEL,sha256=tkmg4JIqwd9H8mL30xA7crRmoStyCtGp0VWshokd1Jc,105
225
- datadog_checks_base-37.19.0.dist-info/RECORD,,
225
+ datadog_checks_base-37.21.0.dist-info/METADATA,sha256=RngK4W5OJrfoUb7udQ1t_kuEqdSP0_6Mk6FecbRTVyo,4245
226
+ datadog_checks_base-37.21.0.dist-info/WHEEL,sha256=tkmg4JIqwd9H8mL30xA7crRmoStyCtGp0VWshokd1Jc,105
227
+ datadog_checks_base-37.21.0.dist-info/RECORD,,