fix(ui): сохранять согласованные данные оптимизатора
This commit is contained in:
1 parent
59f0f82176
commit
f93dfe34c2
7 files changed
+139
-53
No files matched your search
@@ -0,0 +1,17 @@
|
||||
import {z} from "zod"
|
||||
import {filtersResponseSchema} from "./filters-response"
|
||||
const unique = <T,>(rows:T[],key:(row:T)=>string|number)=>new Set(rows.map(key)).size===rows.length
|
||||
const measured = z.number().finite().nonnegative().nullable()
|
||||
export const optimizerServersSchema=z.array(z.object({
|
||||
id:z.number().int().positive(),name:z.string(),host:z.string().min(1),type:z.enum(["home-router","jump-host","exit-node"]),
|
||||
enabled:z.boolean(),country:z.string(),site:z.string().optional().default(""),
|
||||
status:z.enum(["online","offline","degraded"]).nullable().optional().default(null),
|
||||
latency:measured.optional().default(null),model:z.string().nullable().optional().default(null),
|
||||
wanUplinks:z.array(z.object({id:z.string().min(1),name:z.string(),isp:z.string(),iface:z.string(),ip:z.string(),maxDl:z.number().finite().positive(),maxUl:z.number().finite().positive()})).refine(rows=>unique(rows,row=>row.id)).optional(),
|
||||
})).refine(rows=>unique(rows,row=>row.id))
|
||||
export const optimizerRulesSchema=filtersResponseSchema.refine(data=>data.stale!==true)
|
||||
export const optimizerProbesSchema=z.object({probes:z.array(z.object({
|
||||
id:z.string().min(1),srcServerId:z.string().min(1),dstServerId:z.string().min(1),srcInterface:z.string(),dstInterface:z.string(),enabled:z.boolean(),
|
||||
lastPingRttMs:measured,lastPingLossPct:z.number().finite().min(0).max(100).nullable(),
|
||||
lastTxAvgMbps:measured,lastRxAvgMbps:measured,lastPingAt:z.string().datetime({offset:true}).nullable(),
|
||||
})).refine(rows=>unique(rows,row=>row.id))})
|
||||
Reference in new issue
Block a user