Feature: дашборд инцидентов ServiceDesk (светлая тема, Chart.js, Docker)

Made-with: Cursor
This commit is contained in:
cursor-agent
2026-04-06 07:49:20 +00:00
commit 4a0b84c2ed
7 changed files with 2191 additions and 0 deletions

2
.env.example Normal file
View File

@@ -0,0 +1,2 @@
# Порт HTTP для контейнера nginx (статическая раздача index.html)
PORT=8080

1
.gitignore vendored Normal file
View File

@@ -0,0 +1 @@
.env

11
HISTORY.md Normal file
View File

@@ -0,0 +1,11 @@
# История изменений
## 2026-04-06 12:00 UTC Начальная версия дашборда
**Проблема:** Нужен локальный мониторинг инцидентов ServiceDesk без сервера, в едином стиле «ситуационный центр».
**Решение:** Добавлен self-contained `index.html` (Chart.js, PapaParse, светлая тема), загрузка CSV/JSON, KPI, фильтры, вкладки, Docker с nginx для раздачи статики.
**Изменения:** Создан проект `/opt/omc-servicedesk-monitor`: `index.html`, `docker-compose.yml`, `.env.example`, `README.md`.
**Проверка:** Локальное открытие `index.html`; загрузка `sample-data.csv`; `docker compose up` — статика через nginx на порту из `.env` (по умолчанию 8080).

61
README.md Normal file
View File

@@ -0,0 +1,61 @@
# OMC ServiceDesk Monitor
Одностраничный дашборд для мониторинга инцидентов ServiceDesk: KPI, диаграммы, таблица и разбивка по сотрудникам. Работает в браузере без бэкенда — данные загружаются из CSV или JSON.
## Запуск
### Локально
Откройте в браузере файл [`index.html`](index.html) (двойной клик или `file://`). Для быстрой проверки можно загрузить [`sample-data.csv`](sample-data.csv).
### Docker
```bash
cd /opt/omc-servicedesk-monitor
cp .env.example .env # при необходимости измените PORT
docker compose up -d
```
Страница: `http://localhost:${PORT}` (по умолчанию 8080).
## Формат данных
### CSV
Разделитель — как в экспорте (PapaParse с `header: true`). Кодировка UTF-8. Заголовки колонок:
| Колонка | Описание |
|---------|----------|
| Название | Номер заявки (число) |
| Статус | Код статуса (см. бейджи в интерфейсе) |
| Ответственный (команда) | Команда |
| Ответственный (сотрудник) | Исполнитель |
| Инициатор заявки | Поиск |
| Услуга | Поиск |
| Дата создания | `DD.MM.YYYY HH:MM` |
| Регламентное время решения запроса | SLA, `DD.MM.YYYY HH:MM` |
| Дата решения | Когда решено |
| Кем решен (сотрудник) | Непустое значение трактуется как закрытый инцидент |
| Уникальный идентификатор | UUID для ссылки в ServiceDesk |
### JSON
Массив объектов с теми же ключами полей, что и в CSV.
## Недельная динамика
График «хронология по неделям» и таблица под ним заполняются константой `WEEK_STATS` внутри `index.html` и **не** зависят от загружаемого файла. Обновляйте массив вручную при необходимости.
## Стек
- Chart.js (CDN)
- PapaParse 5.4.1 (CDN)
- Шрифты: Barlow Condensed, IBM Plex Sans, IBM Plex Mono (Google Fonts)
## Логи и бэкапы
Статический файл; логи приложения отсутствуют. Резервное копирование — копия каталога проекта или репозитория Git.
## История изменений
См. [HISTORY.md](HISTORY.md).

7
docker-compose.yml Normal file
View File

@@ -0,0 +1,7 @@
services:
web:
image: nginx:alpine
ports:
- "${PORT:-8080}:80"
volumes:
- ./:/usr/share/nginx/html:ro

2103
index.html Normal file

File diff suppressed because it is too large Load Diff

6
sample-data.csv Normal file
View File

@@ -0,0 +1,6 @@
Название,Статус,Ответственный (команда),Ответственный (сотрудник),Инициатор заявки,Услуга,Дата создания,Регламентное время решения запроса,Дата решения,Кем решен (сотрудник),Уникальный идентификатор
1001,inprogress,Команда А,Иванов И.И.,user1@corp.ru,Сеть,01.04.2026 09:00,05.04.2026 18:00,,,a1111111-1111-1111-1111-111111111111
1002,waiting,Команда Б,Петров П.П.,user2@corp.ru,Почта,28.03.2026 14:00,02.04.2026 12:00,,,b2222222-2222-2222-2222-222222222222
1003,resolved,Команда А,Иванов И.И.,user3@corp.ru,Сеть,10.03.2026 11:00,15.03.2026 18:00,16.03.2026 10:00,Иванов И.И.,c3333333-3333-3333-3333-333333333333
1004,registered,Команда В,Сидоров С.С.,user4@corp.ru,Доступ,30.03.2026 08:00,04.04.2026 09:00,,,d4444444-4444-4444-4444-444444444444
1005,inprogress,Команда Б,Петров П.П.,user5@corp.ru,Почта,25.03.2026 16:00,01.04.2026 10:00,,,e5555555-5555-5555-5555-555555555555
1 Название Статус Ответственный (команда) Ответственный (сотрудник) Инициатор заявки Услуга Дата создания Регламентное время решения запроса Дата решения Кем решен (сотрудник) Уникальный идентификатор
2 1001 inprogress Команда А Иванов И.И. user1@corp.ru Сеть 01.04.2026 09:00 05.04.2026 18:00 a1111111-1111-1111-1111-111111111111
3 1002 waiting Команда Б Петров П.П. user2@corp.ru Почта 28.03.2026 14:00 02.04.2026 12:00 b2222222-2222-2222-2222-222222222222
4 1003 resolved Команда А Иванов И.И. user3@corp.ru Сеть 10.03.2026 11:00 15.03.2026 18:00 16.03.2026 10:00 Иванов И.И. c3333333-3333-3333-3333-333333333333
5 1004 registered Команда В Сидоров С.С. user4@corp.ru Доступ 30.03.2026 08:00 04.04.2026 09:00 d4444444-4444-4444-4444-444444444444
6 1005 inprogress Команда Б Петров П.П. user5@corp.ru Почта 25.03.2026 16:00 01.04.2026 10:00 e5555555-5555-5555-5555-555555555555