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:
@@ -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}`,
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
Reference in New Issue
Block a user