spb/internetpressure
Public
TypeScript 36.3%
Python 31.8%
Go 18%
JavaScript 9.8%
Shell 1.9%
SQL 1.4%
CSS 0.5%
1import Link from 'next/link';2import { StatusDot } from '@/components/ui/primitives';3import { fmtInt, fmtPct } from '@/lib/format';4import { Time } from '@/lib/time';5import type { Probe } from '@/lib/types';67/** Probe network strip — who is measuring, from where, and whether they are fresh. Server component. */8export function ProbeStrip({ probes }: { probes: Probe[] | null }) {9 if (!probes?.length) return <p className="text-xs text-ink-3">Probe list unavailable.</p>;10 return (11 <ul className="grid grid-cols-2 gap-px overflow-hidden rounded-[4px] border border-line bg-line sm:grid-cols-4 lg:grid-cols-8">12 {probes.map((p) => (13 <li key={p.probe_id} className="bg-panel px-3 py-2.5">14 <div className="flex items-baseline justify-between gap-2">15 <Link href="/probes" className="num truncate text-[12px] text-ink hover:text-accent">16 {p.probe_id}17 </Link>18 <StatusDot status={p.status} />19 </div>20 <div className="mt-0.5 truncate text-[11px] text-ink-2" title={p.name}>21 {p.city} · AS{p.asn}22 </div>23 <div className="num mt-1 flex justify-between text-[10.5px] text-ink-3">24 <span>{fmtInt(p.measurements_1h)}/h</span>25 <span>up {fmtPct(p.uptime_24h, 1)}</span>26 </div>27 <div className="num text-[10.5px] text-ink-3">28 seen <Time ts={p.last_seen} style="time" />29 </div>30 </li>31 ))}32 </ul>33 );34}35