# 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.10–3.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