import { useState, useEffect, useCallback } from 'react'; import { getDiagLog, clearDiagLog } from '../api/dns'; import ConfirmDialog from './ConfirmDialog'; import { exportCsv } from '../utils/exportCsv'; const PAGE_SIZE = 50; function formatDate(iso) { if (!iso) return '—'; const d = new Date(iso); return `${d.toLocaleDateString('sv-SE')} ${d.toLocaleTimeString('sv-SE', { hour: '2-digit', minute: '2-digit', second: '2-digit' })}`; } export default function DiagnosticsPage() { const [entries, setEntries] = useState([]); const [total, setTotal] = useState(0); const [page, setPage] = useState(0); const [loading, setLoading] = useState(false); const [error, setError] = useState(''); const [filterProvider, setFilterProvider] = useState(''); const [filterOk, setFilterOk] = useState(''); const [confirmClear, setConfirmClear] = useState(false); const load = useCallback((pg = 0) => { setLoading(true); setError(''); getDiagLog({ provider: filterProvider || undefined, ok: filterOk !== '' ? filterOk : undefined, limit: PAGE_SIZE, offset: pg * PAGE_SIZE, }) .then(({ entries, total }) => { setEntries(entries); setTotal(total); }) .catch(e => setError(e.message)) .finally(() => setLoading(false)); }, [filterProvider, filterOk]); useEffect(() => { setPage(0); load(0); }, [load]); function goToPage(pg) { setPage(pg); load(pg); } async function handleClear() { await clearDiagLog(); setConfirmClear(false); setEntries([]); setTotal(0); } const totalPages = Math.ceil(total / PAGE_SIZE); const errorCount = entries.filter(e => !e.ok).length; return (
Every API call made to DNS providers — last 200 entries. Use this to troubleshoot connectivity issues.
Loading…
: entries.length === 0 ? (No diagnostic entries yet — make a DNS operation (sync, add, delete) to populate the log.
| Time | Provider | Operation | Status | Latency | URL | Error |
|---|---|---|---|---|---|---|
| {formatDate(e.timestamp)} | {e.provider} | {e.operation} | {e.status ?? 'ERR'} | 2000 ? '#f59e0b' : 'var(--text-muted)' }}> {e.latency}ms | {e.url} | {e.error ?? ''} |