From 2ec90b05ae5a85772d15cc6a60ede1f784c66de9 Mon Sep 17 00:00:00 2001 From: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Date: Sat, 2 May 2026 09:44:27 +0000 Subject: [PATCH] =?UTF-8?q?=D0=A3=D0=BD=D0=B8=D1=84=D0=B8=D1=86=D0=B8?= =?UTF-8?q?=D1=80=D0=BE=D0=B2=D0=B0=D1=82=D1=8C=20Windows=20=D0=BF=D1=83?= =?UTF-8?q?=D1=82=D0=B8=20AWatch-rus?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 6 +- ansible/README.md | 18 +-- ...ndows_phase2.yml => deploy_aw_windows.yml} | 16 +- ansible/group_vars/windows.example.yml | 8 +- ansible/install_full_stack.yml | 2 +- docs/FULL_DEPLOYMENT_MANUAL_RU.md | 22 +-- docs/windows/deployment.md | 40 ++--- docs/windows/ensemble.md | 6 +- docs/windows/troubleshooting.md | 6 +- docs/windows/validation.md | 26 ++-- .../MANIFEST.txt | 46 +++--- .../README-INSTALL-KIT.txt | 2 +- .../ansible/README.md | 18 +-- ...ndows_phase2.yml => deploy_aw_windows.yml} | 16 +- .../ansible/group_vars/windows.example.yml | 8 +- .../ansible/install_full_stack.yml | 2 +- ...> awatch-rus-admin.deployment-config.json} | 114 +++++++-------- ...=> awatch-rus-u2u5.deployment-config.json} | 138 +++++++++--------- ...> awatch-rus-user1.deployment-config.json} | 114 +++++++-------- .../windows/ActivityWatch.Windows.Common.psm1 | 4 +- .../browser-domains-native-collector.ps1 | 10 +- .../windows/deploy-domain-users.ps1 | 4 +- .../windows/deploy-ensemble.ps1 | 4 +- .../windows/deploy-single-user.ps1 | 4 +- .../dlp-endpoint-signals-collector.ps1 | 12 +- .../windows/hardening-recovery.ps1 | 6 +- .../windows/validate-deployment.ps1 | 2 +- .../windows/worktime-session-collector.ps1 | 2 +- patch.sh | 20 +-- windows/ActivityWatch.Windows.Common.psm1 | 4 +- windows/browser-domains-native-collector.ps1 | 10 +- windows/deploy-domain-users.ps1 | 4 +- windows/deploy-ensemble.ps1 | 4 +- windows/deploy-single-user.ps1 | 4 +- windows/dlp-endpoint-signals-collector.ps1 | 12 +- windows/hardening-recovery.ps1 | 6 +- .../innosetup/AWatch-rus-InnoSetup.iss | 4 +- windows/installkit/innosetup/BUILD.md | 2 +- .../innosetup-rdp-package-filelist.md | 27 ++-- windows/validate-deployment.ps1 | 2 +- windows/worktime-session-collector.ps1 | 2 +- 41 files changed, 380 insertions(+), 377 deletions(-) rename ansible/{deploy_aw_windows_phase2.yml => deploy_aw_windows.yml} (94%) rename install-kit-awindows-20260427-211240/ansible/{deploy_aw_windows_phase2.yml => deploy_aw_windows.yml} (94%) rename install-kit-awindows-20260427-211240/server-configs-192.168.100.21/{phase2-admin.deployment-config.json => awatch-rus-admin.deployment-config.json} (64%) rename install-kit-awindows-20260427-211240/server-configs-192.168.100.21/{phase2-u2u5.deployment-config.json => awatch-rus-u2u5.deployment-config.json} (69%) rename install-kit-awindows-20260427-211240/server-configs-192.168.100.21/{phase2-user1.deployment-config.json => awatch-rus-user1.deployment-config.json} (63%) diff --git a/README.md b/README.md index b2d419a..f9f17d8 100755 --- a/README.md +++ b/README.md @@ -17,7 +17,7 @@ - `aw-server/` — установочные скрипты, env-шаблон, systemd unit и RU patch для Web UI. - `ansible/` — Ansible-ensemble для автоматизированного сервера (Debian/CT). - `pfsense/` — внешний poller для pfSense API и systemd unit под Debian/Ubuntu utility VM. -- `windows/` — PowerShell toolkit: single-user, domain-users, ensemble orchestration, hardening/recovery, validation, phase-2 DLP telemetry (`aw-dlp-incidents_*`, `aw-dlp-endpoint-signals_*`) и session-level presence для удалённых Windows/RDP пользователей (`aw-worktime-sessions_*`). +- `windows/` — PowerShell toolkit: single-user, domain-users, ensemble orchestration, hardening/recovery, validation, Windows/RDP DLP telemetry (`aw-dlp-incidents_*`, `aw-dlp-endpoint-signals_*`) и session-level presence для удалённых Windows/RDP пользователей (`aw-worktime-sessions_*`). - `scripts/quality-gate.sh` — локальный preflight-пайплайн проверок. - `scripts/install_aw_linux_client.sh` — установка Linux bundle + autostart для remote AW server. - `scripts/install_aw_console_ssh_logger.sh` — user-space установка console/ssh logger. @@ -41,9 +41,9 @@ - `ansible/provision_proxmox_ct_and_deploy_aw.yml` - `ansible/provision_proxmox_ct_matrix_and_deploy_aw.yml` (массово по матрице CT) -Для централизованного phase-2 деплоя Windows-клиентов через WinRM: +Для централизованного деплоя Windows/RDP-клиентов через WinRM: -- `ansible/deploy_aw_windows_phase2.yml` +- `ansible/deploy_aw_windows.yml` Для внешнего pfSense poller'а: diff --git a/ansible/README.md b/ansible/README.md index 1727108..d642c98 100644 --- a/ansible/README.md +++ b/ansible/README.md @@ -4,7 +4,7 @@ - деплой на уже существующий Debian host/CT; - полный цикл с нуля в Proxmox: создание CT + bootstrap + установка ActivityWatch + RU patch; -- централизованное развёртывание Windows phase-2 collector'ов по WinRM; +- централизованное развёртывание Windows/RDP collector'ов по WinRM; - развёртывание внешнего pfSense poller'а на Debian/Ubuntu utility VM. ## Файлы @@ -12,7 +12,7 @@ - `ansible/deploy_aw_server.yml` — основной playbook для уже существующего Debian/CT host. - `ansible/provision_proxmox_ct_and_deploy_aw.yml` — полный playbook для Proxmox. - `ansible/provision_proxmox_ct_matrix_and_deploy_aw.yml` — массовый полный playbook (несколько CT). -- `ansible/deploy_aw_windows_phase2.yml` — WinRM playbook для развёртывания Windows/RDP collector'ов. +- `ansible/deploy_aw_windows.yml` — WinRM playbook для развёртывания Windows/RDP collector'ов. - `ansible/deploy_aw_pfsense_poller.yml` — развёртывание pfSense poller'а. - `ansible/install_full_stack.yml` — полный установочный playbook (оркестратор всех этапов). - `ansible/inventory.example.ini` — шаблон inventory. @@ -44,7 +44,7 @@ ansible-playbook -i inventory.ini install_full_stack.yml - `provision_proxmox_ct_and_deploy_aw.yml` (если есть хосты в группе `[proxmox]`); - `deploy_aw_server.yml` (группа `[aw_server]`); -- `deploy_aw_windows_phase2.yml` (группа `[aw_windows]`); +- `deploy_aw_windows.yml` (группа `[aw_windows]`); - `deploy_aw_pfsense_poller.yml` (группа `[aw_pfsense_pollers]`). Пустые группы в `inventory.ini` безопасны: соответствующий play будет пропущен. @@ -75,7 +75,7 @@ cd ansible ansible-playbook -i inventory.ini provision_proxmox_ct_matrix_and_deploy_aw.yml ``` -## Windows phase-2 rollout (WinRM) +## Windows/RDP rollout (WinRM) 1. Подготовьте inventory и vars: - `cp ansible/inventory.example.ini ansible/inventory.ini` @@ -87,13 +87,13 @@ ansible-playbook -i inventory.ini provision_proxmox_ct_matrix_and_deploy_aw.yml ```bash cd ansible -ansible-playbook -i inventory.ini deploy_aw_windows_phase2.yml +ansible-playbook -i inventory.ini deploy_aw_windows.yml ``` Playbook: - выгружает полный `windows/*` toolkit на целевой хост в InnoSetup-compatible каталог `C:\Program Files\AWatch-rus\windows`, включая DLP и `worktime-session-collector.ps1`; -- выполняет `deploy-ensemble.ps1` (deploy + hardening/recovery) с phase-2 policy/rules; +- выполняет `deploy-ensemble.ps1` (deploy + hardening/recovery) с policy/rules из AWatch-rus toolkit; - после deploy принудительно запускает `ActivityWatch Recovery` и все `ActivityWatch Launch *` задачи; - выполняет API smoke-check bucket `aw-watcher-afk_` и ожидает свежие `not-afk` события; - запускает `validate-deployment.ps1`; @@ -107,9 +107,9 @@ Playbook: - `aw_windows_incident_screenshot_enabled: false` — не делать скриншот при DLP-инциденте; - `aw_windows_incident_artifacts_root: 'C:\...\incident-artifacts'` — переопределить путь артефактов; - `aw_windows_deploy_root: 'C:\Program Files\AWatch-rus'` — каталог toolkit, совпадает с InnoSetup `{app}`; -- `aw_windows_install_root: 'C:\Program Files\ActivityWatch-Phase2'` — каталог бинарников, совпадает с InnoSetup `AwDefaultInstallRoot`; -- `aw_windows_state_root: 'C:\ProgramData\ActivityWatch-Phase2'` — каталог состояния/отчётов, совпадает с InnoSetup `AwDefaultStateRoot`; -- `aw_windows_validation_remote_path: '{{ aw_windows_state_root }}\aw_validate_phase2_ansible.json'` — отчёт Ansible-валидации хранится рядом с `ensemble-report-*.json`; +- `aw_windows_install_root: 'C:\Program Files\AWatch-rus\bin'` — каталог бинарников, совпадает с InnoSetup `AwDefaultInstallRoot`; +- `aw_windows_state_root: 'C:\ProgramData\AWatch-rus'` — каталог состояния/отчётов, совпадает с InnoSetup `AwDefaultStateRoot`; +- `aw_windows_validation_remote_path: '{{ aw_windows_state_root }}\aw_validate_ansible.json'` — отчёт Ansible-валидации хранится рядом с `ensemble-report-*.json`; - `aw_windows_package_version`, `aw_windows_package_url`, `aw_windows_package_zip_path` — версия и источник Windows-пакета ActivityWatch; - `aw_windows_api_smoke_check_bucket: ""` — автоматически использовать `aw-watcher-afk_`; - `aw_windows_fail_on_validation_error: true` — завершать playbook ошибкой, если `validate-deployment.ps1` возвращает `overallOk=false`; diff --git a/ansible/deploy_aw_windows_phase2.yml b/ansible/deploy_aw_windows.yml similarity index 94% rename from ansible/deploy_aw_windows_phase2.yml rename to ansible/deploy_aw_windows.yml index 38b33d8..41d4657 100644 --- a/ansible/deploy_aw_windows_phase2.yml +++ b/ansible/deploy_aw_windows.yml @@ -1,5 +1,5 @@ --- -- name: Развернуть Windows/RDP phase-2 collector'ы AWatch-rus +- name: Развернуть Windows/RDP collector'ы AWatch-rus hosts: aw_windows gather_facts: false @@ -21,8 +21,8 @@ - user5 aw_windows_extra_users: [] aw_windows_users_effective: "{{ (aw_windows_users + aw_windows_extra_users) | unique }}" - aw_windows_install_root: "C:\\Program Files\\ActivityWatch-Phase2" - aw_windows_state_root: "C:\\ProgramData\\ActivityWatch-Phase2" + aw_windows_install_root: "C:\\Program Files\\AWatch-rus\\bin" + aw_windows_state_root: "C:\\ProgramData\\AWatch-rus" aw_windows_afk_enabled: true aw_windows_window_enabled: true aw_windows_local_agent_logs_enabled: false @@ -33,7 +33,7 @@ aw_windows_skip_hardening: false aw_windows_rules_path: "{{ aw_windows_deploy_root }}\\windows\\web-category-rules.example.json" aw_windows_policy_path: "{{ aw_windows_deploy_root }}\\windows\\dlp-policy.example.json" - aw_windows_validation_remote_path: "{{ aw_windows_state_root }}\\aw_validate_phase2_ansible.json" + aw_windows_validation_remote_path: "{{ aw_windows_state_root }}\\aw_validate_ansible.json" aw_windows_validation_local_dir: "/tmp/aw-rus-validation" aw_windows_launch_task_pattern: "ActivityWatch Launch *" aw_windows_recovery_task_name: "ActivityWatch Recovery" @@ -89,7 +89,7 @@ {{ user }} {% endfor -%} - - name: Запустить phase-2 ensemble развёртывание + - name: Запустить Windows/RDP ensemble развёртывание ansible.windows.win_powershell: script: | $ErrorActionPreference = 'Stop' @@ -196,11 +196,11 @@ - name: Забрать validation report ansible.builtin.fetch: src: "{{ aw_windows_validation_remote_path }}" - dest: "{{ aw_windows_validation_local_dir }}/{{ inventory_hostname }}-aw_validate_phase2_ansible.json" + dest: "{{ aw_windows_validation_local_dir }}/{{ inventory_hostname }}-aw_validate_ansible.json" flat: true - name: Показать путь к отчёту ansible.builtin.debug: msg: - - "Windows phase2 развёртывание завершено на {{ inventory_hostname }}." - - "Отчёт проверки: {{ aw_windows_validation_local_dir }}/{{ inventory_hostname }}-aw_validate_phase2_ansible.json" + - "Windows/RDP развёртывание завершено на {{ inventory_hostname }}." + - "Отчёт проверки: {{ aw_windows_validation_local_dir }}/{{ inventory_hostname }}-aw_validate_ansible.json" diff --git a/ansible/group_vars/windows.example.yml b/ansible/group_vars/windows.example.yml index ecc4c88..ad29b15 100644 --- a/ansible/group_vars/windows.example.yml +++ b/ansible/group_vars/windows.example.yml @@ -18,9 +18,9 @@ aw_windows_extra_users: [] # aw_windows_extra_users: # - Администратор -# Рекомендуемый изолированный профиль для фазового раската. -aw_windows_install_root: "C:\\Program Files\\ActivityWatch-Phase2" -aw_windows_state_root: "C:\\ProgramData\\ActivityWatch-Phase2" +# Единые Windows/RDP пути: те же, что использует InnoSetup. +aw_windows_install_root: "C:\\Program Files\\AWatch-rus\\bin" +aw_windows_state_root: "C:\\ProgramData\\AWatch-rus" aw_windows_afk_enabled: true aw_windows_window_enabled: true aw_windows_local_agent_logs_enabled: false @@ -33,7 +33,7 @@ aw_windows_skip_hardening: false aw_windows_rules_path: "{{ aw_windows_deploy_root }}\\windows\\web-category-rules.example.json" aw_windows_policy_path: "{{ aw_windows_deploy_root }}\\windows\\dlp-policy.example.json" -aw_windows_validation_remote_path: "{{ aw_windows_state_root }}\\aw_validate_phase2_ansible.json" +aw_windows_validation_remote_path: "{{ aw_windows_state_root }}\\aw_validate_ansible.json" aw_windows_validation_local_dir: "/tmp/aw-rus-validation" aw_windows_fail_on_validation_error: true diff --git a/ansible/install_full_stack.yml b/ansible/install_full_stack.yml index 0af14c9..cd3a7f6 100644 --- a/ansible/install_full_stack.yml +++ b/ansible/install_full_stack.yml @@ -12,5 +12,5 @@ - import_playbook: provision_proxmox_ct_and_deploy_aw.yml - import_playbook: deploy_aw_server.yml -- import_playbook: deploy_aw_windows_phase2.yml +- import_playbook: deploy_aw_windows.yml - import_playbook: deploy_aw_pfsense_poller.yml diff --git a/docs/FULL_DEPLOYMENT_MANUAL_RU.md b/docs/FULL_DEPLOYMENT_MANUAL_RU.md index 164a151..704e66a 100755 --- a/docs/FULL_DEPLOYMENT_MANUAL_RU.md +++ b/docs/FULL_DEPLOYMENT_MANUAL_RU.md @@ -21,7 +21,7 @@ - `/home/igor/tmp/AWatch-rus/ansible/deploy_aw_server.yml` - `/home/igor/tmp/AWatch-rus/ansible/provision_proxmox_ct_and_deploy_aw.yml` - `/home/igor/tmp/AWatch-rus/ansible/provision_proxmox_ct_matrix_and_deploy_aw.yml` -- `/home/igor/tmp/AWatch-rus/ansible/deploy_aw_windows_phase2.yml` +- `/home/igor/tmp/AWatch-rus/ansible/deploy_aw_windows.yml` --- @@ -217,7 +217,7 @@ C:\Program Files\AWatch-rus\windows\deploy-ensemble.ps1 ` Отчёт сохраняется в: -- `C:\ProgramData\ActivityWatch-Phase2\ensemble-report-YYYYMMDD-HHMMSS.json` +- `C:\ProgramData\AWatch-rus\ensemble-report-YYYYMMDD-HHMMSS.json` ### 3.3 Single-user развёртывание @@ -233,14 +233,14 @@ C:\Program Files\AWatch-rus\windows\deploy-single-user.ps1 ` ```powershell C:\Program Files\AWatch-rus\windows\hardening-recovery.ps1 ` - -ConfigPath C:\ProgramData\ActivityWatch-Phase2\deployment-config.json + -ConfigPath C:\ProgramData\AWatch-rus\deployment-config.json ``` ### 3.5 Валидация deployment-а (PowerShell report) ```powershell $report = C:\Program Files\AWatch-rus\windows\validate-deployment.ps1 ` - -ConfigPath C:\ProgramData\ActivityWatch-Phase2\deployment-config.json + -ConfigPath C:\ProgramData\AWatch-rus\deployment-config.json $report | ConvertTo-Json -Depth 12 ``` @@ -248,13 +248,13 @@ $report | ConvertTo-Json -Depth 12 ## 4) Что должно появиться на Windows после установки -- `C:\Program Files\ActivityWatch-Phase2` -- `C:\ProgramData\ActivityWatch-Phase2\deployment-config.json` -- `C:\ProgramData\ActivityWatch-Phase2\launch-watchers.ps1` -- `C:\ProgramData\ActivityWatch-Phase2\recovery-loop.ps1` -- `C:\ProgramData\ActivityWatch-Phase2\browser-domains-native-collector.ps1` -- `C:\ProgramData\ActivityWatch-Phase2\web-category-rules.json` -- `C:\ProgramData\ActivityWatch-Phase2\logs\` +- `C:\Program Files\AWatch-rus\bin` +- `C:\ProgramData\AWatch-rus\deployment-config.json` +- `C:\ProgramData\AWatch-rus\launch-watchers.ps1` +- `C:\ProgramData\AWatch-rus\recovery-loop.ps1` +- `C:\ProgramData\AWatch-rus\browser-domains-native-collector.ps1` +- `C:\ProgramData\AWatch-rus\web-category-rules.json` +- `C:\ProgramData\AWatch-rus\logs\` Задачи планировщика: diff --git a/docs/windows/deployment.md b/docs/windows/deployment.md index fc82f21..9b35daa 100755 --- a/docs/windows/deployment.md +++ b/docs/windows/deployment.md @@ -8,21 +8,21 @@ - `windows/hardening-recovery.ps1` — повторная регистрация задач, ACL и recovery-loop. - `windows/validate-deployment.ps1` — машинная проверка состояния и JSON-отчёт. - `windows/browser-domains-native-collector.ps1` — native collector доменов браузера с категоризацией. -- `windows/dlp-endpoint-signals-collector.ps1` — phase-2 collector (clipboard/USB/print signals). +- `windows/dlp-endpoint-signals-collector.ps1` — Windows/RDP collector (clipboard/USB/print signals). - `windows/web-category-rules.example.json` — пример кастомных правил категоризации. - `windows/dlp-policy.example.json` — пример DLP-политики (phase-1: alerting incidents). ## Что делает пакет - Ставит `aw-watcher-afk` и `aw-watcher-window` из официального Windows ZIP ActivityWatch. -- Копирует browser-domain collector в `C:\ProgramData\ActivityWatch-Phase2`. -- Копирует DLP policy в `C:\ProgramData\ActivityWatch-Phase2\dlp-policy.json`. +- Копирует browser-domain collector в `C:\ProgramData\AWatch-rus`. +- Копирует DLP policy в `C:\ProgramData\AWatch-rus\dlp-policy.json`. - Включает `incidentCapture` в `deployment-config.json` для DLP-инцидентов: - `incidentCapture.screenshotEnabled = true` - `incidentCapture.artifactsRoot = \incident-artifacts` - Создаёт per-user задачи `ActivityWatch Launch [...]` с запуском при логоне. - Создаёт системную задачу `ActivityWatch Recovery`, которая циклически перезапускает per-user launch tasks. -- Применяет ACL к `C:\Program Files\ActivityWatch-Phase2`, `C:\ProgramData\ActivityWatch-Phase2` и каталогу логов. +- Применяет ACL к `C:\Program Files\AWatch-rus\bin`, `C:\ProgramData\AWatch-rus` и каталогу логов. - Не содержит хардкодов инфраструктуры: сервер, домен, список пользователей и правила передаются параметрами. - Корректно регистрирует задачи через `-LogonType Interactive` (совместимо с Windows Server, где `InteractiveToken` не поддерживается). - Поддерживает отключение шумных watcher'ов через `-AfkEnabled:$false` и `-WindowEnabled:$false`. @@ -153,8 +153,8 @@ CSV-формат: колонка `User`, `Username`, `SamAccountName` или `Lo -ServerPort 5600 ` -Domain SHARKON2025 ` -Users user2,user3,user4,user5 ` - -InstallRoot 'C:\Program Files\ActivityWatch-Phase2-u2u5' ` - -StateRoot 'C:\ProgramData\ActivityWatch-Phase2-u2u5' ` + -InstallRoot 'C:\Program Files\AWatch-rus\bin' ` + -StateRoot 'C:\ProgramData\AWatch-rus' ` -CustomRulesPath C:\Program Files\AWatch-rus\windows\web-category-rules.example.json ` -CustomPolicyPath C:\Program Files\AWatch-rus\windows\dlp-policy.example.json ``` @@ -166,8 +166,8 @@ Single-user pilot в таком же стиле: -ServerHost 10.10.10.13 ` -ServerPort 5600 ` -TargetUser 'SHARKON2025\user1' ` - -InstallRoot 'C:\Program Files\ActivityWatch-Phase2' ` - -StateRoot 'C:\ProgramData\ActivityWatch-Phase2-user1' ` + -InstallRoot 'C:\Program Files\AWatch-rus\bin' ` + -StateRoot 'C:\ProgramData\AWatch-rus' ` -CustomRulesPath C:\Program Files\AWatch-rus\windows\web-category-rules.example.json ` -CustomPolicyPath C:\Program Files\AWatch-rus\windows\dlp-policy.example.json ``` @@ -186,31 +186,31 @@ Single-user pilot в таком же стиле: Итоговый отчёт: -- `C:\ProgramData\ActivityWatch-Phase2\ensemble-report-YYYYMMDD-HHMMSS.json` +- `C:\ProgramData\AWatch-rus\ensemble-report-YYYYMMDD-HHMMSS.json` ## Категоризация доменов - Встроенные категории покрывают базовые рабочие, нейтральные и личные домены. - Для кастомизации скопируйте `windows/web-category-rules.example.json` и отредактируйте домены. -- Передайте файл через `-CustomRulesPath`; он будет сохранён как `C:\ProgramData\ActivityWatch-Phase2\web-category-rules.json`. +- Передайте файл через `-CustomRulesPath`; он будет сохранён как `C:\ProgramData\AWatch-rus\web-category-rules.json`. - Пользовательские правила имеют приоритет над встроенными. ## Структура после установки -- `C:\Program Files\ActivityWatch-Phase2` — бинарники watcher'ов. -- `C:\ProgramData\ActivityWatch-Phase2\deployment-config.json` — итоговая конфигурация. -- `C:\ProgramData\ActivityWatch-Phase2\incident-artifacts\` — скриншоты DLP-инцидентов (если `incidentCapture.screenshotEnabled=true`). -- `C:\ProgramData\ActivityWatch-Phase2\launch-watchers.ps1` — per-user launcher. -- `C:\ProgramData\ActivityWatch-Phase2\recovery-loop.ps1` — system recovery loop. -- `C:\ProgramData\ActivityWatch-Phase2\browser-domains-native-collector.ps1` — runtime collector. -- `C:\ProgramData\ActivityWatch-Phase2\dlp-endpoint-signals-collector.ps1` — runtime endpoint collector. -- `C:\ProgramData\ActivityWatch-Phase2\dlp-policy.json` — активная DLP-политика. -- `C:\ProgramData\ActivityWatch-Phase2\logs\` — логи collector'а. +- `C:\Program Files\AWatch-rus\bin` — бинарники watcher'ов. +- `C:\ProgramData\AWatch-rus\deployment-config.json` — итоговая конфигурация. +- `C:\ProgramData\AWatch-rus\incident-artifacts\` — скриншоты DLP-инцидентов (если `incidentCapture.screenshotEnabled=true`). +- `C:\ProgramData\AWatch-rus\launch-watchers.ps1` — per-user launcher. +- `C:\ProgramData\AWatch-rus\recovery-loop.ps1` — system recovery loop. +- `C:\ProgramData\AWatch-rus\browser-domains-native-collector.ps1` — runtime collector. +- `C:\ProgramData\AWatch-rus\dlp-endpoint-signals-collector.ps1` — runtime endpoint collector. +- `C:\ProgramData\AWatch-rus\dlp-policy.json` — активная DLP-политика. +- `C:\ProgramData\AWatch-rus\logs\` — логи collector'а. Для phased rollout те же файлы формируются в каталоге `StateRoot`, переданном параметром. ## Повторный прогон - Скрипты идемпотентны: переустанавливают задачи и обновляют runtime-файлы. -- Предыдущая установка ActivityWatch бэкапится в `C:\ProgramData\ActivityWatch-Phase2\backups\install-YYYYMMDD-HHMMSS`. +- Предыдущая установка ActivityWatch бэкапится в `C:\ProgramData\AWatch-rus\backups\install-YYYYMMDD-HHMMSS`. - Для жёсткого восстановления запускайте `windows/hardening-recovery.ps1`. diff --git a/docs/windows/ensemble.md b/docs/windows/ensemble.md index 55aea1e..4333fa8 100644 --- a/docs/windows/ensemble.md +++ b/docs/windows/ensemble.md @@ -22,8 +22,8 @@ C:\Program Files\AWatch-rus\windows\deploy-ensemble.ps1 ` -ServerPort 5600 ` -Domain SHARKON2025 ` -Users user1,user2,user3,user4,user5 ` - -InstallRoot 'C:\Program Files\ActivityWatch-Phase2' ` - -StateRoot 'C:\ProgramData\ActivityWatch-Phase2' ` + -InstallRoot 'C:\Program Files\AWatch-rus\bin' ` + -StateRoot 'C:\ProgramData\AWatch-rus' ` -AfkEnabled:$false ` -CustomPolicyPath C:\Program Files\AWatch-rus\windows\dlp-policy.example.json ` -ValidateAfterDeploy @@ -43,7 +43,7 @@ C:\Program Files\AWatch-rus\windows\deploy-ensemble.ps1 ` ```powershell $report = C:\Program Files\AWatch-rus\windows\validate-deployment.ps1 ` - -ConfigPath C:\ProgramData\ActivityWatch-Phase2\deployment-config.json + -ConfigPath C:\ProgramData\AWatch-rus\deployment-config.json $report | ConvertTo-Json -Depth 12 ``` diff --git a/docs/windows/troubleshooting.md b/docs/windows/troubleshooting.md index 1378b6e..5cc9482 100755 --- a/docs/windows/troubleshooting.md +++ b/docs/windows/troubleshooting.md @@ -23,7 +23,7 @@ Start-ScheduledTask -TaskName 'ActivityWatch Launch [CONTOSO_user01]' - Скрипт работает через UI Automation и foreground window. - Некоторые браузеры/страницы могут скрывать адресную строку или блокировать UIA. -- Проверьте лог `C:\ProgramData\ActivityWatch-Phase2\logs\browser-domains-.log`. +- Проверьте лог `C:\ProgramData\AWatch-rus\logs\browser-domains-.log`. - Убедитесь, что активное окно — поддерживаемый браузер: Edge, Chrome, Brave, Vivaldi, Opera, Firefox. ### Сервер недоступен @@ -44,7 +44,7 @@ Invoke-WebRequest http://aw.example.local:5600/api/0/info ### Неправильная категоризация домена -- Проверьте содержимое `C:\ProgramData\ActivityWatch-Phase2\web-category-rules.json`. +- Проверьте содержимое `C:\ProgramData\AWatch-rus\web-category-rules.json`. - Пользовательские правила должны быть валидным JSON. - Один и тот же домен лучше определять только в одной категории. - После изменения правил достаточно перезапустить collector или задачу пользователя: @@ -112,7 +112,7 @@ Get-CimInstance Win32_Process | Проверить конфиг: ```powershell -Get-Content C:\ProgramData\ActivityWatch-Phase2\deployment-config.json -Raw +Get-Content C:\ProgramData\AWatch-rus\deployment-config.json -Raw ``` ## Когда запускать hardening/recovery diff --git a/docs/windows/validation.md b/docs/windows/validation.md index 03e7398..72ae9e5 100755 --- a/docs/windows/validation.md +++ b/docs/windows/validation.md @@ -4,7 +4,7 @@ ```powershell $report = .\windows\validate-deployment.ps1 ` - -ConfigPath C:\ProgramData\ActivityWatch-Phase2\deployment-config.json + -ConfigPath C:\ProgramData\AWatch-rus\deployment-config.json $report | ConvertTo-Json -Depth 12 ``` @@ -19,11 +19,11 @@ $report | ConvertTo-Json -Depth 12 ### 1. Проверить установленные файлы ```powershell -Test-Path 'C:\Program Files\ActivityWatch-Phase2\aw-watcher-afk\aw-watcher-afk.exe' -Test-Path 'C:\Program Files\ActivityWatch-Phase2\aw-watcher-window\aw-watcher-window.exe' -Test-Path 'C:\ProgramData\ActivityWatch-Phase2\browser-domains-native-collector.ps1' -Test-Path 'C:\ProgramData\ActivityWatch-Phase2\dlp-policy.json' -Test-Path 'C:\ProgramData\ActivityWatch-Phase2\deployment-config.json' +Test-Path 'C:\Program Files\AWatch-rus\bin\aw-watcher-afk\aw-watcher-afk.exe' +Test-Path 'C:\Program Files\AWatch-rus\bin\aw-watcher-window\aw-watcher-window.exe' +Test-Path 'C:\ProgramData\AWatch-rus\browser-domains-native-collector.ps1' +Test-Path 'C:\ProgramData\AWatch-rus\dlp-policy.json' +Test-Path 'C:\ProgramData\AWatch-rus\deployment-config.json' ``` Ожидаемый результат — везде `True`. @@ -50,7 +50,7 @@ Get-ScheduledTask | Where-Object TaskName -eq 'ActivityWatch Recovery' ### 2.1 Проверить incidentCapture в конфиге ```powershell -$cfg = Get-Content 'C:\ProgramData\ActivityWatch-Phase2\deployment-config.json' -Raw | ConvertFrom-Json +$cfg = Get-Content 'C:\ProgramData\AWatch-rus\deployment-config.json' -Raw | ConvertFrom-Json $cfg.incidentCapture ``` @@ -119,7 +119,7 @@ Invoke-WebRequest http://aw.example.local:5600/api/0/buckets | Select-Object -Ex 4. Проверьте локальный лог: ```powershell -Get-Content "C:\ProgramData\ActivityWatch-Phase2\logs\dlp-incidents-$env:USERNAME.log" -Tail 50 +Get-Content "C:\ProgramData\AWatch-rus\logs\dlp-incidents-$env:USERNAME.log" -Tail 50 ``` Если `screenshotEnabled = True`, проверьте наличие скриншота в инциденте: @@ -175,7 +175,7 @@ Invoke-RestMethod -Method Post ` - в API появился `ruleId=selftest-dlp-incident`; - в UI (`#/buckets/aw-dlp-incidents_`) событие видно в `Events`. -## Проверка phase-2 endpoint signals +## Проверка endpoint signals 1. Скопируйте любой текст в буфер обмена. 2. Отправьте тестовую печать (любой принтер/виртуальный PDF). @@ -188,7 +188,7 @@ Invoke-WebRequest http://aw.example.local:5600/api/0/buckets/aw-dlp-endpoint-sig 4. Проверьте локальный лог: ```powershell -Get-Content "C:\ProgramData\ActivityWatch-Phase2\logs\endpoint-signals-$env:USERNAME.log" -Tail 50 +Get-Content "C:\ProgramData\AWatch-rus\logs\endpoint-signals-$env:USERNAME.log" -Tail 50 ``` ## Проверка восстановления @@ -206,9 +206,9 @@ Start-ScheduledTask -TaskName 'ActivityWatch Recovery' ## Проверка ACL ```powershell -icacls 'C:\Program Files\ActivityWatch-Phase2' -icacls 'C:\ProgramData\ActivityWatch-Phase2' -icacls 'C:\ProgramData\ActivityWatch-Phase2\logs' +icacls 'C:\Program Files\AWatch-rus\bin' +icacls 'C:\ProgramData\AWatch-rus' +icacls 'C:\ProgramData\AWatch-rus\logs' ``` Ожидаемо: diff --git a/install-kit-awindows-20260427-211240/MANIFEST.txt b/install-kit-awindows-20260427-211240/MANIFEST.txt index da85d93..0eedf4a 100644 --- a/install-kit-awindows-20260427-211240/MANIFEST.txt +++ b/install-kit-awindows-20260427-211240/MANIFEST.txt @@ -1,17 +1,18 @@ -6e1f304f468d77f12df67face6afaaca5bbcfb1496f43df4e4fa0557cf847829 install-kit-awindows-20260427-211240/README-INSTALL-KIT.txt -a11f41827769be915f73d0de2c5503b05f61ccf56f70a50845771bcb79c5ebb7 install-kit-awindows-20260427-211240/ansible/README.md -02ca96f5ecc6abf89ab3271bd08add5795dbba2281168f158d96166f557e33f0 install-kit-awindows-20260427-211240/ansible/deploy_aw_pfsense_poller.yml -7c1ad9363412e802f4272f2e91a1d9f26be722eaf22e654c0a2512b0cebbbfd0 install-kit-awindows-20260427-211240/ansible/deploy_aw_server.yml -d5c42e6fe49c14a0769517ff28184139e467d40f22d4a632630c42ed1ff34ce5 install-kit-awindows-20260427-211240/ansible/deploy_aw_windows_phase2.yml -bc791462b9c00adc8c68ed81e2a7697c560bdbc46f156b4840c7bca1dee2157d install-kit-awindows-20260427-211240/ansible/group_vars/all.example.yml +0754dcba7c651d67a40e09446868d2fcae623a100d4fb01794dd96272d353b49 install-kit-awindows-20260427-211240/README-INSTALL-KIT.txt +8d239c67078eb0cbff5ecdb039ec147d6fbe90fcbd6a9adea87928d87b524aae install-kit-awindows-20260427-211240/ansible/README.md +412bb766bbf0791c3593f38daa771d5d0aa58cc1f2d3c9010fcd4588d0fe87df install-kit-awindows-20260427-211240/ansible/deploy_aw_pfsense_poller.yml +90ac38a33918fcd3620f078f51fbf7c6a9d7f8fd1a34d16b38cb3ac45678b0d7 install-kit-awindows-20260427-211240/ansible/deploy_aw_server.yml +d44adbc4565566039b5fb9dc870b9229c01408208ca8c08082bb5d2c097aa276 install-kit-awindows-20260427-211240/ansible/deploy_aw_windows.yml +531bfec24f86d28a06e5c0d73005489a818e2c7b1cce1d98f524a3f76802b8ee install-kit-awindows-20260427-211240/ansible/group_vars/all.example.yml 95696c243ab331f06e77a40a9800c4b6668de77675ebbdf2ef54ae49e1b18874 install-kit-awindows-20260427-211240/ansible/group_vars/pfsense-poller.example.yml c5cab36645065815571c99f6d360f910dcccbb54b780c8bfd526a6cdc3684e19 install-kit-awindows-20260427-211240/ansible/group_vars/proxmox-matrix.example.yml 35a33c8a1c75ded5e85c6b79e0b3efde07959ff61ee5f66d83b7e0c2abe87fc5 install-kit-awindows-20260427-211240/ansible/group_vars/proxmox.example.yml -69368b7adb7711fa81304866373e61ed464bcc23a08e4509fa54655b05f95790 install-kit-awindows-20260427-211240/ansible/group_vars/windows.example.yml -00064ce5187569fb3221ddd45c2ad7eb37cd50b2a0a832ddf7843e4ff461849a install-kit-awindows-20260427-211240/ansible/inventory.example.ini -bbef175cb77dd53aa07452dbb2fe8797f38b58f42372005c3404c8dc9d6f8e13 install-kit-awindows-20260427-211240/ansible/provision_proxmox_ct_and_deploy_aw.yml -b8f8b6bc504a51cd87db3f46c35a27295b395ea516533068f96af35f8b720434 install-kit-awindows-20260427-211240/ansible/provision_proxmox_ct_matrix_and_deploy_aw.yml -d35bc97b6de18f0006cbbad4adf8a8a5db8ed912997d8fc47c7f11fa9247e907 install-kit-awindows-20260427-211240/ansible/tasks/provision_ct_and_deploy_aw.yml +a4333199f454d5c795d3c240ee072342a90d0ed1fba6073be78c3c5e9cb8b32f install-kit-awindows-20260427-211240/ansible/group_vars/windows.example.yml +195e7dbdb91f4e77db3263bd0812301ddc912a37ba1519688768bb64a2887567 install-kit-awindows-20260427-211240/ansible/install_full_stack.yml +2e4e94d90143923fefd3ec1257d0ec57daa3e96450d85471bc2c418aae37e105 install-kit-awindows-20260427-211240/ansible/inventory.example.ini +d9e43352fd6bdb647db9754ab2c557b6bb27f88f51b2bf23d8c19227e535e7b9 install-kit-awindows-20260427-211240/ansible/provision_proxmox_ct_and_deploy_aw.yml +f3d34547f345ad1c635ee44613a60e7f08479f9ae4d1111810bc7e5968bfb084 install-kit-awindows-20260427-211240/ansible/provision_proxmox_ct_matrix_and_deploy_aw.yml +ef4ed198745777bd1227170241b2db21dc853685f962d6116241c55216b466d6 install-kit-awindows-20260427-211240/ansible/tasks/provision_ct_and_deploy_aw.yml a50dbadbf619342c2178e255b68f69a36503756daf80eedd9170311c63964f2e install-kit-awindows-20260427-211240/aw-server/activitywatch-server.service 2dbf55d4a8f204ebdc97af926d90435932c0aad7a2431e2b9987e47c5abf71a9 install-kit-awindows-20260427-211240/aw-server/apply_webui_ru_patch.sh 07d4e583f6e9757a11f01558e1f15cfd73c4d82695f1768204f2f50621712168 install-kit-awindows-20260427-211240/aw-server/aw-host-groups.json @@ -21,17 +22,18 @@ a50dbadbf619342c2178e255b68f69a36503756daf80eedd9170311c63964f2e install-kit-aw dce731fdfdcfd773c154d12dbd6b9e621a0bff17ced5a05a65f0fdcb1adcb70f install-kit-awindows-20260427-211240/aw-server/install_aw_server.sh 1856e9f44636030b0cb9ece37ba2a0618eb5187fa82c7969976c1bb5f10fc622 install-kit-awindows-20260427-211240/aw-server/settings/classes-worktime.json ff07b90cb6a7f09b27d522307cf55b0359e136a2e695190b8564e859f14f9204 install-kit-awindows-20260427-211240/aw-server/settings/views-default.json -59307d284caa74eb3dc129765f9db93b6e8dfd5b1d960b98f347a332b23f82dc install-kit-awindows-20260427-211240/server-configs-192.168.100.21/phase2-admin.deployment-config.json -f2cee1872bf274f15dcfb8fb595fb20a11d228a4bae0930dc6cb918a6f800756 install-kit-awindows-20260427-211240/server-configs-192.168.100.21/phase2-u2u5.deployment-config.json -6aefedcdac8c1d3823c9f4065b051a67a221a3e9424c913a673667b2a23ea1e7 install-kit-awindows-20260427-211240/server-configs-192.168.100.21/phase2-user1.deployment-config.json +1654cf688560465fcce629468a0be869b0c81b056179e1b5e9bcc7a2d5ed6ce0 install-kit-awindows-20260427-211240/server-configs-192.168.100.21/awatch-rus-admin.deployment-config.json +ac022b9a074c542ade66d18af8db385f6c14376ac4eadd54ef033dfa7f60fb50 install-kit-awindows-20260427-211240/server-configs-192.168.100.21/awatch-rus-u2u5.deployment-config.json +98cf4c54d494318b74cfbd3c8892830a34928bd76a2296d5333e5e176c1f3f49 install-kit-awindows-20260427-211240/server-configs-192.168.100.21/awatch-rus-user1.deployment-config.json 33aa34b89246d6c079ef9afe2f5cd153bd9d5946b69a175ff6fd678c77f61da5 install-kit-awindows-20260427-211240/windows/ActivityWatch.Windows.Common.psd1 -d506614168227fa01fa481289079b432b6d8846d5ee8961cff8c21fd0bf7ea8f install-kit-awindows-20260427-211240/windows/ActivityWatch.Windows.Common.psm1 -2a0b94ddad43a6bc684037243e636a54c168d8d4ad25b29778c4d78180da2532 install-kit-awindows-20260427-211240/windows/browser-domains-native-collector.ps1 -98bfcf5dca972f1ba1845bbca546133c192824ec40dd2e55f4e6d59c24a834d1 install-kit-awindows-20260427-211240/windows/deploy-domain-users.ps1 -a19c2a98e6483eb921457f472d1cf62a76e344f2ef3621f04fafa3d7dc2df353 install-kit-awindows-20260427-211240/windows/deploy-ensemble.ps1 -2542425e02acd8a8b02ed701ca2382cf7ae612be28441d1a10a40e48c6a13ad0 install-kit-awindows-20260427-211240/windows/deploy-single-user.ps1 -a2f963927c8b263a21aaffc0a926a058dcec65a04a5fa57c271d3dbe59f9347c install-kit-awindows-20260427-211240/windows/dlp-endpoint-signals-collector.ps1 +0cb9cd8d8b612429f79899c126f4141ab4fbbb6d919425c0b8fd8d0a74b1bd44 install-kit-awindows-20260427-211240/windows/ActivityWatch.Windows.Common.psm1 +7db2d3767ae81c877e8f04ecbc77a2fc26b2d9bbbf77d0e774fba0a7956bd0a6 install-kit-awindows-20260427-211240/windows/browser-domains-native-collector.ps1 +b497400a1ba57cddf28dc8e217115dc85eccb67150cbdbb6a81abd804ed20109 install-kit-awindows-20260427-211240/windows/deploy-domain-users.ps1 +973db51854fc744539a7b75e13c6749e822a08a79f47447485611f07e8f902a8 install-kit-awindows-20260427-211240/windows/deploy-ensemble.ps1 +0d66dcb551889e6b7bc21b29d53b77e46f41d61dd2e4e0d9913dbf0f8bd5eb18 install-kit-awindows-20260427-211240/windows/deploy-single-user.ps1 +8857f3e17f3f3ed6f211ce7f0a0c46c586a2548541078401ee3befaa20924b3d install-kit-awindows-20260427-211240/windows/dlp-endpoint-signals-collector.ps1 aef0032edd9b1e0c54f7b575664ed511dfc6cb53364e7496cbc95e137678e11a install-kit-awindows-20260427-211240/windows/dlp-policy.example.json -ade74a55ce00d9295f2efa0fd72f987688154c93f1142ce0eb6e982f07271be7 install-kit-awindows-20260427-211240/windows/hardening-recovery.ps1 -88ffe06093ef5f7247bd2b990b0c8f801c706a26dc87725bb1194504fab7e306 install-kit-awindows-20260427-211240/windows/validate-deployment.ps1 +f03886caf56c6838e8a163d6b48d1f229e83a5682aeeb447c3a65f13d62dbca4 install-kit-awindows-20260427-211240/windows/hardening-recovery.ps1 +5dcf249742bd82fa0c803c878bfa0a1344b7b14df85c05f12e8c205663aea158 install-kit-awindows-20260427-211240/windows/validate-deployment.ps1 731098681d89b9af6f3872abd586ac3b1faba2d7f9340211e503f52ad0243b3f install-kit-awindows-20260427-211240/windows/web-category-rules.example.json +41171f0d7ed1e8b00dd0faf1a4b75c9cb063fd09aba8d333851a7a31fb297de1 install-kit-awindows-20260427-211240/windows/worktime-session-collector.ps1 diff --git a/install-kit-awindows-20260427-211240/README-INSTALL-KIT.txt b/install-kit-awindows-20260427-211240/README-INSTALL-KIT.txt index 204ed7a..c59015e 100644 --- a/install-kit-awindows-20260427-211240/README-INSTALL-KIT.txt +++ b/install-kit-awindows-20260427-211240/README-INSTALL-KIT.txt @@ -4,7 +4,7 @@ Includes: - windows/* (deploy scripts, collectors, common module, configs/examples) - ansible/* (Windows and AW server playbooks, examples, inventory, tasks) - aw-server/* (server installer, RU patch loader, host groups, default settings) -- server-configs-192.168.100.21/* (working Windows Phase2 config snapshots) +- server-configs-192.168.100.21/* (working Windows/RDP config snapshots) Source: - Local project snapshot at build time. diff --git a/install-kit-awindows-20260427-211240/ansible/README.md b/install-kit-awindows-20260427-211240/ansible/README.md index 1727108..d642c98 100644 --- a/install-kit-awindows-20260427-211240/ansible/README.md +++ b/install-kit-awindows-20260427-211240/ansible/README.md @@ -4,7 +4,7 @@ - деплой на уже существующий Debian host/CT; - полный цикл с нуля в Proxmox: создание CT + bootstrap + установка ActivityWatch + RU patch; -- централизованное развёртывание Windows phase-2 collector'ов по WinRM; +- централизованное развёртывание Windows/RDP collector'ов по WinRM; - развёртывание внешнего pfSense poller'а на Debian/Ubuntu utility VM. ## Файлы @@ -12,7 +12,7 @@ - `ansible/deploy_aw_server.yml` — основной playbook для уже существующего Debian/CT host. - `ansible/provision_proxmox_ct_and_deploy_aw.yml` — полный playbook для Proxmox. - `ansible/provision_proxmox_ct_matrix_and_deploy_aw.yml` — массовый полный playbook (несколько CT). -- `ansible/deploy_aw_windows_phase2.yml` — WinRM playbook для развёртывания Windows/RDP collector'ов. +- `ansible/deploy_aw_windows.yml` — WinRM playbook для развёртывания Windows/RDP collector'ов. - `ansible/deploy_aw_pfsense_poller.yml` — развёртывание pfSense poller'а. - `ansible/install_full_stack.yml` — полный установочный playbook (оркестратор всех этапов). - `ansible/inventory.example.ini` — шаблон inventory. @@ -44,7 +44,7 @@ ansible-playbook -i inventory.ini install_full_stack.yml - `provision_proxmox_ct_and_deploy_aw.yml` (если есть хосты в группе `[proxmox]`); - `deploy_aw_server.yml` (группа `[aw_server]`); -- `deploy_aw_windows_phase2.yml` (группа `[aw_windows]`); +- `deploy_aw_windows.yml` (группа `[aw_windows]`); - `deploy_aw_pfsense_poller.yml` (группа `[aw_pfsense_pollers]`). Пустые группы в `inventory.ini` безопасны: соответствующий play будет пропущен. @@ -75,7 +75,7 @@ cd ansible ansible-playbook -i inventory.ini provision_proxmox_ct_matrix_and_deploy_aw.yml ``` -## Windows phase-2 rollout (WinRM) +## Windows/RDP rollout (WinRM) 1. Подготовьте inventory и vars: - `cp ansible/inventory.example.ini ansible/inventory.ini` @@ -87,13 +87,13 @@ ansible-playbook -i inventory.ini provision_proxmox_ct_matrix_and_deploy_aw.yml ```bash cd ansible -ansible-playbook -i inventory.ini deploy_aw_windows_phase2.yml +ansible-playbook -i inventory.ini deploy_aw_windows.yml ``` Playbook: - выгружает полный `windows/*` toolkit на целевой хост в InnoSetup-compatible каталог `C:\Program Files\AWatch-rus\windows`, включая DLP и `worktime-session-collector.ps1`; -- выполняет `deploy-ensemble.ps1` (deploy + hardening/recovery) с phase-2 policy/rules; +- выполняет `deploy-ensemble.ps1` (deploy + hardening/recovery) с policy/rules из AWatch-rus toolkit; - после deploy принудительно запускает `ActivityWatch Recovery` и все `ActivityWatch Launch *` задачи; - выполняет API smoke-check bucket `aw-watcher-afk_` и ожидает свежие `not-afk` события; - запускает `validate-deployment.ps1`; @@ -107,9 +107,9 @@ Playbook: - `aw_windows_incident_screenshot_enabled: false` — не делать скриншот при DLP-инциденте; - `aw_windows_incident_artifacts_root: 'C:\...\incident-artifacts'` — переопределить путь артефактов; - `aw_windows_deploy_root: 'C:\Program Files\AWatch-rus'` — каталог toolkit, совпадает с InnoSetup `{app}`; -- `aw_windows_install_root: 'C:\Program Files\ActivityWatch-Phase2'` — каталог бинарников, совпадает с InnoSetup `AwDefaultInstallRoot`; -- `aw_windows_state_root: 'C:\ProgramData\ActivityWatch-Phase2'` — каталог состояния/отчётов, совпадает с InnoSetup `AwDefaultStateRoot`; -- `aw_windows_validation_remote_path: '{{ aw_windows_state_root }}\aw_validate_phase2_ansible.json'` — отчёт Ansible-валидации хранится рядом с `ensemble-report-*.json`; +- `aw_windows_install_root: 'C:\Program Files\AWatch-rus\bin'` — каталог бинарников, совпадает с InnoSetup `AwDefaultInstallRoot`; +- `aw_windows_state_root: 'C:\ProgramData\AWatch-rus'` — каталог состояния/отчётов, совпадает с InnoSetup `AwDefaultStateRoot`; +- `aw_windows_validation_remote_path: '{{ aw_windows_state_root }}\aw_validate_ansible.json'` — отчёт Ansible-валидации хранится рядом с `ensemble-report-*.json`; - `aw_windows_package_version`, `aw_windows_package_url`, `aw_windows_package_zip_path` — версия и источник Windows-пакета ActivityWatch; - `aw_windows_api_smoke_check_bucket: ""` — автоматически использовать `aw-watcher-afk_`; - `aw_windows_fail_on_validation_error: true` — завершать playbook ошибкой, если `validate-deployment.ps1` возвращает `overallOk=false`; diff --git a/install-kit-awindows-20260427-211240/ansible/deploy_aw_windows_phase2.yml b/install-kit-awindows-20260427-211240/ansible/deploy_aw_windows.yml similarity index 94% rename from install-kit-awindows-20260427-211240/ansible/deploy_aw_windows_phase2.yml rename to install-kit-awindows-20260427-211240/ansible/deploy_aw_windows.yml index 38b33d8..41d4657 100644 --- a/install-kit-awindows-20260427-211240/ansible/deploy_aw_windows_phase2.yml +++ b/install-kit-awindows-20260427-211240/ansible/deploy_aw_windows.yml @@ -1,5 +1,5 @@ --- -- name: Развернуть Windows/RDP phase-2 collector'ы AWatch-rus +- name: Развернуть Windows/RDP collector'ы AWatch-rus hosts: aw_windows gather_facts: false @@ -21,8 +21,8 @@ - user5 aw_windows_extra_users: [] aw_windows_users_effective: "{{ (aw_windows_users + aw_windows_extra_users) | unique }}" - aw_windows_install_root: "C:\\Program Files\\ActivityWatch-Phase2" - aw_windows_state_root: "C:\\ProgramData\\ActivityWatch-Phase2" + aw_windows_install_root: "C:\\Program Files\\AWatch-rus\\bin" + aw_windows_state_root: "C:\\ProgramData\\AWatch-rus" aw_windows_afk_enabled: true aw_windows_window_enabled: true aw_windows_local_agent_logs_enabled: false @@ -33,7 +33,7 @@ aw_windows_skip_hardening: false aw_windows_rules_path: "{{ aw_windows_deploy_root }}\\windows\\web-category-rules.example.json" aw_windows_policy_path: "{{ aw_windows_deploy_root }}\\windows\\dlp-policy.example.json" - aw_windows_validation_remote_path: "{{ aw_windows_state_root }}\\aw_validate_phase2_ansible.json" + aw_windows_validation_remote_path: "{{ aw_windows_state_root }}\\aw_validate_ansible.json" aw_windows_validation_local_dir: "/tmp/aw-rus-validation" aw_windows_launch_task_pattern: "ActivityWatch Launch *" aw_windows_recovery_task_name: "ActivityWatch Recovery" @@ -89,7 +89,7 @@ {{ user }} {% endfor -%} - - name: Запустить phase-2 ensemble развёртывание + - name: Запустить Windows/RDP ensemble развёртывание ansible.windows.win_powershell: script: | $ErrorActionPreference = 'Stop' @@ -196,11 +196,11 @@ - name: Забрать validation report ansible.builtin.fetch: src: "{{ aw_windows_validation_remote_path }}" - dest: "{{ aw_windows_validation_local_dir }}/{{ inventory_hostname }}-aw_validate_phase2_ansible.json" + dest: "{{ aw_windows_validation_local_dir }}/{{ inventory_hostname }}-aw_validate_ansible.json" flat: true - name: Показать путь к отчёту ansible.builtin.debug: msg: - - "Windows phase2 развёртывание завершено на {{ inventory_hostname }}." - - "Отчёт проверки: {{ aw_windows_validation_local_dir }}/{{ inventory_hostname }}-aw_validate_phase2_ansible.json" + - "Windows/RDP развёртывание завершено на {{ inventory_hostname }}." + - "Отчёт проверки: {{ aw_windows_validation_local_dir }}/{{ inventory_hostname }}-aw_validate_ansible.json" diff --git a/install-kit-awindows-20260427-211240/ansible/group_vars/windows.example.yml b/install-kit-awindows-20260427-211240/ansible/group_vars/windows.example.yml index ecc4c88..ad29b15 100644 --- a/install-kit-awindows-20260427-211240/ansible/group_vars/windows.example.yml +++ b/install-kit-awindows-20260427-211240/ansible/group_vars/windows.example.yml @@ -18,9 +18,9 @@ aw_windows_extra_users: [] # aw_windows_extra_users: # - Администратор -# Рекомендуемый изолированный профиль для фазового раската. -aw_windows_install_root: "C:\\Program Files\\ActivityWatch-Phase2" -aw_windows_state_root: "C:\\ProgramData\\ActivityWatch-Phase2" +# Единые Windows/RDP пути: те же, что использует InnoSetup. +aw_windows_install_root: "C:\\Program Files\\AWatch-rus\\bin" +aw_windows_state_root: "C:\\ProgramData\\AWatch-rus" aw_windows_afk_enabled: true aw_windows_window_enabled: true aw_windows_local_agent_logs_enabled: false @@ -33,7 +33,7 @@ aw_windows_skip_hardening: false aw_windows_rules_path: "{{ aw_windows_deploy_root }}\\windows\\web-category-rules.example.json" aw_windows_policy_path: "{{ aw_windows_deploy_root }}\\windows\\dlp-policy.example.json" -aw_windows_validation_remote_path: "{{ aw_windows_state_root }}\\aw_validate_phase2_ansible.json" +aw_windows_validation_remote_path: "{{ aw_windows_state_root }}\\aw_validate_ansible.json" aw_windows_validation_local_dir: "/tmp/aw-rus-validation" aw_windows_fail_on_validation_error: true diff --git a/install-kit-awindows-20260427-211240/ansible/install_full_stack.yml b/install-kit-awindows-20260427-211240/ansible/install_full_stack.yml index 0af14c9..cd3a7f6 100644 --- a/install-kit-awindows-20260427-211240/ansible/install_full_stack.yml +++ b/install-kit-awindows-20260427-211240/ansible/install_full_stack.yml @@ -12,5 +12,5 @@ - import_playbook: provision_proxmox_ct_and_deploy_aw.yml - import_playbook: deploy_aw_server.yml -- import_playbook: deploy_aw_windows_phase2.yml +- import_playbook: deploy_aw_windows.yml - import_playbook: deploy_aw_pfsense_poller.yml diff --git a/install-kit-awindows-20260427-211240/server-configs-192.168.100.21/phase2-admin.deployment-config.json b/install-kit-awindows-20260427-211240/server-configs-192.168.100.21/awatch-rus-admin.deployment-config.json similarity index 64% rename from install-kit-awindows-20260427-211240/server-configs-192.168.100.21/phase2-admin.deployment-config.json rename to install-kit-awindows-20260427-211240/server-configs-192.168.100.21/awatch-rus-admin.deployment-config.json index 2b6d20c..2899c58 100644 --- a/install-kit-awindows-20260427-211240/server-configs-192.168.100.21/phase2-admin.deployment-config.json +++ b/install-kit-awindows-20260427-211240/server-configs-192.168.100.21/awatch-rus-admin.deployment-config.json @@ -1,57 +1,57 @@ -{ - "version": 1, - "generatedAtUtc": "2026-04-27T01:14:21.9184268Z", - "server": { - "host": "10.10.10.13", - "port": 5600, - "scheme": "http" - }, - "paths": { - "installRoot": "C:\\Program Files\\ActivityWatch-Phase2-admin", - "stateRoot": "C:\\ProgramData\\ActivityWatch\\phase2-admin", - "logsRoot": "C:\\ProgramData\\ActivityWatch\\phase2-admin\\logs", - "collectorScript": "C:\\ProgramData\\ActivityWatch\\phase2-admin\\browser-domains-native-collector.ps1", - "endpointCollectorScript": "C:\\ProgramData\\ActivityWatch\\phase2-admin\\dlp-endpoint-signals-collector.ps1", - "rulesPath": "C:\\ProgramData\\ActivityWatch\\phase2-admin\\web-category-rules.json", - "policyPath": "C:\\ProgramData\\ActivityWatch\\phase2-admin\\dlp-policy.json", - "launchScript": "C:\\ProgramData\\ActivityWatch\\phase2-admin\\launch-watchers.ps1", - "recoveryScript": "C:\\ProgramData\\ActivityWatch\\phase2-admin\\recovery-loop.ps1" - }, - "collector": { - "pollSeconds": 5, - "pulseSeconds": 30 - }, - "collectors": { - "afkEnabled": true, - "windowEnabled": true - }, - "logging": { - "localAgentLogsEnabled": false - }, - "incidentCapture": { - "enabled": true, - "screenshotEnabled": true, - "artifactsRoot": "C:\\ProgramData\\ActivityWatch\\phase2-admin\\incident-artifacts" - }, - "sessionEvents": { - "logonEnabled": true, - "bucketPrefix": "aw-session-events" - }, - "recovery": { - "intervalSeconds": 180, - "taskName": "ActivityWatch Recovery" - }, - "dlp": { - "incidentBucketPrefix": "aw-dlp-incidents", - "enabled": true - }, - "package": { - "version": "v0.13.2" - }, - "userTasks": [ - { - "UserId": "SHARKON2025\\Администратор", - "LaunchTaskName": "ActivityWatch Launch [SHARKON2025_РђРґРјРёРЅРёСЃС_СЂР_С_РѕСЂ]" - } - ] -} +{ + "version": 1, + "generatedAtUtc": "2026-04-27T01:14:21.9184268Z", + "server": { + "host": "10.10.10.13", + "port": 5600, + "scheme": "http" + }, + "paths": { + "installRoot": "C:\\Program Files\\AWatch-rus\\bin", + "stateRoot": "C:\\ProgramData\\AWatch-rus", + "logsRoot": "C:\\ProgramData\\AWatch-rus\\logs", + "collectorScript": "C:\\ProgramData\\AWatch-rus\\browser-domains-native-collector.ps1", + "endpointCollectorScript": "C:\\ProgramData\\AWatch-rus\\dlp-endpoint-signals-collector.ps1", + "rulesPath": "C:\\ProgramData\\AWatch-rus\\web-category-rules.json", + "policyPath": "C:\\ProgramData\\AWatch-rus\\dlp-policy.json", + "launchScript": "C:\\ProgramData\\AWatch-rus\\launch-watchers.ps1", + "recoveryScript": "C:\\ProgramData\\AWatch-rus\\recovery-loop.ps1" + }, + "collector": { + "pollSeconds": 5, + "pulseSeconds": 30 + }, + "collectors": { + "afkEnabled": true, + "windowEnabled": true + }, + "logging": { + "localAgentLogsEnabled": false + }, + "incidentCapture": { + "enabled": true, + "screenshotEnabled": true, + "artifactsRoot": "C:\\ProgramData\\AWatch-rus\\incident-artifacts" + }, + "sessionEvents": { + "logonEnabled": true, + "bucketPrefix": "aw-session-events" + }, + "recovery": { + "intervalSeconds": 180, + "taskName": "ActivityWatch Recovery" + }, + "dlp": { + "incidentBucketPrefix": "aw-dlp-incidents", + "enabled": true + }, + "package": { + "version": "v0.13.2" + }, + "userTasks": [ + { + "UserId": "SHARKON2025\\Администратор", + "LaunchTaskName": "ActivityWatch Launch [SHARKON2025_РђРґРјРёРЅРёСЃС_СЂР_С_РѕСЂ]" + } + ] +} diff --git a/install-kit-awindows-20260427-211240/server-configs-192.168.100.21/phase2-u2u5.deployment-config.json b/install-kit-awindows-20260427-211240/server-configs-192.168.100.21/awatch-rus-u2u5.deployment-config.json similarity index 69% rename from install-kit-awindows-20260427-211240/server-configs-192.168.100.21/phase2-u2u5.deployment-config.json rename to install-kit-awindows-20260427-211240/server-configs-192.168.100.21/awatch-rus-u2u5.deployment-config.json index a0f344f..cdac8f6 100644 --- a/install-kit-awindows-20260427-211240/server-configs-192.168.100.21/phase2-u2u5.deployment-config.json +++ b/install-kit-awindows-20260427-211240/server-configs-192.168.100.21/awatch-rus-u2u5.deployment-config.json @@ -1,69 +1,69 @@ -{ - "version": 1, - "generatedAtUtc": "2026-04-27T01:09:42.4193209Z", - "server": { - "host": "10.10.10.13", - "port": 5600, - "scheme": "http" - }, - "paths": { - "installRoot": "C:\\Program Files\\ActivityWatch-Phase2-u2u5", - "stateRoot": "C:\\ProgramData\\ActivityWatch\\phase2-u2u5", - "logsRoot": "C:\\ProgramData\\ActivityWatch\\phase2-u2u5\\logs", - "collectorScript": "C:\\ProgramData\\ActivityWatch\\phase2-u2u5\\browser-domains-native-collector.ps1", - "endpointCollectorScript": "C:\\ProgramData\\ActivityWatch\\phase2-u2u5\\dlp-endpoint-signals-collector.ps1", - "rulesPath": "C:\\ProgramData\\ActivityWatch\\phase2-u2u5\\web-category-rules.json", - "policyPath": "C:\\ProgramData\\ActivityWatch\\phase2-u2u5\\dlp-policy.json", - "launchScript": "C:\\ProgramData\\ActivityWatch\\phase2-u2u5\\launch-watchers.ps1", - "recoveryScript": "C:\\ProgramData\\ActivityWatch\\phase2-u2u5\\recovery-loop.ps1" - }, - "collector": { - "pollSeconds": 5, - "pulseSeconds": 30 - }, - "collectors": { - "afkEnabled": true, - "windowEnabled": true - }, - "logging": { - "localAgentLogsEnabled": false - }, - "incidentCapture": { - "enabled": true, - "screenshotEnabled": true, - "artifactsRoot": "C:\\ProgramData\\ActivityWatch\\phase2-u2u5\\incident-artifacts" - }, - "sessionEvents": { - "logonEnabled": true, - "bucketPrefix": "aw-session-events" - }, - "recovery": { - "intervalSeconds": 180, - "taskName": "ActivityWatch Recovery" - }, - "dlp": { - "incidentBucketPrefix": "aw-dlp-incidents", - "enabled": true - }, - "package": { - "version": "v0.13.2" - }, - "userTasks": [ - { - "UserId": "SHARKON2025\\user2", - "LaunchTaskName": "ActivityWatch Launch [SHARKON2025_user2]" - }, - { - "UserId": "SHARKON2025\\user3", - "LaunchTaskName": "ActivityWatch Launch [SHARKON2025_user3]" - }, - { - "UserId": "SHARKON2025\\user4", - "LaunchTaskName": "ActivityWatch Launch [SHARKON2025_user4]" - }, - { - "UserId": "SHARKON2025\\user5", - "LaunchTaskName": "ActivityWatch Launch [SHARKON2025_user5]" - } - ] -} +{ + "version": 1, + "generatedAtUtc": "2026-04-27T01:09:42.4193209Z", + "server": { + "host": "10.10.10.13", + "port": 5600, + "scheme": "http" + }, + "paths": { + "installRoot": "C:\\Program Files\\AWatch-rus\\bin", + "stateRoot": "C:\\ProgramData\\AWatch-rus", + "logsRoot": "C:\\ProgramData\\AWatch-rus\\logs", + "collectorScript": "C:\\ProgramData\\AWatch-rus\\browser-domains-native-collector.ps1", + "endpointCollectorScript": "C:\\ProgramData\\AWatch-rus\\dlp-endpoint-signals-collector.ps1", + "rulesPath": "C:\\ProgramData\\AWatch-rus\\web-category-rules.json", + "policyPath": "C:\\ProgramData\\AWatch-rus\\dlp-policy.json", + "launchScript": "C:\\ProgramData\\AWatch-rus\\launch-watchers.ps1", + "recoveryScript": "C:\\ProgramData\\AWatch-rus\\recovery-loop.ps1" + }, + "collector": { + "pollSeconds": 5, + "pulseSeconds": 30 + }, + "collectors": { + "afkEnabled": true, + "windowEnabled": true + }, + "logging": { + "localAgentLogsEnabled": false + }, + "incidentCapture": { + "enabled": true, + "screenshotEnabled": true, + "artifactsRoot": "C:\\ProgramData\\AWatch-rus\\incident-artifacts" + }, + "sessionEvents": { + "logonEnabled": true, + "bucketPrefix": "aw-session-events" + }, + "recovery": { + "intervalSeconds": 180, + "taskName": "ActivityWatch Recovery" + }, + "dlp": { + "incidentBucketPrefix": "aw-dlp-incidents", + "enabled": true + }, + "package": { + "version": "v0.13.2" + }, + "userTasks": [ + { + "UserId": "SHARKON2025\\user2", + "LaunchTaskName": "ActivityWatch Launch [SHARKON2025_user2]" + }, + { + "UserId": "SHARKON2025\\user3", + "LaunchTaskName": "ActivityWatch Launch [SHARKON2025_user3]" + }, + { + "UserId": "SHARKON2025\\user4", + "LaunchTaskName": "ActivityWatch Launch [SHARKON2025_user4]" + }, + { + "UserId": "SHARKON2025\\user5", + "LaunchTaskName": "ActivityWatch Launch [SHARKON2025_user5]" + } + ] +} diff --git a/install-kit-awindows-20260427-211240/server-configs-192.168.100.21/phase2-user1.deployment-config.json b/install-kit-awindows-20260427-211240/server-configs-192.168.100.21/awatch-rus-user1.deployment-config.json similarity index 63% rename from install-kit-awindows-20260427-211240/server-configs-192.168.100.21/phase2-user1.deployment-config.json rename to install-kit-awindows-20260427-211240/server-configs-192.168.100.21/awatch-rus-user1.deployment-config.json index 0eecca9..8a42851 100644 --- a/install-kit-awindows-20260427-211240/server-configs-192.168.100.21/phase2-user1.deployment-config.json +++ b/install-kit-awindows-20260427-211240/server-configs-192.168.100.21/awatch-rus-user1.deployment-config.json @@ -1,57 +1,57 @@ -{ - "version": 1, - "generatedAtUtc": "2026-04-27T01:09:38.9519788Z", - "server": { - "host": "10.10.10.13", - "port": 5600, - "scheme": "http" - }, - "paths": { - "installRoot": "C:\\Program Files\\ActivityWatch-Phase2", - "stateRoot": "C:\\ProgramData\\ActivityWatch\\phase2-user1", - "logsRoot": "C:\\ProgramData\\ActivityWatch\\phase2-user1\\logs", - "collectorScript": "C:\\ProgramData\\ActivityWatch\\phase2-user1\\browser-domains-native-collector.ps1", - "endpointCollectorScript": "C:\\ProgramData\\ActivityWatch\\phase2-user1\\dlp-endpoint-signals-collector.ps1", - "rulesPath": "C:\\ProgramData\\ActivityWatch\\phase2-user1\\web-category-rules.json", - "policyPath": "C:\\ProgramData\\ActivityWatch\\phase2-user1\\dlp-policy.json", - "launchScript": "C:\\ProgramData\\ActivityWatch\\phase2-user1\\launch-watchers.ps1", - "recoveryScript": "C:\\ProgramData\\ActivityWatch\\phase2-user1\\recovery-loop.ps1" - }, - "collector": { - "pollSeconds": 5, - "pulseSeconds": 30 - }, - "collectors": { - "afkEnabled": true, - "windowEnabled": true - }, - "logging": { - "localAgentLogsEnabled": false - }, - "incidentCapture": { - "enabled": true, - "screenshotEnabled": true, - "artifactsRoot": "C:\\ProgramData\\ActivityWatch\\phase2-user1\\incident-artifacts" - }, - "sessionEvents": { - "logonEnabled": true, - "bucketPrefix": "aw-session-events" - }, - "recovery": { - "intervalSeconds": 180, - "taskName": "ActivityWatch Recovery" - }, - "dlp": { - "incidentBucketPrefix": "aw-dlp-incidents", - "enabled": true - }, - "package": { - "version": "v0.13.2" - }, - "userTasks": [ - { - "UserId": "SHARKON2025\\user1", - "LaunchTaskName": "ActivityWatch Launch [SHARKON2025_user1]" - } - ] -} +{ + "version": 1, + "generatedAtUtc": "2026-04-27T01:09:38.9519788Z", + "server": { + "host": "10.10.10.13", + "port": 5600, + "scheme": "http" + }, + "paths": { + "installRoot": "C:\\Program Files\\AWatch-rus\\bin", + "stateRoot": "C:\\ProgramData\\AWatch-rus", + "logsRoot": "C:\\ProgramData\\AWatch-rus\\logs", + "collectorScript": "C:\\ProgramData\\AWatch-rus\\browser-domains-native-collector.ps1", + "endpointCollectorScript": "C:\\ProgramData\\AWatch-rus\\dlp-endpoint-signals-collector.ps1", + "rulesPath": "C:\\ProgramData\\AWatch-rus\\web-category-rules.json", + "policyPath": "C:\\ProgramData\\AWatch-rus\\dlp-policy.json", + "launchScript": "C:\\ProgramData\\AWatch-rus\\launch-watchers.ps1", + "recoveryScript": "C:\\ProgramData\\AWatch-rus\\recovery-loop.ps1" + }, + "collector": { + "pollSeconds": 5, + "pulseSeconds": 30 + }, + "collectors": { + "afkEnabled": true, + "windowEnabled": true + }, + "logging": { + "localAgentLogsEnabled": false + }, + "incidentCapture": { + "enabled": true, + "screenshotEnabled": true, + "artifactsRoot": "C:\\ProgramData\\AWatch-rus\\incident-artifacts" + }, + "sessionEvents": { + "logonEnabled": true, + "bucketPrefix": "aw-session-events" + }, + "recovery": { + "intervalSeconds": 180, + "taskName": "ActivityWatch Recovery" + }, + "dlp": { + "incidentBucketPrefix": "aw-dlp-incidents", + "enabled": true + }, + "package": { + "version": "v0.13.2" + }, + "userTasks": [ + { + "UserId": "SHARKON2025\\user1", + "LaunchTaskName": "ActivityWatch Launch [SHARKON2025_user1]" + } + ] +} diff --git a/install-kit-awindows-20260427-211240/windows/ActivityWatch.Windows.Common.psm1 b/install-kit-awindows-20260427-211240/windows/ActivityWatch.Windows.Common.psm1 index 89affa3..9c9002c 100755 --- a/install-kit-awindows-20260427-211240/windows/ActivityWatch.Windows.Common.psm1 +++ b/install-kit-awindows-20260427-211240/windows/ActivityWatch.Windows.Common.psm1 @@ -547,7 +547,7 @@ function Send-LogonMarkerIfNeeded { `$stateRoot = [string]`$Config.paths.stateRoot `$markerRoots = New-Object System.Collections.Generic.List[string] if (-not [string]::IsNullOrWhiteSpace(`$env:LOCALAPPDATA)) { - `$markerRoots.Add((Join-Path `$env:LOCALAPPDATA 'ActivityWatch-Phase2\markers')) + `$markerRoots.Add((Join-Path `$env:LOCALAPPDATA 'AWatch-rus\markers')) } if (-not [string]::IsNullOrWhiteSpace(`$stateRoot)) { `$markerRoots.Add((Join-Path `$stateRoot 'markers')) @@ -593,7 +593,7 @@ function Send-LogonMarkerIfNeeded { userId = "`$(`$env:USERDOMAIN)\`$(`$env:USERNAME)" sessionId = `$SessionId hostname = `$script:Hostname - source = 'launch-watchers-phase2' + source = 'launch-watchers-awatch-rus' } } | ConvertTo-Json -Depth 5 -Compress diff --git a/install-kit-awindows-20260427-211240/windows/browser-domains-native-collector.ps1 b/install-kit-awindows-20260427-211240/windows/browser-domains-native-collector.ps1 index 28de28e..d0c809f 100755 --- a/install-kit-awindows-20260427-211240/windows/browser-domains-native-collector.ps1 +++ b/install-kit-awindows-20260427-211240/windows/browser-domains-native-collector.ps1 @@ -1,6 +1,6 @@ [CmdletBinding()] param( - [string]$ConfigPath = 'C:\ProgramData\ActivityWatch-Phase2\deployment-config.json', + [string]$ConfigPath = 'C:\ProgramData\AWatch-rus\deployment-config.json', [string]$ServerHost, [int]$ServerPort, [ValidateSet('http', 'https')] @@ -52,15 +52,15 @@ $deploymentConfig = Get-DeploymentConfig -Path $ConfigPath $resolvedServerHost = if ($ServerHost) { $ServerHost } elseif ($deploymentConfig) { [string]$deploymentConfig.server.host } else { throw 'Укажите ServerHost или подготовьте deployment-config.json.' } $resolvedServerPort = if ($PSBoundParameters.ContainsKey('ServerPort')) { $ServerPort } elseif ($deploymentConfig) { [int]$deploymentConfig.server.port } else { 5600 } $resolvedServerScheme = if ($ServerScheme) { $ServerScheme } elseif ($deploymentConfig) { [string]$deploymentConfig.server.scheme } else { 'http' } -$resolvedRulesPath = if ($RulesPath) { $RulesPath } elseif ($deploymentConfig) { [string]$deploymentConfig.paths.rulesPath } else { 'C:\ProgramData\ActivityWatch-Phase2\web-category-rules.json' } -$resolvedPolicyPath = if ($PolicyPath) { $PolicyPath } elseif ($deploymentConfig) { [string]$deploymentConfig.paths.policyPath } else { 'C:\ProgramData\ActivityWatch-Phase2\dlp-policy.json' } +$resolvedRulesPath = if ($RulesPath) { $RulesPath } elseif ($deploymentConfig) { [string]$deploymentConfig.paths.rulesPath } else { 'C:\ProgramData\AWatch-rus\web-category-rules.json' } +$resolvedPolicyPath = if ($PolicyPath) { $PolicyPath } elseif ($deploymentConfig) { [string]$deploymentConfig.paths.policyPath } else { 'C:\ProgramData\AWatch-rus\dlp-policy.json' } $resolvedPollSeconds = if ($PSBoundParameters.ContainsKey('PollSeconds')) { $PollSeconds } elseif ($deploymentConfig) { [int]$deploymentConfig.collector.pollSeconds } else { 5 } $resolvedPulseSeconds = if ($PSBoundParameters.ContainsKey('PulseSeconds')) { $PulseSeconds } elseif ($deploymentConfig) { [int]$deploymentConfig.collector.pulseSeconds } else { 30 } -$resolvedLogsRoot = if ($deploymentConfig) { [string]$deploymentConfig.paths.logsRoot } else { 'C:\ProgramData\ActivityWatch-Phase2\logs' } +$resolvedLogsRoot = if ($deploymentConfig) { [string]$deploymentConfig.paths.logsRoot } else { 'C:\ProgramData\AWatch-rus\logs' } $resolvedLogPath = if ($LogPath) { $LogPath } else { Join-Path $resolvedLogsRoot ("browser-domains-{0}.log" -f $env:USERNAME) } $resolvedIncidentLogPath = if ($IncidentLogPath) { $IncidentLogPath } else { Join-Path $resolvedLogsRoot ("dlp-incidents-{0}.log" -f $env:USERNAME) } $resolvedLocalAgentLogsEnabled = if ($deploymentConfig -and $deploymentConfig.PSObject.Properties.Name -contains 'logging' -and $deploymentConfig.logging.PSObject.Properties.Name -contains 'localAgentLogsEnabled') { [bool]$deploymentConfig.logging.localAgentLogsEnabled } else { $true } -$resolvedIncidentArtifactsRoot = if ($deploymentConfig -and $deploymentConfig.PSObject.Properties.Name -contains 'incidentCapture' -and $deploymentConfig.incidentCapture.PSObject.Properties.Name -contains 'artifactsRoot') { [string]$deploymentConfig.incidentCapture.artifactsRoot } else { Join-Path $env:LOCALAPPDATA 'ActivityWatch-Phase2\\incident-artifacts' } +$resolvedIncidentArtifactsRoot = if ($deploymentConfig -and $deploymentConfig.PSObject.Properties.Name -contains 'incidentCapture' -and $deploymentConfig.incidentCapture.PSObject.Properties.Name -contains 'artifactsRoot') { [string]$deploymentConfig.incidentCapture.artifactsRoot } else { Join-Path $env:LOCALAPPDATA 'AWatch-rus\\incident-artifacts' } $resolvedIncidentScreenshotEnabled = if ($deploymentConfig -and $deploymentConfig.PSObject.Properties.Name -contains 'incidentCapture' -and $deploymentConfig.incidentCapture.PSObject.Properties.Name -contains 'screenshotEnabled') { [bool]$deploymentConfig.incidentCapture.screenshotEnabled } else { $true } if ($resolvedLocalAgentLogsEnabled -and -not (Test-Path -LiteralPath $resolvedLogsRoot)) { diff --git a/install-kit-awindows-20260427-211240/windows/deploy-domain-users.ps1 b/install-kit-awindows-20260427-211240/windows/deploy-domain-users.ps1 index d441de1..8518ba5 100755 --- a/install-kit-awindows-20260427-211240/windows/deploy-domain-users.ps1 +++ b/install-kit-awindows-20260427-211240/windows/deploy-domain-users.ps1 @@ -11,8 +11,8 @@ param( [string]$Version = 'v0.13.2', [string]$PackageUrl, [string]$PackageZipPath, - [string]$InstallRoot = 'C:\Program Files\ActivityWatch-Phase2', - [string]$StateRoot = 'C:\ProgramData\ActivityWatch-Phase2', + [string]$InstallRoot = 'C:\Program Files\AWatch-rus\bin', + [string]$StateRoot = 'C:\ProgramData\AWatch-rus', [int]$PollSeconds = 5, [int]$PulseSeconds = 30, [int]$RecoveryIntervalSeconds = 180, diff --git a/install-kit-awindows-20260427-211240/windows/deploy-ensemble.ps1 b/install-kit-awindows-20260427-211240/windows/deploy-ensemble.ps1 index 45fab28..24c873a 100644 --- a/install-kit-awindows-20260427-211240/windows/deploy-ensemble.ps1 +++ b/install-kit-awindows-20260427-211240/windows/deploy-ensemble.ps1 @@ -11,8 +11,8 @@ param( [string]$Version = 'v0.13.2', [string]$PackageUrl, [string]$PackageZipPath, - [string]$InstallRoot = 'C:\Program Files\ActivityWatch-Phase2', - [string]$StateRoot = 'C:\ProgramData\ActivityWatch-Phase2', + [string]$InstallRoot = 'C:\Program Files\AWatch-rus\bin', + [string]$StateRoot = 'C:\ProgramData\AWatch-rus', [int]$PollSeconds = 5, [int]$PulseSeconds = 30, [int]$RecoveryIntervalSeconds = 180, diff --git a/install-kit-awindows-20260427-211240/windows/deploy-single-user.ps1 b/install-kit-awindows-20260427-211240/windows/deploy-single-user.ps1 index d49be48..9b035e4 100755 --- a/install-kit-awindows-20260427-211240/windows/deploy-single-user.ps1 +++ b/install-kit-awindows-20260427-211240/windows/deploy-single-user.ps1 @@ -10,8 +10,8 @@ param( [string]$Version = 'v0.13.2', [string]$PackageUrl, [string]$PackageZipPath, - [string]$InstallRoot = 'C:\Program Files\ActivityWatch-Phase2', - [string]$StateRoot = 'C:\ProgramData\ActivityWatch-Phase2', + [string]$InstallRoot = 'C:\Program Files\AWatch-rus\bin', + [string]$StateRoot = 'C:\ProgramData\AWatch-rus', [int]$PollSeconds = 5, [int]$PulseSeconds = 30, [int]$RecoveryIntervalSeconds = 180, diff --git a/install-kit-awindows-20260427-211240/windows/dlp-endpoint-signals-collector.ps1 b/install-kit-awindows-20260427-211240/windows/dlp-endpoint-signals-collector.ps1 index 7c60664..471ad0a 100644 --- a/install-kit-awindows-20260427-211240/windows/dlp-endpoint-signals-collector.ps1 +++ b/install-kit-awindows-20260427-211240/windows/dlp-endpoint-signals-collector.ps1 @@ -1,6 +1,6 @@ [CmdletBinding()] param( - [string]$ConfigPath = 'C:\ProgramData\ActivityWatch-Phase2\deployment-config.json', + [string]$ConfigPath = 'C:\ProgramData\AWatch-rus\deployment-config.json', [string]$ServerHost, [int]$ServerPort, [ValidateSet('http', 'https')] @@ -81,7 +81,7 @@ function Send-EndpointSignalHeartbeat { username = $env:USERNAME sessionId = $script:SessionId hostname = $script:Hostname - source = 'endpoint-signals-phase2' + source = 'endpoint-signals-awatch-rus' } + $Data } | ConvertTo-Json -Depth 6 -Compress @@ -122,7 +122,7 @@ function Send-DlpIncidentHeartbeat { username = $env:USERNAME sessionId = $script:SessionId hostname = $script:Hostname - source = 'endpoint-signals-phase2' + source = 'endpoint-signals-awatch-rus' } + $Data + $captureData } | ConvertTo-Json -Depth 7 -Compress @@ -713,12 +713,12 @@ $deploymentConfig = Get-DeploymentConfig -Path $ConfigPath $resolvedServerHost = if ($ServerHost) { $ServerHost } elseif ($deploymentConfig) { [string]$deploymentConfig.server.host } else { throw 'Укажите ServerHost или подготовьте deployment-config.json.' } $resolvedServerPort = if ($PSBoundParameters.ContainsKey('ServerPort')) { $ServerPort } elseif ($deploymentConfig) { [int]$deploymentConfig.server.port } else { 5600 } $resolvedServerScheme = if ($ServerScheme) { $ServerScheme } elseif ($deploymentConfig) { [string]$deploymentConfig.server.scheme } else { 'http' } -$resolvedPolicyPath = if ($PolicyPath) { $PolicyPath } elseif ($deploymentConfig -and $deploymentConfig.paths.PSObject.Properties.Name -contains 'policyPath') { [string]$deploymentConfig.paths.policyPath } else { 'C:\ProgramData\ActivityWatch-Phase2\dlp-policy.json' } +$resolvedPolicyPath = if ($PolicyPath) { $PolicyPath } elseif ($deploymentConfig -and $deploymentConfig.paths.PSObject.Properties.Name -contains 'policyPath') { [string]$deploymentConfig.paths.policyPath } else { 'C:\ProgramData\AWatch-rus\dlp-policy.json' } $resolvedPollSeconds = if ($PSBoundParameters.ContainsKey('PollSeconds')) { $PollSeconds } elseif ($deploymentConfig) { [int]$deploymentConfig.collector.pollSeconds } else { 5 } -$resolvedLogsRoot = if ($deploymentConfig) { [string]$deploymentConfig.paths.logsRoot } else { 'C:\ProgramData\ActivityWatch-Phase2\logs' } +$resolvedLogsRoot = if ($deploymentConfig) { [string]$deploymentConfig.paths.logsRoot } else { 'C:\ProgramData\AWatch-rus\logs' } $resolvedLogPath = if ($LogPath) { $LogPath } else { Join-Path $resolvedLogsRoot ("endpoint-signals-{0}.log" -f $env:USERNAME) } $resolvedLocalAgentLogsEnabled = if ($deploymentConfig -and $deploymentConfig.PSObject.Properties.Name -contains 'logging' -and $deploymentConfig.logging.PSObject.Properties.Name -contains 'localAgentLogsEnabled') { [bool]$deploymentConfig.logging.localAgentLogsEnabled } else { $true } -$resolvedIncidentArtifactsRoot = if ($deploymentConfig -and $deploymentConfig.PSObject.Properties.Name -contains 'incidentCapture' -and $deploymentConfig.incidentCapture.PSObject.Properties.Name -contains 'artifactsRoot') { [string]$deploymentConfig.incidentCapture.artifactsRoot } else { Join-Path $env:LOCALAPPDATA 'ActivityWatch-Phase2\\incident-artifacts' } +$resolvedIncidentArtifactsRoot = if ($deploymentConfig -and $deploymentConfig.PSObject.Properties.Name -contains 'incidentCapture' -and $deploymentConfig.incidentCapture.PSObject.Properties.Name -contains 'artifactsRoot') { [string]$deploymentConfig.incidentCapture.artifactsRoot } else { Join-Path $env:LOCALAPPDATA 'AWatch-rus\\incident-artifacts' } $resolvedIncidentScreenshotEnabled = if ($deploymentConfig -and $deploymentConfig.PSObject.Properties.Name -contains 'incidentCapture' -and $deploymentConfig.incidentCapture.PSObject.Properties.Name -contains 'screenshotEnabled') { [bool]$deploymentConfig.incidentCapture.screenshotEnabled } else { $true } if ($resolvedLocalAgentLogsEnabled -and -not (Test-Path -LiteralPath $resolvedLogsRoot)) { diff --git a/install-kit-awindows-20260427-211240/windows/hardening-recovery.ps1 b/install-kit-awindows-20260427-211240/windows/hardening-recovery.ps1 index 45aba22..64e8d73 100755 --- a/install-kit-awindows-20260427-211240/windows/hardening-recovery.ps1 +++ b/install-kit-awindows-20260427-211240/windows/hardening-recovery.ps1 @@ -1,6 +1,6 @@ [CmdletBinding()] param( - [string]$ConfigPath = 'C:\ProgramData\ActivityWatch-Phase2\deployment-config.json', + [string]$ConfigPath = 'C:\ProgramData\AWatch-rus\deployment-config.json', [string]$ServerHost, [int]$ServerPort, [ValidateSet('http', 'https')] @@ -45,8 +45,8 @@ if (-not $existingConfig -and (-not $ServerHost)) { throw 'deployment-config.json отсутствует. Укажите -ServerHost и параметры пользователей либо сначала выполните скрипт развёртывания.' } -$effectiveStateRoot = if ($StateRoot) { $StateRoot } elseif ($existingConfig) { [string]$existingConfig.paths.stateRoot } else { 'C:\ProgramData\ActivityWatch-Phase2' } -$effectiveInstallRoot = if ($InstallRoot) { $InstallRoot } elseif ($existingConfig) { [string]$existingConfig.paths.installRoot } else { 'C:\Program Files\ActivityWatch-Phase2' } +$effectiveStateRoot = if ($StateRoot) { $StateRoot } elseif ($existingConfig) { [string]$existingConfig.paths.stateRoot } else { 'C:\ProgramData\AWatch-rus' } +$effectiveInstallRoot = if ($InstallRoot) { $InstallRoot } elseif ($existingConfig) { [string]$existingConfig.paths.installRoot } else { 'C:\Program Files\AWatch-rus\bin' } $effectiveLogsRoot = if ($existingConfig) { [string]$existingConfig.paths.logsRoot } else { Join-Path $effectiveStateRoot 'logs' } $effectiveConfigPath = if ($ConfigPath) { $ConfigPath } else { Join-Path $effectiveStateRoot 'deployment-config.json' } $effectiveLaunchScript = Join-Path $effectiveStateRoot 'launch-watchers.ps1' diff --git a/install-kit-awindows-20260427-211240/windows/validate-deployment.ps1 b/install-kit-awindows-20260427-211240/windows/validate-deployment.ps1 index 55202dc..52b35d2 100644 --- a/install-kit-awindows-20260427-211240/windows/validate-deployment.ps1 +++ b/install-kit-awindows-20260427-211240/windows/validate-deployment.ps1 @@ -1,6 +1,6 @@ [CmdletBinding()] param( - [string]$ConfigPath = 'C:\ProgramData\ActivityWatch-Phase2\deployment-config.json' + [string]$ConfigPath = 'C:\ProgramData\AWatch-rus\deployment-config.json' ) Set-StrictMode -Version Latest diff --git a/install-kit-awindows-20260427-211240/windows/worktime-session-collector.ps1 b/install-kit-awindows-20260427-211240/windows/worktime-session-collector.ps1 index 9259d3c..f1b04ef 100644 --- a/install-kit-awindows-20260427-211240/windows/worktime-session-collector.ps1 +++ b/install-kit-awindows-20260427-211240/windows/worktime-session-collector.ps1 @@ -1,5 +1,5 @@ param( - [string]$ConfigPath = 'C:\ProgramData\ActivityWatch-Phase2\deployment-config.json', + [string]$ConfigPath = 'C:\ProgramData\AWatch-rus\deployment-config.json', [string]$Hostname, [int]$PollSeconds = 30 ) diff --git a/patch.sh b/patch.sh index 40b88b7..002eaea 100644 --- a/patch.sh +++ b/patch.sh @@ -17,13 +17,14 @@ cat > windows/installkit/innosetup/innosetup-rdp-package-filelist.md <<'EOF' - Он описывает, **что не класть** (генерируется уже на целевом хосте). - Он **не меняет** текущие deploy-скрипты и логику проекта. -## Важное уточнение по `phase2` +## Важное уточнение по единой Windows-директории Чтобы исключить путаницу: -1. В каталоге `windows/` нет файлов с именами `phase2-*`. -2. `phase2` в проекте — это обозначение этапа/набора телеметрии (DLP + endpoint signals). -3. Файлы вида `phase2-*.deployment-config.json` — это **примерные конфиги install-kit**, они лежат в `install-kit-*/server-configs-*`. +1. InnoSetup и Ansible используют один набор путей. +2. Toolkit лежит в `{app}\windows` = `C:\Program Files\AWatch-rus\windows`. +3. Бинарники ActivityWatch лежат в `C:\Program Files\AWatch-rus\bin`. +4. Runtime-конфиг, collectors, логи и отчёты лежат в `C:\ProgramData\AWatch-rus`. ## 1) Обязательные файлы для Inno Setup пакета @@ -58,11 +59,11 @@ cat > windows/installkit/innosetup/innosetup-rdp-package-filelist.md <<'EOF' Эти файлы/папки появляются на целевом Windows-хосте во время/после деплоя: -- `C:\ProgramData\ActivityWatch\deployment-config.json` -- `C:\ProgramData\ActivityWatch\web-category-rules.json` -- `C:\ProgramData\ActivityWatch\dlp-policy.json` -- `C:\ProgramData\ActivityWatch\logs\*` -- `%LOCALAPPDATA%\ActivityWatch-Phase2\incident-artifacts\*` +- `C:\ProgramData\AWatch-rus\deployment-config.json` +- `C:\ProgramData\AWatch-rus\web-category-rules.json` +- `C:\ProgramData\AWatch-rus\dlp-policy.json` +- `C:\ProgramData\AWatch-rus\logs\*` +- `%LOCALAPPDATA%\AWatch-rus\incident-artifacts\*` ## 4) Опционально приложить в операторский install-kit @@ -152,4 +153,3 @@ echo "windows/installkit/innosetup/innosetup-rdp-package-filelist.md" echo "docs/windows/innosetup-rdp-package-filelist.md" echo "windows/installkit/innosetup/AWatch-rus-InnoSetup.iss" echo "windows/installkit/innosetup/payload/.gitkeep" - diff --git a/windows/ActivityWatch.Windows.Common.psm1 b/windows/ActivityWatch.Windows.Common.psm1 index 89affa3..9c9002c 100755 --- a/windows/ActivityWatch.Windows.Common.psm1 +++ b/windows/ActivityWatch.Windows.Common.psm1 @@ -547,7 +547,7 @@ function Send-LogonMarkerIfNeeded { `$stateRoot = [string]`$Config.paths.stateRoot `$markerRoots = New-Object System.Collections.Generic.List[string] if (-not [string]::IsNullOrWhiteSpace(`$env:LOCALAPPDATA)) { - `$markerRoots.Add((Join-Path `$env:LOCALAPPDATA 'ActivityWatch-Phase2\markers')) + `$markerRoots.Add((Join-Path `$env:LOCALAPPDATA 'AWatch-rus\markers')) } if (-not [string]::IsNullOrWhiteSpace(`$stateRoot)) { `$markerRoots.Add((Join-Path `$stateRoot 'markers')) @@ -593,7 +593,7 @@ function Send-LogonMarkerIfNeeded { userId = "`$(`$env:USERDOMAIN)\`$(`$env:USERNAME)" sessionId = `$SessionId hostname = `$script:Hostname - source = 'launch-watchers-phase2' + source = 'launch-watchers-awatch-rus' } } | ConvertTo-Json -Depth 5 -Compress diff --git a/windows/browser-domains-native-collector.ps1 b/windows/browser-domains-native-collector.ps1 index 28de28e..d0c809f 100755 --- a/windows/browser-domains-native-collector.ps1 +++ b/windows/browser-domains-native-collector.ps1 @@ -1,6 +1,6 @@ [CmdletBinding()] param( - [string]$ConfigPath = 'C:\ProgramData\ActivityWatch-Phase2\deployment-config.json', + [string]$ConfigPath = 'C:\ProgramData\AWatch-rus\deployment-config.json', [string]$ServerHost, [int]$ServerPort, [ValidateSet('http', 'https')] @@ -52,15 +52,15 @@ $deploymentConfig = Get-DeploymentConfig -Path $ConfigPath $resolvedServerHost = if ($ServerHost) { $ServerHost } elseif ($deploymentConfig) { [string]$deploymentConfig.server.host } else { throw 'Укажите ServerHost или подготовьте deployment-config.json.' } $resolvedServerPort = if ($PSBoundParameters.ContainsKey('ServerPort')) { $ServerPort } elseif ($deploymentConfig) { [int]$deploymentConfig.server.port } else { 5600 } $resolvedServerScheme = if ($ServerScheme) { $ServerScheme } elseif ($deploymentConfig) { [string]$deploymentConfig.server.scheme } else { 'http' } -$resolvedRulesPath = if ($RulesPath) { $RulesPath } elseif ($deploymentConfig) { [string]$deploymentConfig.paths.rulesPath } else { 'C:\ProgramData\ActivityWatch-Phase2\web-category-rules.json' } -$resolvedPolicyPath = if ($PolicyPath) { $PolicyPath } elseif ($deploymentConfig) { [string]$deploymentConfig.paths.policyPath } else { 'C:\ProgramData\ActivityWatch-Phase2\dlp-policy.json' } +$resolvedRulesPath = if ($RulesPath) { $RulesPath } elseif ($deploymentConfig) { [string]$deploymentConfig.paths.rulesPath } else { 'C:\ProgramData\AWatch-rus\web-category-rules.json' } +$resolvedPolicyPath = if ($PolicyPath) { $PolicyPath } elseif ($deploymentConfig) { [string]$deploymentConfig.paths.policyPath } else { 'C:\ProgramData\AWatch-rus\dlp-policy.json' } $resolvedPollSeconds = if ($PSBoundParameters.ContainsKey('PollSeconds')) { $PollSeconds } elseif ($deploymentConfig) { [int]$deploymentConfig.collector.pollSeconds } else { 5 } $resolvedPulseSeconds = if ($PSBoundParameters.ContainsKey('PulseSeconds')) { $PulseSeconds } elseif ($deploymentConfig) { [int]$deploymentConfig.collector.pulseSeconds } else { 30 } -$resolvedLogsRoot = if ($deploymentConfig) { [string]$deploymentConfig.paths.logsRoot } else { 'C:\ProgramData\ActivityWatch-Phase2\logs' } +$resolvedLogsRoot = if ($deploymentConfig) { [string]$deploymentConfig.paths.logsRoot } else { 'C:\ProgramData\AWatch-rus\logs' } $resolvedLogPath = if ($LogPath) { $LogPath } else { Join-Path $resolvedLogsRoot ("browser-domains-{0}.log" -f $env:USERNAME) } $resolvedIncidentLogPath = if ($IncidentLogPath) { $IncidentLogPath } else { Join-Path $resolvedLogsRoot ("dlp-incidents-{0}.log" -f $env:USERNAME) } $resolvedLocalAgentLogsEnabled = if ($deploymentConfig -and $deploymentConfig.PSObject.Properties.Name -contains 'logging' -and $deploymentConfig.logging.PSObject.Properties.Name -contains 'localAgentLogsEnabled') { [bool]$deploymentConfig.logging.localAgentLogsEnabled } else { $true } -$resolvedIncidentArtifactsRoot = if ($deploymentConfig -and $deploymentConfig.PSObject.Properties.Name -contains 'incidentCapture' -and $deploymentConfig.incidentCapture.PSObject.Properties.Name -contains 'artifactsRoot') { [string]$deploymentConfig.incidentCapture.artifactsRoot } else { Join-Path $env:LOCALAPPDATA 'ActivityWatch-Phase2\\incident-artifacts' } +$resolvedIncidentArtifactsRoot = if ($deploymentConfig -and $deploymentConfig.PSObject.Properties.Name -contains 'incidentCapture' -and $deploymentConfig.incidentCapture.PSObject.Properties.Name -contains 'artifactsRoot') { [string]$deploymentConfig.incidentCapture.artifactsRoot } else { Join-Path $env:LOCALAPPDATA 'AWatch-rus\\incident-artifacts' } $resolvedIncidentScreenshotEnabled = if ($deploymentConfig -and $deploymentConfig.PSObject.Properties.Name -contains 'incidentCapture' -and $deploymentConfig.incidentCapture.PSObject.Properties.Name -contains 'screenshotEnabled') { [bool]$deploymentConfig.incidentCapture.screenshotEnabled } else { $true } if ($resolvedLocalAgentLogsEnabled -and -not (Test-Path -LiteralPath $resolvedLogsRoot)) { diff --git a/windows/deploy-domain-users.ps1 b/windows/deploy-domain-users.ps1 index d441de1..8518ba5 100755 --- a/windows/deploy-domain-users.ps1 +++ b/windows/deploy-domain-users.ps1 @@ -11,8 +11,8 @@ param( [string]$Version = 'v0.13.2', [string]$PackageUrl, [string]$PackageZipPath, - [string]$InstallRoot = 'C:\Program Files\ActivityWatch-Phase2', - [string]$StateRoot = 'C:\ProgramData\ActivityWatch-Phase2', + [string]$InstallRoot = 'C:\Program Files\AWatch-rus\bin', + [string]$StateRoot = 'C:\ProgramData\AWatch-rus', [int]$PollSeconds = 5, [int]$PulseSeconds = 30, [int]$RecoveryIntervalSeconds = 180, diff --git a/windows/deploy-ensemble.ps1 b/windows/deploy-ensemble.ps1 index 45fab28..24c873a 100644 --- a/windows/deploy-ensemble.ps1 +++ b/windows/deploy-ensemble.ps1 @@ -11,8 +11,8 @@ param( [string]$Version = 'v0.13.2', [string]$PackageUrl, [string]$PackageZipPath, - [string]$InstallRoot = 'C:\Program Files\ActivityWatch-Phase2', - [string]$StateRoot = 'C:\ProgramData\ActivityWatch-Phase2', + [string]$InstallRoot = 'C:\Program Files\AWatch-rus\bin', + [string]$StateRoot = 'C:\ProgramData\AWatch-rus', [int]$PollSeconds = 5, [int]$PulseSeconds = 30, [int]$RecoveryIntervalSeconds = 180, diff --git a/windows/deploy-single-user.ps1 b/windows/deploy-single-user.ps1 index d49be48..9b035e4 100755 --- a/windows/deploy-single-user.ps1 +++ b/windows/deploy-single-user.ps1 @@ -10,8 +10,8 @@ param( [string]$Version = 'v0.13.2', [string]$PackageUrl, [string]$PackageZipPath, - [string]$InstallRoot = 'C:\Program Files\ActivityWatch-Phase2', - [string]$StateRoot = 'C:\ProgramData\ActivityWatch-Phase2', + [string]$InstallRoot = 'C:\Program Files\AWatch-rus\bin', + [string]$StateRoot = 'C:\ProgramData\AWatch-rus', [int]$PollSeconds = 5, [int]$PulseSeconds = 30, [int]$RecoveryIntervalSeconds = 180, diff --git a/windows/dlp-endpoint-signals-collector.ps1 b/windows/dlp-endpoint-signals-collector.ps1 index 7c60664..471ad0a 100644 --- a/windows/dlp-endpoint-signals-collector.ps1 +++ b/windows/dlp-endpoint-signals-collector.ps1 @@ -1,6 +1,6 @@ [CmdletBinding()] param( - [string]$ConfigPath = 'C:\ProgramData\ActivityWatch-Phase2\deployment-config.json', + [string]$ConfigPath = 'C:\ProgramData\AWatch-rus\deployment-config.json', [string]$ServerHost, [int]$ServerPort, [ValidateSet('http', 'https')] @@ -81,7 +81,7 @@ function Send-EndpointSignalHeartbeat { username = $env:USERNAME sessionId = $script:SessionId hostname = $script:Hostname - source = 'endpoint-signals-phase2' + source = 'endpoint-signals-awatch-rus' } + $Data } | ConvertTo-Json -Depth 6 -Compress @@ -122,7 +122,7 @@ function Send-DlpIncidentHeartbeat { username = $env:USERNAME sessionId = $script:SessionId hostname = $script:Hostname - source = 'endpoint-signals-phase2' + source = 'endpoint-signals-awatch-rus' } + $Data + $captureData } | ConvertTo-Json -Depth 7 -Compress @@ -713,12 +713,12 @@ $deploymentConfig = Get-DeploymentConfig -Path $ConfigPath $resolvedServerHost = if ($ServerHost) { $ServerHost } elseif ($deploymentConfig) { [string]$deploymentConfig.server.host } else { throw 'Укажите ServerHost или подготовьте deployment-config.json.' } $resolvedServerPort = if ($PSBoundParameters.ContainsKey('ServerPort')) { $ServerPort } elseif ($deploymentConfig) { [int]$deploymentConfig.server.port } else { 5600 } $resolvedServerScheme = if ($ServerScheme) { $ServerScheme } elseif ($deploymentConfig) { [string]$deploymentConfig.server.scheme } else { 'http' } -$resolvedPolicyPath = if ($PolicyPath) { $PolicyPath } elseif ($deploymentConfig -and $deploymentConfig.paths.PSObject.Properties.Name -contains 'policyPath') { [string]$deploymentConfig.paths.policyPath } else { 'C:\ProgramData\ActivityWatch-Phase2\dlp-policy.json' } +$resolvedPolicyPath = if ($PolicyPath) { $PolicyPath } elseif ($deploymentConfig -and $deploymentConfig.paths.PSObject.Properties.Name -contains 'policyPath') { [string]$deploymentConfig.paths.policyPath } else { 'C:\ProgramData\AWatch-rus\dlp-policy.json' } $resolvedPollSeconds = if ($PSBoundParameters.ContainsKey('PollSeconds')) { $PollSeconds } elseif ($deploymentConfig) { [int]$deploymentConfig.collector.pollSeconds } else { 5 } -$resolvedLogsRoot = if ($deploymentConfig) { [string]$deploymentConfig.paths.logsRoot } else { 'C:\ProgramData\ActivityWatch-Phase2\logs' } +$resolvedLogsRoot = if ($deploymentConfig) { [string]$deploymentConfig.paths.logsRoot } else { 'C:\ProgramData\AWatch-rus\logs' } $resolvedLogPath = if ($LogPath) { $LogPath } else { Join-Path $resolvedLogsRoot ("endpoint-signals-{0}.log" -f $env:USERNAME) } $resolvedLocalAgentLogsEnabled = if ($deploymentConfig -and $deploymentConfig.PSObject.Properties.Name -contains 'logging' -and $deploymentConfig.logging.PSObject.Properties.Name -contains 'localAgentLogsEnabled') { [bool]$deploymentConfig.logging.localAgentLogsEnabled } else { $true } -$resolvedIncidentArtifactsRoot = if ($deploymentConfig -and $deploymentConfig.PSObject.Properties.Name -contains 'incidentCapture' -and $deploymentConfig.incidentCapture.PSObject.Properties.Name -contains 'artifactsRoot') { [string]$deploymentConfig.incidentCapture.artifactsRoot } else { Join-Path $env:LOCALAPPDATA 'ActivityWatch-Phase2\\incident-artifacts' } +$resolvedIncidentArtifactsRoot = if ($deploymentConfig -and $deploymentConfig.PSObject.Properties.Name -contains 'incidentCapture' -and $deploymentConfig.incidentCapture.PSObject.Properties.Name -contains 'artifactsRoot') { [string]$deploymentConfig.incidentCapture.artifactsRoot } else { Join-Path $env:LOCALAPPDATA 'AWatch-rus\\incident-artifacts' } $resolvedIncidentScreenshotEnabled = if ($deploymentConfig -and $deploymentConfig.PSObject.Properties.Name -contains 'incidentCapture' -and $deploymentConfig.incidentCapture.PSObject.Properties.Name -contains 'screenshotEnabled') { [bool]$deploymentConfig.incidentCapture.screenshotEnabled } else { $true } if ($resolvedLocalAgentLogsEnabled -and -not (Test-Path -LiteralPath $resolvedLogsRoot)) { diff --git a/windows/hardening-recovery.ps1 b/windows/hardening-recovery.ps1 index 45aba22..64e8d73 100755 --- a/windows/hardening-recovery.ps1 +++ b/windows/hardening-recovery.ps1 @@ -1,6 +1,6 @@ [CmdletBinding()] param( - [string]$ConfigPath = 'C:\ProgramData\ActivityWatch-Phase2\deployment-config.json', + [string]$ConfigPath = 'C:\ProgramData\AWatch-rus\deployment-config.json', [string]$ServerHost, [int]$ServerPort, [ValidateSet('http', 'https')] @@ -45,8 +45,8 @@ if (-not $existingConfig -and (-not $ServerHost)) { throw 'deployment-config.json отсутствует. Укажите -ServerHost и параметры пользователей либо сначала выполните скрипт развёртывания.' } -$effectiveStateRoot = if ($StateRoot) { $StateRoot } elseif ($existingConfig) { [string]$existingConfig.paths.stateRoot } else { 'C:\ProgramData\ActivityWatch-Phase2' } -$effectiveInstallRoot = if ($InstallRoot) { $InstallRoot } elseif ($existingConfig) { [string]$existingConfig.paths.installRoot } else { 'C:\Program Files\ActivityWatch-Phase2' } +$effectiveStateRoot = if ($StateRoot) { $StateRoot } elseif ($existingConfig) { [string]$existingConfig.paths.stateRoot } else { 'C:\ProgramData\AWatch-rus' } +$effectiveInstallRoot = if ($InstallRoot) { $InstallRoot } elseif ($existingConfig) { [string]$existingConfig.paths.installRoot } else { 'C:\Program Files\AWatch-rus\bin' } $effectiveLogsRoot = if ($existingConfig) { [string]$existingConfig.paths.logsRoot } else { Join-Path $effectiveStateRoot 'logs' } $effectiveConfigPath = if ($ConfigPath) { $ConfigPath } else { Join-Path $effectiveStateRoot 'deployment-config.json' } $effectiveLaunchScript = Join-Path $effectiveStateRoot 'launch-watchers.ps1' diff --git a/windows/installkit/innosetup/AWatch-rus-InnoSetup.iss b/windows/installkit/innosetup/AWatch-rus-InnoSetup.iss index aaabb72..47ea722 100644 --- a/windows/installkit/innosetup/AWatch-rus-InnoSetup.iss +++ b/windows/installkit/innosetup/AWatch-rus-InnoSetup.iss @@ -5,8 +5,8 @@ #define AwDefaultServerHost "10.10.10.13" #define AwDefaultServerPort "5600" #define AwDefaultUsers "user1,user2,user3,user4,user5" -#define AwDefaultInstallRoot "C:\\Program Files\\ActivityWatch-Phase2" -#define AwDefaultStateRoot "C:\\ProgramData\\ActivityWatch-Phase2" +#define AwDefaultInstallRoot "C:\\Program Files\\AWatch-rus\\bin" +#define AwDefaultStateRoot "C:\\ProgramData\\AWatch-rus" #define AwDefaultZipName "activitywatch-v0.13.2-windows-x86_64.zip" [Setup] diff --git a/windows/installkit/innosetup/BUILD.md b/windows/installkit/innosetup/BUILD.md index 5a96501..a432490 100644 --- a/windows/installkit/innosetup/BUILD.md +++ b/windows/installkit/innosetup/BUILD.md @@ -32,4 +32,4 @@ The installer wizard asks for: - `ServerHost` / `ServerPort` (defaults to our AW server `10.10.10.13:5600`) - `Users` (CSV) - Whether to use offline payload (auto-enabled when the ZIP exists at compile time) -- Whether to validate after deploy (`-ValidateAfterDeploy`, report written to `C:\ProgramData\ActivityWatch-Phase2\ensemble-report-*.json`) +- Whether to validate after deploy (`-ValidateAfterDeploy`, report written to `C:\ProgramData\AWatch-rus\ensemble-report-*.json`) diff --git a/windows/installkit/innosetup/innosetup-rdp-package-filelist.md b/windows/installkit/innosetup/innosetup-rdp-package-filelist.md index 3863d26..2a526d3 100644 --- a/windows/installkit/innosetup/innosetup-rdp-package-filelist.md +++ b/windows/installkit/innosetup/innosetup-rdp-package-filelist.md @@ -10,13 +10,14 @@ - Он описывает, **что не класть** (генерируется уже на целевом хосте). - Он **не меняет** текущие deploy-скрипты и логику проекта. -## Важное уточнение по `phase2` +## Важное уточнение по единой Windows-директории Чтобы исключить путаницу: -1. В каталоге `windows/` нет файлов с именами `phase2-*`. -2. `phase2` в проекте — это обозначение этапа/набора телеметрии (DLP + endpoint signals). -3. Файлы вида `phase2-*.deployment-config.json` — это **примерные конфиги install-kit**, они лежат в `install-kit-*/server-configs-*`. +1. InnoSetup и Ansible используют один набор путей. +2. Toolkit лежит в `{app}\windows` = `C:\Program Files\AWatch-rus\windows`. +3. Бинарники ActivityWatch лежат в `C:\Program Files\AWatch-rus\bin`. +4. Runtime-конфиг, collectors, логи и отчёты лежат в `C:\ProgramData\AWatch-rus`. ## 1) Обязательные файлы для Inno Setup пакета @@ -53,11 +54,11 @@ Эти файлы/папки появляются на целевом Windows-хосте во время/после деплоя: -- `C:\ProgramData\ActivityWatch-Phase2\deployment-config.json` -- `C:\ProgramData\ActivityWatch-Phase2\web-category-rules.json` -- `C:\ProgramData\ActivityWatch-Phase2\dlp-policy.json` -- `C:\ProgramData\ActivityWatch-Phase2\logs\*` -- `%LOCALAPPDATA%\ActivityWatch-Phase2\incident-artifacts\*` +- `C:\ProgramData\AWatch-rus\deployment-config.json` +- `C:\ProgramData\AWatch-rus\web-category-rules.json` +- `C:\ProgramData\AWatch-rus\dlp-policy.json` +- `C:\ProgramData\AWatch-rus\logs\*` +- `%LOCALAPPDATA%\AWatch-rus\incident-artifacts\*` ## 4) Опционально приложить в операторский install-kit @@ -86,8 +87,8 @@ 1. Все файлы из раздела 1 присутствуют. 2. В .iss не осталось вызова `deploy-ensemble.ps1` без параметров: нужны `-ServerHost` и `-Users`. -3. Для **Phase2** используются пути: - - `InstallRoot = C:\Program Files\ActivityWatch-Phase2` - - `StateRoot = C:\ProgramData\ActivityWatch-Phase2` +3. Для Windows/RDP используются единые пути: + - `InstallRoot = C:\Program Files\AWatch-rus\bin` + - `StateRoot = C:\ProgramData\AWatch-rus` 4. Для offline-режима ZIP лежит в `windows/installkit/innosetup/payload/` (имя: `activitywatch-v0.13.2-windows-x86_64.zip`). -5. Для проверки используется `-ValidateAfterDeploy` (отчёт `ensemble-report-*.json` пишется в `C:\ProgramData\ActivityWatch-Phase2\`). +5. Для проверки используется `-ValidateAfterDeploy` (отчёт `ensemble-report-*.json` пишется в `C:\ProgramData\AWatch-rus\`). diff --git a/windows/validate-deployment.ps1 b/windows/validate-deployment.ps1 index 55202dc..52b35d2 100644 --- a/windows/validate-deployment.ps1 +++ b/windows/validate-deployment.ps1 @@ -1,6 +1,6 @@ [CmdletBinding()] param( - [string]$ConfigPath = 'C:\ProgramData\ActivityWatch-Phase2\deployment-config.json' + [string]$ConfigPath = 'C:\ProgramData\AWatch-rus\deployment-config.json' ) Set-StrictMode -Version Latest diff --git a/windows/worktime-session-collector.ps1 b/windows/worktime-session-collector.ps1 index 9259d3c..f1b04ef 100644 --- a/windows/worktime-session-collector.ps1 +++ b/windows/worktime-session-collector.ps1 @@ -1,5 +1,5 @@ param( - [string]$ConfigPath = 'C:\ProgramData\ActivityWatch-Phase2\deployment-config.json', + [string]$ConfigPath = 'C:\ProgramData\AWatch-rus\deployment-config.json', [string]$Hostname, [int]$PollSeconds = 30 )