Feature: API PostgreSQL — upsert по «Название», загрузка из БД при открытии
Made-with: Cursor
This commit is contained in:
60
README.md
60
README.md
@@ -2,25 +2,47 @@
|
||||
|
||||
**Репозиторий:** https://git.gen7x.ru/cursor-agent/omc-servicedesk-monitor
|
||||
|
||||
**Публичный URL (прод):** https://sd.gen7x.ru/ — раздача через Nginx с сервера (`/opt/gen7x/nginx/conf.d/sd.gen7x.ru.conf`).
|
||||
**Публичный URL (прод):** https://sd.gen7x.ru/ — статика и API через Nginx (`/opt/gen7x/nginx/conf.d/sd.gen7x.ru.conf`).
|
||||
|
||||
Одностраничный дашборд для мониторинга инцидентов ServiceDesk: KPI, диаграммы, таблица и разбивка по сотрудникам. Работает в браузере без бэкенда — данные загружаются из CSV, JSON или Excel (.xlsx / .xls) с той же таблицей колонок.
|
||||
Дашборд инцидентов ServiceDesk: KPI, диаграммы, таблица, разбивка по сотрудникам. Загрузка файла (CSV, JSON, Excel) **сохраняется в 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/` → этот порт.
|
||||
|
||||
Откройте в браузере файл [`index.html`](index.html) (двойной клик или `file://`). Для быстрой проверки можно загрузить [`sample-data.csv`](sample-data.csv).
|
||||
Создание базы (один раз, от суперпользователя Postgres):
|
||||
|
||||
### Docker
|
||||
```sql
|
||||
CREATE DATABASE omc_sd_monitor;
|
||||
```
|
||||
|
||||
В `.env` задайте `DATABASE_URL` (см. `.env.example`). Спецсимволы в пароле — в URL-кодировании (например `/` → `%2F`).
|
||||
|
||||
Запуск только API на сервере:
|
||||
|
||||
```bash
|
||||
cd /opt/omc-servicedesk-monitor
|
||||
cp .env.example .env # при необходимости измените PORT
|
||||
docker compose up -d
|
||||
# .env с DATABASE_URL
|
||||
docker compose up -d api
|
||||
```
|
||||
|
||||
Страница: `http://localhost:${PORT}` (по умолчанию 8080).
|
||||
## Запуск
|
||||
|
||||
### Локально (только UI)
|
||||
|
||||
Откройте [`index.html`](index.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).
|
||||
|
||||
## Формат данных
|
||||
|
||||
@@ -30,7 +52,7 @@ docker compose up -d
|
||||
|
||||
| Колонка | Описание |
|
||||
|---------|----------|
|
||||
| Название | Номер заявки (число) |
|
||||
| Название | Номер заявки (число), ключ в БД |
|
||||
| Статус | Код статуса (см. бейджи в интерфейсе) |
|
||||
| Ответственный (команда) | Команда |
|
||||
| Ответственный (сотрудник) | Исполнитель |
|
||||
@@ -42,28 +64,22 @@ docker compose up -d
|
||||
| Кем решен (сотрудник) | Непустое значение трактуется как закрытый инцидент |
|
||||
| Уникальный идентификатор | UUID для ссылки в ServiceDesk |
|
||||
|
||||
### JSON
|
||||
### JSON / Excel
|
||||
|
||||
Массив объектов с теми же ключами полей, что и в CSV.
|
||||
|
||||
### Excel
|
||||
|
||||
Первый лист книги; первая строка — заголовки, совпадающие с колонками CSV (те же русские названия). Поддерживаются `.xlsx` и устаревший `.xls`. Разбор в браузере через SheetJS (`xlsx`, CDN).
|
||||
Те же поля (русские названия колонок). Excel: первый лист, первая строка — заголовки.
|
||||
|
||||
## Недельная динамика
|
||||
|
||||
График «хронология по неделям» и таблица под ним заполняются константой `WEEK_STATS` внутри `index.html` и **не** зависят от загружаемого файла. Обновляйте массив вручную при необходимости.
|
||||
График по неделям и таблица под ним задаются константой `WEEK_STATS` в `index.html`, не из БД.
|
||||
|
||||
## Стек
|
||||
|
||||
- Chart.js (CDN)
|
||||
- PapaParse 5.4.1 (CDN)
|
||||
- SheetJS xlsx 0.18.5 (CDN) — Excel
|
||||
- Шрифты: Barlow Condensed, IBM Plex Sans, IBM Plex Mono (Google Fonts)
|
||||
- Фронт: Chart.js, PapaParse, SheetJS xlsx, шрифты Google Fonts.
|
||||
- Бэк: Node 20, `express`, `pg` (каталог `server/`).
|
||||
|
||||
## Логи и бэкапы
|
||||
|
||||
Статический файл; логи приложения отсутствуют. Резервное копирование — копия каталога проекта или репозитория Git.
|
||||
Логи API: `docker logs omc-sd-api`. Данные инцидентов — в PostgreSQL (общий бэкап кластера). Статика — файлы в каталоге проекта.
|
||||
|
||||
## История изменений
|
||||
|
||||
|
||||
Reference in New Issue
Block a user