datadog-checks-base 37.1.1__py2.py3-none-any.whl → 37.3.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.1.1"
4
+ __version__ = "37.3.0"
@@ -6,6 +6,7 @@ import functools
6
6
  import importlib
7
7
  import inspect
8
8
  import logging
9
+ import os
9
10
  import re
10
11
  import traceback
11
12
  import unicodedata
@@ -46,6 +47,7 @@ from ..types import (
46
47
  from ..utils.agent.utils import should_profile_memory
47
48
  from ..utils.common import ensure_bytes, to_native_string
48
49
  from ..utils.diagnose import Diagnosis
50
+ from ..utils.fips import enable_fips
49
51
  from ..utils.http import RequestsWrapper
50
52
  from ..utils.limiter import Limiter
51
53
  from ..utils.metadata import MetadataManager
@@ -307,6 +309,9 @@ class AgentCheck(object):
307
309
  self.__formatted_tags = None
308
310
  self.__logs_enabled = None
309
311
 
312
+ if os.environ.get("GOFIPS", "0") == "1":
313
+ enable_fips()
314
+
310
315
  def _create_metrics_pattern(self, metric_patterns, option_name):
311
316
  all_patterns = metric_patterns.get(option_name, [])
312
317
 
@@ -1285,7 +1290,13 @@ class AgentCheck(object):
1285
1290
 
1286
1291
  enter_pdb(self.check, line=self.init_config['set_breakpoint'], args=(instance,))
1287
1292
  elif self.should_profile_memory():
1288
- self.profile_memory(self.check, self.init_config, args=(instance,))
1293
+ # self.init_config['profile_memory'] could be `/tmp/datadog-agent-memory-profiler*`
1294
+ # that is generated by Datadog Agent.
1295
+ # If we use `--m-dir` for `agent check` command, a hidden flag, it should be same as a given value.
1296
+ namespaces = [self.init_config['profile_memory']]
1297
+ for id in self.check_id.split(":"):
1298
+ namespaces.append(id)
1299
+ self.profile_memory(func=self.check, namespaces=namespaces, args=(instance,))
1289
1300
  else:
1290
1301
  self.check(instance)
1291
1302
 
@@ -1,6 +1,7 @@
1
1
  DEFAULT_GO_METRICS = {
2
2
  'go_gc_duration_seconds': 'go.gc.duration.seconds',
3
3
  'go_goroutines': 'go.goroutines',
4
+ 'go_memstats_alloc_bytes': {'name': 'go.memstats.alloc_bytes', 'type': 'native_dynamic'},
4
5
  'go_memstats_buck_hash_sys_bytes': 'go.memstats.buck_hash.sys_bytes',
5
6
  'go_memstats_frees': 'go.memstats.frees',
6
7
  'go_memstats_gc_cpu_fraction': 'go.memstats.gc.cpu_fraction',
@@ -11,7 +12,10 @@ DEFAULT_GO_METRICS = {
11
12
  'go_memstats_heap_objects': 'go.memstats.heap.objects',
12
13
  'go_memstats_heap_released_bytes': 'go.memstats.heap.released_bytes',
13
14
  'go_memstats_heap_sys_bytes': 'go.memstats.heap.sys_bytes',
14
- 'go_memstats_last_gc_time_seconds': 'go.memstats.last_gc_time.seconds',
15
+ 'go_memstats_last_gc_time_seconds': {
16
+ 'name': 'go.memstats.last_gc_time_seconds',
17
+ 'type': 'time_elapsed',
18
+ },
15
19
  'go_memstats_lookups': 'go.memstats.lookups',
16
20
  'go_memstats_mallocs': 'go.memstats.mallocs',
17
21
  'go_memstats_mcache_inuse_bytes': 'go.memstats.mcache.inuse_bytes',
@@ -28,7 +32,10 @@ DEFAULT_GO_METRICS = {
28
32
  'process_max_fds': 'process.max_fds',
29
33
  'process_open_fds': 'process.open_fds',
30
34
  'process_resident_memory_bytes': 'process.resident_memory.bytes',
31
- 'process_start_time_seconds': 'process.start_time.seconds',
35
+ 'process_start_time_seconds': {
36
+ 'name': 'process.start_time.seconds',
37
+ 'type': 'time_elapsed',
38
+ },
32
39
  'process_virtual_memory_bytes': 'process.virtual_memory.bytes',
33
40
  'process_virtual_memory_max_bytes': 'process.virtual_memory.max_bytes',
34
41
  }
@@ -9,6 +9,62 @@ Build similar message for better test assertion failure message.
9
9
  MAX_SIMILAR_TO_DISPLAY = 15
10
10
 
11
11
 
12
+ def dict_diff(expected, closest):
13
+ """
14
+ Returns an array of key/value pairs that are different between the two dicts.
15
+ """
16
+ diff = []
17
+ for key in closest.keys() | expected.keys():
18
+ expected_value = expected.get(key)
19
+ closest_value = closest.get(key)
20
+
21
+ if expected_value is not None and expected_value != closest_value:
22
+ diff.append((key, expected_value, closest_value))
23
+
24
+ return diff
25
+
26
+
27
+ def tags_list_to_dict(tags):
28
+ return {tag.split(':', 1)[0]: (tag.split(':', 1)[1] if ":" in tag else '') for tag in tags}
29
+
30
+
31
+ def tags_diff(expected, closest):
32
+ """
33
+ Returns an array of key/value pairs that are different between the two lists of tags.
34
+ """
35
+ diff = []
36
+ expected_tags_dict = tags_list_to_dict(expected)
37
+ closest_tags_dict = tags_list_to_dict(closest)
38
+ for tag in expected_tags_dict:
39
+ if expected_tags_dict[tag] != closest_tags_dict.get(tag):
40
+ diff.append((tag, expected_tags_dict[tag], closest_tags_dict.get(tag)))
41
+ for tag in closest_tags_dict:
42
+ if tag not in expected_tags_dict:
43
+ diff.append((tag, None, closest_tags_dict[tag]))
44
+ return diff
45
+
46
+
47
+ def format_metric_stub_diff(expected, closest):
48
+ """
49
+ Return formatted difference between expected and closest metric stubs
50
+ """
51
+ diff = []
52
+
53
+ closest_dict = closest._asdict()
54
+ expected_dict = expected._asdict()
55
+ dict_diffs = dict_diff(expected_dict, closest_dict)
56
+ for key, expected_value, closest_value in dict_diffs:
57
+ if key == "tags":
58
+ tag_diffs = tags_diff(expected_value, closest_value)
59
+ for tag, expected_tag_value, closest_tag_value in tag_diffs:
60
+ diff.append(
61
+ f" Expected tag {tag}:{expected_tag_value}\n" + f" Found {tag}:{closest_tag_value}"
62
+ )
63
+ else:
64
+ diff.append(f" Expected {key}: {expected_value}\n Found {closest_value}")
65
+ return diff
66
+
67
+
12
68
  def build_similar_elements_msg(expected, submitted_elements):
13
69
  """
14
70
  Return formatted similar elements (metrics, service checks) received compared to submitted elements
@@ -22,9 +78,17 @@ def build_similar_elements_msg(expected, submitted_elements):
22
78
  metric_stub.tags.sort()
23
79
  similar_metrics_to_print.append("{:.2f} {}".format(score, metric_stub))
24
80
 
81
+ closest_diff = []
82
+ if similar_metrics:
83
+ [_, closest] = similar_metrics[0]
84
+ closest_diff = format_metric_stub_diff(expected, closest)
85
+
25
86
  return (
26
87
  "Expected:\n"
27
88
  + " {}\n".format(expected)
89
+ + "Difference to closest:\n"
90
+ + "\n".join(closest_diff)
91
+ + "\n\n"
28
92
  + "Similar submitted:\n"
29
93
  + "Score Most similar\n"
30
94
  + "\n".join(similar_metrics_to_print)
@@ -0,0 +1,32 @@
1
+ # (C) Datadog, Inc. 2024-present
2
+ # All rights reserved
3
+ # Licensed under a 3-clause BSD style license (see LICENSE)
4
+
5
+ import os
6
+
7
+
8
+ def enable_fips(path_to_openssl_conf=None, path_to_openssl_modules=None):
9
+ path_to_embedded = None
10
+ if os.getenv("OPENSSL_CONF") is None:
11
+ if path_to_openssl_conf is None:
12
+ path_to_embedded = _get_embedded_path() if path_to_embedded is None else path_to_embedded
13
+ path_to_openssl_conf = path_to_embedded / "ssl" / "openssl.cnf"
14
+ if not path_to_openssl_conf.exists():
15
+ raise RuntimeError(f'The configuration file "{path_to_openssl_conf}" does not exist')
16
+ os.environ["OPENSSL_CONF"] = str(path_to_openssl_conf)
17
+
18
+ if os.getenv("OPENSSL_MODULES") is None:
19
+ if path_to_openssl_modules is None:
20
+ path_to_embedded = _get_embedded_path() if path_to_embedded is None else path_to_embedded
21
+ path_to_openssl_modules = path_to_embedded / "lib" / "ossl-modules"
22
+ if not path_to_openssl_conf.exists():
23
+ raise RuntimeError(f'The directory "{path_to_openssl_modules}" does not exist')
24
+ os.environ["OPENSSL_MODULES"] = str(path_to_openssl_modules)
25
+
26
+
27
+ def _get_embedded_path():
28
+ import sys
29
+ from pathlib import Path
30
+
31
+ embedded_dir = "embedded3" if os.name == 'nt' else "embedded"
32
+ return Path(sys.executable.split("embedded")[0] + embedded_dir)
@@ -1,10 +1,10 @@
1
- Metadata-Version: 2.3
1
+ Metadata-Version: 2.4
2
2
  Name: datadog-checks-base
3
- Version: 37.1.1
3
+ Version: 37.3.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>
7
- License: BSD-3-Clause
7
+ License-Expression: BSD-3-Clause
8
8
  Keywords: agent,checks,datadog
9
9
  Classifier: Development Status :: 5 - Production/Stable
10
10
  Classifier: Intended Audience :: Developers
@@ -15,7 +15,7 @@ Classifier: Topic :: System :: Monitoring
15
15
  Provides-Extra: db
16
16
  Requires-Dist: mmh3==4.1.0; extra == 'db'
17
17
  Provides-Extra: deps
18
- Requires-Dist: binary==1.0.0; extra == 'deps'
18
+ Requires-Dist: binary==1.0.1; extra == 'deps'
19
19
  Requires-Dist: cachetools==5.5.0; extra == 'deps'
20
20
  Requires-Dist: cryptography==43.0.1; extra == 'deps'
21
21
  Requires-Dist: ddtrace==2.10.6; extra == 'deps'
@@ -3,7 +3,7 @@ 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=KCCdkVwX4trKCkYdiKqQvsIkieyjj71prvC1gerjMs4,138
6
+ datadog_checks/base/__about__.py,sha256=QRM3_bwJhzb7uJLn2DucBJ-GivjWqyQ1VQY7Sj8SWC8,138
7
7
  datadog_checks/base/__init__.py,sha256=rSTDo6-2p_RX6I6wnuXrNMglaatoLRyZFTE5wbHZY8s,1466
8
8
  datadog_checks/base/agent.py,sha256=nX9x_BYYizRKGNYfXq5z7S0FZ9xcX_wd2tuxpGe3_8k,350
9
9
  datadog_checks/base/config.py,sha256=qcAA4X9sXQZRdwQe8DgiGd2980VBp1SQA0d695tX_tU,604
@@ -13,7 +13,7 @@ datadog_checks/base/errors.py,sha256=fPcFaR3zHpSkMo8epvF3lRe9KrEnS8g4J0dXM_nvzsw
13
13
  datadog_checks/base/log.py,sha256=3P5Tq-kWZkqx5AtvQhUk89O1s-5YnE49LJ8xeeKcvB8,6344
14
14
  datadog_checks/base/types.py,sha256=anajZS0W0TsxUHJQw-JHOP2NSeuC9BisXSy9mAStlxQ,1623
15
15
  datadog_checks/base/checks/__init__.py,sha256=a0Wv-Od0BYUA45z37eVOvugflTZMijgGSOuJqndE3DU,263
16
- datadog_checks/base/checks/base.py,sha256=WjHEbphnqmoE9rj5BaFWuQUnxNaqWSRwg8ryG6iSr84,57450
16
+ datadog_checks/base/checks/base.py,sha256=QlDA7UxnbiN2oY5sKZ4zhb5h1S9quf9BkIM1o9AedkU,58037
17
17
  datadog_checks/base/checks/network.py,sha256=UijP1OVBCpCNKMy6bVkNazHgy6Sdm8qCvCYGPaWuTDo,1968
18
18
  datadog_checks/base/checks/kube_leader/__init__.py,sha256=rEM1wqMkx8JLvJpYNHMOy6OdPmCwQ46JSOfE3QDApyY,399
19
19
  datadog_checks/base/checks/kube_leader/base_check.py,sha256=2LIRU6a2cJb4byM4Q3v1SVVJjQW8NjVJr_yUKOfjKjU,708
@@ -39,7 +39,7 @@ datadog_checks/base/checks/openmetrics/v2/__init__.py,sha256=P81FBhJLA9MGpz4L7o_
39
39
  datadog_checks/base/checks/openmetrics/v2/base.py,sha256=UXytG0ze00rXU13VB0BM_ZK_Y_qC6wfxA-OidFm_MyY,4096
40
40
  datadog_checks/base/checks/openmetrics/v2/first_scrape_handler.py,sha256=In-tZXMzieSdL2OXJlIAFi78KbQVwuJnGP0iaLH9974,941
41
41
  datadog_checks/base/checks/openmetrics/v2/labels.py,sha256=0F0ISh03wS2vVsjbns3FrYDn6gvxj0Xv-2fkA2Hh9D8,7310
42
- datadog_checks/base/checks/openmetrics/v2/metrics.py,sha256=CuQbCIqEJ2cCUEbrs2IMiBHjJF8QEZaysDYxti_2L8U,1981
42
+ datadog_checks/base/checks/openmetrics/v2/metrics.py,sha256=uDVZOHHRWMW8YUQZBY9jCLzecN5DueRNjImxBm1K82k,2189
43
43
  datadog_checks/base/checks/openmetrics/v2/scraper.py,sha256=d4PcJM_b7wkHUBQ5b_IZo_VW_07jQj_gwTgfDrkp1BA,23279
44
44
  datadog_checks/base/checks/openmetrics/v2/transform.py,sha256=qv7Y1yvqWm-269mGU7Oq0it8x3VkWUZU2m2d3q-VJZ0,8377
45
45
  datadog_checks/base/checks/openmetrics/v2/utils.py,sha256=tpk3htJAz_KwCRqFs2CTjajHkLCs_2TbGdBp514rWOQ,3565
@@ -89,7 +89,7 @@ datadog_checks/base/stubs/aggregator.py,sha256=GIVfe0IAbvloKlm886PLjLyjVyz9nkOdq
89
89
  datadog_checks/base/stubs/common.py,sha256=ZGzF2dXy1uVFQGdG_bvz_pMMiULaBcpzra_k9wo9f04,1088
90
90
  datadog_checks/base/stubs/datadog_agent.py,sha256=u4e8ZFSt4CO9mxuZ4UinteIJOyLKQgzcHFa0pTzRaCY,5995
91
91
  datadog_checks/base/stubs/log.py,sha256=A-eWnzY5gTpTW41Zch-W5CVclzldlmhMTW-vDNFdT1o,836
92
- datadog_checks/base/stubs/similar.py,sha256=BM_8huA-TwiCLMcy5OBfTfIZPQ2zm3SopwL6X_gVU8U,5837
92
+ datadog_checks/base/stubs/similar.py,sha256=3HO9htx9LV6pRaE1ZGKsPExavTbjPHPK6ZMM2BPYj3Y,8045
93
93
  datadog_checks/base/stubs/tagging.py,sha256=zxLdPC4EqHxGiS_HEhbaOsL_s5nZIhN8BDkx2BATOqs,1439
94
94
  datadog_checks/base/utils/__init__.py,sha256=TC0q7iCbNqcYjfU5azBNpCni8LAQYOfY6FADE3SZEPA,115
95
95
  datadog_checks/base/utils/aws.py,sha256=wxFLWlVFtv5_EURdsXzDhORcTpM0jBlAokcMiPV1xD8,1945
@@ -98,6 +98,7 @@ datadog_checks/base/utils/constants.py,sha256=QwTey4CWB0NAxm2rcD-wPYRkEyglekQIrA
98
98
  datadog_checks/base/utils/containers.py,sha256=LBqUzERHxx5TdgcWVQTq1A1WaGCMhzXT9k4Gn0fX3J8,2753
99
99
  datadog_checks/base/utils/date.py,sha256=JJmqP84CgVcFJ0cvAmMu8EtM6v96tIESucQNm9eKeEc,2780
100
100
  datadog_checks/base/utils/diagnose.py,sha256=eLMe0tISpkzS3yxVR83IHxorQJfHT_Xi6Cq4zzRNxVI,5285
101
+ datadog_checks/base/utils/fips.py,sha256=G92RNoZkrMojaTKi1DiccbvfMFO3adktDZgKjpxkkTw,1400
101
102
  datadog_checks/base/utils/functions.py,sha256=iGlybxR6aPPElNxNb2ELOzbk328j9OVBAxredJxdCRw,695
102
103
  datadog_checks/base/utils/headers.py,sha256=0SSdC71jwaB61BODfusahCVr1c56GvT9iwt7cidcHP0,1779
103
104
  datadog_checks/base/utils/http.py,sha256=MWmPVsCQEkl02X0J4gIte1ACjB3LeK3cwZL2gPDhIX8,39116
@@ -199,6 +200,6 @@ datadog_checks/utils/tracing.py,sha256=HQbQakKM-Lw75MDkItaYJYipS6YO24Z_ymDVxDsx5
199
200
  datadog_checks/utils/prometheus/__init__.py,sha256=8WwXnM9g1sfS5267QYCJX_hd8MZl5kRgBgQ_SzdNdXs,161
200
201
  datadog_checks/utils/prometheus/functions.py,sha256=4vWsTGLgujHwdYZo0tlAQkqDPHofqUJM3k9eItJqERQ,197
201
202
  datadog_checks/utils/prometheus/metrics_pb2.py,sha256=xg3UdUHe4TjeR4s13LUKZ2U1WVSt6U6zjsVRG6lX6dc,173
202
- datadog_checks_base-37.1.1.dist-info/METADATA,sha256=W4I-pf-mYL7_LiLSxCNw-k2bGpL7ATtqLiuvD6Ji3Tk,3664
203
- datadog_checks_base-37.1.1.dist-info/WHEEL,sha256=aO3RJuuiFXItVSnAUEmQ0yRBvv9e1sbJh68PtuQkyAE,105
204
- datadog_checks_base-37.1.1.dist-info/RECORD,,
203
+ datadog_checks_base-37.3.0.dist-info/METADATA,sha256=VlGpxGtTRr5mXjDKJMVVrEc2qC0m5XO2yDNPMAs-6lA,3675
204
+ datadog_checks_base-37.3.0.dist-info/WHEEL,sha256=tkmg4JIqwd9H8mL30xA7crRmoStyCtGp0VWshokd1Jc,105
205
+ datadog_checks_base-37.3.0.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: hatchling 1.26.3
2
+ Generator: hatchling 1.27.0
3
3
  Root-Is-Purelib: true
4
4
  Tag: py2-none-any
5
5
  Tag: py3-none-any