{{t.message}}

{{confirmDlg.title}}

{{confirmDlg.message}}

ESC

Aucun résultat pour «{{cmdQuery}}»

naviguer exécuter ESC fermer

Raccourcis clavier

Recherche globaleCtrl K
Cette aide?
Focus recherche école/
Nouvelle écoleN
Aller à ÉcolesG S
Aller à ActivitéG A
Aller à UtilisationG U
Aller à CanaryG C
Aller à PerformanceG P
Aller à SystèmeG Y
Naviguer la liste
Fermer / désélectionnerESC
ActualiserR

Nouvelle école

Création avec clé Cloud + compte admin initial

Identité

Compte admin initial

Durée de licence

Notes

École créée avec succès

Copie cette clé et remets-la au responsable de l'école.

{{createdKey}}
La clé sera générée automatiquement.
Licences à surveiller {{expiringSchools.length}}

Aucune expiration proche.

SSM Cloud

Administration Server

{{loginError}}

SSM Cloud

Bonjour {{adminUsername}} — que voulez-vous faire ?

Vous pouvez changer de mode à tout moment depuis la barre du haut.

{{topLabel}} {{selectedSchool.name}}
{{serverOnline?'En ligne':'Hors ligne'}}
{{selectedIds.length}} sélectionnée{{selectedIds.length>1?'s':''}}
{{filteredSchools.length}} école{{filteredSchools.length>1?'s':''}} × filtres
{{schoolInitials(s)}}
{{s.name}}
{{s.city||'—'}} · {{timeAgo(s.last_sync_at)}}
{{schoolStatusLabel(s)}} {{licenseDaysLeft(s)}}j

Aucune école trouvée

Sélectionnez une école

Clique sur une école dans la liste, ou appuie sur CtrlK pour rechercher.

Récemment synchronisées
Date École Action Appareil / Utilisateur Erreur
{{fmtDate(log.created_at)}} {{schoolName(log.school_id)}} {{log.action}} {{log.device_name||log.device_id?.slice(0,12)||'—'}} · {{log.user_name}} {{log.records_pushed||'—'}} {{log.records_pulled||'—'}} {{log.error_message||''}}
Aucune activité

Utilisation du parc

Statistiques agrégées de toutes les écoles avec télémétrie active. Mise à jour en direct depuis /api/admin/usage.

{{(usage.totalEvents||0).toLocaleString('fr-FR')}}
Événements
{{usage.devicesActive||0}}
Appareils actifs
{{usage.schoolsActive||0}}
Écoles actives

Par type

Aucune donnée
{{kind}} {{count.toLocaleString('fr-FR')}}

Par canal

Aucune donnée
{{channel}} {{count.toLocaleString('fr-FR')}}

Par version

Aucune donnée
{{version}} {{count.toLocaleString('fr-FR')}}

Activité par école

Top 50 par volume d'événements sur la fenêtre sélectionnée.

École Événements Appareils Dernière activité
{{row.schoolName}} {{(row.totalEvents||0).toLocaleString('fr-FR')}} {{row.devicesActive||0}} {{fmtDate(row.lastSeenMs)}}
Aucune école n'a encore envoyé de télémétrie sur cette fenêtre.

Canary synthétique

Self-test horaire du serveur cloud — détecte les pannes avant les utilisateurs.
{{canaryStatusLabel}}
Dernier succès : {{canary.summary.lastSuccessAt ? fmtDate(canary.summary.lastSuccessAt) : '—'}} · Dernier échec : {{canary.summary.lastFailureAt ? fmtDate(canary.summary.lastFailureAt) : 'aucun'}}
{{Math.abs(canary.summary.currentStreak)}}
{{canary.summary.currentStreak>=0?'Succès consécutifs':'Échecs consécutifs'}}
Aucun run de canary encore enregistré. Le premier run a lieu ~30 s après le démarrage du serveur.
{{canary.summary.passRate != null ? Math.round(canary.summary.passRate * 100) + '%' : '—'}}
Taux de succès ({{canary.summary.runsObserved}} runs)
{{canary.summary.p50Ms != null ? canary.summary.p50Ms + 'ms' : '—'}}
Durée p50
{{canary.summary.p95Ms != null ? canary.summary.p95Ms + 'ms' : '—'}}
Durée p95
{{(canary.runs || []).length}}
Runs récents

