/** * Zugriff auf die Übersicht und die Wiederherstellungspunkte. */ import { requestApi } from '../../api/client'; /** Statusfarbe einer Kennzahl. */ export type WidgetSeverity = 'healthy' | 'warning' | 'high' | 'critical' | 'information'; /** Eine Kennzahl der Übersicht. */ export interface DashboardWidget { /** Maschinenlesbarer Bezeichner. */ readonly key: string; /** Überschrift. */ readonly title: string; /** Meldet, ob es eine Datengrundlage gibt. */ readonly available: boolean; /** Erklärt eine fehlende Datengrundlage. */ readonly unavailable_reason?: string; /** Hauptzahl; fehlt, wenn sie sich nicht bilden lässt. */ readonly value?: number; /** Einheit der Hauptzahl. */ readonly unit?: string; /** Erläuterung in einem Satz. */ readonly detail?: string; /** Statusfarbe. */ readonly severity: WidgetSeverity; /** Ergänzende Einzelwerte. */ readonly breakdown?: Record; } /** Die Übersicht der Anlage. */ export interface Dashboard { /** Kennzahlen in Anzeigereihenfolge. */ readonly widgets: readonly DashboardWidget[]; /** Zahl der Kennzahlen mit Datengrundlage. */ readonly available_count: number; /** Zeitpunkt der Erhebung in UTC. */ readonly generated_at: string; } /** Ein Wiederherstellungspunkt in der Übersicht. */ export interface RecoveryPoint { /** Öffentlicher Bezeichner. */ readonly id: string; /** Repository des Punktes. */ readonly repository_id: string; /** Name des Repositorys. */ readonly repository_name: string; /** Erzeugender Auftrag. */ readonly job_id?: string; /** Name des Auftrags. */ readonly job_name?: string; /** Kennung innerhalb des Repositorys. */ readonly backup_id_in_repository: string; /** Art des Backups. */ readonly backup_type: string; /** Zustand. */ readonly status: string; /** Erreichte Konsistenz. */ readonly consistency_level?: string; /** Menge der Ursprungsdaten. */ readonly logical_bytes: number; /** Abgelegte Datenmenge. */ readonly encrypted_bytes: number; /** Ende in UTC. */ readonly completed_at?: string; /** Objektive Einstufung. */ readonly classification?: string; /** Letzte Integritätsprüfung in UTC. */ readonly last_verified_at?: string; /** Letzter Wiederherstellungstest in UTC. */ readonly last_restore_test_at?: string; /** Zuletzt berechnete Bewertung in Prozent. */ readonly assurance_score?: number; /** Ende der Aufbewahrungspflicht in UTC. */ readonly immutable_until?: string; /** Meldet einen unbefristeten Schutz. */ readonly legal_hold: boolean; /** Meldet, ob eine Löschung derzeit unzulässig ist. */ readonly is_protected: boolean; /** Zeitpunkt der Löschung in UTC. */ readonly deleted_at?: string; /** Begründung der Löschung. */ readonly deletion_reason?: string; } /** Filter der Liste von Wiederherstellungspunkten. */ export interface RecoveryPointFilter { /** Beschränkung auf ein Repository. */ readonly repositoryId?: string; /** Beschränkung auf eine Einstufung. */ readonly classification?: string; /** Nimmt gelöschte Punkte auf. */ readonly includeDeleted?: boolean; /** Beschränkt auf geschützte Punkte. */ readonly onlyProtected?: boolean; /** Angeforderte Seite. */ readonly page?: number; } /** Lädt die Übersicht. */ export async function fetchDashboard(abortSignal?: AbortSignal): Promise { return requestApi('/dashboard', abortSignal ? { signal: abortSignal } : {}); } /** Lädt eine Seite von Wiederherstellungspunkten. */ export async function fetchRecoveryPoints( filter: RecoveryPointFilter = {}, abortSignal?: AbortSignal, ): Promise { const queryParameters = new URLSearchParams(); if (filter.repositoryId !== undefined && filter.repositoryId !== '') { queryParameters.set('repository_id', filter.repositoryId); } if (filter.classification !== undefined && filter.classification !== '') { queryParameters.set('classification', filter.classification); } if (filter.includeDeleted === true) { queryParameters.set('include_deleted', 'true'); } if (filter.onlyProtected === true) { queryParameters.set('only_protected', 'true'); } queryParameters.set('page', String(filter.page ?? 1)); queryParameters.set('page_size', '50'); return requestApi( `/backups?${queryParameters.toString()}`, abortSignal ? { signal: abortSignal } : {}, ); }