export interface ProxmoxStorage { name: string; type: string; used: number; total: number } export interface ProxmoxData { node: string uptime: number cpu: number memory: { used: number; total: number } storages: ProxmoxStorage[] lxcCount: number vmCount: number } export interface SynologyVolume { id: string label: string used: number total: number } export interface SynologyData { volumes: SynologyVolume[] } export interface AdGuardTimeSlot { queries: number blocked: number } export interface AdGuardData { totalQueries: number blockedQueries: number blockedPercent: string timeSlots: AdGuardTimeSlot[] } export interface CrowdSecOrigin { name: string; count: number } export interface CrowdSecRecent { value: string; scenario: string; created_at: string } export interface CrowdSecData { activeBans: number alertsLast24h: number blocksThisWeek: number origins: CrowdSecOrigin[] recent: CrowdSecRecent[] } export interface SynologyInfoData { model: string dsmVersion: string uptime: number temperature: number | null } export interface KumaMonitor { id: number name: string type: string status: number ping: number | null beats: number[] } export interface KumaData { total: number up: number down: number monitors: KumaMonitor[] } export interface AuthentikLogin { username: string created: string clientIp: string success: boolean } export interface AuthentikData { userCount: number failedLast24h: number recentLogins: AuthentikLogin[] } export interface VaultwardenUser { email: string name: string enabled: boolean lastActive: string | null created: string | null twoFa: boolean } export interface VaultwardenData { version: string | null userCount: number users: VaultwardenUser[] } export interface QbtActiveTorrent { name: string; progress: number; dlSpeed: number; size: number; state: string } export interface QbtData { dlSpeed: number ulSpeed: number downloading: number seeding: number paused: number total: number active: QbtActiveTorrent[] } export interface FritzboxHistorySlot { rx: number; tx: number } export interface FritzboxData { connected: boolean externalIp: string rxMbps: number txMbps: number history: FritzboxHistorySlot[] } export interface HeadscaleNode { id: string name: string ip: string online: boolean lastSeen: string user: string } export interface ArrServiceStats { movies?: number; series?: number; artists?: number; missing: number; queue: number } export interface ArrStatsData { radarr: ArrServiceStats | null sonarr: ArrServiceStats | null lidarr: ArrServiceStats | null } export interface ArrCalendarItem { date: string title: string subtitle: string type: 'movie' | 'episode' | 'album' downloaded: boolean } export interface ArrCalendarData { items: ArrCalendarItem[] } export interface HeadscaleData { total: number online: number nodes: HeadscaleNode[] } export interface JellyfinSession { user: string title: string subtitle: string | null type: string progress: number | null paused: boolean client: string } export interface JellyfinData { sessions: JellyfinSession[] library: { movies: number; episodes: number; songs: number; albums: number } } export interface NavidromeNowPlaying { user: string title: string artist: string album: string } export interface NavidromeData { artistCount: number albumCount: number songCount: number nowPlaying: NavidromeNowPlaying[] } export interface RommPlatform { name: string romCount: number | null } export interface RommData { platformCount: number romCount: number platforms: RommPlatform[] }