Project

General

Profile

Actions

Task #6125

open

Task #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

Added by Redmine Admin about 8 hours ago. Updated about 8 hours ago.

Status:
Feedback
Priority:
Normal
Assignee:
-
Start date:
08/26/2026
Due date:
% Done:

90%

Estimated time:

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-usersgenerate-user-partner-connectionsdownload-companies-from-iikodownload-employees-from-iikodistribute-employees-companies-partnersobsolete-companiesdownload-trading-point-inspectionsiiko-partner-metrics-synciiko-stats-data-synciiko-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-round performs the full sequence in one process.
  • Individual commands still run standalone.
  • update_stats.sh updated to call it.
Actions #1

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 один раз и убедиться, что все десять шагов отрабатывают. Если да — переключить демона на него и закрыть задачу. Я развёл их на два файла именно чтобы это переключение было осознанным решением человека, а не побочным эффектом мержа.

Actions

Also available in: Atom PDF