Files
XC_VM/docs/ru/guides/diagnostics-api.md
T
Divarion-D 76844fef11 docs: restructure, fix PSR-4 drift, and unify en/ru
Overhaul the Docsify documentation (English + Russian) so it matches the current
codebase and follows one consistent pattern.

Content accuracy (post-migration):
- Rewrite development/autoloader.md to PSR-4 / Composer (the old XC_Autoloader
  scanner, igbinary tmp/cache/autoload_map and registerDirectories are gone).
- PascalCase every source path (src/core -> src/Core, domain/Stream, cli/Commands,
  public/Controllers, Infrastructure/Redis, ...) across all docs.
- Replace the removed autoload.php references with vendor/autoload.php
  (build_system, bootstrap-contexts, error-handling, modules).
- ssl-generation: note that the installer now auto-generates a unique self-signed
  certificate before Nginx starts.

Common pattern (Clean & uniform):
- Strip emoji from headings; remove the in-page Navigation blocks (the Docsify
  sidebar already provides navigation).
- One H1 + intro per doc; uniform "Related files" / "Связанные файлы" section,
  added to the code-centric docs that lacked it.

Structure:
- Remove the empty stray docs/api/; move updates_checklist.md into builds/;
  link the previously-orphaned ucs-integration.md.
- Regroup the sidebars (split the oversized guides group into Developer Guides /
  Security & Access / Integrations; fold builds into Build & Release).

Augment:
- dev-workflow: Local Setup (make dev-tools) + Quality Checks (phpstan, cs, gates).
- build_system: Composer Dependencies section (committed prod-only vendor,
  committed lock, dev tools via composer install, no build-time vendor step).

en/ru parity:
- Apply the same structure, fixes and pattern to docs/ru/ (translated), including
  a new Russian ucs-integration.md. The en and ru file sets are now identical.
2026-06-26 15:56:15 +03:00

141 lines
5.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Сервис диагностики
`DiagnosticsService` предоставляет утилиты для диагностики состояния системы: анализ SSL-сертификатов, проверка совместимости кодеков, работа с журналами панели и определение внешнего IP.
---
## Методы
### `getCertificateInfo(?string $certificate = null): ?array`
Возвращает информацию об SSL-сертификате.
**Параметры:**
- `$certificate` — путь к файлу сертификата. Если `null` — путь считывается автоматически из `BIN_PATH/nginx/conf/ssl.conf`
**Возвращает:**
```php
[
'serial' => string, // серийный номер
'expiration' => int, // UNIX timestamp истечения
'subject' => string, // CN/subject сертификата
'path' => string, // директория сертификата
]
```
Возвращает `null` если:
- Файл сертификата не найден
- `openssl x509` завершился с ошибкой
**Пример:**
```php
$info = DiagnosticsService::getCertificateInfo();
if ($info) {
$days = ($info['expiration'] - time()) / 86400;
echo "Сертификат истекает через {$days} дней";
echo "Subject: " . $info['subject'];
}
```
---
### `checkCompatibility(array|string $data, bool $allowHEVC = false): bool`
Проверяет совместимость кодеков стрима с плеером.
**Параметры:**
- `$data` — вывод FFProbe в виде массива или JSON-строки. Ожидает ключ `codecs` с подключами `audio.codec_name` и `video.codec_name`
- `$allowHEVC` — разрешить HEVC/H.265 и AC3 (по умолчанию отключено)
**Поддерживаемые кодеки:**
| Тип | Поддерживаемые кодеки (по умолчанию) | Дополнительно (с `$allowHEVC`) |
| ----- | --------------------------------------------------- | ------------------------------ |
| Видео | `h264`, `vp8`, `vp9`, `ogg`, `av1` | `hevc`, `h265` |
| Аудио | `aac`, `libfdk_aac`, `opus`, `vorbis`, `pcm_s16le`, `mp2`, `mp3`, `flac` | `ac3` |
**Пример:**
```php
$ffprobeData = [
'codecs' => [
'video' => ['codec_name' => 'h264'],
'audio' => ['codec_name' => 'aac'],
]
];
if (DiagnosticsService::checkCompatibility($ffprobeData)) {
echo 'Кодеки совместимы с плеером';
}
```
---
### `downloadPanelLogs(object $db): array`
Извлекает до 1000 последних записей из таблицы `panel_logs` (исключая тип `epg`), форматирует их и **очищает таблицу**.
**Параметры:**
- `$db` — экземпляр Database (должен иметь методы `->query()` и `->get_rows()`)
**Возвращает:**
```php
[
'errors' => [
[
'type' => string, // тип записи
'message' => string, // текст ошибки (экранирован)
'file' => string, // дополнительный контекст (экранирован)
'line' => int, // номер строки
'date' => int, // UNIX timestamp
'human_date' => string, // читаемая дата в UTC
],
// ...
],
'version' => string, // текущая версия XC_VM
]
```
**Исключения:** выбрасывает `Exception` при ошибке запроса к БД.
> ⚠️ Метод **очищает** таблицу `panel_logs` после чтения. Вызывайте только при намерении скачать и сбросить логи.
---
### `submitPanelLogs(object $db): array`
Отправляет логи на удалённый сервер диагностики и **очищает таблицу**. Аналогичен `downloadPanelLogs()`, но данные передаются через HTTP.
Используется для автоматической отправки отчётов об ошибках в команду поддержки.
---
## Структура `panel_logs`
| Столбец | Тип | Описание |
| ------------- | -------- | -------------------------------- |
| `type` | string | Тип события (`error`, `warning`, и т.д.) |
| `log_message` | string | Основное сообщение |
| `log_extra` | string | Дополнительный контекст (файл, трейс) |
| `line` | int | Номер строки кода |
| `date` | int | UNIX timestamp |
Тип `epg` исключается из `downloadPanelLogs()` — EPG-логи имеют высокую частоту и отдельный инструмент просмотра.
---
## Связанные файлы
| Файл | Назначение |
| -------------------------------------- | ---------------------------------- |
| `src/Core/Diagnostics/DiagnosticsService.php` | Основной класс диагностики |
| `src/Core/Logging/Logger.php` | Запись в `panel_logs` |
| `src/Core/Config/AppConfig.php` | Константа `XC_VM_VERSION` |