From 95af771596ceec6ef33e48cca281b90e7c6d4964 Mon Sep 17 00:00:00 2001 From: Hermes Date: Wed, 2 Sep 2026 11:42:58 +0200 Subject: [PATCH] =?UTF-8?q?perf(autocall):=20=D1=82=D0=B0=D0=B9=D0=BC?= =?UTF-8?q?=D0=B5=D1=80=2060=D1=81=20+=20fast-path=20(=D0=BC=D0=BE=D0=BB?= =?UTF-8?q?=D1=87=D0=B0,=20=D0=B5=D1=81=D0=BB=D0=B8=20=D0=BE=D1=87=D0=B5?= =?UTF-8?q?=D1=80=D0=B5=D0=B4=D1=8C=20=D0=BF=D1=83=D1=81=D1=82=D0=B0=20?= =?UTF-8?q?=D0=B8=20=D0=BA=D0=B0=D0=BC=D0=BF=D0=B0=D0=BD=D0=B8=D1=8F=20?= =?UTF-8?q?=D0=B2=D1=8B=D0=BA=D0=BB=D1=8E=D1=87=D0=B5=D0=BD=D0=B0)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scripts/autocall-scheduler.timer | 10 ++++++++++ scripts/autocall_scheduler.py | 12 ++++++++++++ 2 files changed, 22 insertions(+) create mode 100644 scripts/autocall-scheduler.timer 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):