Пример #1
0
 def __init__(self):
     self.rcon = Rcon(SERVER_INFO)
     self.rcon_2 = RecordedRcon(SERVER_INFO)
     self.red = get_redis_client()
     self.duplicate_guard_key = "unique_logs"
     self.log_history = self.get_log_history_list()
     logger.info("Registered hooks: %s", HOOKS)
Пример #2
0
    def set_welcome_message(self, msg):
        red = get_redis_client()
        from rcon.broadcast import format_message

        try:
            formatted = format_message(self, msg)
        except Exception:
            logger.exception("Unable to format message")
            formatted = msg

        return super().set_welcome_message(formatted)
Пример #3
0
def live_stats_loop():
    live = LiveStats()
    config = get_config()
    last_loop_session = datetime.datetime(year=2020, month=1, day=1)
    last_loop_game = datetime.datetime(year=2020, month=1, day=1)
    live_session_sleep_seconds = config.get("LIVE_STATS",
                                            {}).get("refresh_stats_seconds",
                                                    30)
    live_game_sleep_seconds = config.get("LIVE_STATS", {}).get(
        "refresh_current_game_stats_seconds", 5)
    logger.debug(
        "live_session_sleep_seconds: {}".format(live_session_sleep_seconds))
    logger.debug("live_game_sleep_seconds: {}".format(live_game_sleep_seconds))
    red = get_redis_client()

    while True:
        # Keep track of session and game timers seperately
        last_loop_session_seconds = (datetime.datetime.now() -
                                     last_loop_session).total_seconds()
        last_loop_game_seconds = (datetime.datetime.now() -
                                  last_loop_game).total_seconds()

        if last_loop_session_seconds >= live_session_sleep_seconds:
            last_loop_session = datetime.datetime.now()
            try:
                live.set_live_stats()
                logger.debug("Refreshed set_live_stats")
            except Exception:
                logger.exception("Error while producing stats")

        if last_loop_game_seconds >= live_game_sleep_seconds:
            last_loop_game = datetime.datetime.now()
            try:
                snapshot_ts = datetime.datetime.now().timestamp()
                stats = current_game_stats()
                logger.debug("Refreshed current_game_stats")
                red.set(
                    "LIVE_GAME_STATS",
                    pickle.dumps(
                        dict(snapshot_timestamp=snapshot_ts,
                             stats=list(stats.values()),
                             refresh_interval_sec=live_game_sleep_seconds)),
                )
            except Exception:
                logger.exception("Failed to compute live game stats")

        time.sleep(0.1)
Пример #4
0
def get_job_results(job_key):
    job = Job.fetch(job_key, connection=get_redis_client())
    if not job:
        return {
            "status": "Job not found or expired",
            "result": None,
            "started_at": None,
            "ended_at": None,
            "func_name": None
        }
    return {
        "status": job.get_status(),
        # avoid showing previous' job result if they use the same id
        "result": job.result if job.get_status() == "finished" else None,
        "started_at": job.started_at,
        "ended_at": job.ended_at,
        "func_name": job.func_name,
        "check_timestamp": datetime.datetime.now().timestamp(),
    }
Пример #5
0
    def set_broadcast(self, msg, save=True):
        from rcon.broadcast import format_message
        prev = None

        try:
            red = get_redis_client()
            if save:
                prev = red.getset("BROADCAST_MESSAGE", msg)
            else:
                prev = red.get("BROADCAST_MESSAGE")
            red.expire("BROADCAST_MESSAGE", 60 * 30)
        except Exception:
            logger.exception("Can't save message in redis: %s", msg)

        try:
            formatted = format_message(self, msg)
        except Exception:
            logger.exception("Unable to format message")
            formatted = msg

        super().set_broadcast(formatted)
        return prev.decode() if prev else ""
Пример #6
0
 def get_broadcast_message(self):
     red = get_redis_client()
     msg = red.get("BROADCAST_MESSAGE")
     if isinstance(msg, (str, bytes)):
         return msg.decode()
     return msg
Пример #7
0
 def get_welcome_message(self):
     red = get_redis_client()
     msg = red.get("WELCOME_MESSAGE")
     if msg:
         return msg.decode()
     return msg
Пример #8
0
 def __init__(self) -> None:
     self.red = get_redis_client()
Пример #9
0
 def __init__(self):
     self.rcon = RecordedRcon(SERVER_INFO)
     self.voted_yes_regex = re.compile(".*PV_Favour.*")
     self.voted_no_regex = re.compile(".*PV_Against.*")
     self.red = get_redis_client()
Пример #10
0
def get_cached_live_game_stats():
    red = get_redis_client()
    stats = red.get("LIVE_GAME_STATS")
    if stats:
        stats = pickle.loads(stats)
    return stats
Пример #11
0
 def set_welcome_message(self, msg):
     red = get_redis_client()
     from rcon.broadcast import format_message
     formatted = format_message(self, msg)
     return super().set_welcome_message(formatted)
Пример #12
0
def get_queue(redis_client=None):
    red = get_redis_client()
    return Queue(connection=red)