diff --git a/PRODUCT_DESCRIPTION_RU.md b/PRODUCT_DESCRIPTION_RU.md index 6f8e007..b2e3735 100644 --- a/PRODUCT_DESCRIPTION_RU.md +++ b/PRODUCT_DESCRIPTION_RU.md @@ -1,17 +1,31 @@ # Описание программного продукта DetMir / AWatch-rus `DetMir` на базе `AWatch-rus` - программный комплекс операционного контроля, -технического аудита и мониторинга ИТ-инфраструктуры. +технического аудита, оценки трудоотдачи сотрудников и мониторинга +ИТ-инфраструктуры. ## Назначение Продукт предназначен для централизованного контроля состояния рабочих мест, -серверных сервисов, ActivityWatch telemetry, рабочих интервалов, операторских -runbook-проверок и прикладных событий расследования. +оценки полезной активности сотрудников, анализа загрузки подразделений, +контроля серверных сервисов, ActivityWatch telemetry, рабочих интервалов, +операторских runbook-проверок и прикладных событий расследования. + +## Коммерческие модули + +- `DetMir Workforce` - ежедневный управленческий слой: полезная активность, + активное время, простои, RDP/1C/рабочие приложения, загрузка сотрудников и + отчеты для руководителя. +- `DetMir Security` - прикладной слой ИБ: DLP-сигналы, evidence metadata, + доступные скриншоты, review/case queue и audit действий оператора. +- `DetMir Forensics` - расследовательский слой: цепочки событий, + Hayabusa/offline-разбор, кейсы и материалы для внутреннего расследования. ## Основные функции - сбор и нормализация ActivityWatch telemetry; +- оценка полезной активности и загрузки сотрудников; +- управленческие отчеты по worktime, RDP, 1C и рабочим приложениям; - контроль свежести данных и состояния сборщиков; - учет активности пользователей и удаленных сессий; - витрины Grafana и портал оператора; diff --git a/README.md b/README.md index 8745268..82ac80d 100755 --- a/README.md +++ b/README.md @@ -1,9 +1,9 @@ # AWatch-rus AWatch-rus / DetMir - программный комплекс операционного контроля, -технического аудита и мониторинга корпоративной ИТ-инфраструктуры на базе -ActivityWatch, Rust-сервисов автоматизации, Grafana/Prometheus-витрин и -модулей расследования инцидентов. +технического аудита, оценки трудоотдачи сотрудников и мониторинга +корпоративной ИТ-инфраструктуры на базе ActivityWatch, Rust-сервисов +автоматизации, Grafana/Prometheus-витрин и модулей расследования инцидентов. Проект не позиционируется как сертифицированная DLP/SIEM/EDR/XDR/СЗИ. DLP, evidence и Hayabusa используются как прикладные модули внутри платформы @@ -11,6 +11,12 @@ evidence и Hayabusa используются как прикладные мод ## Назначение +- DetMir Workforce: полезная активность, загрузка сотрудников, RDP/1C/рабочие + приложения и управленческие отчеты для владельца бизнеса. +- DetMir Security: DLP-сигналы, evidence, очередь кейсов и audit действий + оператора без заявления продукта как сертифицированной СЗИ. +- DetMir Forensics: цепочки событий, Hayabusa/offline-разбор и материалы для + внутреннего расследования. - Контроль доступности и свежести данных ActivityWatch. - Учет активного времени, RDP-сессий, окон, приложений и рабочих интервалов. - Витрины Grafana для администратора, оператора ИБ и руководителя. @@ -36,7 +42,8 @@ runtime, OCR/content-analysis, 1C/AI/ETL integration и MCP/dev helpers. Эти ## Кому это полезно -- Руководителю - быстро увидеть рабочую картину без просмотра логов. +- Владельцу и руководителю - видеть полезную активность, загрузку команды, + простои, перегрузки и рабочие приложения без просмотра логов. - ИБ - заметить DLP-сигналы и подозрительную активность. - Администратору - проверить, что сборщики и сервер работают стабильно. @@ -54,6 +61,7 @@ runtime, OCR/content-analysis, 1C/AI/ETL integration и MCP/dev helpers. Эти - [Сценарий экспертной проверки](docs/EXPERT_TEST_SCENARIO_RU.md) - [Release manifest 2026-06](docs/RELEASE_MANIFEST_2026-06.md) - [Эксплуатационный профиль](docs/OPERATIONAL_PROOF_PROFILE_RU.md) +- [Коммерческие модули DetMir](docs/DETMIR_COMMERCIAL_MODULES_RU.md) - [Сторонние компоненты](THIRD_PARTY_COMPONENTS.md) - [Сторонние лицензии](THIRD_PARTY_LICENSES_RU.md) - [Архитектура](docs/ARCHITECTURE_RU.md) diff --git a/adk-rust/crates/detmir-portal/src/main.rs b/adk-rust/crates/detmir-portal/src/main.rs index 565b77d..7a1c17f 100644 --- a/adk-rust/crates/detmir-portal/src/main.rs +++ b/adk-rust/crates/detmir-portal/src/main.rs @@ -369,6 +369,7 @@ struct ReportMetrics { evidence_screenshots: usize, open_incidents: usize, acknowledged_incidents: usize, + workforce_index: Option, } fn main() { @@ -860,6 +861,7 @@ fn build_reports( .count(), open_incidents: incidents.iter().filter(|item| !item.acknowledged).count(), acknowledged_incidents: incidents.iter().filter(|item| item.acknowledged).count(), + workforce_index: workforce_index(users_count, active_seconds), }; let grafana = grafana_block(snapshot); let collection = collection_block(snapshot.detmir_check.payload.as_ref()); @@ -904,6 +906,7 @@ fn build_reports( "headline": headline, "executive_points": executive_points, "kpis": [ + report_kpi("Индекс активности", workforce_index_text(metrics.workforce_index), workforce_index_status(metrics.workforce_index), "proxy: active time / 8h на сотрудника"), report_kpi("Сотрудники", metrics.users_count.to_string(), worktime.status.clone(), "строки worktime за сегодня"), report_kpi("Активное время", human_duration(metrics.active_seconds), worktime.status.clone(), "сумма active_seconds"), report_kpi("Приложения", metrics.apps_count.to_string(), worktime.status.clone(), "true active applications"), @@ -924,6 +927,7 @@ fn build_reports( { "title": "Работа и управляемость", "items": [ + report_item("Индекс активности", workforce_index_status(metrics.workforce_index), workforce_index_text(metrics.workforce_index)), report_item("Worktime", worktime.status.clone(), worktime.text.clone()), report_item("Активное время", worktime.status.clone(), human_duration(metrics.active_seconds)), report_item("Приложения", worktime.status.clone(), metrics.apps_count.to_string()), @@ -987,6 +991,10 @@ fn render_report_markdown( "нет" } )); + text.push_str(&format!( + "- Индекс полезной активности: {}\n", + workforce_index_text(metrics.workforce_index) + )); text.push_str(&format!( "- Сотрудники за сегодня: {}\n", metrics.users_count @@ -1074,6 +1082,30 @@ fn human_duration(seconds: i64) -> String { format!("{hours:02}:{minutes:02}") } +fn workforce_index(users_count: usize, active_seconds: i64) -> Option { + if users_count == 0 || active_seconds <= 0 { + return None; + } + let planned_seconds = users_count as f64 * 8.0 * 3600.0; + let value = ((active_seconds as f64 / planned_seconds) * 100.0).round(); + Some(value.clamp(0.0, 100.0) as u8) +} + +fn workforce_index_text(value: Option) -> String { + value + .map(|value| format!("{value}%")) + .unwrap_or_else(|| "нет данных".to_string()) +} + +fn workforce_index_status(value: Option) -> String { + match value { + Some(value) if value >= 80 => "OK".to_string(), + Some(value) if value >= 60 => "WARN".to_string(), + Some(_) => "FAIL".to_string(), + None => "UNKNOWN".to_string(), + } +} + fn build_incidents(snapshot: &Snapshot, state: &IncidentStateFile) -> Vec { let mut incidents = Vec::new(); for source in [ @@ -2591,6 +2623,18 @@ mod tests { assert_eq!(human_duration(-10), "00:00"); } + #[test] + fn workforce_index_uses_eight_hour_proxy() { + assert_eq!(workforce_index(1, 8 * 3600), Some(100)); + assert_eq!(workforce_index(2, 8 * 3600), Some(50)); + assert_eq!(workforce_index(0, 8 * 3600), None); + assert_eq!(workforce_index(1, 0), None); + assert_eq!(workforce_index_text(Some(84)), "84%"); + assert_eq!(workforce_index_status(Some(84)), "OK"); + assert_eq!(workforce_index_status(Some(70)), "WARN"); + assert_eq!(workforce_index_status(Some(30)), "FAIL"); + } + #[test] fn reports_include_commercial_kpis_and_disclaimer() { let snapshot = Snapshot { diff --git a/adk-rust/crates/detmir-portal/src/static/app.js b/adk-rust/crates/detmir-portal/src/static/app.js index 1d3213f..386cc7b 100644 --- a/adk-rust/crates/detmir-portal/src/static/app.js +++ b/adk-rust/crates/detmir-portal/src/static/app.js @@ -118,11 +118,14 @@ function renderOperator(data) { } function renderManager(data) { + const workforceIndex = workforceIndexText(data.users_count, data.total_active_seconds); return `

