Skip to content

Commit cb9f6ad

Browse files
KingPinKingPin
authored andcommitted
feat: introduce configurable sleep jitter to main loop and refactor DNS/ping checks with tenacity for robust retries.
1 parent 4d93bb8 commit cb9f6ad

4 files changed

Lines changed: 287 additions & 193 deletions

File tree

pingpanda_core/app.py

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import logging
66
import os
77
import time
8+
import random
89
import asyncio
910
from datetime import datetime
1011
from importlib import import_module
@@ -150,7 +151,8 @@ def get_list(key: str, default: str = "") -> List[str]:
150151

151152
self.interval = get_int("interval", 15)
152153
self.verbose = get_bool("verbose", False)
153-
self.retry_count = get_int("retry_count", 3)
154+
self.retry_count = int(self.config.get("RETRY_COUNT", 3))
155+
self.jitter_seconds = float(self.config.get("JITTER_SECONDS", 5.0))
154156
self.success_http_codes = [
155157
int(code.strip())
156158
for code in str(self.config.get("success_http_codes", "200")).split(",")
@@ -483,9 +485,18 @@ async def run(self) -> None:
483485

484486
elapsed = time.time() - loop_start
485487
remaining = max(0.0, self.interval - elapsed)
486-
await asyncio.sleep(remaining)
488+
489+
# Add jitter to prevent thundering herd
490+
jitter = random.uniform(0, self.jitter_seconds)
491+
sleep_time = remaining + jitter
492+
493+
if self.verbose:
494+
self.logger.debug("Sleeping for %.2fs (interval: %ss, jitter: %.2fs)", sleep_time, self.interval, jitter)
495+
496+
await asyncio.sleep(sleep_time)
487497
except asyncio.CancelledError:
488-
self.logger.info("Shutting down...")
498+
self.logger.info("Main loop cancelled")
499+
raise
489500
except KeyboardInterrupt:
490501
self.logger.info("Shutting down gracefully...")
491502
finally:

0 commit comments

Comments
 (0)