ForcePilot/backend/package/yuxi/channel/extensions/zoomchat/dedupe.py

35 lines
987 B
Python
Raw Normal View History

from collections import OrderedDict
import time
import logging
logger = logging.getLogger(__name__)
DEDUPE_TTL_SECONDS = 3600
DEDUPE_MAX_ENTRIES = 1000
class ZoomMessageDeduplicator:
def __init__(self, ttl: int = DEDUPE_TTL_SECONDS, max_entries: int = DEDUPE_MAX_ENTRIES):
self._ttl = ttl
self._max = max_entries
self._seen: OrderedDict[str, float] = OrderedDict()
def is_duplicate(self, event_ts: int, message_id: str) -> bool:
key = f"{event_ts}:{message_id}"
self._cleanup()
if key in self._seen:
logger.debug("Zoom webhook duplicate event: %s", key)
return True
self._seen[key] = time.time()
while len(self._seen) > self._max:
self._seen.popitem(last=False)
return False
def _cleanup(self):
now = time.time()
expired = [k for k, v in self._seen.items() if now - v > self._ttl]
for k in expired:
self._seen.pop(k, None)