Enterprise-Backup-, Recovery-, Verification-, Security- und Monitoring-Plattform fuer Proxmox VE, Windows, Linux und Dateisysteme. Der Leitsatz, der fast jede Entscheidung erklaert: Ein Backup gilt erst als vertrauenswuerdig, wenn Integritaet geprueft und Wiederherstellbarkeit nachgewiesen wurde. Deshalb steigt ein Wiederherstellungspunkt erst nach einem tatsaechlich durchgefuehrten Restore-Test auf "recoverable", und Unbekanntes geht in keine Bewertung als "gut" ein. Umfang (Phasen 0-23): - Repository Engine: inhaltsadressierte Bloecke, atomares Commit-Protokoll, Katalogaufbau allein aus den Manifesten — ohne Datenbank - Backup Engine: inhaltsabhaengiges Chunking, Deduplizierung trotz Verschluesselung, zstd, AES-256-GCM, Streaming mit Gegendruck - Agenten fuer Windows und Linux mit Auftragsabholung (Pull-Modell) - Proxmox-Provider mit beiden Zugriffswegen auf die Sicherungsarchive - Scheduler, Recovery Engine mit Pruefpunkt, Verification, Unveraenderlichkeit - Weboberflaeche, Kennzahlen, Meldungen, Berichte, Security Center, Ransomware-Heuristik (meldet, handelt nie) - Disaster Recovery, Haertung, Leistungsmessung, Chaos Testing - Eingefrorene Vertraege fuer API, Migrationen, Backup-Format und Repository - Auslieferungspaket fuer linux/amd64, linux/arm64 und windows/amd64 Nicht enthalten und als solches gekennzeichnet: Kapazitaetsprognose, Backup Copy, Changed Block Tracking bei Proxmox, erweiterte Attribute und ACLs. Gebaut, aber nie auf echter Hardware gefahren: der Windows-Dienst, die systemd-Einheit und der verpflichtende Proxmox-Meilenstein — ob eine wiederhergestellte VM startet, ist ungeprueft. Einzelheiten in CHANGELOG.md und docs/release-candidate.md. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
112 lines
2.4 KiB
CSS
112 lines
2.4 KiB
CSS
/* Darstellung der Systemzustandsanzeige. */
|
|
|
|
.health-panel {
|
|
background-color: var(--color-surface-raised);
|
|
border: var(--border-width) solid var(--color-border);
|
|
border-radius: var(--radius);
|
|
padding: var(--space-6);
|
|
}
|
|
|
|
.health-panel__title {
|
|
margin: 0 0 var(--space-4);
|
|
font-size: var(--text-lg);
|
|
font-weight: 600;
|
|
}
|
|
|
|
.health-panel__overall {
|
|
display: flex;
|
|
flex-wrap: wrap;
|
|
align-items: center;
|
|
gap: var(--space-3);
|
|
margin-bottom: var(--space-6);
|
|
}
|
|
|
|
.health-panel__version {
|
|
font-size: var(--text-sm);
|
|
color: var(--color-text-secondary);
|
|
}
|
|
|
|
.health-panel__hint {
|
|
margin: 0;
|
|
font-size: var(--text-sm);
|
|
color: var(--color-text-secondary);
|
|
}
|
|
|
|
.health-panel__error {
|
|
/* Der farbige Rand links betont die Meldung, ohne die Flaeche einzufaerben. */
|
|
border-left: 3px solid var(--color-status-critical);
|
|
padding-left: var(--space-3);
|
|
margin-bottom: var(--space-4);
|
|
}
|
|
|
|
.health-panel__error-message {
|
|
margin: 0 0 var(--space-2);
|
|
}
|
|
|
|
.health-panel__error-detail {
|
|
margin: 0;
|
|
font-size: var(--text-sm);
|
|
color: var(--color-text-secondary);
|
|
}
|
|
|
|
.health-panel__error-detail code {
|
|
font-family: var(--font-mono);
|
|
}
|
|
|
|
.health-panel__button {
|
|
font: inherit;
|
|
font-size: var(--text-sm);
|
|
padding: var(--space-2) var(--space-4);
|
|
border: var(--border-width) solid var(--color-border);
|
|
border-radius: var(--radius);
|
|
background-color: var(--color-surface-page);
|
|
color: var(--color-text-primary);
|
|
cursor: pointer;
|
|
}
|
|
|
|
.health-panel__button:hover {
|
|
border-color: var(--color-text-secondary);
|
|
}
|
|
|
|
.health-panel__table {
|
|
width: 100%;
|
|
border-collapse: collapse;
|
|
font-size: var(--text-sm);
|
|
}
|
|
|
|
.health-panel__caption {
|
|
/* Die Beschriftung dient Screenreadern und bleibt visuell verborgen. */
|
|
position: absolute;
|
|
width: 1px;
|
|
height: 1px;
|
|
overflow: hidden;
|
|
clip-path: inset(50%);
|
|
white-space: nowrap;
|
|
}
|
|
|
|
.health-panel__table th,
|
|
.health-panel__table td {
|
|
text-align: left;
|
|
padding: var(--space-2) var(--space-3);
|
|
border-bottom: var(--border-width) solid var(--color-border);
|
|
vertical-align: top;
|
|
}
|
|
|
|
.health-panel__table thead th {
|
|
font-weight: 600;
|
|
color: var(--color-text-secondary);
|
|
}
|
|
|
|
.health-panel__component-message {
|
|
display: block;
|
|
margin-top: var(--space-1);
|
|
color: var(--color-text-secondary);
|
|
}
|
|
|
|
.health-panel__latency {
|
|
font-family: var(--font-mono);
|
|
/* Rechtsbuendig, damit Zahlen vergleichbar untereinander stehen. */
|
|
text-align: right;
|
|
white-space: nowrap;
|
|
}
|