\n82\t État des services · direct + historique
\n83\t \n84\t Les {eco.sites.length} plateformes,{\" \"}\n85\t {allUp ? \"toutes en ligne\" : `${upCount}/${eco.sites.length} en ligne`}\n86\t
\n87\t \n88\t Chaque plateforme est vérifiée automatiquement aux 5 minutes, plus une\n89\t vérification en direct au chargement de cette page. Les barres se\n90\t lisent de gauche (le plus ancien) à droite (maintenant) — survolez-les\n91\t pour le détail.\n92\t
\n93\t \n94\t Vérifié le {when} (heure de l'Est)\n95\t {firstTick\n96\t ? ` · historique depuis le ${new Date(firstTick).toLocaleDateString(\"fr-CA\", { timeZone: \"America/Toronto\", dateStyle: \"long\" })}`\n97\t : \" · l'historique démarre — les barres se rempliront aux 5 minutes\"}\n98\t
\n99\t\n100\t \n101\t {(\n102\t [\n103\t [\"up\", \"En ligne\"],\n104\t [\"degraded\", \"Dégradé\"],\n105\t [\"down\", \"Hors ligne\"],\n106\t [\"empty\", \"Pas de mesure\"],\n107\t ] as const\n108\t ).map(([k, label]) => (\n109\t \n110\t \n114\t {label}\n115\t \n116\t ))}\n117\t
\n118\t\n119\t \n120\t {eco.sites.map((s) => {\n121\t const c: SiteCheck | undefined = live.checks[s.id];\n122\t const up24 = uptimePct(history, s.id, DAY, now);\n123\t const up7 = uptimePct(history, s.id, 7 * DAY, now);\n124\t const up30 = uptimePct(history, s.id, 30 * DAY, now);\n125\t return (\n126\t
\n127\t \n128\t
\n129\t \n134\t \n135\t {s.wordmark}\n136\t \n137\t \n143\t {s.domain}\n144\t \n145\t \n146\t
\n147\t \n148\t {c?.up ? `HTTP ${c.code} · ${c.ms} ms` : c?.code ? `HTTP ${c.code}` : \"délai dépassé\"}\n149\t \n150\t {c?.up ? (\n151\t \n152\t \n153\t En ligne\n154\t \n155\t ) : (\n156\t \n157\t Hors ligne\n158\t \n159\t )}\n160\t \n161\t
\n162\t\n163\t \n164\t
Dernières 24 heures · 1 barre = 15 min
\n165\t
\n166\t \n167\t
\n168\t
\n169\t \n170\t
90 derniers jours · 1 barre = 1 jour
\n171\t
\n172\t \n173\t
\n174\t
\n175\t\n176\t \n177\t
Uptime 24 h : \n178\t
7 jours : \n179\t
30 jours : \n180\t
\n181\t \n182\t );\n183\t })}\n184\t
\n185\t\n186\t \n187\t Méthode : requête GET sur la page d'accueil de chaque domaine\n188\t (délai maximal 9 s) toutes les 5 minutes depuis le serveur du hub, plus\n189\t une vérification en direct au chargement. Une barre est « dégradée » si\n190\t une partie des vérifications de l'intervalle a échoué. Historique\n191\t conservé 90 jours.\n192\t
\n193\t \n194\t );\n195\t}\n196\t\n\n\n50\t {/* en-tête : titre + intro */}\n51\t Tableau de bord maître · tout l’écosystème
\n52\t \n53\t Statistiques de l'écosystème\n54\t
\n55\t \n56\t Chaque plateforme ·Ka expose son tableau de bord statistique ; cette\n57\t page les consolide en direct — période affichée :{\" \"}\n58\t {payload.periodLabel}. Rien d'inventé : chaque\n59\t chiffre vient de la plateforme qui le mesure.\n60\t
\n61\t\n62\t {/* tout le tableau de bord (client : graphiques SVG + menu PDF) */}\n63\t \n64\t\n65\t {/* note de méthode */}\n66\t \n67\t Méthode : les chiffres sont lus en direct sur le tableau de bord\n68\t statistique de chaque plateforme (endpoint commun\n69\t /api/stats/dashboard, délai 8 s), avec un cache serveur de 10 minutes\n70\t par période. Les agrégats temporels (volume agrégé, croissance\n71\t comparée, volume empilé, calendriers) sont des sommes et des indices\n72\t calculés sur les seules dates communes aux séries publiées — jamais\n73\t d'extrapolation. Les rapports écosystème PDF (complet, synthèse,\n74\t tendances, répartitions, données) sont générés par API-KA à partir des\n75\t mêmes données. Une plateforme qui ne répond pas est affichée «\n76\t indisponible » — jamais remplacée par un chiffre inventé. Aucune\n77\t statistique de visites : nous ne mesurons pas votre navigation.\n78\t
\n79\t \n80\t );\n81\t}\n82\t\n\n