1
0
mirror of synced 2024-11-24 14:30:11 +01:00
bemaniutils/bemani/utils/scheduler.py

83 lines
3.4 KiB
Python
Raw Normal View History

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)