kpi-dashboard/updater/README.md

117 lines
5.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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/`:
```bat
REM создать виртуальное окружение (укажите путь к python 3.12, если нужно)
python -m venv venv
venv\Scripts\activate
pip install -r requirements.txt
```
Создать конфиг и заполнить логин/пароль Impala + git-токен:
```bat
copy config.example.yaml config.yaml
notepad config.yaml
```
`config.yaml` уже в `.gitignore` — он **не попадёт в git**.
---
## 2. Аутентификация для пуша
Пуш по расписанию должен идти без ручного ввода пароля. Два варианта:
**A. Токен (рекомендуется).**
В Gitea: *Settings → Applications → Generate New Token*, право
`write:repository`. Вставьте его в `config.yaml``git.token`.
Скрипт использует токен только в команде пуша, в git-конфиг он не сохраняется,
а в логах маскируется.
**B. Git Credential Manager.**
Оставьте `git.token` пустым и один раз выполните вручную
`git push origin pages`, сохранив логин/пароль в системном хранилище Windows.
---
## 3. Проверка вручную
Подключитесь к VPN, затем:
```bat
cd /d "путь\к\kpi-dashboard\updater"
run_update.bat
```
Ожидаемо: в `update.log` появятся строки подключения, число строк, и при
изменении данных — коммит и `Пуш выполнен успешно`. Если данные не менялись —
`Данные не изменились`, коммита не будет.
---
## 4. Расписание (раз в сутки)
Создать задачу в Планировщике Windows (запуск каждый день в 06:30).
Выполнить **в PowerShell от администратора**, поправив путь:
```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
```
Проверить / запустить вручную / удалить:
```powershell
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 — защита от стирания данных.
[Gitea Pages]: https://git.vibe42.kz/kyrykbaev/kpi-dashboard/src/branch/pages