fix(alerts): проверять каталоги объектов и сохранять частичные сбои
This commit is contained in:
1 parent
3710fc6aab
commit
a8a3eb59fb
5 files changed
+38
-2
No files matched your search
@@ -0,0 +1,17 @@
|
||||
import {z} from "zod"
|
||||
import {requestJson} from "./http-client"
|
||||
const bgpSchema=z.array(z.object({serverName:z.string().trim().min(1),name:z.string().trim().min(1)}))
|
||||
const serversSchema=z.array(z.object({id:z.number().int().positive(),name:z.string(),site:z.string().optional(),country:z.string().optional(),host:z.string().optional()}))
|
||||
const greSchema=z.object({tunnels:z.array(z.object({id:z.string().optional(),name:z.string(),serverId:z.string().min(1),remoteAddress:z.string().optional(),status:z.string().optional(),comment:z.string().optional()})),failures:z.array(z.object({serverId:z.string().min(1),serverName:z.string(),error:z.string()})).optional()})
|
||||
type Options={signal?:AbortSignal}
|
||||
async function read<S extends z.ZodType>(base:string,path:string,schema:S,message:string,options?:Options):Promise<z.output<S>>{
|
||||
const signal=options?.signal?AbortSignal.any([options.signal,AbortSignal.timeout(30_000)]):AbortSignal.timeout(30_000)
|
||||
signal.throwIfAborted()
|
||||
const parsed=schema.safeParse(await requestJson<unknown>(base,path,{signal,cache:"no-store"}))
|
||||
signal.throwIfAborted()
|
||||
if(!parsed.success)throw Error(message)
|
||||
return parsed.data
|
||||
}
|
||||
export const getAlertsBgpTargets=(base:string,options?:Options)=>read(base,"/api/bgp/sessions",bgpSchema,"Каталог BGP для оповещений не подтверждён",options)
|
||||
export const getAlertsServerTargets=(base:string,options?:Options)=>read(base,"/api/servers",serversSchema,"Каталог серверов для оповещений не подтверждён",options)
|
||||
export const getAlertsGreTargets=(base:string,options?:Options)=>read(base,"/api/filters/gre-tunnels",greSchema,"Каталог GRE для оповещений не подтверждён",options)
|
||||
Reference in new issue
Block a user