83 lines
3.4 KiB
Python
83 lines
3.4 KiB
Python
import argparse
|
|
import yaml # type: ignore
|
|
from typing import Any, Dict, List
|
|
|
|
from bemani.backend.popn import PopnMusicFactory
|
|
from bemani.backend.jubeat import JubeatFactory
|
|
from bemani.backend.iidx import IIDXFactory
|
|
from bemani.backend.bishi import BishiBashiFactory
|
|
from bemani.backend.ddr import DDRFactory
|
|
from bemani.backend.sdvx import SoundVoltexFactory
|
|
from bemani.backend.reflec import ReflecBeatFactory
|
|
from bemani.backend.museca import MusecaFactory
|
|
from bemani.frontend.popn import PopnMusicCache
|
|
from bemani.frontend.iidx import IIDXCache
|
|
from bemani.frontend.jubeat import JubeatCache
|
|
from bemani.frontend.bishi import BishiBashiCache
|
|
from bemani.frontend.ddr import DDRCache
|
|
from bemani.frontend.sdvx import SoundVoltexCache
|
|
from bemani.frontend.reflec import ReflecBeatCache
|
|
from bemani.frontend.museca import MusecaCache
|
|
from bemani.common import GameConstants, Time
|
|
from bemani.data import Data
|
|
|
|
|
|
def run_scheduled_work(config: Dict[str, Any]) -> None:
|
|
data = Data(config)
|
|
|
|
# Only run scheduled work for enabled components
|
|
enabled_factories: List[Any] = []
|
|
enabled_caches: List[Any] = []
|
|
if config.get('support', {}).get(GameConstants.IIDX, False):
|
|
enabled_factories.append(IIDXFactory)
|
|
enabled_caches.append(IIDXCache)
|
|
if config.get('support', {}).get(GameConstants.POPN_MUSIC, False):
|
|
enabled_factories.append(PopnMusicFactory)
|
|
enabled_caches.append(PopnMusicCache)
|
|
if config.get('support', {}).get(GameConstants.JUBEAT, False):
|
|
enabled_factories.append(JubeatFactory)
|
|
enabled_caches.append(JubeatCache)
|
|
if config.get('support', {}).get(GameConstants.BISHI_BASHI, False):
|
|
enabled_factories.append(BishiBashiFactory)
|
|
enabled_caches.append(BishiBashiCache)
|
|
if config.get('support', {}).get(GameConstants.DDR, False):
|
|
enabled_factories.append(DDRFactory)
|
|
enabled_caches.append(DDRCache)
|
|
if config.get('support', {}).get(GameConstants.SDVX, False):
|
|
enabled_factories.append(SoundVoltexFactory)
|
|
enabled_caches.append(SoundVoltexCache)
|
|
if config.get('support', {}).get(GameConstants.REFLEC_BEAT, False):
|
|
enabled_factories.append(ReflecBeatFactory)
|
|
enabled_caches.append(ReflecBeatCache)
|
|
if config.get('support', {}).get(GameConstants.MUSECA, False):
|
|
enabled_factories.append(MusecaFactory)
|
|
enabled_caches.append(MusecaCache)
|
|
|
|
# First, run any backend scheduled work
|
|
for factory in enabled_factories:
|
|
factory.run_scheduled_work(data, config) # type: ignore
|
|
|
|
# Now, warm the caches for the frontend
|
|
for cache in enabled_caches:
|
|
cache.preload(data, config) # type: ignore
|
|
|
|
# Now, possibly delete old log entries
|
|
keep_duration = config.get('event_log_duration', 0)
|
|
if keep_duration > 0:
|
|
# Calculate timestamp of events we should delete
|
|
oldest_event = Time.now() - keep_duration
|
|
data.local.network.delete_events(oldest_event)
|
|
|
|
|
|
if __name__ == '__main__':
|
|
parser = argparse.ArgumentParser(description="A scheduler for work that needs to be done periodically.")
|
|
parser.add_argument("-c", "--config", help="Core configuration. Defaults to server.yaml", type=str, default="server.yaml")
|
|
args = parser.parse_args()
|
|
|
|
# Set up global configuration
|
|
config = yaml.safe_load(open(args.config)) # type: ignore
|
|
config['database']['engine'] = Data.create_engine(config)
|
|
|
|
# Run out of band work
|
|
run_scheduled_work(config)
|