feat(workforce): add ClickHouse workforce analytics contour

This commit is contained in:
igor04091968
2026-06-23 21:52:57 +03:00
parent 341799ff9d
commit 337da4bb5f
44 changed files with 3973 additions and 461 deletions
@@ -0,0 +1,63 @@
# Источники ActivityWatch для workforce ingest: SHARKON2025
Дата проверки: `2026-06-23`
AW API: `http://10.10.10.13:5600/api/0`
Хост: `SHARKON2025`
## Итоговое решение P1
Основные источники для `aw_workforce`:
| Поток | Bucket | Решение | Поля |
|---|---|---|---|
| Desktop/window facts | `aw-watcher-window_SHARKON2025` | Загружать в `aw_window_events` | `app`, `hostname`, `processId`, `sessionId`, `source`, `title`, `username` |
| Browser facts, Edge | `aw-watcher-web-edge_SHARKON2025` | Загружать в `aw_browser_events` | `app`, `browser`, `hostname`, `sessionId`, `source`, `title`, `url`, `username` |
| Browser facts, Chrome | `aw-watcher-web-chrome_SHARKON2025` | Загружать как исторический browser source; если `username` отсутствует, писать `unknown` | `app`, `browser`, `sessionId`, `source`, `title`, `url` |
Не использовать как основной fact-source продуктивности:
| Bucket | Причина |
|---|---|
| `aw-rdp-window_SHARKON2025` | Есть активное окно RDP bridge, но нет `username` в событии; не годится для точной per-user привязки. |
| `aw-detmir-web-category_SHARKON2025` | Это health/category signal с `signalType=collector_health` и нулевой длительностью; полезен для диагностики collector/user presence, но не для длительности продуктивности. |
| `aw-worktime-sessions_SHARKON2025` | Авторитетный источник сессий и пользователей RDP, но это presence/session facts, а не window/browser usage facts. |
## Подтвержденные факты
`aw-watcher-window_SHARKON2025`:
- type: `currentwindow`;
- client: `aw-watcher-window`;
- hostname: `SHARKON2025`;
- за последние 24 часа есть события с пользователями `USER1`, `USER4`, `USER5`, `Администратор`;
- `USER1` подтвержден в этом bucket и будет нормализован loader-ом в `user1`.
`aw-watcher-web-edge_SHARKON2025`:
- type: `web.tab.current`;
- client: `aw-watcher-web-edge`;
- hostname: `SHARKON2025`;
- события за последние 30 дней содержат `username`;
- на момент проверки событий за последние 24 часа не было, поэтому источник включается как основной browser source, но freshness контролируется отдельно.
`aw-watcher-web-chrome_SHARKON2025`:
- type: `web.tab.current`;
- client: `aw-watcher-web-chrome`;
- hostname: `SHARKON2025`;
- последние найденные события исторические и не содержат `username`;
- loader загружает их с `user_login='unknown'`, пока нет надежной session correlation.
## Первая привязка P3
Файл загрузки: `clickhouse-workforce/sample/seed_sharkon2025_p3.sql`.
| host_name | user_domain | user_login | department | branch |
|---|---|---|---|---|
| `SHARKON2025` | `sharkon2025` | `user1` | `tsj` | `tsj` |
Ключ словаря остается `(host_name, user_login)`. Домен хранится как атрибут
`user_domain`, потому что текущие raw-события ActivityWatch дают `username`, а не
стабильный `DOMAIN\user` в window/browser facts.
File diff suppressed because it is too large Load Diff