Project rename and restructure
This commit is contained in:
47
hopper/watchdog.py
Normal file
47
hopper/watchdog.py
Normal file
@ -0,0 +1,47 @@
|
||||
import datetime
|
||||
import logging
|
||||
import time
|
||||
from threading import Thread
|
||||
|
||||
from hopper.models.player import PlayerList
|
||||
from settings import settings
|
||||
|
||||
|
||||
class InactivityWatchdog(Thread):
|
||||
def __init__(self, players: PlayerList, *args, **kwargs) -> None:
|
||||
self.players = players
|
||||
self.stopped = False
|
||||
super().__init__(*args, **kwargs)
|
||||
|
||||
def run(self) -> None:
|
||||
logging.info("Starting inactivity watchdog")
|
||||
while not self.stopped:
|
||||
self.cleanup_players()
|
||||
time.sleep(settings.inacivity_watchdog.TICK_INTERVAL)
|
||||
|
||||
def cleanup_players(self) -> None:
|
||||
now = datetime.datetime.now()
|
||||
inactivity_threshold = now - datetime.timedelta(
|
||||
seconds=settings.inacivity_watchdog.INACIVITY_TIMEOUT
|
||||
)
|
||||
kick_threshold = now - datetime.timedelta(
|
||||
seconds=settings.inacivity_watchdog.KICK_TIMEOUT
|
||||
)
|
||||
|
||||
for player in self.players:
|
||||
if player.active and player.last_seen < inactivity_threshold:
|
||||
player.active = False
|
||||
logging.info(f"Player {player} set as inactive")
|
||||
|
||||
# safe remove from list
|
||||
n = 0
|
||||
while n < len(self.players):
|
||||
player = self.players[n]
|
||||
if player.last_seen < kick_threshold:
|
||||
self.players.pop(n)
|
||||
logging.info(f"Player {player} kicked out")
|
||||
else:
|
||||
n += 1
|
||||
|
||||
def stop(self) -> None:
|
||||
self.stopped = True
|
||||
Reference in New Issue
Block a user