výkon: pomalejší polling (60/15/120 s) a dynamický limit telemetrie 15m

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Dusan Vojacek
2026-06-11 14:21:28 +02:00
parent edc8ae9774
commit 90f79d9abe
2 changed files with 8 additions and 4 deletions

View File

@@ -25,8 +25,11 @@ import type {
} from '../types/ems' } from '../types/ems'
import type { PlanningIntervalDto } from '../types/plan' import type { PlanningIntervalDto } from '../types/plan'
const POLL_FULL_MS = 30_000 const POLL_FULL_MS = 60_000
const POLL_LIVE_MS = 5_000 const POLL_LIVE_MS = 15_000
/** Limit řádků vw_telemetry_15m_7d: jen okno zpět (s rezervou), ne celých 7 dní. */
const TELEMETRY_15M_LIMIT = String(Math.ceil(SLOT_COUNT_BACK * 1.2))
function parseNum(v: string | number | null | undefined): number | null { function parseNum(v: string | number | null | undefined): number | null {
if (v == null) return null if (v == null) return null
@@ -211,8 +214,9 @@ export function useDashboardData(siteId: number | null) {
getJson<SiteStatusRow[]>('/vw_site_status', { site_id: `eq.${siteId}` }), getJson<SiteStatusRow[]>('/vw_site_status', { site_id: `eq.${siteId}` }),
getJson<Telemetry15m7dRow[]>('/vw_telemetry_15m_7d', { getJson<Telemetry15m7dRow[]>('/vw_telemetry_15m_7d', {
site_id: `eq.${siteId}`, site_id: `eq.${siteId}`,
slot_start: `gte.${new Date(windowStart).toISOString()}`,
order: 'slot_start.asc', order: 'slot_start.asc',
limit: '1000', limit: TELEMETRY_15M_LIMIT,
}), }),
getJson<AuditTodayHourlyRow[]>('/vw_audit_today_hourly', { getJson<AuditTodayHourlyRow[]>('/vw_audit_today_hourly', {
site_id: `eq.${siteId}`, site_id: `eq.${siteId}`,

View File

@@ -3,7 +3,7 @@ import { useCallback, useEffect, useState } from 'react'
import { getSiteStatusFull } from '../api/backend' import { getSiteStatusFull } from '../api/backend'
import type { FullStatusResponse } from '../types/fullStatus' import type { FullStatusResponse } from '../types/fullStatus'
const POLL_MS = 60_000 const POLL_MS = 120_000
export function useFullStatus(siteId: number | null) { export function useFullStatus(siteId: number | null) {
const [data, setData] = useState<FullStatusResponse | null>(null) const [data, setData] = useState<FullStatusResponse | null>(null)