Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
89 changes: 60 additions & 29 deletions content/documentation/admin/datasources/types.ru.md
Original file line number Diff line number Diff line change
Expand Up @@ -595,7 +595,7 @@ FIELDS:

## GenericAPI

Источник данных типа **GenericAPI** позволяет подключаться к любому REST API и получать данные в формате JSON. Поддерживает различные типы пагинации и настраиваемые параметры запроса.
Источник данных типа **GenericAPI** позволяет подключаться к любому REST API и получать данные в формате JSON. Поддерживаются различные типы пагинации и настраиваемые параметры запроса.

### Авторизация

Expand All @@ -619,11 +619,33 @@ Authorization: Basic <base64-encoded-credentials>
X-API-Key: <ключ>
```

### Конфигурация

* `URL` — базовый URL API в формате `https://api.example.com`.
* `Method` — HTTP-метод (GET, POST, PUT, PATCH, DELETE).
* `Query` — дополнительные query параметры (например, для фильтрации или поиска).

### Параметры

| Название | Обязательность | Описание | Возможные значения | Примеры | По умолчанию |
|---------------------|----------------|-------------------------------------------------------------------------------------------|---------------------------------------------------|---------------------------------------|--------------|
| `paginationType` | Опционально | Тип пагинации для обработки больших объемов данных | `none`, `offset`, `cursor`, `page`, `link_header` | `none` | `none` |
| `path` | Опционально | Путь к эндпоинту API, который будет добавлен к базовому URL | Любая строка, начинающаяся с `/` | `/api/v1/users`, `/projects` | `""` |
| `dataPath` | Опционально | Путь к данным в ответе (цепочка ключей через точку) | Любая строка | `data`, `results.items`, `.` | `.` |
| `responseFormat` | Опционально | Формат ответа | `array`, `map` | `array`, `map` | `array` |
| `mapKeyField` | Опционально | При `responseFormat` равном `map`: название поля, в которое записать ключ из JSON-объекта | Любая строка | `slug`, `externalId` | `""` |
| `pageParam` | Опционально | Название параметра для номера страницы (для offset- и page- пагинации) | Любая строка | `page`, `_page`, `pageNumber` | `page` |
| `limitParam` | Опционально | Название параметра для количества элементов на странице (для offset-пагинации) | Любая строка | `limit`, `per_page`, `_limit`, `size` | `limit` |
| `sizeParam` | Опционально | Название параметра для размера страницы (для page-пагинации) | Любая строка | `size`, `pageSize`, `_size` | `size` |
| `cursorParam` | Опционально | Название параметра для курсора (для cursor-пагинации) | Любая строка | `cursor`, `after`, `next` | `cursor` |
| `pageSize` | Опционально | Количество элементов на странице для пагинации | Положительное целое число | `10`, `20`, `50`, `100` | `100` |
| `requestBody` | Опционально | Тело запроса для POST/PUT/PATCH-методов | Любая строка | `{"query": "example"}` | `""` |

### Спецификация ответа

GenericAPI возвращает массив объектов JSON. Структура данных зависит от конкретного API, к которому происходит подключение.
Формат ожидаемого ответа задаётся параметром `responseFormat` (по умолчанию `array`).

Пример типичного ответа:
Пример ответа для `responseFormat: array`:

```json
[
Expand All @@ -642,49 +664,58 @@ GenericAPI возвращает массив объектов JSON. Структ
]
```

### Конфигурация
Пример ответа для `responseFormat: map`:

* **URL** — базовый URL API в формате `https://api.example.com`.
* **Method** — HTTP-метод (GET, POST, PUT, PATCH, DELETE).
* **Query** — дополнительные query параметры (например, для фильтрации или поиска).
```json
{
"billing": { "title": "Billing", "owner": "team-a" },
"shipping": { "title": "Shipping", "owner": "team-b" }
}
```

### Параметры
Перед обработкой ответ с `responseFormat: map` преобразуется в массив с учетом значения параметра `mapKeyField`.

