PHPackages                             besnovatyj/yii2-cms-info - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. besnovatyj/yii2-cms-info

ActiveYii2-extension[Utility &amp; Helpers](/categories/utility)

besnovatyj/yii2-cms-info
========================

Модуль просмотра информации о сервере и приложении

v1.0.0(4d ago)01MITPHP &gt;=8.4

Since Jul 7Compare

[ Source](https://github.com/besnovatyj/yii2-cms-info)[ Packagist](https://packagist.org/packages/besnovatyj/yii2-cms-info)[ RSS](/packages/besnovatyj-yii2-cms-info/feed)WikiDiscussions Synced today

READMEChangelogDependencies (5)Versions (2)Used By (0)

System Information Widget - Полная документация
===============================================

[](#system-information-widget---полная-документация)

Оглавление
----------

[](#оглавление)

- [Обзор](#%D0%BE%D0%B1%D0%B7%D0%BE%D1%80)
- [Архитектура](#%D0%B0%D1%80%D1%85%D0%B8%D1%82%D0%B5%D0%BA%D1%82%D1%83%D1%80%D0%B0)
- [Компоненты Backend](#%D0%BA%D0%BE%D0%BC%D0%BF%D0%BE%D0%BD%D0%B5%D0%BD%D1%82%D1%8B-backend)
- [Компоненты Frontend](#%D0%BA%D0%BE%D0%BC%D0%BF%D0%BE%D0%BD%D0%B5%D0%BD%D1%82%D1%8B-frontend)
- [API Endpoints](#api-endpoints)
- [Конфигурация](#%D0%BA%D0%BE%D0%BD%D1%84%D0%B8%D0%B3%D1%83%D1%80%D0%B0%D1%86%D0%B8%D1%8F)
- [Метрики](#%D0%BC%D0%B5%D1%82%D1%80%D0%B8%D0%BA%D0%B8)
- [Безопасность](#%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D1%8C)
- [Производительность](#%D0%BF%D1%80%D0%BE%D0%B8%D0%B7%D0%B2%D0%BE%D0%B4%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE%D1%81%D1%82%D1%8C)
- [Troubleshooting](#troubleshooting)

---

Обзор
-----

[](#обзор)

Виджет системной информации предоставляет комплексный мониторинг сервера в режиме реального времени через веб-интерфейс администратора.

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

[](#основные-возможности)

✅ **Мониторинг в реальном времени**

- Автоматическое обновление каждые 3 секунды
- Без кэширования - данные всегда актуальные
- Нет использования jQuery - только нативный TypeScript

✅ **Метрики системы**

- CPU: использование, модель, количество ядер, частота
- RAM: общая/используемая/свободная память, buffers, cached
- Disk: размер, использование, точка монтирования
- Load Average: 1/5/15 минут
- Network: статистика по интерфейсам (RX/TX)
- Temperature: температура процессора (если доступно)

✅ **Метрики сервисов**

- PHP: версия, SAPI, memory\_limit, OPcache
- MySQL: версия, размер БД, количество таблиц, соединения
- Redis: версия, uptime, клиенты, память, ключи
- Yii2: версия, окружение, debug, кэш, очередь

✅ **Docker метрики**

- Список всех контейнеров с их статусами
- Версия Docker
- Количество images, volumes, networks
- Просмотр логов контейнеров (100 последних строк)

✅ **Визуализация**

- Графики CPU/Memory (Chart.js) - 60 точек × 3 секунды = 3 минуты истории
- Bootstrap 5 интерфейс с вкладками
- Прогресс-бары с цветовой индикацией
- Responsive дизайн

✅ **Дополнительные функции**

- Экспорт метрик в JSON/CSV
- Настройка интервала обновления
- Пауза/возобновление auto-refresh
- Просмотр Docker логов в модальном окне

---

Архитектура
-----------

[](#архитектура)

### Clean Architecture Pattern

[](#clean-architecture-pattern)

Проект следует принципам Clean Architecture с четким разделением слоев:

```
┌─────────────────────────────────────────────────────┐
│                   VIEW LAYER                        │
│  ┌──────────────────────────────────────────────┐  │
│  │  SysInfoWidget (TypeScript)                  │  │
│  │  - Инициализация                             │  │
│  │  - Обработка событий                         │  │
│  │  - Координация компонентов                   │  │
│  └──────────────────────────────────────────────┘  │
└─────────────────────────────────────────────────────┘
                        ↓
┌─────────────────────────────────────────────────────┐
│                PRESENTATION LAYER                   │
│  ┌──────────────────────────────────────────────┐  │
│  │  MetricsRenderer                             │  │
│  │  - Рендеринг Overview/System/Resources/etc  │  │
│  │  - Обновление DOM элементов                 │  │
│  └──────────────────────────────────────────────┘  │
│  ┌──────────────────────────────────────────────┐  │
│  │  ChartManager (Chart.js)                     │  │
│  │  - Создание графиков CPU/Memory             │  │
│  │  - Обновление точек данных                  │  │
│  └──────────────────────────────────────────────┘  │
└─────────────────────────────────────────────────────┘
                        ↓
┌─────────────────────────────────────────────────────┐
│                 SERVICE LAYER                       │
│  ┌──────────────────────────────────────────────┐  │
│  │  ApiService (Fetch API)                      │  │
│  │  - HTTP запросы к backend                    │  │
│  │  - Обработка CSRF токенов                    │  │
│  └──────────────────────────────────────────────┘  │
│  ┌──────────────────────────────────────────────┐  │
│  │  RealtimeUpdater                             │  │
│  │  - Таймер auto-refresh (3 секунды)          │  │
│  │  - Start/Stop/Toggle                         │  │
│  └──────────────────────────────────────────────┘  │
└─────────────────────────────────────────────────────┘
                        ↓
┌─────────────────────────────────────────────────────┐
│               CONTROLLER LAYER                      │
│  ┌──────────────────────────────────────────────┐  │
│  │  SysInfoController                           │  │
│  │  - actionApiMetrics() - полные метрики       │  │
│  │  - actionApiRealtime() - легковесные         │  │
│  │  - actionApiDockerLogs() - логи контейнера   │  │
│  │  - actionExportJson/Csv() - экспорт          │  │
│  └──────────────────────────────────────────────┘  │
└─────────────────────────────────────────────────────┘
                        ↓
┌─────────────────────────────────────────────────────┐
│                 SERVICE LAYER                       │
│  ┌──────────────────────────────────────────────┐  │
│  │  SysInfoService                              │  │
│  │  - getAllMetrics() - все метрики             │  │
│  │  - getRealtimeMetrics() - только динамика    │  │
│  │  - exportToJson/Csv() - форматирование       │  │
│  └──────────────────────────────────────────────┘  │
└─────────────────────────────────────────────────────┘
                        ↓
┌─────────────────────────────────────────────────────┐
│                PROVIDER LAYER                       │
│  ┌──────────────────────────────────────────────┐  │
│  │  MetricProviderInterface                     │  │
│  │  - isAvailable() - проверка доступности      │  │
│  │  - getMetrics() - получение метрик           │  │
│  └──────────────────────────────────────────────┘  │
│  ┌──────────────────────────────────────────────┐  │
│  │  SystemMetricProvider                        │  │
│  │  PhpMetricProvider                           │  │
│  │  DockerMetricProvider                        │  │
│  │  DatabaseMetricProvider                      │  │
│  │  RedisMetricProvider                         │  │
│  │  ApplicationMetricProvider                   │  │
│  └──────────────────────────────────────────────┘  │
└─────────────────────────────────────────────────────┘
                        ↓
┌─────────────────────────────────────────────────────┐
│                  DATA SOURCES                       │
│  - /proc/stat, /proc/meminfo, /proc/loadavg        │
│  - Docker API (через socket-proxy)                 │
│  - MySQL queries (information_schema)              │
│  - Redis INFO command                              │
│  - PHP functions (phpinfo, opcache_get_status)     │
└─────────────────────────────────────────────────────┘

```

### Принципы разделения ответственности

[](#принципы-разделения-ответственности)

1. **Providers** - отвечают только за сбор raw данных из источников
2. **Service** - бизнес-логика, агрегация данных из провайдеров
3. **Controller** - HTTP слой, валидация запросов, отправка ответов
4. **Frontend Components** - UI логика, рендеринг, управление состоянием

---

Компоненты Backend
------------------

[](#компоненты-backend)

### 1. Metric Providers

[](#1-metric-providers)

#### BaseMetricProvider

[](#basemetricprovider)

Абстрактный базовый класс для всех провайдеров.

**Расположение:** `/app/Besnovatyj/Info/providers/BaseMetricProvider.php`

**Ключевые методы:**

```
abstract public function getName(): string;
abstract public function getCategory(): string;
abstract protected function checkAvailability(): bool;
abstract protected function collectMetrics(): array;

public function isAvailable(): bool;
public function getMetrics(): array;
protected function formatBytes(int $bytes, int $precision = 2): string;
protected function safeShellExec(string $command, int $timeout = 5): ?string;
protected function safeFileReadLines(string $path): ?array;
```

**Особенности:**

- Все провайдеры stateless (без сохранения состояния)
- Встроенная обработка ошибок с try/catch
- Безопасное выполнение shell команд с timeout
- Форматирование байтов в человекочитаемый вид
- Метод `isAvailable()` проверяет доступность источника данных

#### SystemMetricProvider

[](#systemmetricprovider)

Собирает метрики системы Linux из `/proc`.

**Расположение:** `/app/Besnovatyj/Info/providers/SystemMetricProvider.php`

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

- `/proc/cpuinfo` - информация о процессоре
- `/proc/stat` - использование CPU
- `/proc/meminfo` - информация о памяти
- `/proc/diskstats` - статистика дисков
- `/proc/loadavg` - load average
- `/proc/net/dev` - сетевые интерфейсы
- `/proc/uptime` - время работы системы
- `/sys/class/thermal/thermal_zone*/temp` - температура

**Возвращаемая структура:**

```
[
    'server' => [
        'hostname' => 'server-name',
        'serverAddr' => '192.168.1.100',
        'remoteAddr' => '192.168.1.50',
        'os' => 'Ubuntu 22.04 LTS',
        'kernel' => '5.15.0-91-generic',
        'architecture' => 'x86_64'
    ],
    'cpu' => [
        'model' => 'Intel(R) Xeon(R) CPU E5-2680 v4',
        'cores' => 8,
        'frequency' => '2.40 GHz',
        'cache' => '35840 KB',
        'bogomips' => '4800.00'
    ],
    'cpuUsage' => [
        'user' => 1234567,
        'nice' => 123,
        'system' => 234567,
        'idle' => 9876543,
        'iowait' => 1234,
        'irq' => 123,
        'softirq' => 234
    ],
    'memory' => [
        'total' => 16777216000,
        'totalFormatted' => '15.63 GB',
        'used' => 8388608000,
        'usedFormatted' => '7.81 GB',
        'usedPercent' => 50.0,
        'free' => 8388608000,
        'freeFormatted' => '7.81 GB',
        'buffers' => 524288000,
        'buffersFormatted' => '500 MB',
        'cached' => 2097152000,
        'cachedFormatted' => '2.00 GB'
    ],
    'disk' => [
        'total' => 107374182400,
        'totalFormatted' => '100 GB',
        'used' => 53687091200,
        'usedFormatted' => '50 GB',
        'free' => 53687091200,
        'freeFormatted' => '50 GB',
        'percent' => 50,
        'mount' => '/'
    ],
    'loadavg' => [
        '1min' => 0.52,
        '5min' => 0.48,
        '15min' => 0.45,
        'formatted' => '0.52 0.48 0.45'
    ],
    'network' => [
        'eth0' => [
            'rx' => 1234567890,
            'tx' => 987654321,
            'rxFormatted' => '1.15 GB',
            'txFormatted' => '942.23 MB'
        ],
        'lo' => [...]
    ],
    'uptime' => [
        'seconds' => 864000,
        'formatted' => '10 days, 0 hours'
    ],
    'temperature' => [
        'cpu' => 45.5 // в градусах Цельсия
    ]
]
```

#### PhpMetricProvider

[](#phpmetricprovider)

Собирает информацию о PHP и его расширениях.

**Расположение:** `/app/Besnovatyj/Info/providers/PhpMetricProvider.php`

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

- `PHP_VERSION`, `PHP_SAPI`, `PHP_OS`
- `ini_get()` для лимитов
- `memory_get_usage()`, `memory_get_peak_usage()`
- `opcache_get_status()` для OPcache статистики
- `get_loaded_extensions()` для списка расширений

**Возвращаемая структура:**

```
[
    'version' => '8.4.0',
    'sapi' => 'fpm-fcgi',
    'os' => 'Linux',
    'architecture' => '64-bit',
    'memory' => [
        'current' => 2097152,
        'currentFormatted' => '2.00 MB',
        'peak' => 4194304,
        'peakFormatted' => '4.00 MB',
        'limit' => 134217728,
        'limitFormatted' => '128 MB',
        'usagePercent' => 1.56
    ],
    'limits' => [
        'maxExecutionTime' => 30,
        'maxInputTime' => 60,
        'postMaxSize' => '8M',
        'uploadMaxFilesize' => '2M',
        'maxFileUploads' => 20,
        'defaultSocketTimeout' => 60
    ],
    'opcache' => [
        'enabled' => true,
        'memoryUsage' => [
            'used' => 16777216,
            'usedFormatted' => '16.00 MB',
            'free' => 117440512,
            'freeFormatted' => '112.00 MB',
            'wasted' => 0,
            'wastedFormatted' => '0 B',
            'usagePercent' => 12.5
        ],
        'statistics' => [
            'hits' => 12345,
            'misses' => 123,
            'hitRate' => 99.01
        ]
    ],
    'extensions' => [
        'Core', 'date', 'libxml', 'openssl', 'pcre', ...
    ]
]
```

#### DockerMetricProvider

[](#dockermetricprovider)

Собирает метрики Docker через Docker CLI.

**Расположение:** `/app/Besnovatyj/Info/providers/DockerMetricProvider.php`

**Требования:**

- Docker CLI установлен в контейнере
- Переменная окружения `DOCKER_HOST=tcp://socket-proxy:2375`
- Доступ к socket-proxy с разрешениями CONTAINERS, IMAGES, VOLUMES, NETWORKS

**Команды:**

```
docker --version
docker ps -a --format "{{.ID}}|{{.Names}}|{{.State}}|{{.Status}}|{{.Image}}"
docker images -q | wc -l
docker volume ls -q | wc -l
docker network ls -q | wc -l
docker logs --tail 100
```

**Возвращаемая структура:**

```
[
    'version' => '24.0.7',
    'containers' => [
        [
            'id' => 'abc123def456',
            'name' => 'yii2-cms-php-fpm-1',
            'state' => 'running',
            'status' => 'Up 2 hours',
            'image' => 'php:8.4-fpm-alpine3.23'
        ],
        // ... остальные контейнеры
    ],
    'images' => 15,
    'volumes' => 4,
    'networks' => 3
]
```

**Методы:**

- `getContainerLogs(string $containerId, int $lines = 100)` - получить логи контейнера

#### DatabaseMetricProvider

[](#databasemetricprovider)

Собирает статистику MySQL/MariaDB.

**Расположение:** `/app/Besnovatyj/Info/providers/DatabaseMetricProvider.php`

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

```
SELECT VERSION()
SELECT DATABASE()
SELECT SUM(data_length + index_length) FROM information_schema.TABLES WHERE table_schema = ?
SELECT COUNT(*), SUM(table_rows), SUM(data_length), SUM(index_length)
  FROM information_schema.TABLES WHERE table_schema = ?
SHOW STATUS
```

**Возвращаемая структура:**

```
[
    'driver' => 'mysql',
    'version' => '8.0.35',
    'database' => 'yii2_cms',
    'charset' => 'utf8mb4',
    'size' => [
        'bytes' => 52428800,
        'formatted' => '50.00 MB'
    ],
    'tables' => [
        'count' => 45,
        'totalRows' => 123456,
        'dataSize' => [
            'bytes' => 41943040,
            'formatted' => '40.00 MB'
        ],
        'indexSize' => [
            'bytes' => 10485760,
            'formatted' => '10.00 MB'
        ]
    ],
    'connections' => [
        'current' => 5,
        'running' => 2,
        'cached' => 3,
        'created' => 150,
        'maxUsed' => 8
    ]
]
```

#### RedisMetricProvider

[](#redismetricprovider)

Собирает статистику Redis через Yii2 Redis компонент.

**Расположение:** `/app/Besnovatyj/Info/providers/RedisMetricProvider.php`

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

```
PING
INFO
DBSIZE

```

**Возвращаемая структура:**

```
[
    'version' => '7.2.3',
    'uptime' => [
        'seconds' => 864000,
        'formatted' => '10 days'
    ],
    'clients' => [
        'connected' => 5,
        'blocked' => 0
    ],
    'memory' => [
        'used' => 2097152,
        'usedFormatted' => '2.00 MB',
        'peak' => 4194304,
        'peakFormatted' => '4.00 MB',
        'max' => 0,
        'maxFormatted' => 'Unlimited',
        'fragmentation' => 1.05
    ],
    'stats' => [
        'totalConnections' => 1234,
        'totalCommands' => 567890,
        'keyspaceHits' => 123456,
        'keyspaceMisses' => 1234,
        'hitRate' => 99.01
    ],
    'keyspace' => [
        'totalKeys' => 5678,
        'databases' => [
            'db0' => ['keys' => 5678, 'expires' => 234]
        ]
    ]
]
```

#### ApplicationMetricProvider

[](#applicationmetricprovider)

Собирает информацию о Yii2 приложении.

**Расположение:** `/app/Besnovatyj/Info/providers/ApplicationMetricProvider.php`

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

- `Yii::getVersion()`
- `YII_ENV`, `YII_DEBUG`
- Компоненты приложения (cache, session, queue)

**Возвращаемая структура:**

```
[
    'yii' => [
        'version' => '2.0.49',
        'name' => 'Yii2 CMS',
        'id' => 'yii2-app'
    ],
    'environment' => [
        'environment' => 'dev',
        'debug' => true,
        'timezone' => 'Asia/Yekaterinburg',
        'language' => 'ru-RU'
    ],
    'cache' => [
        'enabled' => true,
        'class' => 'yii\\redis\\Cache',
        'keyPrefix' => 'yii2cms_'
    ],
    'session' => [
        'available' => true,
        'class' => 'yii\\redis\\Session',
        'timeout' => 3600
    ],
    'queue' => [
        'enabled' => true,
        'class' => 'yii\\queue\\redis\\Queue',
        'driver' => 'redis'
    ]
]
```

### 2. Service Layer

[](#2-service-layer)

#### SysInfoService

[](#sysinfoservice)

Центральный сервис для агрегации всех метрик.

**Расположение:** `/app/Besnovatyj/Info/services/SysInfoService.php`

**Инжектируемые зависимости (через DI):**

```
public function __construct(
    SystemMetricProvider $systemProvider,
    PhpMetricProvider $phpProvider,
    DockerMetricProvider $dockerProvider,
    DatabaseMetricProvider $databaseProvider,
    RedisMetricProvider $redisProvider,
    ApplicationMetricProvider $applicationProvider
)
```

**Ключевые методы:**

**`getAllMetrics(): array`**Возвращает полные метрики всех провайдеров.

```
[
    'timestamp' => 1737249600,
    'timestampFormatted' => '2026-01-19 01:00:00',
    'system' => [...],      // SystemMetricProvider
    'php' => [...],         // PhpMetricProvider
    'docker' => [...],      // DockerMetricProvider
    'database' => [...],    // DatabaseMetricProvider
    'redis' => [...],       // RedisMetricProvider
    'application' => [...]  // ApplicationMetricProvider
]
```

**`getRealtimeMetrics(): array`**Возвращает только динамические метрики для auto-refresh (легковесный).

```
[
    'timestamp' => 1737249603,
    'timestampFormatted' => '2026-01-19 01:00:03',
    'system' => [
        'available' => true,
        'cpuUsage' => [...],    // Текущее использование CPU
        'memory' => [...],      // Текущая память
        'disk' => [...],        // Текущий диск
        'loadavg' => [...],     // Load average
        'temperature' => [...]  // Температура
    ],
    'docker' => [
        'available' => true,
        'containers' => [...]   // Только статусы контейнеров
    ],
    'database' => [
        'available' => true,
        'connections' => [...]  // Только соединения
    ]
]
```

**Отличие от getAllMetrics:**

- Не возвращает статические данные (версии, hostname, конфигурацию)
- Размер ответа ~500 байт вместо ~2.5 Кб
- Вызывается каждые 3 секунды

**`exportToJson(): string`**Форматирует все метрики в JSON с pretty print.

**`exportToCsv(): string`**Конвертирует метрики в CSV формат (плоская структура).

### 3. Controller Layer

[](#3-controller-layer)

#### SysInfoController

[](#sysinfocontroller)

HTTP контроллер для обработки запросов.

**Расположение:** `/app/Besnovatyj/Info/controllers/backend/SysInfoController.php`

**Endpoints:**

**`GET /info/backend/sys-info/index`**

```
public function actionIndex(): string
```

Отображает главную страницу виджета.

**Возвращает:** HTML страницу с виджетом

---

**`GET /info/backend/sys-info/api-metrics`**

```
public function actionApiMetrics(): Response
```

Полные метрики всех провайдеров.

**Возвращает:** JSON (~2.5 Кб)

```
{
    "timestamp": 1737249600,
    "timestampFormatted": "2026-01-19 01:00:00",
    "system": {...},
    "php": {...},
    "docker": {...},
    "database": {...},
    "redis": {...},
    "application": {...}
}
```

---

**`GET /info/backend/sys-info/api-realtime`**

```
public function actionApiRealtime(): Response
```

Легковесные метрики для auto-refresh.

**Возвращает:** JSON (~500 байт)

```
{
    "timestamp": 1737249603,
    "timestampFormatted": "2026-01-19 01:00:03",
    "system": {
        "available": true,
        "cpuUsage": {...},
        "memory": {...},
        "disk": {...},
        "loadavg": {...},
        "temperature": {...}
    },
    "docker": {
        "available": true,
        "containers": [...]
    }
}
```

---

**`GET /info/backend/sys-info/api-docker-logs?container=name&lines=100`**

```
public function actionApiDockerLogs(string $container, int $lines = 100): Response
```

Логи Docker контейнера.

**Параметры:**

- `container` (required) - ID или имя контейнера
- `lines` (optional) - количество строк (max 1000)

**Возвращает:** JSON

```
{
    "success": true,
    "logs": "...",
    "lines": 100
}
```

---

**`GET /info/backend/sys-info/export-json`**

```
public function actionExportJson(): Response
```

Экспорт метрик в JSON файл.

**Возвращает:** Файл `metrics-2026-01-19-010000.json`

---

**`GET /info/backend/sys-info/export-csv`**

```
public function actionExportCsv(): Response
```

Экспорт метрик в CSV файл.

**Возвращает:** Файл `metrics-2026-01-19-010000.csv`

### 4. Dependency Injection

[](#4-dependency-injection)

#### Container Configuration

[](#container-configuration)

**Расположение:** `/app/Besnovatyj/Info/config/container.php`

```
