diff --git a/scripts/autocall-scheduler.timer b/scripts/autocall-scheduler.timer new file mode 100644 index 0000000..5cca3c5 --- /dev/null +++ b/scripts/autocall-scheduler.timer @@ -0,0 +1,10 @@ +[Unit] +Description=SuperSam Autocall Scheduler Timer + +[Timer] +OnBootSec=60 +OnUnitActiveSec=60 +AccuracySec=5 + +[Install] +WantedBy=timers.target diff --git a/scripts/autocall_scheduler.py b/scripts/autocall_scheduler.py index 01b678c..157a5b6 100644 --- a/scripts/autocall_scheduler.py +++ b/scripts/autocall_scheduler.py @@ -270,11 +270,23 @@ def process_queue(conn, settings): return pushed +def has_pending_items(conn): + """Дёшево: есть ли непрочитанные ручные запросы. Для fast-path, чтобы не шуметь в логе.""" + with conn.cursor() as cur: + cur.execute("SELECT 1 FROM autocall_queue WHERE processed_at IS NULL LIMIT 1") + return cur.fetchone() is not None + + def main(): conn = get_db_conn() try: settings = load_settings(conn) + # Fast-path: если кампания выключена и очередь пуста — выходим молча. + # Таймер стучит каждую минуту; при 1440 тиках/сутки не хотим шум в логе. + if not settings.get("enabled", False) and not has_pending_items(conn): + return + # 0) Ручные звонки «Позвонить сейчас» — даже если кампания выключена, # но в рабочее время и enabled_or_queue. Ручной запрос — явный сигнал. if is_work_time(settings):