Files
XC_VM/docs/ru/api/system_api.md
T

479 lines
18 KiB
Markdown
Raw Normal View History

2026-05-23 19:31:21 +03:00
# Системный API
2026-05-23 19:31:21 +03:00
Этот API предоставляет различные системные функции, включая управление потоками и VOD, статистику системы, обзор директорий, просмотр логов, управление процессами, перезагрузку EPG/nginx и многое другое.
---
## Расположение файлов
2026-05-23 19:31:21 +03:00
Системный API обрабатывается контроллером:
```text
2026-05-23 19:31:21 +03:00
src/public/Controllers/Api/InternalApiController.php
```
2026-05-23 19:31:21 +03:00
HTTP entry-point: `/api.php` — маршрутизируется nginx на `public/index.php` с параметром `XC_API=internal`.
## Обзор архитектуры API
2026-05-23 19:31:21 +03:00
**Базовый URI:** `http://<host>:<http port>/api.php`
**Аутентификация:** параметр `password`, соответствующий конфигурации `live_streaming_pass`
**Пример:**
`http://<host>:<http port>/api.php?password=<live_streaming_pass>&action=<api endpoint>`
---
## Основные конечные точки API
2026-05-23 19:31:21 +03:00
### 1. Просмотр лога потока
#### **GET** `/api.php?action=view_log`
**Описание:** Возвращает лог ошибок для заданного потока или VOD. Сначала проверяется `STREAMS_PATH`, затем — `VOD_PATH`.
**Параметры:**
| Параметр | Тип | Обязателен | Описание |
| --------- | ------- | ---------- | ------------------------------------- |
| stream_id | integer | да | ID потока, для которого нужен лог |
**Ответ:** Содержимое файла `<stream_id>.errors` в виде простого текста, или пустой ответ, если лог отсутствует.
---
### 2. FPM Status
#### **GET** `/api.php?action=fpm_status`
**Описание:** Возвращает страницу состояния PHP-FPM с локального HTTP broadcast-порта сервера.
---
### 3. Перезагрузка EPG
#### **GET** `/api.php?action=reload_epg`
**Описание:** Запускает в фоне перезагрузку EPG (Electronic Program Guide), асинхронно выполняя `console.php cron:epg`.
---
### 4. Восстановление изображений
#### **GET** `/api.php?action=restore_images`
**Описание:** Запускает в фоне восстановление изображений, асинхронно выполняя `console.php tools images`.
---
### 5. Перезагрузка Nginx
#### **GET** `/api.php?action=reload_nginx`
**Описание:** Перезагружает оба процесса nginx — RTMP nginx и основной — отправляя им сигнал перезагрузки.
---
### 6. Использование Ramdisk потоков
#### **GET** `/api.php?action=streams_ramdisk`
**Описание:** Возвращает размеры файлов по каждому потоку из директории ramdisk. Имеет лимит времени 30 секунд.
**Ответ:**
```json
{
"result": true,
"streams": {
"123": 4096000,
"456": 2048000
}
}
```
---
### 7. Управление VOD
#### **GET** `/api.php?action=vod`
2026-05-23 19:31:21 +03:00
**Описание:** Запускает или останавливает VOD-потоки. При запуске поток сначала останавливается, затем либо запускается принудительно, либо ставится в очередь — в зависимости от параметра `force`.
**Параметры:**
2026-05-23 19:31:21 +03:00
| Параметр | Тип | Обязателен | Описание |
| ---------- | ----------------- | ---------- | -------------------------------------------------------------- |
| stream_ids | array of integers | да | Список ID потоков |
| function | string | да | Выполняемое действие (`start` или `stop`) |
| force | boolean | нет | Если true — запуск немедленно, без очереди (только для start) |
**Ответ:**
```json
{ "result": true }
```
---
2026-05-23 19:31:21 +03:00
### 8. Статистика RTMP
#### **GET** `/api.php?action=rtmp_stats`
**Описание:** Возвращает статистику локального RTMP-сервера.
---
### 9. Завершение процесса по PID
#### **GET** `/api.php?action=kill_pid`
**Описание:** Завершает процесс, отправляя SIGKILL (сигнал 9) указанному PID.
**Параметры:**
| Параметр | Тип | Обязателен | Описание |
| -------- | ------- | ---------- | ------------------------------ |
| pid | integer | да | ID процесса для завершения |
**Ответ:**
```json
{ "result": true }
```
---
### 10. RTMP Kill
#### **GET** `/api.php?action=rtmp_kill`
**Описание:** Завершает подключение RTMP-публикатора по имени через интерфейс управления nginx RTMP.
**Параметры:**
| Параметр | Тип | Обязателен | Описание |
| -------- | ------ | ---------- | ------------------------------------- |
| name | string | да | Имя RTMP-потока для отключения |
---
### 11. Управление live-потоками
#### **GET** `/api.php?action=stream`
2026-05-23 19:31:21 +03:00
**Описание:** Запускает или останавливает live-потоки. При запуске между каждым потоком применяется задержка 50 мс.
**Параметры:**
2026-05-23 19:31:21 +03:00
| Параметр | Тип | Обязателен | Описание |
| ---------- | ----------------- | ---------- | ----------------------------------------- |
| stream_ids | array of integers | да | Список ID потоков |
| function | string | да | Выполняемое действие (`start` или `stop`) |
**Ответ:**
```json
{ "result": true }
```
---
2026-05-23 19:31:21 +03:00
### 12. Системная статистика
#### **GET** `/api.php?action=stats`
2026-05-23 19:31:21 +03:00
**Описание:** Получает системную статистику через `SystemInfo::getStats()`.
**Ответ:**
2026-05-23 19:31:21 +03:00
```json
{
"cpu": 8.32,
"cpu_cores": 56,
"cpu_avg": 8.86,
"cpu_name": "Intel(R) Xeon(R) CPU E5-2680 v4 @ 2.40GHz",
2026-05-23 19:31:21 +03:00
...
}
```
---
2026-05-23 19:31:21 +03:00
### 13. Принудительный источник потока
#### **GET** `/api.php?action=force_stream`
**Описание:** Принудительно переключает поток на указанный источник, записывая force-сигнальный файл.
**Параметры:**
| Параметр | Тип | Обязателен | Описание |
| --------- | ------- | ---------- | ---------------------------------------------- |
| stream_id | integer | да | ID потока для принудительного переключения |
| force_id | integer | да | ID источника, на который переключить поток |
---
### 14. Закрытие подключения
#### **GET** `/api.php?action=closeConnection`
**Описание:** Закрывает активное подключение по его activity ID.
**Параметры:**
| Параметр | Тип | Обязателен | Описание |
| ----------- | ------- | ---------- | ----------------------------------- |
| activity_id | integer | да | Activity ID подключения |
---
### 15. Проверка жизненного цикла процессов
#### **GET** `/api.php?action=pidsAreRunning`
2026-05-23 19:31:21 +03:00
**Описание:** Проверяет, выполняются ли указанные PID и соответствуют ли они ожидаемому бинарнику программы.
**Параметры:**
| Параметр | Тип | Обязателен | Описание |
| -------- | ----------------- | ---------- | ------------------------------ |
| pids | array of integers | да | Список PID для проверки |
| program | string | да | Ожидаемое имя программы |
**Ответ:**
```json
{
"1234": true,
"5678": false
}
```
---
2026-05-23 19:31:21 +03:00
### 16. Получение файла
#### **GET** `/api.php?action=getFile`
2026-05-23 19:31:21 +03:00
**Описание:** Скачивание указанного файла. Поддерживает HTTP Range-запросы для частичной загрузки. Разрешены только файлы с расширениями: `log`, `tar.gz`, `gz`, `zip`, `m3u8`, `mp4`, `mkv`, `avi`, `mpg`, `flv`, `3gp`, `m4v`, `wmv`, `mov`, `ts`, `srt`, `sub`, `sbv`, `jpg`, `png`, `bmp`, `jpeg`, `gif`, `tif`.
**Параметры:**
2026-05-23 19:31:21 +03:00
| Параметр | Тип | Обязателен | Описание |
| -------- | ------ | ---------- | ---------------- |
| filename | string | да | Путь к файлу |
**Ответ:** Содержимое файла с типом `application/octet-stream`. Поддерживает заголовок `Range` для частичной загрузки (HTTP 206).
---
2026-05-23 19:31:21 +03:00
### 17. Рекурсивное сканирование директории
#### **GET** `/api.php?action=scandir_recursive`
**Описание:** Рекурсивно сканирует директорию с помощью `find`, опционально фильтруя по расширению. Имеет лимит времени 30 секунд.
**Параметры:**
2026-05-23 19:31:21 +03:00
| Параметр | Тип | Обязателен | Описание |
| -------- | ------ | ---------- | ----------------------------------------------------------------------- |
| dir | string | да | URL-encoded путь к директории |
| allowed | string | нет | URL-encoded список разрешённых расширений, разделённых `\|` (напр. `mp4\|mkv`) |
**Ответ:** JSON-массив путей файлов.
---
### 18. Список директории
#### **GET** `/api.php?action=scandir`
**Описание:** Возвращает список файлов и подкаталогов в заданной директории, опционально фильтруя по расширению. Имеет лимит времени 30 секунд.
**Параметры:**
| Параметр | Тип | Обязателен | Описание |
| -------- | ------ | ---------- | ----------------------------------------------------------------------- |
| dir | string | да | URL-encoded путь к директории |
| allowed | string | нет | URL-encoded список разрешённых расширений, разделённых `\|` (напр. `mp4\|mkv`) |
**Ответ:**
2026-05-23 19:31:21 +03:00
```json
{
"result": true,
"dirs": ["subdir1", "subdir2"],
"files": ["video.mp4", "movie.mkv"]
}
```
---
2026-05-23 19:31:21 +03:00
### 19. Получить свободное место на диске
#### **GET** `/api.php?action=get_free_space`
**Описание:** Возвращает информацию об использовании диска из `df -h`.
**Ответ:** JSON-массив строк вывода `df -h`.
---
### 20. Получить список процессов
#### **GET** `/api.php?action=get_pids`
**Описание:** Возвращает список всех запущенных процессов с деталями (пользователь, PID, CPU%, память% и т.д.).
**Ответ:** JSON-массив строк вывода `ps -e`.
---
### 21. Перенаправление подключения
#### **GET** `/api.php?action=redirect_connection`
2026-05-23 19:31:21 +03:00
**Описание:** Перенаправляет подключение, записывая сигнальный файл, идентифицируемый по UUID.
**Параметры:**
2026-05-23 19:31:21 +03:00
| Параметр | Тип | Обязателен | Описание |
| --------- | ------- | ---------- | ------------------------------ |
| uuid | string | да | UUID, идентифицирующий подключение |
| stream_id | integer | да | ID целевого потока |
---
### 22. Очистка временной директории
#### **GET** `/api.php?action=free_temp`
**Описание:** Удаляет все файлы в директории `tmp/` и запускает cron-задачу кэша.
---
2026-05-23 19:31:21 +03:00
### 23. Очистка директории потоков
#### **GET** `/api.php?action=free_streams`
**Описание:** Удаляет все файлы из директории `content/streams/`.
---
### 24. Отправка сигнала
#### **GET** `/api.php?action=signal_send`
2026-05-23 19:31:21 +03:00
**Описание:** Отправляет сигнальное сообщение подключению, идентифицированному по UUID.
**Параметры:**
2026-05-23 19:31:21 +03:00
| Параметр | Тип | Обязателен | Описание |
| -------- | ------ | ---------- | ------------------------------------- |
| message | string | да | Сигнальное сообщение или команда |
| uuid | string | да | UUID, идентифицирующий подключение |
---
2026-05-23 19:31:21 +03:00
### 25. Получить информацию о сертификате
#### **GET** `/api.php?action=get_certificate_info`
**Описание:** Возвращает информацию о SSL/TLS-сертификате через `DiagnosticsService::getCertificateInfo()`.
---
2026-05-23 19:31:21 +03:00
### 26. Принудительный запуск Watch Cron
#### **GET** `/api.php?action=watch_force`
**Описание:** Запускает в фоне cron-задачу watch для конкретного элемента.
**Параметры:**
| Параметр | Тип | Обязателен | Описание |
| -------- | ------- | ---------- | --------------------- |
| id | integer | да | ID элемента watch |
---
2026-05-23 19:31:21 +03:00
### 27. Принудительный запуск Plex Cron
#### **GET** `/api.php?action=plex_force`
**Описание:** Запускает в фоне cron-задачу Plex для конкретного элемента.
**Параметры:**
| Параметр | Тип | Обязателен | Описание |
| -------- | ------- | ---------- | ------------------- |
| id | integer | да | ID элемента Plex |
---
2026-05-23 19:31:21 +03:00
### 28. Получить файлы архива
#### **GET** `/api.php?action=get_archive_files`
**Описание:** Возвращает список архивных `.ts`-сегментов для заданного потока.
**Параметры:**
| Параметр | Тип | Обязателен | Описание |
| --------- | ------- | ---------- | ------------- |
| stream_id | integer | да | ID потока |
**Ответ:**
```json
{
"result": true,
"data": ["/path/to/archive/123/segment001.ts", "/path/to/archive/123/segment002.ts"]
}
```
---
2026-05-23 19:31:21 +03:00
### 29. Завершение процессов Watch
#### **GET** `/api.php?action=kill_watch`
**Описание:** Завершает все запущенные процессы модуля watch (основной PID и PID воркеров).
---
### 30. Завершение процессов Plex
#### **GET** `/api.php?action=kill_plex`
**Описание:** Завершает все запущенные процессы модуля Plex (основной PID и PID воркеров).
---
### 31. Probe потока
#### **GET** `/api.php?action=probe`
**Описание:** Зондирует URL потока с помощью FFprobe для получения медиаинформации.
**Параметры:**
| Параметр | Тип | Обязателен | Описание |
| ---------- | ------ | ---------- | ---------------------------------------------- |
| url | string | да | URL зондируемого потока |
| user_agent | string | нет | Пользовательский заголовок User-Agent |
| http_proxy | string | нет | URL HTTP-прокси |
| cookies | string | нет | Строка cookies для отправки с запросом |
| headers | string | нет | Дополнительные HTTP-заголовки |
**Ответ:**
```json
{
"result": true,
"data": { ... }
}
```
---
## Коды ошибок
2026-05-23 19:31:21 +03:00
| Код | Описание |
| -------------------- | ------------------------------ |
| INVALID_API_PASSWORD | Неверный пароль API |
| API_IP_NOT_ALLOWED | IP-адрес не разрешён |
Стандартный ответ для нераспознанного действия:
```json
{ "result": false }
```
---
## Примечания
2026-05-23 19:31:21 +03:00
* Все запросы должны быть аутентифицированы корректным паролем API (`live_streaming_pass`).
* IP-адрес запроса должен быть в списке разрешённых IP, возвращаемом `ServerRepository::getAllowedIPs()`.
* Некоторые действия выполняют команды асинхронно в фоне и возвращают результат немедленно.