"""Initial data seed: schedules + servers""" from datetime import datetime from croniter import croniter from sqlalchemy.orm import Session from app.models.schedule import Schedule from app.models.server import Server INITIAL_SCHEDULES = [ {"id": 1, "name": "租戶檢查", "cron_timer": "0 */3 * * * *"}, {"id": 2, "name": "帳號檢查", "cron_timer": "0 */3 * * * *"}, {"id": 3, "name": "系統狀態", "cron_timer": "0 0 8 * * *"}, ] INITIAL_SERVERS = [ {"id": 1, "name": "home", "ip_address": "10.1.0.254", "sort_order": 1, "description": "核心服務主機 (Ubuntu 24.04 / Dell Inspiron 3910)"}, {"id": 2, "name": "小的NAS", "ip_address": "10.1.0.20", "sort_order": 2, "description": "資料庫主機 (Synology DS716+II / DSM 6.2.4)"}, {"id": 3, "name": "大的NAS", "ip_address": "10.1.0.30", "sort_order": 3, "description": "儲存主機 (Synology DS920+ / DSM 7.3.2)"}, {"id": 4, "name": "Porsche_KLI", "ip_address": "10.1.0.245", "sort_order": 4, "description": "開發環境 (ASUS MINIPC PN62 / Windows 11)"}, ] def _calc_next_run(cron_timer: str) -> datetime: # croniter: six-field cron (sec min hour day month weekday) cron = croniter(cron_timer, datetime.utcnow()) return cron.get_next(datetime) def seed_initial_data(db: Session) -> None: """Insert initial schedules and servers if not present.""" for s in INITIAL_SCHEDULES: if not db.get(Schedule, s["id"]): db.add(Schedule( id=s["id"], name=s["name"], cron_timer=s["cron_timer"], status="Waiting", next_run_at=_calc_next_run(s["cron_timer"]), )) for sv in INITIAL_SERVERS: if not db.get(Server, sv["id"]): db.add(Server(**sv)) db.commit()