SPB Git forge
15commits 1branches 0releases
29.7 MBsize
maindefault branch
10 days agolast push
TypeScript 36.3% Python 31.8% Go 18% JavaScript 9.8% Shell 1.9% SQL 1.4% CSS 0.5%
1.5 KB · 35 lines tsx
Raw Blame History
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