Initial commit
This commit is contained in:
@@ -0,0 +1,35 @@
|
||||
import { Site } from './config'
|
||||
import { insertPingLog } from './appDb'
|
||||
|
||||
export async function pingSite(site: Site): Promise<{
|
||||
status: 'up' | 'down' | 'degraded'
|
||||
ms: number
|
||||
code: number | null
|
||||
error: string | null
|
||||
}> {
|
||||
const start = Date.now()
|
||||
const controller = new AbortController()
|
||||
const timer = setTimeout(() => controller.abort(), 10000)
|
||||
|
||||
try {
|
||||
const res = await fetch(site.url, {
|
||||
signal: controller.signal,
|
||||
headers: { 'User-Agent': 'VPSPanel/1.0' },
|
||||
})
|
||||
clearTimeout(timer)
|
||||
const ms = Date.now() - start
|
||||
const status = res.ok ? (ms > 3000 ? 'degraded' : 'up') : 'down'
|
||||
return { status, ms, code: res.status, error: null }
|
||||
} catch (e: unknown) {
|
||||
clearTimeout(timer)
|
||||
const ms = Date.now() - start
|
||||
const isTimeout = e instanceof Error && e.name === 'AbortError'
|
||||
return { status: 'down', ms, code: null, error: isTimeout ? 'Timeout' : (e instanceof Error ? e.message : 'Hata') }
|
||||
}
|
||||
}
|
||||
|
||||
export async function pingAndLog(site: Site) {
|
||||
const result = await pingSite(site)
|
||||
await insertPingLog({ site_id: site.id, ...result })
|
||||
return result
|
||||
}
|
||||
Reference in New Issue
Block a user