import datetime from redis import StrictRedis import sentry_sdk from smelog.factory import BoundLogger from apollo_clear_notifications.config import Config from apollo_clear_notifications.main_db import delete_push_messages from apollo_clear_notifications.redis_db import get_redis_lock def handler(logger: BoundLogger, redis_client: StrictRedis, config: Config) -> dict: """Lambda job. Args: logger: Logger instance. redis_client: Client for Redis. config: Config object. Returns: JSON serializable response """ lock = None try: # set lock for 15 m to avoid possible race condition between lambdas lock = get_redis_lock(redis_client) if not lock.acquire(blocking=False): logger.info('Locked') return {} min_stored_date = (datetime.date.today() - datetime.timedelta(days=config.STORED_PERIOD)) min_stored_datetime = datetime.datetime( year=min_stored_date.year, month=min_stored_date.month, day=min_stored_date.day) delete_push_messages(min_stored_datetime) except Exception as ex: sentry_sdk.capture_exception(ex) raise finally: if config.REDIS_LOCK_ENABLED and lock: lock.release()