MonitoringDashboard.tsx
Обзор
Файл MonitoringDashboard.tsx реализует React-компонент MonitoringDashboard, служащий для визуализации и мониторинга текущего состояния сети блокчейна, экономических индикаторов, производительности валидаторов и системных оповещений в реальном времени. Компонент использует React hooks для управления состоянием и периодического обновления данных, а также иконки из библиотеки lucide-react для улучшения визуального восприятия интерфейса.
Основная задача — предоставить оператору или пользователю комплексный дашборд с несколькими вкладками, где отображаются ключевые метрики и аналитика по разным аспектам системы.
Описание сущностей и интерфейсов
Интерфейсы данных
NetworkMetrics — метрики сети:
totalValidators: общее число валидаторовactiveValidators: активные валидаторыtotalStake: общий стейкcurrentEpoch: текущий эпоха сетиavgBlockTime: среднее время генерации блока (сек)tps: транзакций в секундуpendingActions: количество ожидающих действийprocessedToday: обработано сегодня транзакцийnetworkHealth: здоровье сети в процентахconsensusSuccess: успешность консенсуса (%)avgConsensusTime: среднее время достижения консенсуса (сек)
EconomicIndicators — экономические показатели сети:
manaSupply: общий запас токена MANAmanaCirculating: циркулирующий запасdailyTransactions: ежедневное число транзакцийtotalValueLocked: общий заблокированный объем (TVL) в MANAvalidatorRewards24h: вознаграждение валидаторов за 24 часаnetworkFees24h: комиссии за сеть за 24 часаstakingApr: годовой процент доходности по стейкингу (APR)manaPrice: цена токена MANA в USDpriceChange24h: изменение цены за 24 часа (%)
SystemAlert — оповещения системы:
id: уникальный идентификаторtype: уровень важности (critical,warning,info)title: заголовок оповещенияmessage: подробностиtimestamp: время возникновения (Unix timestamp)resolved: флаг разрешения оповещенияcategory: категория (network,economic,validator,security)
ValidatorPerformance — показатели производительности валидатора:
validatorId: идентификатор валидатораaddress: адрес валидатораuptime: время активности в процентахblocksValidated: количество проверенных блоковmissedBlocks: пропущенные блокиrewards: вознаграждения в MANAslashingEvents: события слэшинга (штрафов)responseTime: время отклика (мс)stake: стейк валидатораstatus: статус (active,inactive,slashed)
Главный компонент: MonitoringDashboard
Описание
MonitoringDashboard — функциональный компонент React, отображающий дашборд с четырьмя основными вкладками:
overview — обзор сети и ключевых метрик
economic — экономические индикаторы
performance — производительность валидаторов
alerts — системные оповещения
Используемые React hooks
useState— хранение текущей вкладки, данных метрик, экономических индикаторов, оповещений и производительности валидаторов.useEffect— для инициализации данных валидаторов и периодического обновления данных (каждые 5 секунд имитируются изменения в метриках и появляются новые оповещения).
Параметры и состояние
selectedTab: текущая выбранная вкладка (
overview|economic|performance|alerts)networkMetrics: состояние метрик сети (объект
NetworkMetrics)economicIndicators: состояние экономических показателей (объект
EconomicIndicators)systemAlerts: массив текущих оповещений (массив
SystemAlert)validatorPerformance: массив показателей валидаторов (массив
ValidatorPerformance)
Основные функции внутри компонента
formatNumber(num: number): string
Форматирует число для удобного отображения:
от 1 000 до 999 999 — сокращает до K (тысяч), например 1500 → 1.5K
от 1 000 000 и выше — сокращает до M (миллионов), например 1 500 000 → 1.5M
иначе возвращает число как строку
Пример использования:
formatNumber(45230); // "45.2K"
formatNumber(10000000); // "10.0M"
formatCurrency(num: number): string
Форматирует число как денежное значение в долларах США с двумя знаками после запятой.
Пример:
formatCurrency(0.25); // "$0.25"
getAlertIcon(type: string): JSX.Element
Возвращает иконку из lucide-react в зависимости от типа оповещения:
critical→AlertCircle(красный)warning→AlertTriangle(желтый)info→Bell(синий)по умолчанию →
Bellсерого цвета
getHealthColor(health: number): string
Возвращает CSS-класс цвета для отображения здоровья сети:
= 95 → зеленый (
text-green-400)= 85 → желтый (
text-yellow-400)иначе → красный (
text-red-400)
Взаимодействие с другими частями системы
Используется хук
useGameиз внешнего провайдераGameProvider, который предоставляет данные о сети (networkStatus) и список валидаторов (validators).Данные валидаторов преобразуются и обновляются локально в состоянии компонента.
Компонент не совершает реальных запросов к API, а использует имитацию обновления метрик и оповещений с помощью таймера.
Вкладки и их содержимое
1. Network Overview
Ключевые показатели сети (здоровье, TPS, успех консенсуса, количество активных валидаторов)
Системная производительность (среднее время блока, ожидающие действия, обработано сегодня, текущий эпоха)
Ресурсы сети (память, хранилище, пропускная способность) — отображаются как прогресс-бары
2. Economic Indicators
Цена токена MANA и изменение за 24 часа
Общая заблокированная стоимость (TVL) в USD и MANA
Ежедневное число транзакций
Годовой процент доходности (APR) по стейкингу
Детальная информация о токен-сапплае и доходах сети (вознаграждения валидаторов, комиссии, общая выручка)
3. Validator Performance
Таблица с показателями валидаторов (адрес, статус, аптайм, блоки, пропущенные блоки, время отклика, вознаграждения, стейк)
Итоговые сводки: топ-3 валидатора по аптайму, средние показатели по сети, количество проблем (оффлайн, слэшинг, высокая задержка)
4. System Alerts
Список оповещений с фильтрами по типу (критические, предупреждения, информация)
Каждое оповещение отображает статус, категорию, время, описание
Кнопка "Resolve" для пометки оповещения как решенного
Если оповещений нет — отображается сообщение об отсутствии активных проблем
Важные детали реализации
Обновление данных происходит в
useEffectс интервалом 5 секунд, имитируя реальное время.Для генерации случайных значений используются
Math.random()с ограничениями, чтобы сохранить реалистичность данных.Для визуального отображения статусов используются цветовые индикаторы и прогресс-бары.
Управление вкладками реализовано через локальное состояние
selectedTab.Таблица валидаторов масштабируема, поддерживает сортировку и фильтрацию через методы массива.
Все метрики и тексты локализованы и стилизованы с помощью Tailwind CSS и кастомных классов.
Пример использования компонента
import { MonitoringDashboard } from './MonitoringDashboard';
function App() {
return (
<main className="p-8 bg-gray-900 min-h-screen">
<MonitoringDashboard />
</main>
);
}
Диаграмма структуры компонента
componentDiagram
component MonitoringDashboard {
+state selectedTab: 'overview'|'economic'|'performance'|'alerts'
+state networkMetrics: NetworkMetrics
+state economicIndicators: EconomicIndicators
+state systemAlerts: SystemAlert[]
+state validatorPerformance: ValidatorPerformance[]
+useEffect(initValidatorPerformance)
+useEffect(realTimeUpdates)
+formatNumber(num:number): string
+formatCurrency(num:number): string
+getAlertIcon(type:string): JSX.Element
+getHealthColor(health:number): string
}
MonitoringDashboard --> GameProvider : useGame() -> {networkStatus, validators}
MonitoringDashboard --> Tabs : overview, economic, performance, alerts
MonitoringDashboard --> NetworkOverviewTab : отображение networkMetrics
MonitoringDashboard --> EconomicIndicatorsTab : отображение economicIndicators
MonitoringDashboard --> ValidatorPerformanceTab : отображение validatorPerformance
MonitoringDashboard --> SystemAlertsTab : отображение systemAlerts
Итог
MonitoringDashboard.tsx — это компонент для мониторинга сложной системы блокчейна, обеспечивающий визуализацию ключевых данных и быструю реакцию на системные события. Он интегрируется с провайдером контекста игры (GameProvider) и демонстрирует хорошие практики организации состояния и UI-компонентов в React с TypeScript.