# AWatch-rus: Отчет по изменениям за последние 24 часа Дата фиксации: `2026-05-26 07:55 MSK` ## Источники - `tmux` session `codex`, scrollback выгружен в `/tmp/codex-tmux-last24.txt` - текущий worktree `git status` в `` - live-проверки на: - `` Proxmox - `` Grafana - `` Loki/Alloy - `` aw-server - `` pfSense - `` Windows RDP host ## Важная оговорка `git log --since='24 hours ago'` пустой: за последние сутки изменения не были оформлены git-коммитами. Рабочее дерево уже грязное и содержит больше изменений, чем было сделано в этом 24-часовом окне. Поэтому ниже зафиксированы только те изменения, которые явно подтверждаются `tmux`-историей и live-проверками. ## Что было сделано ### 1. Восстановление ActivityWatch-Russian Симптом: - на `:5600` UI не обновлялся для `HOST-EXAMPLE`; - `aw-server` был жив, но stale были `aw-watcher-afk`, `aw-watcher-window`, `aw-worktime-sessions`. Действия: - проверен `aw-server` и свежесть bucket’ов; - через WinRM на `` проверены процессы, tasks и recovery-скрипты; - запущены: - `ActivityWatch Recovery` - `ActivityWatch Launch [HOST-EXAMPLE_user5]` - отдельно перезапущен зависший `worktime-session-collector`. Итог: - `aw-watcher-afk`, `aw-watcher-window`, `aw-session-events`, `aw-dlp-endpoint-signals`, `aw-worktime-sessions` снова стали fresh; - итоговая серверная сводка: `FRESH=8 STALE=0 DEAD=0`. ### 2. Дополнена авто-сигнализация и самолечение `tsj-guardian-bot` Проблема: - фоновый цикл бота не видел stale AW collector bucket’ы; - manual AW-check был отдельным путем и не участвовал в обычном incident/heal flow. Сделано: - в `tsj_guardian_bot.py` добавлен разбор `[FAIL] aw-rus:*`; - AW collector freshness включен в стандартный background check cycle; - добавлен Windows recovery path для: - `watcher-*` - `worktime-session-collector` - добавен server-side rebuild worktime views после Windows remediation; - тесты обновлены и прогнаны. Затронутые файлы: - [proxmox/tsj_guardian_bot.py](/proxmox/tsj_guardian_bot.py) - [proxmox/test_tsj_guardian_bot.py](/proxmox/test_tsj_guardian_bot.py) - [ansible/deploy_tsj_guardian_bot_proxmox.yml](/ansible/deploy_tsj_guardian_bot_proxmox.yml) - [ansible/group_vars/proxmox-bot.example.yml](/ansible/group_vars/proxmox-bot.example.yml) Проверка: - `python3 -m py_compile proxmox/tsj_guardian_bot.py proxmox/test_tsj_guardian_bot.py` - `python3 -m unittest proxmox.test_tsj_guardian_bot` - `tsj-guardian-bot.service` перезапускался и работал в `active`. ### 3. Бот переведен на `igor` вместо `codex` Проблема: - production bot был завязан на `AI_EXEC_USER=codex`, `TMUX_USER=codex` и read-only пути под `/home/codex/infra-admin`; - это ломало встроенный `codex-cli` support path после перехода на `igor`. Сделано: - переключены: - `AI_EXEC_USER=igor` - `TMUX_USER=igor` - `AI_CHAT_WORKDIR=` - добавлены настраиваемые: - `PFSENSE_ENV_PATH` - `PFSENSE_INVENTORY_PATH` - создан `igor`-readable bundle: - `/.config/tsj-bot/pfsense.env.readonly` - `/.config/tsj-bot/inventory.md` Итог: - диалоговая техподдержка и AI-эскалация в боте работают от `igor`; - bot-side pfSense/inventory контекст больше не зависит от старого `codex`-домика. ### 4. Исправлен сетевой доступ ` -> ` Root cause: - на `pfSense `, интерфейс `opt1/MGMT`: - allow rule для ` -> :22` был ниже `block all`; - allow rule для ` -> :2022` был ниже `block all`; - rule для ` -> :5985` отсутствовал. Сделано: - подняты нужные allow rules выше `block all`; - добавлено недостающее правило на `5985`. Итог: - с `` подтвержден доступ на: - `:2022` - `:22` - `:5985` - SSH вход на `` под `Администратор` был подтвержден. ### 5. Убрано ложное сообщение “автолечение невозможно” Причина: - в production `.env` бота была повреждена строка `AW_RUS_WORKTIME_HEAL_CMD`; - бот слишком жестко реагировал на единичный таймаут worktime CSV. Сделано: - восстановлен `AW_RUS_WORKTIME_HEAL_CMD`; - добавлен retry для получения worktime CSV; - обновлены дефолты под `igor`. Итог: - `pending_incident = null`; - циклы снова идут как `Check OK`. ### 6. Наведен порядок в Grafana folder/dashboard catalog Изменения: - folder `AWatch-rus` переименован в `DLP`; - `pfSense System Dashboard` перенесен в folder `pfSense`; - `LXC Containers Monitoring` перенесен в folder `LXC`; - `Proxmox Influx 2.0 Dashboard` перенесен в folder `LXC`. ### 7. Починен `pfSense Logs Dashboard All Logs` Проблема была не в Grafana, а в цепочке `pfSense -> Alloy -> Loki`. Сделано: - на `` поднят `syslogd`; - на `` в Alloy для pfSense syslog включен правильный формат `rfc3164`; - отключен stale docker self-scrape path, забивавший `loki.write` старыми batch’ами; - перезапущен `alloy`. Итог: - появились живые `job="pfsense"` streams в Loki; - дашборд `pfSense Logs Dashboard All Logs` перестал быть пустым. ### 8. Починен `1C File - Operations Health` Проблема: - не обновлялись данные в `1C File - Operations Health`. Сделано на ``: - exporter больше не падает на недоступных `ibases.v8i`; - `export-upload-file-1c-telemetry.ps1` научен брать `remoteKeyPath` из `deployment-config.json`; - рабочий ключ закреплен как `C:\Users\USER1\.ssh\awops_ed25519`; - исправлены права к `file1c-telemetry-state.json`. Сделано на ``: - прогнан ingest; - `proofcheck` выведен в green. Затронутые файлы: - [windows/export-upload-file-1c-telemetry.ps1](/windows/export-upload-file-1c-telemetry.ps1) - [ansible/deploy_file_1c_windows_telemetry.yml](/ansible/deploy_file_1c_windows_telemetry.yml) Итог: - `1C File - Operations Health` снова обновляется; - свежесть downstream была подтверждена через ingest и proofcheck. ### 9. Рабочие ключи выданы всем пользователям Windows-хоста Сделано: - ключ `awops_ed25519` разложен по локальным профилям: - `USER1` - `USER2` - `USER3` - `USER4` - `USER5` - `Администратор` - `remoteKeyPath` перестал быть жестко привязан только к `USER1`; - права на `file1c-telemetry-state.json` выданы рабочим пользователям. Итог: - схема больше не зависит от одного профиля; - scheduled upload path продолжает работать. ### 10. Поднят management board по файловой 1С Сделано: - добавлен новый Grafana dashboard `1C File - Management Board`; - обновлены manager brief links и gateway route. Live-итог: - `uid=1c-file-mgmt` - `go/grafana-1c` редиректит на новый board ### 11. Поднят первый financial board по файловой 1С Сделано: - добавлен SQL слой: - [clickhouse-1c/clickhouse/init/05_financial_reporting.sql](/clickhouse-1c/clickhouse/init/05_financial_reporting.sql) - добавлен dashboard: - [clickhouse-1c/grafana/provisioning/dashboards/files/1c-financial-reporting.json](/clickhouse-1c/grafana/provisioning/dashboards/files/1c-financial-reporting.json) - обновлен gateway route: - `go/file1c-finance` Итог: - financial screen работает как честный transitional layer; - live readiness была `proxy_only`; - `postings_table_rows = 0`, то есть настоящие проводки еще не поступают. ### 12. Проведено расследование production-source для `postings` Что подтверждено на ``: - готового `toolkit`/REST/service под postings нет; - порт `6003` и типовые service-порты не слушаются; - текущий Windows upload path шлет только telemetry/snapshot, без `postings`. Что проверено: - наличие `1C 8.3.27` и `comcntr.dll`; - COMConnector в user-token path; - интерактивные scheduled tasks под `USER1`; - явные 1С-креды: - `Администратор / ` - `user / ` - `user1 / ` Итог: - blocker остался прежним: нужен реальный пользователь 1С с read-only доступом; - без него production extractor проводок не собрать. ### 13. Поднят отдельный `1C File - Telemetry Board` Сделано: - добавлен новый dashboard: - [clickhouse-1c/grafana/provisioning/dashboards/files/1c-telemetry-board.json](/clickhouse-1c/grafana/provisioning/dashboards/files/1c-telemetry-board.json) - добавлена ссылка на него из `1C File - Management Board`; - добавлен gateway route: - `go/file1c-telemetry` Live-итог: - в Grafana зарегистрирован `uid=1c-file-telemetry`; - все 1C dashboards лежат в folder `1C File Analytics`; - `https:///go/file1c-telemetry` редиректит на новый board. ### 14. Live-путь `1C File Analytics` в Grafana был приведен к устойчивому состоянию Выяснилось: - file-based provisioning на `` не был основной точкой для 1C dashboards; - текущие `file-1c` dashboards жили в DB Grafana. Сделано: - на CT201 добавлен отдельный provisioning provider `1C File Analytics`; - в него выложены: - `1c-management-board.json` - `1c-telemetry-board.json` - `grafana-server` перезапущен; - через SQLite БД Grafana подтверждено наличие: - `1c-file-mgmt` - `1c-file-finance` - `1c-file-ops` - `1c-file-telemetry` - folder `file-1c / 1C File Analytics` ## Файлы, которые точно редактировались в этом окне по данным tmux - [proxmox/tsj_guardian_bot.py](/proxmox/tsj_guardian_bot.py) - [proxmox/test_tsj_guardian_bot.py](/proxmox/test_tsj_guardian_bot.py) - [ansible/deploy_tsj_guardian_bot_proxmox.yml](/ansible/deploy_tsj_guardian_bot_proxmox.yml) - [ansible/group_vars/proxmox-bot.example.yml](/ansible/group_vars/proxmox-bot.example.yml) - [windows/export-upload-file-1c-telemetry.ps1](/windows/export-upload-file-1c-telemetry.ps1) - [ansible/deploy_file_1c_windows_telemetry.yml](/ansible/deploy_file_1c_windows_telemetry.yml) - [clickhouse-1c/clickhouse/init/05_financial_reporting.sql](/clickhouse-1c/clickhouse/init/05_financial_reporting.sql) - [ansible/deploy_proxmox_web_gateway.yml](/ansible/deploy_proxmox_web_gateway.yml) Новые dashboard JSON, подтвержденные live-выкладкой: - [clickhouse-1c/grafana/provisioning/dashboards/files/1c-financial-reporting.json](/clickhouse-1c/grafana/provisioning/dashboards/files/1c-financial-reporting.json) - [clickhouse-1c/grafana/provisioning/dashboards/files/1c-management-board.json](/clickhouse-1c/grafana/provisioning/dashboards/files/1c-management-board.json) - [clickhouse-1c/grafana/provisioning/dashboards/files/1c-telemetry-board.json](/clickhouse-1c/grafana/provisioning/dashboards/files/1c-telemetry-board.json) ## Проверки, которые были явно пройдены - `python3 -m py_compile proxmox/tsj_guardian_bot.py proxmox/test_tsj_guardian_bot.py` - `python3 -m unittest proxmox.test_tsj_guardian_bot` - `./check-aw-full.sh` дал `FRESH=8 STALE=0 DEAD=0` - gateway deploy на Proxmox прошел успешно - `go/file1c-telemetry` отдает `302` на Grafana - SQLite Grafana подтвердил наличие `1c-file-telemetry` в folder `1C File Analytics` ## Незафиксированные в git риски - коммитов за последние 24 часа нет; - есть значительный dirty worktree за пределами этого отчета; - часть новых файлов все еще `??` в `git status`; - без отдельного git-упорядочивания следующий человек может смешать сегодняшние изменения с более старыми незакоммиченными правками. ## Следующий жесткий шаг Если цель именно финансовая отчетность по проводкам, нужен отдельный read-only пользователь 1С для боевых файловых баз. Это единственный текущий внешний blocker, который не решается локальным refactor/deploy.