from datetime import datetime import sentry_sdk from sentry_sdk.utils import BadDsn import config import constants.common as consts import main_db from logger import logger from redis_db import get_redis_lock from update import update_ranks, update_stats try: sentry_sdk.init(dsn=config.SENTRY_DSN, environment=config.ENVIRONMENT) except BadDsn: pass def process_history_data(): """Aggregate stats data for missing playlists and update. """ if config.UPDATE_AGGREGATED_DATA and consts.Table.STATS in config.UPDATE_TABLE_LIST: playlist_date_map, max_date, max_ts = update_stats() main_db.set_playlists_dates(playlist_date_map) main_db.set_date_value(consts.ApolloKey.HH_LATEST, max_date) main_db.set_value(consts.ApolloKey.HH_LATEST_WITH_TIME, max_ts.isoformat()) if config.UPDATE_PLAYLISTS_RANKS: update_ranks() main_db.set_value(consts.ApolloKey.HH_JOB_LAST_RUN, datetime.utcnow().isoformat()) def main(): lock = None try: if config.Redis.LOCK_ENABLED: lock = get_redis_lock() if not lock.acquire(blocking=False): logger.info("Can not get lock") return process_history_data() except Exception as ex: sentry_sdk.capture_exception(ex) raise finally: if config.Redis.LOCK_ENABLED and lock: lock.release() if __name__ == "__main__": main()