feat(commercial): prioritize workforce module
This commit is contained in:
@@ -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 и портал оператора;
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -369,6 +369,7 @@ struct ReportMetrics {
|
||||
evidence_screenshots: usize,
|
||||
open_incidents: usize,
|
||||
acknowledged_incidents: usize,
|
||||
workforce_index: Option<u8>,
|
||||
}
|
||||
|
||||
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<u8> {
|
||||
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<u8>) -> String {
|
||||
value
|
||||
.map(|value| format!("{value}%"))
|
||||
.unwrap_or_else(|| "нет данных".to_string())
|
||||
}
|
||||
|
||||
fn workforce_index_status(value: Option<u8>) -> 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<IncidentItem> {
|
||||
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 {
|
||||
|
||||
@@ -118,11 +118,14 @@ function renderOperator(data) {
|
||||
}
|
||||
|
||||
function renderManager(data) {
|
||||
const workforceIndex = workforceIndexText(data.users_count, data.total_active_seconds);
|
||||
return `
|
||||
<h2 class="section-title">Руководитель</h2>
|
||||
<div class="grid-2">
|
||||
<section class="card">
|
||||
<h3>Работа сегодня</h3>
|
||||
<p class="kpi-value">${escapeHtml(workforceIndex)}</p>
|
||||
<p class="muted">Индекс полезной активности: active time / 8 ч на сотрудника</p>
|
||||
<p class="muted">Сотрудников: ${data.users_count}; активных часов: ${Number(data.total_active_hours || 0).toFixed(1)}</p>
|
||||
<p class="muted">${escapeHtml(data.status?.text || "")}</p>
|
||||
</section>
|
||||
@@ -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 `
|
||||
|
||||
@@ -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.
|
||||
|
||||
Такой порядок снижает сопротивление вокруг темы "слежки" и переводит разговор
|
||||
в плоскость эффективности, управляемости и доказуемой операционной картины.
|
||||
@@ -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`, не как вручную подтвержденные инциденты;
|
||||
|
||||
+37
-15
@@ -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
|
||||
|
||||
Управленческий экран по активности пользователей: кто работал, сколько времени,
|
||||
как выглядит команда по дням и кто активен сегодня.
|
||||
|
||||

|
||||
|
||||
@@ -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 по выбранному дню.
|
||||
|
||||

|
||||
|
||||
## 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.
|
||||
|
||||

|
||||
|
||||
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-экран - доказательство, что система не только
|
||||
рисует графики, а реально получает события на сервере.
|
||||
|
||||
Reference in New Issue
Block a user