# SYSTEM INFO - Системная информация футера
## 📋 Описание
SystemInfo - это часть футера, отображающая информацию о загрузке системных ресурсов в реальном времени. Показывает текущее использование CPU, RAM и дискового пространства.
---
## Архитектура
### Местоположение
- **Компонент**: Часть `Footer.tsx`
- **Позиция**: Левая часть футера, после индикаторов подключения
- **Видимость**: Только на больших экранах (lg и выше)
### Структура данных
```typescript
interface SystemInfo {
cpu: number; // Загрузка CPU в процентах
memory: number; // Использование RAM в процентах
disk: number; // Использование диска в процентах
}
```
---
## Функциональность
### 1. Отображение системной информации
#### CPU Usage
```typescript
CPU: {systemInfo.cpu}%
```
#### RAM Usage
```typescript
RAM: {systemInfo.memory}%
```
#### Disk Usage
```typescript
Disk: {systemInfo.disk}%
```
### 2. Контейнер компонента
```typescript
{/* CPU, RAM, Disk блоки */}
```
---
## Логика обновления данных
### Эмуляция системных данных
```typescript
useEffect(() => {
const interval = setInterval(() => {
setSystemInfo({
cpu: Math.floor(Math.random() * 30) + 20, // 20-50%
memory: Math.floor(Math.random() * 40) + 30, // 30-70%
disk: 75 // Фиксированное значение
});
}, 10000); // Обновление каждые 10 секунд
return () => clearInterval(interval);
}, []);
```
### Алгоритм генерации значений
#### CPU (20-50%)
```typescript
Math.floor(Math.random() * 30) + 20
// random(0-29) + 20 = диапазон 20-49%
```
#### RAM (30-70%)
```typescript
Math.floor(Math.random() * 40) + 30
// random(0-39) + 30 = диапазон 30-69%
```
#### Disk (фиксированное значение)
```typescript
disk: 75 // Постоянное значение 75%
```
---
## Визуальное представление
### Структура каждого блока
```
[ИКОНКА] НАЗВАНИЕ: ЗНАЧЕНИЕ%
```
### Примеры отображения
```
🖥️ CPU: 35% 📊 RAM: 45% 💾 Disk: 75%
```
### Используемые иконки
- **CPU**: `` - иконка процессора
- **RAM**: `` - иконка активности/графика
- **Disk**: `` - иконка жесткого диска
---
## Стили и адаптивность
### CSS классы
```css
/* Контейнер - скрыт до lg размера */
.hidden.lg:flex.items-center.gap-4
/* Каждый блок */
.flex.items-center.gap-1
/* Иконки */
.w-3.h-3.text-gray-400
/* Текст */
.text-xs.text-gray-400
```
### Адаптивное поведение
#### Mobile (< 1024px)
```css
/* Компонент полностью скрыт */
.hidden
```
#### Desktop (≥ 1024px)
```css
/* Компонент отображается */
.lg:flex
```
### Обоснование скрытия на мобильных
- Ограниченное место на экране
- Менее критичная информация для мобильных пользователей
- Приоритет отдается статусам подключения
---
## Позиционирование в футере
### Расположение между элементами
```
[Подключения] [Разделитель] [СИСТЕМА] [ Пользователь ] [Версия]
Локальный | CPU: 35% Пульт: #8 v1.0.0
Внешний RAM: 45% Админ: Иванов И.
Disk: 75% Uptime: 02:15:30
```
### Разделитель
```typescript
```
- Визуально отделяет подключения от системной информации
- Скрыт на мобильных устройствах
---
## Особенности реализации
### 1. Эмуляция vs реальные данные
**Текущая реализация**: Эмулирует данные для демонстрации
**Будущее развитие**: Может быть заменена на реальные системные метрики
### 2. Интервал обновления
```typescript
10000 // 10 секунд
```
- Достаточно частое обновление для мониторинга
- Не создает излишнюю нагрузку на отрисовку
- Сбалансировано с другими таймерами футера
### 3. Диапазоны значений
- **CPU**: 20-50% (имитация рабочей нагрузки)
- **RAM**: 30-70% (типичное использование памяти)
- **Disk**: 75% (константа, имитация заполненного диска)
---
## Расширение функциональности
### Потенциальные улучшения
#### 1. Реальные системные метрики
```typescript
// Интеграция с Node.js API или системными командами
const getSystemInfo = async () => {
const response = await fetch('/api/system-info');
return response.json();
};
```
#### 2. Цветовая индикация нагрузки
```typescript
const getUsageColor = (usage: number, type: 'cpu' | 'memory' | 'disk') => {
const thresholds = {
cpu: { warning: 70, critical: 90 },
memory: { warning: 80, critical: 95 },
disk: { warning: 85, critical: 95 }
};
if (usage >= thresholds[type].critical) return 'text-red-400';
if (usage >= thresholds[type].warning) return 'text-yellow-400';
return 'text-gray-400';
};
```
#### 3. Тултипы с детальной информацией
```typescript
// Дополнительные данные при наведении
CPU: {systemInfo.cpu}%
```
#### 4. Исторические данные
```typescript
// Мини-графики за последние несколько минут
interface SystemHistory {
timestamps: number[];
cpu: number[];
memory: number[];
disk: number[];
}
```
---
## Интеграция с мониторингом
### Возможные источники данных
#### 1. Backend API эндпоинт
```typescript
GET /api/system-status
{
"cpu": 35.2,
"memory": 64.8,
"disk": 78.1,
"timestamp": 1704722400000
}
```
#### 2. WebSocket поток
```typescript
// Через основное WebSocket соединение
{
"do": "system-info",
"data": {
"cpu": 35.2,
"memory": 64.8,
"disk": 78.1
}
}
```
#### 3. Отдельный мониторинговый сервис
```typescript
// Подключение к Prometheus, Grafana и т.д.
const systemMetrics = await prometheusClient.query('cpu_usage_percent');
```
---
## Производительность
### Оптимизации
1. **Интервальное обновление**: Не чаще чем каждые 10 секунд
2. **Условная отрисовка**: Скрывается на мобильных
3. **Мемоизация**: Компонент не перерисовывается при других изменениях
### Влияние на производительность
- **Минимальное**: Простые вычисления и отрисовка текста
- **Оптимизированное**: Редкие обновления и условная видимость
---
## Тестирование
### Тестовые сценарии
1. **Корректная генерация значений** в заданных диапазонах
2. **Обновление данных** каждые 10 секунд
3. **Скрытие на мобильных** устройствах
4. **Очистка интервалов** при размонтировании компонента
---
## Заключение
SystemInfo предоставляет пользователям важную информацию о состоянии системы в компактном формате. Хотя текущая реализация использует эмулированные данные, архитектура позволяет легко интегрировать реальные системные метрики в будущем.
---
**Дата создания**: 2025-01-09
**Версия документации**: 1.0
**Родительский компонент**: Footer.tsx