datadog-checks-base 37.17.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.
@@ -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.17.0"
4
+ __version__ = "37.17.1"
@@ -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
- elapsed_s = time.time() - self.last_event
123
- sleep_amount = max(self.period_s - elapsed_s, 0)
124
- time.sleep(sleep_amount)
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
@@ -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():
@@ -401,7 +415,7 @@ class DBMAsyncJob(object):
401
415
  raise
402
416
  finally:
403
417
  if not self._cancel_event.is_set():
404
- self._rate_limiter.update_last_time_and_sleep()
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.17.0
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>
@@ -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=OGNRWmqbgVQlsRuznKvzC-6tPPWiFqHVOpBqXz6TrCI,139
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
@@ -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=f1unpvrx-iFlcD-xUAnrlq5hk-udSw0GyQKYHaPLxFM,21683
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.17.0.dist-info/METADATA,sha256=UaY1u0ma7GdxBAIQLtFKQPwNntPVPzLDDi8nYN434_k,4244
223
- datadog_checks_base-37.17.0.dist-info/WHEEL,sha256=tkmg4JIqwd9H8mL30xA7crRmoStyCtGp0VWshokd1Jc,105
224
- datadog_checks_base-37.17.0.dist-info/RECORD,,
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,,