/
andreas300000
/
webpinger-backend
Обзор
Документация
Войти
/
andreas300000
/
webpinger-backend
Код
Запросы
1
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
develop
src/core/statistics/statisticsFunction.ts
79 строк
2 KB
polenov_dv
add data checks
18 май 2025, 19:48
18 май 2025, 19:48
a9661e8
Код
Авторство
О чём код?
import { CheckModel } from './statistics.interface'; import { ResponseTimeModel, HealthStatusModel } from './statistics.interface'; export const calculateResponseStats = ( data: CheckModel[], ): ResponseTimeModel[] => { const groupedByDate = data.reduce( (acc, item) => { if (!item.checked_at) return acc; const date = item.checked_at.toISOString().split('T')[0]; if (!acc[date]) { acc[date] = []; } acc[date].push(item); return acc; }, {} as Record<string, CheckModel[]>, ); const result: ResponseTimeModel[] = Object.entries(groupedByDate) .map(([date, items], index) => { const validTimes = items .map((i) => i.response_time) .filter((t): t is number => t !== null); const count = validTimes.length; if (count === 0) return null; const sum = validTimes.reduce((a, b) => a + b, 0); const avg = sum / count; const min = Math.min(...validTimes); const max = Math.max(...validTimes); return { id: index + 1, date, response_time: parseFloat(avg.toFixed(2)), response_time_min: min, response_time_max: max, }; }) .filter((item): item is ResponseTimeModel => item !== null); return result; }; export const calculateHealthStatus = ( data: CheckModel[], ): HealthStatusModel[] => { // Логика остается прежней const groupedByDate = data.reduce( (acc, item) => { if (!item.checked_at) return acc; const date = item.checked_at.toISOString().split('T')[0]; if (!acc[date]) { acc[date] = []; } acc[date].push(item); return acc; }, {} as Record<string, CheckModel[]>, ); return Object.entries(groupedByDate).map(([date, items]) => { const totalRequests = items.length; const successfulRequests = items.filter((item) => item.is_success).length; const uptimePercentage = (successfulRequests / totalRequests) * 100; return { id: parseInt(date.replace(/-/g, '')), date, value: parseFloat(uptimePercentage.toFixed(2)), }; }); };