fix(ui): проверять контекст расчёта OSPF оптимизатора
This commit is contained in:
1 parent
f93dfe34c2
commit
bf2815b5a4
9 files changed
+131
-108
No files matched your search
@@ -1,4 +1,5 @@
|
||||
import {z} from "zod"
|
||||
import {ospfOptimizeSchema} from "./ospf-response"
|
||||
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()
|
||||
@@ -15,3 +16,16 @@ export const optimizerProbesSchema=z.object({probes:z.array(z.object({
|
||||
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))})
|
||||
|
||||
export const optimizerOspfPreviewSchema=z.object({
|
||||
serverId:z.number().int().positive(),serverName:z.string(),pingWeight:z.number().int().min(0).max(100),
|
||||
interfacesTotal:z.number().int().nonnegative(),changedCount:z.number().int().nonnegative(),unchangedCount:z.number().int().nonnegative(),
|
||||
interfaces:ospfOptimizeSchema.shape.interfaces,changes:ospfOptimizeSchema.shape.interfaces,
|
||||
}).refine(data=>{
|
||||
const changed=data.interfaces.filter(row=>row.currentCost!==row.optimalCost)
|
||||
return data.interfacesTotal===data.interfaces.length && data.changedCount===data.changes.length && data.unchangedCount===data.interfacesTotal-data.changedCount
|
||||
&& new Set(data.interfaces.map(row=>row.id)).size===data.interfaces.length
|
||||
&& new Set(data.changes.map(row=>row.id)).size===data.changes.length
|
||||
&& changed.length===data.changes.length && changed.every(row=>data.changes.some(change=>JSON.stringify(change)===JSON.stringify(row)))
|
||||
})
|
||||
export type OptimizerOspfPreview=z.infer<typeof optimizerOspfPreviewSchema>
|
||||
Reference in new issue
Block a user