From 31cab9b24b096f3fb2a1bfe648a4676b780ff2be Mon Sep 17 00:00:00 2001 From: arsam Date: Fri, 18 Sep 2026 23:20:22 +0330 Subject: [PATCH] Import source: web/src/lib/types Import the existing local project snapshot. This commit organizes existing files; it does not represent newly developed functionality. --- web/src/lib/types.ts | 90 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 90 insertions(+) create mode 100644 web/src/lib/types.ts diff --git a/web/src/lib/types.ts b/web/src/lib/types.ts new file mode 100644 index 0000000..f2bfdfe --- /dev/null +++ b/web/src/lib/types.ts @@ -0,0 +1,90 @@ +export type TargetState = "up" | "degraded" | "down" | "unknown"; + +export interface CheckPoint { + ts: number; + ok: boolean; + latency_ms: number; + detail?: string; + error?: string; +} + +export interface LatencyStats { + avg_ms: number; + p50_ms: number; + p95_ms: number; + min_ms: number; + max_ms: number; +} + +export interface Incident { + id: number; + target_id: string; + started_at: number; + ended_at?: number; + error?: string; +} + +export type CheckKind = "http" | "tcp" | "tls" | "icmp" | "docker"; + +export interface Target { + id: string; + name: string; + type: CheckKind; + endpoint: string; + interval_sec: number; + state: TargetState; + fails: number; + last?: CheckPoint; + uptime_24h?: number; + uptime_7d?: number; + uptime_30d?: number; + latency: LatencyStats; + cert_days?: number; + incident?: Incident; +} + +export interface Bucket { + start: number; + total: number; + failed: number; + avg_latency_ms: number; + max_latency_ms: number; +} + +export interface HistoryResponse { + target_id: string; + range: string; + from: number; + to: number; + points: CheckPoint[]; + buckets: Bucket[]; + bucket_ms: number; +} + +export interface CheckEvent { + target_id: string; + ts: number; + ok: boolean; + latency_ms: number; + detail?: string; + error?: string; + state: TargetState; +} + +export interface StateEvent { + target_id: string; + ts: number; + state: TargetState; + prev_state: TargetState; + incident?: Incident; +} + +/** A target enriched with live, client-side stream state. */ +export interface LiveTarget extends Target { + /** Increments on every completed probe — drives the pulse animation. */ + pulse: number; + /** Wall time of the last confirmed state transition — drives ripples. */ + stateChangedAt: number; + /** Rolling buffer of recent checks for the sparkline. */ + series: CheckPoint[]; +}