| Название | Обязательность | Описание | Возможные значения | Примеры | По умолчанию |
|---------------------|----------------|--------------------------------------------------------------------------------|---------------------------------------------------------|--------------------------------------------------|--------------|
| `paginationType` | опционально | Тип пагинации для обработки больших объемов данных | `none`, `offset`, `cursor`, `page`, `link_header` | `none` | `none` |
| `path` | опционально | Путь к эндпоинту API, который будет добавлен к базовому URL | Любая строка, начинающаяся с `/` | `/api/v1/users`, `/projects` | `""` |
| `dataPath` | опционально | JSONPath для извлечения массива данных из ответа API | Любая строка | `data`, `results.items`, `.` | `.` |
| `pageParam` | опционально | Название параметра для номера страницы (для offset- и page- пагинации) | Любая строка | `page`, `_page`, `pageNumber` | `page` |
| `limitParam` | опционально | Название параметра для количества элементов на странице (для offset-пагинации) | Любая строка | `limit`, `per_page`, `_limit`, `size` | `limit` |
| `sizeParam` | опционально | Название параметра для размера страницы (для page-пагинации) | Любая строка | `size`, `pageSize`, `_size` | `size` |
| `cursorParam` | опционально | Название параметра для курсора (для cursor-пагинации) | Любая строка | `cursor`, `after`, `next` | `cursor` |
| `pageSize` | опционально | Количество элементов на странице для пагинации | Положительное целое число | `10`, `20`, `50`, `100` | `100` |
| `requestBody` | опционально | Тело запроса для POST/PUT/PATCH-методов | Любая строка | `{"query": "example"}` | `""` |
При **`mapKeyField: example`** в обработку передаётся массив с добавленным полем `example` со значением, взятым из ключа объекта:

```json
[
{ "example": "billing", "title": "Billing", "owner": "team-a" },
{ "example": "shipping", "title": "Shipping", "owner": "team-b" }
]
```

Если **`mapKeyField`** не задан (пустая строка), в обработку передаётся массив без добавления нового поля:

```json
[
{ "title": "Billing", "owner": "team-a" },
{ "title": "Shipping", "owner": "team-b" }
]
```

### Типы пагинации

- **none** — без пагинации, получает все данные одним запросом.
- `none` — без пагинации, получает все данные одним запросом.

- **offset** — пагинация по номеру страницы и количеству элементов:
- `offset` — пагинация по номеру страницы и количеству элементов:
- Использует параметры `pageParam` и `limitParam`.
- Пример: `?page=1&limit=20`.

- **page** — пагинация по номеру страницы и размеру:
- `page` — пагинация по номеру страницы и размеру:
- Использует параметры `pageParam` и `sizeParam`.
- Пример: `?page=1&size=20`.

- **cursor** — пагинация по курсору:
- `cursor` — пагинация по курсору:
- Использует параметр `cursorParam`.
- Пример: `?cursor=eyJpZCI6MTIzfQ==`.

- **link_header** — пагинация через заголовок Link:
- `link_header` — пагинация через заголовок Link:
  - Использует заголовок `Link` в ответе для определения следующей страницы.
  - Стандарт RFC 5988.

### Примеры конфигурации

**JSONPlaceholder API (без пагинации):**
JSONPlaceholder API (без пагинации):

```yaml
url: https://jsonplaceholder.typicode.com
Expand All @@ -693,7 +724,7 @@ paginationType: none
dataPath: .
```

**GitLab API (offset пагинация):**
GitLab API (offset пагинация):

```yaml
url: https://gitlab.example.com
Expand All @@ -706,7 +737,7 @@ headers:
Authorization: Bearer <token>
```

**GitHub API (link header пагинация):**
GitHub API (link header пагинация):

```yaml
url: https://api.github.com
Expand All @@ -717,7 +748,7 @@ headers:
Accept: application/vnd.github.v3+json
```

**API с вложенными данными:**
API с вложенными данными:

```yaml
url: https://api.example.com
Expand All @@ -729,7 +760,7 @@ limitParam: limit
query: "filter=active&sort=name"
```

**POST-запрос с телом:**
POST-запрос с телом:

