| .. | ||
| config.example.yaml | ||
| README.md | ||
| requirements.txt | ||
| run_update.bat | ||
| update_app_metrics.py | ||
| update_kpi.py | ||
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/:
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.yaml → git.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 (ежедневно в 12:00). Важно: не
использовать schtasks /TR "..." — из-за пробела в пути («Project 1»)
команда теряет кавычки и сохраняет действие разорванным
(<Command>...\Project</Command>), задача падает с 0x80070002 («файл не
найден») и НЕ запускается. Создавайте через PowerShell-командлеты (корректно
обрабатывают пробелы). Выполнить в PowerShell, поправив путь:
$bat = "C:\Users\1\Desktop\QC\Vibecode\Project 1\kpi-dashboard\updater\run_update.bat"
$wd = Split-Path $bat
$action = New-ScheduledTaskAction -Execute $bat -WorkingDirectory $wd
$trigger = New-ScheduledTaskTrigger -Daily -At 12:00
$settings = New-ScheduledTaskSettingsSet -StartWhenAvailable -ExecutionTimeLimit (New-TimeSpan -Hours 1)
Register-ScheduledTask -TaskName "KPI Dashboard Update" -Action $action -Trigger $trigger -Settings $settings -RunLevel Limited -Force
Проверить / запустить вручную / посмотреть действие / удалить:
schtasks /Query /TN "KPI Dashboard Update" /V /FO LIST # Last Result: 0 = успех
schtasks /Run /TN "KPI Dashboard Update"
schtasks /Query /TN "KPI Dashboard Update" /XML | Select-String Command,WorkingDirectory
schtasks /Delete /TN "KPI Dashboard Update" /F
Условия успешного запуска:
- ПК включён (с
-StartWhenAvailableзадача догонит пропущенный запуск).- Поднят VPN — иначе ошибка подключения, данные останутся прежними.
- Файл
drb_iliyas_kpi_2026.csvНЕ открыт в Excel — Excel блокирует его на запись, и KPI-апдейтер падает с[Errno 13] Permission denied(код задачи1). Метрики МП при этом обновятся. На следующий день, если файл закрыт, всё догонится автоматически.
Логика скрипта (кратко)
- Читает
config.yaml. - Применяет SSL monkey-patch (старые cipher suites сервера, см.
../Impala_connection.md). - Подключается к
host, при ошибке — кfallback_host. - Выполняет SQL (зашит в
update_kpi.py, константаSQL_QUERY). - Формирует CSV в точном формате исходника: разделитель
;, строки в кавычках, точка как десятичный разделитель, CRLF, сортировка по убываниюreport_period_id, затемentry_date. - Если содержимое не изменилось — выходит без коммита.
- Иначе:
git addтолько CSV → commit →fetch + rebase + pushвpages(с авто-rebase и повтором, т.к. веб-приложение тоже пушитai-cache.json).
Пустой результат запроса (0 строк) НЕ перезаписывает CSV — защита от стирания данных.