# OMC ServiceDesk Monitor **Репозиторий:** https://git.gen7x.ru/cursor-agent/omc-servicedesk-monitor **Публичный URL (прод):** https://sd.gen7x.ru/ — статика и API через Nginx (`/opt/gen7x/nginx/conf.d/sd.gen7x.ru.conf`). Многостраничный интерфейс: | Страница | Назначение | |----------|------------| | [`index.html`](index.html) | Мониторинг: KPI, фильтры, вкладки (графики, таблица, сотрудники). Данные из БД при открытии. | | [`data.html`](data.html) | Источник данных: загрузка CSV/JSON/Excel, счётчики «объектов в базе», последней загрузки, пропущенных строк. | Общие стили: [`css/dashboard.css`](css/dashboard.css). Разбор файла и API: [`js/upload-core.js`](js/upload-core.js). Загрузка файла **сохраняется в PostgreSQL** по ключу **«Название»** (обновление / вставка). На главной данные **подгружаются из базы** при открытии (если API доступен). ## База данных и API - БД: PostgreSQL, база `omc_sd_monitor`, таблица `incidents` (`number_key` PK, `data` JSONB с полями как в экспорте). - API (Node.js, Express): `GET /api/incidents`, `POST /api/incidents/sync`, `GET /api/health`. - Контейнер `omc-sd-api` в Docker-сети `docker_gen7x_network`, порт на хосте `127.0.0.1:3910`; Nginx проксирует `https://sd.gen7x.ru/api/` → этот порт. Создание базы (один раз, от суперпользователя Postgres): ```sql CREATE DATABASE omc_sd_monitor; ``` В `.env` задайте `DATABASE_URL` (см. `.env.example`). Спецсимволы в пароле — в URL-кодировании (например `/` → `%2F`). Запуск только API на сервере: ```bash cd /opt/omc-servicedesk-monitor # .env с DATABASE_URL docker compose up -d api ``` ## Запуск ### Локально (только UI) Откройте [`index.html`](index.html) (мониторинг) или [`data.html`](data.html) (загрузка). Без API сохранение в БД на странице данных недоступно. Пример файла: [`sample-data.csv`](sample-data.csv). ### Docker (статика + опционально API) ```bash cd /opt/omc-servicedesk-monitor cp .env.example .env # задать DATABASE_URL для API docker compose up -d # web на PORT, api на 3910 ``` Страница статики: `http://localhost:${PORT}` (по умолчанию 8080). ## Формат данных ### CSV Разделитель — как в экспорте (PapaParse с `header: true`). Кодировка UTF-8. Заголовки колонок: | Колонка | Описание | |---------|----------| | Название | Номер заявки (число), ключ в БД | | Статус | Код статуса (см. бейджи в интерфейсе) | | Ответственный (команда) | Команда | | Ответственный (сотрудник) | Исполнитель | | Инициатор заявки | Поиск | | Услуга | Поиск | | Дата создания | `DD.MM.YYYY HH:MM` | | Регламентное время решения запроса | SLA, `DD.MM.YYYY HH:MM` | | Дата решения | Когда решено | | Кем решен (сотрудник) | Непустое значение трактуется как закрытый инцидент | | Уникальный идентификатор | UUID для ссылки в ServiceDesk | ### JSON / Excel Те же поля (русские названия колонок). Excel: первый лист, первая строка — заголовки. ## Недельная динамика График по неделям и таблица под ним задаются константой `WEEK_STATS` в `index.html`, не из БД. ## Стек - Фронт: Chart.js, PapaParse, SheetJS xlsx, шрифты Google Fonts. - Бэк: Node 20, `express`, `pg` (каталог `server/`). ## Проверка после развёртывания ```bash cd /opt/omc-servicedesk-monitor cp .env.example .env # заполнить DATABASE_URL docker compose up -d api curl -sS http://127.0.0.1:3910/api/health curl -skS --resolve 'sd.gen7x.ru:443:127.0.0.1' 'https://sd.gen7x.ru/api/health' ``` Ожидается JSON `{"ok":true,...}`. На проде Nginx для `sd.gen7x.ru` должен быть `location ^~ /api/` (с модификатором `^~`), иначе запросы к `/api/…` могут перехватываться регексом статических расширений. ## Логи и бэкапы Логи API: `docker logs omc-sd-api`. Данные инцидентов — в PostgreSQL (общий бэкап кластера). Статика — файлы в каталоге проекта. ## История изменений См. [HISTORY.md](HISTORY.md).