Runs récents

Date Statut Durée Étapes Erreur
{{fmtDate(run.startedAt)}} {{run.succeeded?'OK':'FAIL'}} {{run.durationMs || '—'}}ms
{{run.errorMessage || ''}}

Budgets de performance

Cible p95 par type d'événement, comparée à l'observé sur 24 h.
Aucun budget configuré. Les défauts sont semés au démarrage du serveur.
{{item.kind}}
{{perfStatusLabel(item.status)}}
Échantillons : {{item.observed.count.toLocaleString('fr-FR')}}
p95 observé : {{item.observed.p95 != null ? item.observed.p95 + 'ms' : '—'}} Budget p95 : {{item.budget.p95BudgetMs}}ms
p50 : {{item.observed.p50 != null ? item.observed.p50 + 'ms' : '—'}}
p99 : {{item.observed.p99 != null ? item.observed.p99 + 'ms' : '—'}}
max : {{item.observed.maxMs != null ? item.observed.maxMs + 'ms' : '—'}}

Vue d'ensemble

{{s.value}}
{{s.label}}

Santé serveur

{{serverOnline?'OK':'DOWN'}}
Statut
{{health.uptimeStr||'—'}}
Uptime
{{health.connectedDevices||0}}
WebSocket connectés
{{health.activeSchools||0}}
Écoles connectées

Informations serveur

Version
{{health.version||'—'}}
WebSocket
{{health.websocket?'Activé':'Désactivé'}}
Hôte
{{health.server||'—'}}

Stockage serveur

Espace disque et principaux dossiers visibles par le serveur cloud.

{{fmtBytes(storage.disk.used)}} / {{fmtBytes(storage.disk.size)}}
{{fmtBytes(storage.disk.available)}} libres · {{storage.disk.usedPercent}}% utilisé
{{storage.disk.mountedOn||'/'}}
{{item.label}}
{{item.path}}
{{fmtBytes(item.bytes)}}

{{storage.note}}

Actions serveur

Redémarrer le serveur cloud. Les WebSockets seront coupés brièvement ; les appareils se reconnecteront automatiquement.

Générer une clé Standard

Produit une clé V4 (YB4) byte-identique à l'outil local keygen-app.

Signature indisponible
{{keygenStatus.error || 'keygen.key introuvable sur le serveur.'}}
Chemin attendu : {{keygenStatus.keyPath}}
Obligatoire — sert à retrouver la clé dans l'historique.
Visible dans l'app Standard du client, écran d'activation.
{{keygenError}}
Clé générée avec succès
{{keygenResult.planLabel}} · {{keygenResult.durationDays}} jours · {{fmtDate(keygenResult.generatedAt)}}
ID machine
{{keygenForm.machineId}}
Plan
{{keygenResult.planLabel}}
Durée
{{keygenResult.durationDays}} jours
Codes de contrôle mensuels
Mois {{i+1}}
{{cp}}
À communiquer au client après le 90e, 180e et 270e jour.

Historique des clés Standard

Métadonnées uniquement — aucune clé n'est stockée.

Aucune clé générée depuis ce serveur pour l'instant.
Date École Contact ID machine Plan Codes de contrôle Clé Admin IP
{{fmtDate(r.generated_at)}} Non renseignée
{{r.notes}}
{{r.contact_name}}
{{r.contact_phone}}
{{r.contact_email}}
{{r.machine_id}} {{r.plan===1?'Mensuel':'Annuel'}} {{r.admin_username}} {{r.ip||'—'}}