@if (error()) { } @if (latest(); as host) {
Processeur {{ format.percent(host.cpu) }} {{ overview()?.host?.cpus ?? '–' }} cœurs
Mémoire {{ format.percent(format.ratio(host.memUsed, host.memTotal)) }} {{ format.bytes(host.memUsed) }} sur {{ format.bytes(host.memTotal) }}
Disque {{ format.percent(format.ratio(host.diskUsed, host.diskTotal)) }} {{ format.bytes(host.diskTotal - host.diskUsed) }} libres sur {{ format.bytes(host.diskTotal) }}
Réseau ↓ {{ format.rate(host.netRx) }} ↑ {{ format.rate(host.netTx) }} envoyés
Charge (1 min) {{ format.number(host.load1, 2) }} pour {{ overview()?.host?.cpus ?? '–' }} cœurs
Allumé depuis {{ format.duration(overview()?.host?.uptime) }} sans redémarrage
} @if (overview(); as data) {

Conteneurs

@if (!data.docker.ok) { } @else if (data.docker.unhealthy.length) { } @else { }
@if (data.docker.ok) {

{{ data.docker.running }} / {{ data.docker.total }} en marche

@if (data.docker.unhealthy.length) {

En erreur : {{ data.docker.unhealthy.join(', ') }}

} @if (data.docker.stopped.length) {

Arrêtés : {{ data.docker.stopped.join(', ') }}

} } @else {

{{ data.docker.error }}

}

Sites

@if (data.sites.down.length) { } @else if (data.sites.certSoon.length) { } @else { }

{{ data.sites.up }} / {{ data.sites.total }} en ligne

@for (site of data.sites.down; track site.id) {

{{ site.domain }} : {{ site.error }}

} @for (site of data.sites.certSoon; track site.id) {

Certificat de {{ site.domain }} : expire dans {{ site.days }} j

}

Sauvegardes

@if (!data.backups.last) { } @else { }
@if (data.backups.last; as last) {

{{ format.relative(last.createdAt) }}

Dernière : {{ format.dateTime(last.createdAt) }}

} @else {

Aucune sauvegarde dans le dossier.

}

@if (data.backups.schedule.dailyAt) { Automatique chaque jour à {{ data.backups.schedule.dailyAt }} } @else { Pas de sauvegarde automatique }

}

Historique

@if (range() === 'live') { 10 dernières minutes, en direct } @else { Moyennes sur la période }

@for (option of ranges; track option.value) { }

Processeur et mémoire

Réseau

@if (hasNetwork()) { } @else {

Débit réseau indisponible sur cette machine.

}

Disque

@if (overview()?.recent?.length) {

Dernières actions

Tout le journal
@for (entry of overview()!.recent; track entry.id) { }
{{ entry.target }} {{ entry.username ?? '–' }} {{ format.relative(entry.createdAt) }}
}