datadog-checks-base 37.16.0__py2.py3-none-any.whl → 37.17.1__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.
- datadog_checks/base/__about__.py +1 -1
- datadog_checks/base/checks/base.py +1 -10
- datadog_checks/base/utils/db/utils.py +25 -11
- {datadog_checks_base-37.16.0.dist-info → datadog_checks_base-37.17.1.dist-info}/METADATA +2 -2
- {datadog_checks_base-37.16.0.dist-info → datadog_checks_base-37.17.1.dist-info}/RECORD +6 -6
- {datadog_checks_base-37.16.0.dist-info → datadog_checks_base-37.17.1.dist-info}/WHEEL +0 -0
datadog_checks/base/__about__.py
CHANGED
|
@@ -32,15 +32,6 @@ from datadog_checks.base.agent import AGENT_RUNNING, aggregator, datadog_agent
|
|
|
32
32
|
from datadog_checks.base.config import is_affirmative
|
|
33
33
|
from datadog_checks.base.constants import ServiceCheck
|
|
34
34
|
from datadog_checks.base.errors import ConfigurationError
|
|
35
|
-
from datadog_checks.base.types import (
|
|
36
|
-
AgentConfigType,
|
|
37
|
-
Event,
|
|
38
|
-
ExternalTagType,
|
|
39
|
-
InitConfigType,
|
|
40
|
-
InstanceType,
|
|
41
|
-
ProxySettings,
|
|
42
|
-
ServiceCheckStatus,
|
|
43
|
-
)
|
|
44
35
|
from datadog_checks.base.utils.agent.utils import should_profile_memory
|
|
45
36
|
from datadog_checks.base.utils.common import ensure_bytes, to_native_string
|
|
46
37
|
from datadog_checks.base.utils.fips import enable_fips
|
|
@@ -1306,7 +1297,7 @@ class AgentCheck(object):
|
|
|
1306
1297
|
|
|
1307
1298
|
enter_pdb(self.check, line=self.init_config['set_breakpoint'], args=(instance,))
|
|
1308
1299
|
elif self.should_profile_memory():
|
|
1309
|
-
#
|
|
1300
|
+
# The 'profile_memory' key in self.init_config could be `/tmp/datadog-agent-memory-profiler*`
|
|
1310
1301
|
# that is generated by Datadog Agent.
|
|
1311
1302
|
# If we use `--m-dir` for `agent check` command, a hidden flag, it should be same as a given value.
|
|
1312
1303
|
namespaces = [self.init_config.get('profile_memory')]
|
|
@@ -107,21 +107,33 @@ class ConstantRateLimiter:
|
|
|
107
107
|
Basic rate limiter that sleeps long enough to ensure the rate limit is not exceeded. Not thread safe.
|
|
108
108
|
"""
|
|
109
109
|
|
|
110
|
-
def __init__(self, rate_limit_s):
|
|
110
|
+
def __init__(self, rate_limit_s, max_sleep_chunk_s=5):
|
|
111
111
|
"""
|
|
112
112
|
:param rate_limit_s: rate limit in seconds
|
|
113
|
+
:param max_sleep_chunk_s: maximum size of each sleep chunk while waiting for the next period
|
|
113
114
|
"""
|
|
114
115
|
self.rate_limit_s = max(rate_limit_s, 0)
|
|
115
116
|
self.period_s = 1.0 / self.rate_limit_s if self.rate_limit_s > 0 else 0
|
|
116
117
|
self.last_event = 0
|
|
118
|
+
self.max_sleep_chunk_s = max(0, max_sleep_chunk_s)
|
|
117
119
|
|
|
118
|
-
def update_last_time_and_sleep(self):
|
|
120
|
+
def update_last_time_and_sleep(self, cancel_event: Optional[threading.Event] = None):
|
|
119
121
|
"""
|
|
120
122
|
Sleeps long enough to enforce the rate limit
|
|
121
123
|
"""
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
124
|
+
if self.period_s <= 0:
|
|
125
|
+
self.update_last_time()
|
|
126
|
+
return
|
|
127
|
+
|
|
128
|
+
deadline = self.last_event + self.period_s
|
|
129
|
+
while True:
|
|
130
|
+
now = time.time()
|
|
131
|
+
remaining = deadline - now
|
|
132
|
+
if remaining <= 0:
|
|
133
|
+
break
|
|
134
|
+
if cancel_event is not None and cancel_event.is_set():
|
|
135
|
+
break
|
|
136
|
+
time.sleep(min(remaining, self.max_sleep_chunk_s if self.max_sleep_chunk_s > 0 else remaining))
|
|
125
137
|
self.update_last_time()
|
|
126
138
|
|
|
127
139
|
def shall_execute(self):
|
|
@@ -275,6 +287,7 @@ class DBMAsyncJob(object):
|
|
|
275
287
|
min_collection_interval=15,
|
|
276
288
|
dbms="TODO",
|
|
277
289
|
rate_limit=1,
|
|
290
|
+
max_sleep_chunk_s=1,
|
|
278
291
|
run_sync=False,
|
|
279
292
|
enabled=True,
|
|
280
293
|
expected_db_exceptions=(),
|
|
@@ -295,7 +308,8 @@ class DBMAsyncJob(object):
|
|
|
295
308
|
self._last_check_run = 0
|
|
296
309
|
self._shutdown_callback = shutdown_callback
|
|
297
310
|
self._dbms = dbms
|
|
298
|
-
self._rate_limiter = ConstantRateLimiter(rate_limit)
|
|
311
|
+
self._rate_limiter = ConstantRateLimiter(rate_limit, max_sleep_chunk_s=max_sleep_chunk_s)
|
|
312
|
+
self._max_sleep_chunk_s = max_sleep_chunk_s
|
|
299
313
|
self._run_sync = run_sync
|
|
300
314
|
self._enabled = enabled
|
|
301
315
|
self._expected_db_exceptions = expected_db_exceptions
|
|
@@ -334,7 +348,7 @@ class DBMAsyncJob(object):
|
|
|
334
348
|
try:
|
|
335
349
|
self._log.info("[%s] Starting job loop", self._job_tags_str)
|
|
336
350
|
while True:
|
|
337
|
-
if self._cancel_event.
|
|
351
|
+
if self._cancel_event.is_set():
|
|
338
352
|
self._log.info("[%s] Job loop cancelled", self._job_tags_str)
|
|
339
353
|
self._check.count("dd.{}.async_job.cancel".format(self._dbms), 1, tags=self._job_tags, raw=True)
|
|
340
354
|
break
|
|
@@ -353,7 +367,7 @@ class DBMAsyncJob(object):
|
|
|
353
367
|
else:
|
|
354
368
|
self._run_job_rate_limited()
|
|
355
369
|
except Exception as e:
|
|
356
|
-
if self._cancel_event.
|
|
370
|
+
if self._cancel_event.is_set():
|
|
357
371
|
# canceling can cause exceptions if the connection is closed the middle of the check run
|
|
358
372
|
# in this case we still want to report it as a cancellation instead of a crash
|
|
359
373
|
self._log.debug("[%s] Job loop error after cancel: %s", self._job_tags_str, e)
|
|
@@ -387,7 +401,7 @@ class DBMAsyncJob(object):
|
|
|
387
401
|
|
|
388
402
|
def _set_rate_limit(self, rate_limit):
|
|
389
403
|
if self._rate_limiter.rate_limit_s != rate_limit:
|
|
390
|
-
self._rate_limiter = ConstantRateLimiter(rate_limit)
|
|
404
|
+
self._rate_limiter = ConstantRateLimiter(rate_limit, max_sleep_chunk_s=self._max_sleep_chunk_s)
|
|
391
405
|
|
|
392
406
|
def _run_sync_job_rate_limited(self):
|
|
393
407
|
if self._rate_limiter.shall_execute():
|
|
@@ -400,8 +414,8 @@ class DBMAsyncJob(object):
|
|
|
400
414
|
except:
|
|
401
415
|
raise
|
|
402
416
|
finally:
|
|
403
|
-
if not self._cancel_event.
|
|
404
|
-
self._rate_limiter.update_last_time_and_sleep()
|
|
417
|
+
if not self._cancel_event.is_set():
|
|
418
|
+
self._rate_limiter.update_last_time_and_sleep(cancel_event=self._cancel_event)
|
|
405
419
|
else:
|
|
406
420
|
self._rate_limiter.update_last_time()
|
|
407
421
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: datadog-checks-base
|
|
3
|
-
Version: 37.
|
|
3
|
+
Version: 37.17.1
|
|
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>
|
|
@@ -44,7 +44,7 @@ Requires-Dist: requests-kerberos==0.15.0; extra == 'http'
|
|
|
44
44
|
Requires-Dist: requests-ntlm==1.3.0; extra == 'http'
|
|
45
45
|
Requires-Dist: requests-oauthlib==2.0.0; extra == 'http'
|
|
46
46
|
Provides-Extra: json
|
|
47
|
-
Requires-Dist: orjson==3.
|
|
47
|
+
Requires-Dist: orjson==3.11.1; extra == 'json'
|
|
48
48
|
Provides-Extra: kube
|
|
49
49
|
Requires-Dist: kubernetes==33.1.0; extra == 'kube'
|
|
50
50
|
Requires-Dist: requests-oauthlib==2.0.0; extra == 'kube'
|
|
@@ -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=
|
|
6
|
+
datadog_checks/base/__about__.py,sha256=ndrpWsGPmh3Ena0lvyhHt05KvneXC4n0Mc4AF8AClU0,139
|
|
7
7
|
datadog_checks/base/__init__.py,sha256=yWegSLE-TZWIGSvAiJj9PSrUxzlOo_UVJLt2zORZ8Ek,363
|
|
8
8
|
datadog_checks/base/__init__.pyi,sha256=eH8XhrtvnD6uE6FWfEyCmKwOaaLJxNolS08D6IRHZuU,995
|
|
9
9
|
datadog_checks/base/agent.py,sha256=nX9x_BYYizRKGNYfXq5z7S0FZ9xcX_wd2tuxpGe3_8k,350
|
|
@@ -15,7 +15,7 @@ datadog_checks/base/types.py,sha256=anajZS0W0TsxUHJQw-JHOP2NSeuC9BisXSy9mAStlxQ,
|
|
|
15
15
|
datadog_checks/base/checks/__init__.py,sha256=q7V6v-FwQWkQC1QWaVzKaPjZMaxPJHJcLd71C0uM7bA,211
|
|
16
16
|
datadog_checks/base/checks/__init__.pyi,sha256=LASfm-daLNQIYe6-w0NPqBw4cl83nYIX5_B-VhV6ARo,262
|
|
17
17
|
datadog_checks/base/checks/_config_ast.py,sha256=v1rAhwORF80b3kfZKhf6zXZ7S5D3A2QPUK4tSo8eo-Y,3268
|
|
18
|
-
datadog_checks/base/checks/base.py,sha256=
|
|
18
|
+
datadog_checks/base/checks/base.py,sha256=kcnZ8ySfleMGw5y6iLEvhLaF42WGCMes0LfylLo_v50,59857
|
|
19
19
|
datadog_checks/base/checks/network.py,sha256=UkgqkVHaoX7Hqi0WKEx-TvaFiF6-37VyF9A3m2aSaJM,1966
|
|
20
20
|
datadog_checks/base/checks/kube_leader/__init__.py,sha256=q7V6v-FwQWkQC1QWaVzKaPjZMaxPJHJcLd71C0uM7bA,211
|
|
21
21
|
datadog_checks/base/checks/kube_leader/__init__.pyi,sha256=UGDywoRwmCIz3Zii1uHsp7jiFGWRdn5fFMZZxgGGlQs,398
|
|
@@ -145,7 +145,7 @@ datadog_checks/base/utils/db/statement_metrics.py,sha256=U7EtERkmFzfCtfyd3094fBa
|
|
|
145
145
|
datadog_checks/base/utils/db/timed_cache.py,sha256=a9Ks5KKUvExB6GOATXTSCLamVtLD919Dn6HpweGKtFw,2114
|
|
146
146
|
datadog_checks/base/utils/db/transform.py,sha256=H3JN8_MF0Pk0HaXvIZeX1A8iQrP8KBgS741MPeBiWDo,23969
|
|
147
147
|
datadog_checks/base/utils/db/types.py,sha256=OLX2Oq58JQPFBD4oqUpCLkAP7ovRGN_i1vFk1E0N8Lg,267
|
|
148
|
-
datadog_checks/base/utils/db/utils.py,sha256=
|
|
148
|
+
datadog_checks/base/utils/db/utils.py,sha256=6rYXjV9I7Hr_PhgkvhbTiZ0QCmyHWoZYETeUD4Qe3Js,22441
|
|
149
149
|
datadog_checks/base/utils/discovery/__init__.py,sha256=vPCOdsThBcBjFJRPhDm6IsZGOwk8HlvciwCe_l8dKLk,211
|
|
150
150
|
datadog_checks/base/utils/discovery/__init__.pyi,sha256=ScVLU1Njj9ekZmewltb0cULI6BylssVHfn4CcPNeyr8,173
|
|
151
151
|
datadog_checks/base/utils/discovery/cache.py,sha256=f9L3A7YZpZ-mpZpFIwjsa5ab9cZMGkqdetdr9EpalbI,887
|
|
@@ -219,6 +219,6 @@ datadog_checks/utils/tracing.py,sha256=HQbQakKM-Lw75MDkItaYJYipS6YO24Z_ymDVxDsx5
|
|
|
219
219
|
datadog_checks/utils/prometheus/__init__.py,sha256=8WwXnM9g1sfS5267QYCJX_hd8MZl5kRgBgQ_SzdNdXs,161
|
|
220
220
|
datadog_checks/utils/prometheus/functions.py,sha256=4vWsTGLgujHwdYZo0tlAQkqDPHofqUJM3k9eItJqERQ,197
|
|
221
221
|
datadog_checks/utils/prometheus/metrics_pb2.py,sha256=xg3UdUHe4TjeR4s13LUKZ2U1WVSt6U6zjsVRG6lX6dc,173
|
|
222
|
-
datadog_checks_base-37.
|
|
223
|
-
datadog_checks_base-37.
|
|
224
|
-
datadog_checks_base-37.
|
|
222
|
+
datadog_checks_base-37.17.1.dist-info/METADATA,sha256=WRi4JwneDzJKyzrSHfyAjQF-2o4kg81OCmWns4RYlmI,4244
|
|
223
|
+
datadog_checks_base-37.17.1.dist-info/WHEEL,sha256=tkmg4JIqwd9H8mL30xA7crRmoStyCtGp0VWshokd1Jc,105
|
|
224
|
+
datadog_checks_base-37.17.1.dist-info/RECORD,,
|
|
File without changes
|