Files
MikrotikManager/lib/scheduler-run-snapshot.ts
T
Denozordec 6d8379501c refactor: replace custom API fetch logic with requestJson utility across multiple pages
Updated the API fetching mechanism in various components to utilize the new requestJson function for improved consistency and error handling. This change affects the alerts, dashboard, data collection, filters, gre, network map, probes, recursive routes, route optimizer, servers, settings, traffic, and uptime pages.
2026-05-07 13:35:41 +07:00

182 lines
3.9 KiB
TypeScript

/**
* Снимок прогона планировщика (JSON из `scheduler_runs.result_json`).
* Дублирует контракт `backend/src/types/scheduler-run-snapshot.ts` для UI.
*/
export interface ServerRestPingSnapshot {
serverId: number
name: string
host: string
ok: boolean
latencyMs?: number | null
error?: string
}
export interface ServersRestPingRunSnapshot {
v: number
job: "servers_rest_ping"
sampledAt: string
skipped?: boolean
fatalError?: string
servers: ServerRestPingSnapshot[]
}
export type AlertEngineRuleDiagSnapshot = {
ruleId: string
inGroup: boolean
evalHit: boolean
hitTransition?: "problem" | "recovery" | "neutral"
hitMessage?: string
stabilityOk: boolean
cooldownOk: boolean
telegramOk: boolean
blocked?:
| "no_hit"
| "stability"
| "cooldown"
| "no_telegram"
| "dedupe_positive"
| "in_group"
}
/** Сводка прогона движка оповещений (JSON из `scheduler_runs` для job `alert_engine`). */
export interface AlertEngineRunSnapshot {
v: number
job: "alert_engine"
sampledAt: string
rulesChecked: number
standaloneFires: number
groupFires: number
skippedNoTelegram: boolean
errors?: string[]
ruleDiag?: AlertEngineRuleDiagSnapshot[]
}
export interface GreBgpSnapshotRunSnapshot {
v: number
job: "gre_bgp"
sampledAt: string
skipped?: boolean
fatalError?: string
greWritten: number
bgpWritten: number
errors?: string[]
}
export type SchedulerRunSnapshot =
| TrafficRunSnapshot
| ResourcesRunSnapshot
| PingRunSnapshot
| SpeedScheduledRunSnapshot
| ServersRestPingRunSnapshot
| GreBgpSnapshotRunSnapshot
| AlertEngineRunSnapshot
export interface TrafficServerSnapshot {
serverId: number
name: string
host: string
ok: boolean
error?: string
interfaces?: number
sumRxMbps?: number
sumTxMbps?: number
}
export interface TrafficRunSnapshot {
v: number
job: "traffic"
sampledAt: string
skipped?: boolean
fatalError?: string
servers: TrafficServerSnapshot[]
}
export interface ResourceServerSnapshot {
serverId: number
name: string
host: string
status: "online" | "offline"
error?: string
cpuLoadPct?: number
memUsedMb?: number
memTotalMb?: number
memUsedPct?: number
diskFreeMb?: number
diskTotalMb?: number
uptimeSeconds?: number
boardName?: string
rosVersion?: string
}
export interface ResourcesRunSnapshot {
v: number
job: "uptime_resources"
sampledAt: string
skipped?: boolean
fatalError?: string
servers: ResourceServerSnapshot[]
}
export interface PingProbeSnapshot {
probeId: string
name: string
target: string
srcServerId: number
srcServerName: string
srcInterface: string
ok: boolean
rttMs: number | null
lossPct: number
status: "up" | "warn" | "down"
error?: string
}
export interface PingRunSnapshot {
v: number
job: "uptime_ping"
sampledAt: string
skipped?: boolean
fatalError?: string
probes: PingProbeSnapshot[]
skippedByInterval?: number
}
export interface SpeedRunSnapshot {
probeId: string
srcServerId: number
srcServerName: string
dstServerId: number
dstServerName: string
srcInterface: string
dstInterface: string
protocol: string
direction: string
durationSec: number
ok: boolean
txAvgMbps?: number | null
rxAvgMbps?: number | null
pingRttMs?: number | null
pingLossPct?: number | null
pingError?: string | null
error?: string
}
export interface SpeedScheduledRunSnapshot {
v: number
job: "uptime_speed"
sampledAt: string
runs: SpeedRunSnapshot[]
}
export function parseSchedulerRunSnapshot(raw: string | null | undefined): SchedulerRunSnapshot | null {
if (raw == null || raw.trim() === "") return null
try {
const o = JSON.parse(raw) as { v?: unknown; job?: string }
if (o?.v !== 1 || typeof o.job !== "string") return null
return o as SchedulerRunSnapshot
} catch {
return null
}
}