Руководитель

Работа сегодня

+

${escapeHtml(workforceIndex)}

+

Индекс полезной активности: active time / 8 ч на сотрудника

Сотрудников: ${data.users_count}; активных часов: ${Number(data.total_active_hours || 0).toFixed(1)}

${escapeHtml(data.status?.text || "")}

@@ -148,6 +151,14 @@ function renderManager(data) { `; } +function workforceIndexText(usersCount, activeSeconds) { + const users = Number(usersCount || 0); + const seconds = Number(activeSeconds || 0); + if (users <= 0 || seconds <= 0) return "Нет данных"; + const pct = Math.max(0, Math.min(100, Math.round(seconds / (users * 8 * 3600) * 100))); + return `${pct}%`; +} + function renderOwner(data) { const cards = Object.entries(data.cards || {}); return ` diff --git a/docs/DETMIR_COMMERCIAL_MODULES_RU.md b/docs/DETMIR_COMMERCIAL_MODULES_RU.md new file mode 100644 index 0000000..ceba902 --- /dev/null +++ b/docs/DETMIR_COMMERCIAL_MODULES_RU.md @@ -0,0 +1,79 @@ +# Коммерческие модули DetMir + +DetMir / AWatch-rus коммерчески правильнее подавать как платформу +операционного контроля с тремя прикладными модулями. Первый модуль - Workforce: +он дает ежедневную бизнес-ценность владельцу и руководителю. Security и +Forensics усиливают продукт, но не должны перетягивать позиционирование в +сторону сертифицированной DLP/SIEM/СЗИ. + +## DetMir Workforce + +Для владельца, директора, руководителя подразделения и операционного менеджера. + +Показывает: + +- кто реально работал в рабочем окне; +- кто перегружен, простаивает или выпадает из нормального профиля активности; +- сколько времени команда проводит в RDP, 1С и рабочих приложениях; +- какие приложения и процессы забирают рабочее время; +- как меняется загрузка сотрудников и подразделений; +- где тормозят бизнес-процессы. + +Основные KPI: + +- полезная активность; +- активное время; +- простой; +- число рабочих сессий; +- активные приложения; +- индекс полезной активности; +- документы/операции 1С при наличии связанного бизнес-слоя. + +Корректная формулировка для продажи: + +> DetMir помогает руководителю видеть загрузку сотрудников и бизнес-процессов +> без ручного просмотра логов и без подмены управленческой оценки простым +> учетом "сидел за компьютером". + +## DetMir Security + +Для ИБ, администратора и оператора расследований. + +Показывает: + +- DLP-сигналы: буфер обмена, печать, USB, файловые операции; +- severity/status технических сигналов; +- очередь DLP/case review; +- evidence metadata и доступные скриншоты; +- audit просмотра evidence и действий оператора. + +В публичных и коммерческих материалах важно говорить аккуратно: + +- `detections/cases` - это derived detections/cases; +- подтвержденным инцидентом событие становится после регламентной валидации; +- продукт не заявляется как сертифицированная DLP/SIEM/EDR/XDR/СЗИ. + +## DetMir Forensics + +Для разбора сложных событий и пост-инцидентной аналитики. + +Показывает: + +- цепочку событий ActivityWatch; +- Hayabusa/offline evidence workflow; +- связь технических сигналов, кейсов и артефактов; +- audit trail просмотра и обработки материалов; +- экспортируемые материалы для внутреннего расследования. + +## Приоритет в демонстрации + +Порядок показа владельцу бизнеса: + +1. Workforce: полезная активность, загрузка, RDP/1С, рабочие приложения. +2. Commercial reports: ежедневный срез, KPI, Markdown/HTML отчет. +3. Security: DLP-сигналы и evidence. +4. Forensics: цепочка расследования, Hayabusa, кейсы. +5. Reliability: автономность, health-check, SLO, Grafana freshness. + +Такой порядок снижает сопротивление вокруг темы "слежки" и переводит разговор +в плоскость эффективности, управляемости и доказуемой операционной картины. diff --git a/docs/DETMIR_PORTAL_GUI_PLAN_RU.md b/docs/DETMIR_PORTAL_GUI_PLAN_RU.md index 9a2244b..e2c9230 100644 --- a/docs/DETMIR_PORTAL_GUI_PLAN_RU.md +++ b/docs/DETMIR_PORTAL_GUI_PLAN_RU.md @@ -30,6 +30,8 @@ baseline и раздела `Phase 8: Post-MVP Enhancements`. - UI tab: `Отчеты`; - отчет содержит KPI для владельца/руководителя: worktime users, active time, active applications, DLP WARN/FAIL, evidence screenshots/items, open issues; +- отчет и вкладка `Руководитель` показывают `Индекс полезной активности` как + proxy `active time / 8h на сотрудника`; - отчет содержит Markdown export для передачи руководителю или заказчику; - формулировка DLP/case показателей зафиксирована как `derived detections/cases`, не как вручную подтвержденные инциденты; diff --git a/docs/PRESENTATION_RU.md b/docs/PRESENTATION_RU.md index b9dc346..5d00841 100644 --- a/docs/PRESENTATION_RU.md +++ b/docs/PRESENTATION_RU.md @@ -1,10 +1,27 @@ -# AW-rus: презентационные экраны +# DetMir / AW-rus: презентационные экраны -Документ собирает живые экраны AW-rus и Grafana для demo, коммерческой презентации и внутренних согласований. +Документ собирает живые экраны DetMir / AW-rus и Grafana для demo, +коммерческой презентации и внутренних согласований. -## 1. Работа пользователей в RDP +## 1. DetMir Workforce: трудоотдача и загрузка -Управленческий экран по активности пользователей: кто работал, сколько времени, как выглядит команда по дням и кто активен сегодня. +Первый коммерческий экран для владельца и руководителя. Показывает не +"сидел за компьютером", а полезную активность: кто реально работал, кто +перегружен, кто простаивает, сколько времени уходит в RDP, 1C и рабочие +приложения. + +Ключевые вопросы: + +- кто реально работает; +- кто перегружен или простаивает; +- какие подразделения и процессы тормозят работу; +- сколько времени уходит на RDP/1C/рабочие приложения; +- где нужен управленческий разбор, а не технический лог. + +## 2. Работа пользователей в RDP + +Управленческий экран по активности пользователей: кто работал, сколько времени, +как выглядит команда по дням и кто активен сегодня. ![DetMir: Работа пользователей в RDP](assets/screenshots/grafana-rdp-worktime.png) @@ -12,7 +29,7 @@ - `grafana/detmir-rdp-user-activity-dashboard.json` -## 2. DLP и ИБ обзор +## 3. DLP и ИБ обзор Технический dashboard для ИБ: сработки, severity, типы сигналов, verdict'ы, очередь кейсов и состояние доставки данных. @@ -22,7 +39,7 @@ - `grafana/detmir-dlp-security-dashboard.json` -## 3. ИБ сводка для руководства +## 4. ИБ сводка для руководства Экран для руководителя ИБ: открытые кейсы, инциденты повышенного риска, ожидающие решения события и верхнеуровневая динамика. @@ -32,7 +49,7 @@ - `grafana/detmir-dlp-management-dashboard.json` -## 4. AW-rus: DLP обзор +## 5. AW-rus: DLP обзор Обзорный dashboard для быстрых стендовых demo и smoke-проверки самого DLP-контура. @@ -42,13 +59,13 @@ - `grafana/dlp-dashboard.json` -## 5. AW-rus summary по активности +## 6. AW-rus summary по активности Экран ActivityWatch-Russian для просмотра реальной активности хоста и summary по выбранному дню. ![AW-rus summary](assets/screenshots/aw-rus-summary.png) -## 6. Генерируемый отчёт по пользователям +## 7. Генерируемый отчёт по пользователям Отдельный HTML-отчёт `RDP Worktime Report`, который система генерирует по пользователям: таблица, активное время, диапазон активности и детальные карточки по каждому сотруднику. @@ -74,14 +91,19 @@ Live endpoint: - trend; - свежесть источников данных. -## 7. AW-rus: DLP review, rules и события +## 8. AW-rus: DLP review, rules и события Экран AW-rus по bucket `aw-dlp-endpoint-signals_*`: здесь видны живые DLP-события, review-вердикты, правила, case-management и нижняя лента событий. Это прямое доказательство, что данные реально приходят на сервер до агрегации в InfluxDB/Grafana. ![AW-rus DLP bucket](assets/screenshots/aw-rus-dlp-bucket.png) -1. `RDP` dashboard — ценность для руководства и HR. -2. `DLP и ИБ обзор` — глубина технического контроля для ИБ. -3. `ИБ сводка для руководства` — понятный риск-ориентированный слой. -4. `RDP Worktime Report` — отдельный генерируемый per-user отчёт, который можно показывать как доказательство реальной работы сотрудников. -5. `AW-rus summary` и DLP review-экран — доказательство, что система не только рисует графики, а реально получает события на сервере. +## Рекомендуемый порядок демонстрации + +1. `DetMir Workforce` - полезная активность, загрузка, RDP/1C и рабочие + приложения. +2. `RDP Worktime Report` - отдельный генерируемый per-user отчет как + доказательство реальной работы сотрудников. +3. `DLP и ИБ обзор` - глубина технического контроля для ИБ. +4. `ИБ сводка для руководства` - понятный риск-ориентированный слой. +5. `AW-rus summary` и DLP review-экран - доказательство, что система не только + рисует графики, а реально получает события на сервере.