kpi-dashboard/updater
Iliyas ccf82b026f feat: add Метрики МП page + app-metrics updater
- new page app_stats/index.html (login-gated, same style/nav)
- app_stats/app_metrics.json data (year-over-year comparison, NEW badges)
- updater/update_app_metrics.py: adaptive SQL (Jan 1 -> yesterday vs prev year)
- run both updaters from run_update.bat; refactor shared git push
2026-06-16 17:34:19 +05:00
..
config.example.yaml chore: add Impala->CSV daily updater 2026-06-16 16:59:32 +05:00
README.md chore: add Impala->CSV daily updater 2026-06-16 16:59:32 +05:00
requirements.txt chore: add Impala->CSV daily updater 2026-06-16 16:59:32 +05:00
run_update.bat feat: add Метрики МП page + app-metrics updater 2026-06-16 17:34:19 +05:00
update_app_metrics.py feat: add Метрики МП page + app-metrics updater 2026-06-16 17:34:19 +05:00
update_kpi.py feat: add Метрики МП page + app-metrics updater 2026-06-16 17:34:19 +05:00

KPI Updater — ежедневное обновление CSV из Impala

Скрипт запускается на рабочем компьютере с доступом к корпоративной сети (VPN): выгружает свежие KPI из Impala, перезаписывает ../drb_iliyas_kpi_2026.csv и пушит его в ветку pages. Сайт (Gitea Pages) при открытии делает fetch('drb_iliyas_kpi_2026.csv'), поэтому из внешней сети видны свежие данные.

updater/
├─ update_kpi.py        # основной скрипт
├─ requirements.txt     # зависимости (impyla и пр.)
├─ config.example.yaml  # шаблон конфига -> скопировать в config.yaml
├─ run_update.bat       # обёртка для Планировщика задач
└─ update.log           # лог (создаётся при запуске, в git не коммитится)

1. Установка (один раз)

⚠️ Версия Python. impyla/thrift/thrift-sasl стабильно ставятся на Python 3.103.12. На системном Python 3.14 колёс может не быть и сборка упадёт. Установите отдельный Python 3.12 и создавайте venv именно им.

В папке updater/:

REM создать виртуальное окружение (укажите путь к python 3.12, если нужно)
python -m venv venv
venv\Scripts\activate

pip install -r requirements.txt

Создать конфиг и заполнить логин/пароль Impala + git-токен:

copy config.example.yaml config.yaml
notepad config.yaml

config.yaml уже в .gitignore — он не попадёт в git.


2. Аутентификация для пуша

Пуш по расписанию должен идти без ручного ввода пароля. Два варианта:

A. Токен (рекомендуется). В Gitea: Settings → Applications → Generate New Token, право write:repository. Вставьте его в config.yamlgit.token. Скрипт использует токен только в команде пуша, в git-конфиг он не сохраняется, а в логах маскируется.

B. Git Credential Manager. Оставьте git.token пустым и один раз выполните вручную git push origin pages, сохранив логин/пароль в системном хранилище Windows.


3. Проверка вручную

Подключитесь к VPN, затем:

cd /d "путь\к\kpi-dashboard\updater"
run_update.bat

Ожидаемо: в update.log появятся строки подключения, число строк, и при изменении данных — коммит и Пуш выполнен успешно. Если данные не менялись — Данные не изменились, коммита не будет.


4. Расписание (раз в сутки)

Создать задачу в Планировщике Windows (запуск каждый день в 06:30). Выполнить в PowerShell от администратора, поправив путь:

$bat = "C:\Users\1\Desktop\QC\Vibecode\Project 1\kpi-dashboard\updater\run_update.bat"
schtasks /Create /TN "KPI Dashboard Update" /TR "`"$bat`"" /SC DAILY /ST 06:30 /RL LIMITED /F

Проверить / запустить вручную / удалить:

schtasks /Query  /TN "KPI Dashboard Update" /V /FO LIST
schtasks /Run    /TN "KPI Dashboard Update"
schtasks /Delete /TN "KPI Dashboard Update" /F

Задача выполнится, только когда компьютер включён и (для успешной выгрузки) поднят VPN. Если в момент запуска VPN не подключён, скрипт залогирует ошибку подключения и завершится с ненулевым кодом — данные останутся прежними.


Логика скрипта (кратко)

  1. Читает config.yaml.
  2. Применяет SSL monkey-patch (старые cipher suites сервера, см. ../Impala_connection.md).
  3. Подключается к host, при ошибке — к fallback_host.
  4. Выполняет SQL (зашит в update_kpi.py, константа SQL_QUERY).
  5. Формирует CSV в точном формате исходника: разделитель ;, строки в кавычках, точка как десятичный разделитель, CRLF, сортировка по убыванию report_period_id, затем entry_date.
  6. Если содержимое не изменилось — выходит без коммита.
  7. Иначе: git add только CSV → commit → fetch + rebase + push в pages (с авто-rebase и повтором, т.к. веб-приложение тоже пушит ai-cache.json).

Пустой результат запроса (0 строк) НЕ перезаписывает CSV — защита от стирания данных.