```yaml
url: https://api.example.com
Expand Down
42 changes: 26 additions & 16 deletions content/documentation/admin/security/audit-logs.ru.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,47 +10,57 @@ weight: 40

В формировании и хранении аудит-логов участвуют следующие компоненты:

- **DDP Backend** — формирует записи аудит-логов.
- **PostgreSQL** — обеспечивает хранение данных.
- DDP Backend — формирует записи аудит-логов.
- PostgreSQL — обеспечивает хранение данных.

## Содержимое аудит-логов

Для каждого HTTP-запроса (кроме GET) создается запись аудит-лога, содержащая:
Для каждого HTTP-запроса (кроме GET) создаётся запись аудит-лога, содержащая:

- **Email** — адрес электронной почты пользователя, выполнившего запрос.
- **IP** — IP-адрес клиента.
- **Endpoint** — путь API, к которому был выполнен запрос.
- **Method**HTTP-метод запроса (POST, PUT, DELETE, PATCH).
- **Status** — HTTP-код ответа.
- **Body**тело HTTP-запроса.
- **Timestamp**время выполнения запроса.
- «Email» — адрес электронной почты пользователя, выполнившего запрос.
- «IP» — IP-адрес клиента.
- «Тело запроса» — тело HTTP-запроса.
- «Путь»путь API, к которому был выполнён запрос.
- «Метод» — HTTP-метод запроса (POST, PUT, DELETE, PATCH).
- «Статус» — HTTP-код ответа.
- «Дата»дата выполнения запроса.

## Принцип работы

Аудит-логи формируются автоматически в DDP Backend с использованием промежуточного слоя обработки запросов (middleware) для всех HTTP-запросов, кроме GET.

Для снижения нагрузки на базу данных используется буферизация записей со следующими параметрами:
- Размер батча — 40 записей.
- Интервал записи — 20 секунд.
- Размер буфера в памяти — 4 записи.

1. Размер батча — 40 записей.
1. Интервал записи — 20 секунд.
1. Размер буфера в памяти — 4 записи.

## Хранение

Аудит-логи хранятся в таблице audit_logs базы данных PostgreSQL. Таблица партиционирована на основе поля `timestamp` с разделением по дням.
Аудит-логи хранятся в таблице `audit_logs` базы данных PostgreSQL. Таблица партиционирована на основе поля `timestamp` с разделением по дням.

Структура таблицы поддерживается автоматически: ежедневно в 00:00 по серверному времени подготавливается пространство для записи логов на следующие 7 дней.

Логи хранятся неограниченно долго. Автоматическая очистка старых записей не выполняется. Для управления временем хранения необходимо настроить автоматическое удаление старых групп логов через внешние инструменты (например, cron-задачи или скрипты очистки базы данных).

## Просмотр логов

Аудит-логи доступны через веб-интерфейс в разделе «Администрирование» → «Аудит». Логи можно фильтровать по следующим параметрам:
Аудит-логи доступны через веб-интерфейс в разделе «Администрирование» → «Аудит». Логи можно фильтровать по следующим
параметрам:

- Период (дата и время начала и окончания).
- Email пользователя.
- IP-адрес.
- Эндпоинт.
- Путь.
- Метод запроса.
- Статус ответа.

## Выгрузка в CSV

На странице просмотра аудит-логов доступна кнопка **«Скачать .csv»**. Выгрузка выполняется только при наличии разрешения на чтение аудит-логов.

В файл попадают **все** записи, соответствующие текущим фильтрам и сортировке. Если число подходящих событий превышает лимит в 100 000 записей, выгрузка не выполняется.

## Настройка

Механизм аудит-логирования включён по умолчанию и не требует дополнительной настройки. Для управления временем хранения логов необходимо настроить автоматическое удаление старых партиций базы данных.
32 changes: 32 additions & 0 deletions content/documentation/release-notes/v1.6.0.ru.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
---
title: v1.6.0
weight: 910
---

{{< alert level="info" >}}
Выпуск релиза планируется 22.06.2026
{{< /alert >}}

## Новые возможности

### Аудит-логи

Добавлена выгрузка аудит-логов в CSV. Подробнее — в разделе [«Аудит-логи»](../../admin/security/audit-logs/#выгрузка-в-csv).

### Источники данных

В источник данных типа [«GenericAPI»](../../admin/datasources/types/#genericapi) добавлена поддержка JSON-ответов в формате map.

### Шаблонизация

Добавлена функция шаблонизации [«toSlug»](../../user/templating/#toslug).

## Улучшения интерфейса

- Добавлена возможность создания новых действий, либо редактирования существующих, из окна конфигурации элемента процесса.
- Добавлена возможность создания новых учетных данных из окна конфигурации внешних сервисов, действий, виджетов и источников данных.
- Добавлено поле «Дата окончания» для элементов процессов и действий.

## Исправления

- Удалена возможность создания параметра типа «Entities» для ресурсов.
Loading
Loading