analyticsService.ts


Обзор

Файл analyticsService.ts реализует сервис аналитики для сбора, хранения и управления метриками сети, экономическими показателями и метриками валидаторов в блокчейн-системе. Он предоставляет интерфейсы для описания структур данных метрик и класса AnalyticsService, который отвечает за периодический сбор данных, анализ, генерацию системных оповещений, подписку клиентов на обновления и экспорт данных.

Основная функциональность включает:


Интерфейсы и типы

MetricPoint

interface MetricPoint {
  timestamp: number; // Временная метка в миллисекундах с начала эпохи
  value: number;     // Значение метрики в заданный момент времени
}

Представляет одну точку данных метрики с временной меткой и числовым значением.


NetworkMetrics

interface NetworkMetrics {
  tps: MetricPoint[];             // Транзакций в секунду
  blockTime: MetricPoint[];       // Время создания блока (секунды)
  consensusTime: MetricPoint[];   // Время достижения консенсуса (секунды)
  validatorCount: MetricPoint[];  // Количество активных валидаторов
  pendingActions: MetricPoint[];  // Количество ожидающих действий (транзакций)
  networkHealth: MetricPoint[];   // Индекс здоровья сети (0-100)
}

Набор метрик, отражающих состояние сети.


EconomicMetrics

interface EconomicMetrics {
  manaPrice: MetricPoint[];        // Цена токена MANA
  totalValueLocked: MetricPoint[]; // Общая заблокированная стоимость
  dailyTransactions: MetricPoint[];// Количество транзакций в день
  stakingApr: MetricPoint[];       // Годовая доходность по стейкингу (%)
  validatorRewards: MetricPoint[]; // Вознаграждения валидаторов
  networkFees: MetricPoint[];      // Суммарные сетевые комиссии
}

Метрики, описывающие экономическое состояние блокчейн-системы.


ValidatorMetrics

interface ValidatorMetrics {
  validatorId: string;             // Уникальный идентификатор валидатора
  uptime: MetricPoint[];           // Время работы в сети (доля)
  responseTime: MetricPoint[];     // Время отклика (мс)
  blocksValidated: MetricPoint[];  // Количество проверенных блоков
  rewards: MetricPoint[];          // Полученные вознаграждения
  slashingEvents: number;          // Количество событий наказания (слэшинга)
}

Данные по отдельным валидаторам.


SystemAlert

interface SystemAlert {
  id: string;                     // Уникальный идентификатор оповещения
  type: 'critical' | 'warning' | 'info'; // Тип оповещения
  title: string;                  // Заголовок
  message: string;                // Описание проблемы
  timestamp: number;              // Временная метка создания
  resolved: boolean;              // Статус решения
  category: 'network' | 'economic' | 'validator' | 'security'; // Категория
  severity: number;               // Важность (1-10)
  affectedComponents: string[];  // Затронутые компоненты
}

Структура для системных уведомлений и предупреждений.


Класс AnalyticsService

Описание

AnalyticsService — основной класс для управления всеми метриками и оповещениями. Работает как с историческими, так и с текущими данными, периодически обновляя их и оповещая подписчиков. Сервис реализован как синглтон и экспортируется экземпляр analyticsService.


Свойства

Свойство

Тип

Описание

networkMetrics

NetworkMetrics

Метрики сети

economicMetrics

EconomicMetrics

Экономические метрики

validatorMetrics

Map<string, ValidatorMetrics>

Метрики валидаторов, индексируемые по ID

alerts

SystemAlert[]

Список системных оповещений

subscribers

Map<string, (data: any) => void>

Подписчики на обновления

metricsInterval

`NodeJS.Timeout \

null`

MAX_METRIC_POINTS

number

Максимальное число точек метрик (100)


Конструктор

constructor()

Методы (приватные)

initializeMetrics()

startMetricsCollection()

collectNetworkMetrics()

collectEconomicMetrics()

addMetricPoint(metrics: MetricPoint[], point: MetricPoint)

checkForAlerts()

createAlert(alertData: Omit<SystemAlert, 'id' | 'timestamp' | 'resolved'>)

calculatePriceChange24h(): number

getLatestMetrics()

notifySubscribers()


Методы (публичные)

subscribe(id: string, callback: (data: any) => void)

Пример использования:

analyticsService.subscribe('client1', (data) => {
  console.log('Обновленные данные:', data);
});

unsubscribe(id: string)

getNetworkMetrics(): NetworkMetrics

getEconomicMetrics(): EconomicMetrics

getAlerts(): SystemAlert[]

resolveAlert(alertId: string)

getValidatorMetrics(validatorId: string): ValidatorMetrics | undefined

addValidatorMetrics(validatorId: string, metrics: Partial<ValidatorMetrics>)

getSystemHealth(): { overall: number; network: number; economic: number; validators: number; }

exportMetrics(timeRange: 'hour' | 'day' | 'week' = 'day'): string

destroy()


Взаимодействие с другими частями системы


Важные детали реализации


Пример использования

import { analyticsService } from './analyticsService';

// Подписка на обновления
analyticsService.subscribe('dashboard', (data) => {
  console.log('Обновленные метрики:', data.latestMetrics);
  console.log('Текущие оповещения:', data.alerts);
});

// Получение текущих метрик
const network = analyticsService.getNetworkMetrics();
console.log('TPS:', network.tps[network.tps.length - 1]);

// Разрешение оповещения
const alerts = analyticsService.getAlerts();
if (alerts.length > 0) {
  analyticsService.resolveAlert(alerts[0].id);
}

// Экспорт данных за день
const jsonReport = analyticsService.exportMetrics('day');
console.log(jsonReport);

// Очистка сервиса при завершении работы
analyticsService.destroy();

Диаграмма класса AnalyticsService

classDiagram
    class AnalyticsService {
        -networkMetrics: NetworkMetrics
        -economicMetrics: EconomicMetrics
        -validatorMetrics: Map~string, ValidatorMetrics~
        -alerts: SystemAlert[]
        -subscribers: Map~string, function~
        -metricsInterval: NodeJS.Timeout | null
        -MAX_METRIC_POINTS: number
        +constructor()
        -initializeMetrics()
        -startMetricsCollection()
        -collectNetworkMetrics()
        -collectEconomicMetrics()
        -addMetricPoint(metrics: MetricPoint[], point: MetricPoint)
        -checkForAlerts()
        -createAlert(alertData)
        -calculatePriceChange24h(): number
        -getLatestMetrics()
        -notifySubscribers()
        +subscribe(id: string, callback: function)
        +unsubscribe(id: string)
        +getNetworkMetrics(): NetworkMetrics
        +getEconomicMetrics(): EconomicMetrics
        +getAlerts(): SystemAlert[]
        +resolveAlert(alertId: string)
        +getValidatorMetrics(validatorId: string): ValidatorMetrics | undefined
        +addValidatorMetrics(validatorId: string, metrics: Partial~ValidatorMetrics~)
        +getSystemHealth(): object
        +exportMetrics(timeRange: string): string
        +destroy()
    }

Данная документация описывает полный функционал файла analyticsService.ts, позволяя разработчикам легко понимать архитектуру, использовать и расширять сервис аналитики.