import { Site } from './config' import { insertPingLog, getLastLog } from './appDb' import { sendStatusAlert } from './notify' 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 previous = await getLastLog(site.id) const result = await pingSite(site) await insertPingLog({ site_id: site.id, ...result }) // Durum değişti mi? → bildirim gönder if (previous && previous.status !== result.status) { sendStatusAlert(site.name, site.url, previous.status, result.status, result.ms).catch(() => {}) } return result }