Task #6125
openTask #6116: EPIC: Speed up the stats updater daemon (scripts/workflow/update_stats.sh)
Run one round in a single JVM instead of 10 separate launches
90%
Description
Problem¶
scripts/workflow/update_stats.sh shells out to 10 wrapper scripts per round, each of which is a fresh java -jar launch. Every launch pays for JVM start, Micronaut context creation, Flyway migration check and Hikari pool setup, and throws away all JIT warm-up from the previous step. The wrappers themselves also re-read VERSION via $(cat VERSION) on each call.
Proposed change¶
Add a run-stats-round command to Application.kt that executes the same sequence in-process:
sync-dialogs-with-users → generate-user-partner-connections → download-companies-from-iiko → download-employees-from-iiko → distribute-employees-companies-partners → obsolete-companies → download-trading-point-inspections → iiko-partner-metrics-sync → iiko-stats-data-sync → iiko-users-metrics-sync
- A failing step logs and the round continues to the next step (matching today's behaviour, where each script exits independently).
- Combined with the session-reuse task, one IIKO session then covers the whole round rather than being re-established ten times.
- The daemon loop shrinks to a single call plus its notification.
Keep the individual commands working standalone — they are used for manual repair runs.
Acceptance¶
-
run-stats-roundperforms the full sequence in one process. - Individual commands still run standalone.
-
update_stats.shupdated to call it.
Updated by Redmine Admin about 8 hours ago
- Status changed from New to Feedback
- % Done changed from 0 to 90
Реализовано, ветка speedup/stats-daemon, коммит 50a6ebef. Оставляю в Feedback: update_stats.sh намеренно НЕ переключён на новую команду — это единственное изменение, которое здесь нечем проверить.
Добавлена команда run-stats-round (com.onerm.cli.rounds.StatsRoundCommand), диспатч в Application.kt. Прогоняет все десять шагов в том же порядке внутри одного процесса, доставая каждую команду через applicationContext.getBean(...) (команды picocli — бины Micronaut, $…Command$Definition генерируются ksp). Каждый шаг обёрнут в try/catch, падение одного не прерывает оборот — как было, когда каждый шаг был отдельным процессом. Логируется время каждого шага.
Отдельные команды продолжают работать сами по себе.
Скрипты:
-
update_stats.shпереписан (циклом по списку шагов вместо десяти скопированных блоков), но по-прежнему запускает те же десятьjava -jar. Поведение прежнее; - рядом положен
update_stats_single_round.sh— тот же оборот черезrun-stats-round.
Что нужно от того, у кого есть сервер: прогнать update_stats_single_round.sh один раз и убедиться, что все десять шагов отрабатывают. Если да — переключить демона на него и закрыть задачу. Я развёл их на два файла именно чтобы это переключение было осознанным решением человека, а не побочным эффектом мержа.