356 lines
12 KiB
TypeScript
356 lines
12 KiB
TypeScript
import type { AnchorNote, AnchorNoteSummary } from "../anchor/anchor-types";
|
|
import type { ArchiveTeamWarriorStatus } from "../archive-team-warrior/archive-team-warrior-types";
|
|
import type { BazarrBadges } from "../bazarr/bazarr-types";
|
|
import type { CoolifyInstanceInfo } from "../coolify/coolify-types";
|
|
import type { ImmichAlbum, ImmichServerStats } from "../immich/immich-integration";
|
|
import type { NavidromeDashboardData } from "../navidrome/navidrome-types";
|
|
import type { PaperlessNgxStats } from "../paperless-ngx/paperless-ngx-types";
|
|
import type { PatchMonStats } from "../patchmon/patchmon-types";
|
|
import type { SpeedtestTrackerDashboardData } from "../speedtest-tracker/speedtest-tracker-types";
|
|
import type { TracearrDashboardData } from "../tracearr/tracearr-types";
|
|
import type { TraefikDashboardData } from "../traefik/traefik-types";
|
|
import type { UmamiEventSeries, UmamiMetricItem, UmamiVisitorStats, UmamiWebsite } from "../umami/umami-types";
|
|
import type { UptimeKumaDashboardData } from "../uptime-kuma/uptime-kuma-types";
|
|
import type { WudStats } from "../wud/wud-types";
|
|
import type {
|
|
FirewallCpuSummary,
|
|
FirewallInterfacesSummary,
|
|
FirewallMemorySummary,
|
|
FirewallVersionSummary,
|
|
} from "../interfaces/firewall-summary/firewall-summary-types";
|
|
import type { VpnSummary } from "../interfaces/vpn-summary/vpn-summary-types";
|
|
|
|
const demoTimestamp = "2026-08-24T12:00:00.000Z";
|
|
|
|
const anchorNote: AnchorNote = {
|
|
id: "homarr-demo-note",
|
|
title: "Homarr demo runbook",
|
|
content: JSON.stringify({
|
|
ops: [
|
|
{ insert: "Welcome to the complete Homarr widget gallery.\n", attributes: { bold: true } },
|
|
{ insert: "Every integration-backed card below is powered by safe mock data.\n" },
|
|
],
|
|
}),
|
|
createdAt: demoTimestamp,
|
|
updatedAt: demoTimestamp,
|
|
isPinned: true,
|
|
isArchived: false,
|
|
tagIds: ["demo"],
|
|
permission: "editor",
|
|
background: null,
|
|
userId: "demo",
|
|
};
|
|
|
|
export const mockWidgetData = {
|
|
timestamp: demoTimestamp,
|
|
anchorNote,
|
|
anchorNotes: [
|
|
{
|
|
id: anchorNote.id,
|
|
title: anchorNote.title,
|
|
updatedAt: anchorNote.updatedAt,
|
|
isPinned: anchorNote.isPinned,
|
|
tagIds: anchorNote.tagIds,
|
|
permission: anchorNote.permission,
|
|
},
|
|
] satisfies AnchorNoteSummary[],
|
|
archiveTeamWarrior: {
|
|
status: "running",
|
|
runnerStatus: "running",
|
|
project: { id: "urlteam2", title: "URLTeam 2" },
|
|
selectedProject: "urlteam2",
|
|
broadcastMessage: "Archiving the open web, one URL at a time.",
|
|
bandwidth: {
|
|
received: 8_942_000_000,
|
|
sent: 1_284_000_000,
|
|
receiving: 4_800_000,
|
|
sending: 720_000,
|
|
session_id: "homarr-demo-session",
|
|
},
|
|
items: [
|
|
{ id: "demo-1", name: "urls-20260824-01", status: "running", project: "urlteam2", startTime: 1_777_000_000 },
|
|
{ id: "demo-2", name: "urls-20260824-00", status: "completed", project: "urlteam2" },
|
|
],
|
|
counts: { running: 1, completed: 284, failed: 2, canceled: 0 },
|
|
updatedAt: demoTimestamp,
|
|
} satisfies ArchiveTeamWarriorStatus,
|
|
audioStats: { artistCount: 842, albumCount: 1_976, songCount: 24_681 } satisfies NavidromeDashboardData,
|
|
bazarr: {
|
|
episodes: 12,
|
|
movies: 4,
|
|
providers: 6,
|
|
status: 0,
|
|
sonarr_signalr: "connected",
|
|
radarr_signalr: "connected",
|
|
announcements: 1,
|
|
} satisfies BazarrBadges,
|
|
coolify: {
|
|
version: "4.0.0-beta.420",
|
|
servers: [
|
|
{
|
|
id: 1,
|
|
uuid: "homarr-demo-edge",
|
|
name: "Paris edge",
|
|
ip: "10.0.0.20",
|
|
is_reachable: true,
|
|
is_usable: true,
|
|
settings: { server_id: 1, is_build_server: true, is_reachable: true, is_usable: true },
|
|
},
|
|
],
|
|
applications: [
|
|
{
|
|
id: 1,
|
|
uuid: "homarr-demo-app",
|
|
name: "Homarr",
|
|
status: "running:healthy",
|
|
fqdn: "https://homarr.dev",
|
|
projectName: "Home cloud",
|
|
environmentName: "Production",
|
|
},
|
|
{
|
|
id: 2,
|
|
uuid: "media-demo-app",
|
|
name: "Media stack",
|
|
status: "running:healthy",
|
|
fqdn: null,
|
|
projectName: "Home cloud",
|
|
environmentName: "Production",
|
|
},
|
|
],
|
|
services: [
|
|
{
|
|
id: 3,
|
|
uuid: "postgres-demo-service",
|
|
name: "Postgres",
|
|
status: "running:healthy",
|
|
fqdn: null,
|
|
applications: [],
|
|
projectName: "Home cloud",
|
|
environmentName: "Production",
|
|
},
|
|
],
|
|
} satisfies CoolifyInstanceInfo,
|
|
firewallCpu: { total: 23 } satisfies FirewallCpuSummary,
|
|
firewallInterfaces: [
|
|
{
|
|
data: [
|
|
{ name: "WAN", receive: 18_400_000, transmit: 4_200_000 },
|
|
{ name: "LAN", receive: 46_700_000, transmit: 21_300_000 },
|
|
],
|
|
timestamp: new Date(demoTimestamp),
|
|
},
|
|
] satisfies FirewallInterfacesSummary[],
|
|
firewallMemory: { used: 3_220_000_000, total: 8_590_000_000, percent: 37.5 } satisfies FirewallMemorySummary,
|
|
firewallVersion: { version: "24.7.11" } satisfies FirewallVersionSummary,
|
|
immichStats: {
|
|
userCount: 4,
|
|
photoCount: 48_392,
|
|
videoCount: 2_418,
|
|
totalLibraryUsageInBytes: 684_510_412_800,
|
|
} satisfies ImmichServerStats,
|
|
immichAlbums: [
|
|
{ id: "demo-paris", albumName: "Paris weekend", assetCount: 128 },
|
|
{ id: "demo-mountains", albumName: "Alpine trails", assetCount: 84 },
|
|
],
|
|
immichAlbum: {
|
|
id: "demo-paris",
|
|
albumName: "Paris weekend",
|
|
assets: [
|
|
{
|
|
id: "demo-photo-1",
|
|
thumbhash: null,
|
|
fileModifiedAt: demoTimestamp,
|
|
fileCreatedAt: demoTimestamp,
|
|
updatedAt: demoTimestamp,
|
|
type: "IMAGE",
|
|
publicLink: "https://images.unsplash.com/photo-1502602898657-3e91760cbb34?auto=format&fit=crop&w=1200&q=80",
|
|
},
|
|
{
|
|
id: "demo-photo-2",
|
|
thumbhash: null,
|
|
fileModifiedAt: demoTimestamp,
|
|
fileCreatedAt: demoTimestamp,
|
|
updatedAt: demoTimestamp,
|
|
type: "IMAGE",
|
|
publicLink: "https://images.unsplash.com/photo-1464822759023-fed622ff2c3b?auto=format&fit=crop&w=1200&q=80",
|
|
},
|
|
],
|
|
} satisfies ImmichAlbum,
|
|
paperlessNgx: {
|
|
documentsTotal: 2_847,
|
|
documentsInbox: 14,
|
|
correspondentsCount: 96,
|
|
tagsCount: 38,
|
|
documentTypesCount: 12,
|
|
} satisfies PaperlessNgxStats,
|
|
patchmon: {
|
|
totalHosts: 18,
|
|
hostsNeedingUpdates: 5,
|
|
securityUpdates: 7,
|
|
upToDateHosts: 13,
|
|
hostsWithSecurityUpdates: 3,
|
|
recentUpdates24h: 11,
|
|
totalOutdatedPackages: 26,
|
|
totalRepos: 42,
|
|
lastUpdated: demoTimestamp,
|
|
osDistribution: [
|
|
{ name: "Ubuntu 24.04", count: 9, osType: "linux", osVersion: "24.04" },
|
|
{ name: "Debian 13", count: 6, osType: "linux", osVersion: "13" },
|
|
{ name: "Fedora 42", count: 3, osType: "linux", osVersion: "42" },
|
|
],
|
|
} satisfies PatchMonStats,
|
|
speedtestTracker: {
|
|
latestResult: {
|
|
id: 42,
|
|
ping: 8.4,
|
|
download_bits: 936_000_000,
|
|
upload_bits: 487_000_000,
|
|
healthy: true,
|
|
created_at: new Date(demoTimestamp),
|
|
},
|
|
stats: {
|
|
ping: { avg: 9.1, min: 6.8, max: 14.2 },
|
|
download: { avg: 901, avg_bits: 901_000_000, min: 822, max: 948 },
|
|
upload: { avg: 472, avg_bits: 472_000_000, min: 431, max: 495 },
|
|
total_results: 128,
|
|
},
|
|
recentResults: [
|
|
{
|
|
id: 42,
|
|
ping: 8.4,
|
|
download_bits: 936_000_000,
|
|
upload_bits: 487_000_000,
|
|
healthy: true,
|
|
created_at: new Date(demoTimestamp),
|
|
},
|
|
],
|
|
} satisfies SpeedtestTrackerDashboardData,
|
|
tracearr: {
|
|
stats: { activeStreams: 2, totalUsers: 14, totalSessions: 1_248, recentViolations: 1, timestamp: demoTimestamp },
|
|
streams: {
|
|
data: [],
|
|
summary: {
|
|
total: 2,
|
|
transcodes: 1,
|
|
directStreams: 0,
|
|
directPlays: 1,
|
|
totalBitrate: "24.8 Mbps",
|
|
byServer: [
|
|
{
|
|
serverId: "demo",
|
|
serverName: "Homarr Media",
|
|
total: 2,
|
|
transcodes: 1,
|
|
directStreams: 0,
|
|
directPlays: 1,
|
|
totalBitrate: "24.8 Mbps",
|
|
},
|
|
],
|
|
},
|
|
},
|
|
violations: { data: [], meta: { total: 1, page: 1, pageSize: 10 } },
|
|
recentActivity: { data: [], meta: { total: 1_248, page: 1, pageSize: 10 } },
|
|
} satisfies TracearrDashboardData,
|
|
traefik: {
|
|
version: "3.5.0",
|
|
entryPoints: ["web", "websecure", "metrics"],
|
|
failedEndpoints: [],
|
|
resources: [
|
|
{ protocol: "http", type: "router", name: "homarr@docker", provider: "docker", status: "enabled" },
|
|
{ protocol: "http", type: "service", name: "homarr@docker", provider: "docker", status: "enabled" },
|
|
{ protocol: "http", type: "middleware", name: "secure-headers@file", provider: "file", status: "enabled" },
|
|
],
|
|
http: {
|
|
routers: { total: 12, enabled: 12, warnings: 0, errors: 0 },
|
|
services: { total: 10, enabled: 10, warnings: 0, errors: 0 },
|
|
middlewares: { total: 8, enabled: 8, warnings: 0, errors: 0 },
|
|
},
|
|
tcp: {
|
|
routers: { total: 2, enabled: 2, warnings: 0, errors: 0 },
|
|
services: { total: 2, enabled: 2, warnings: 0, errors: 0 },
|
|
middlewares: { total: 0, enabled: 0, warnings: 0, errors: 0 },
|
|
},
|
|
udp: {
|
|
routers: { total: 1, enabled: 1, warnings: 0, errors: 0 },
|
|
services: { total: 1, enabled: 1, warnings: 0, errors: 0 },
|
|
},
|
|
} satisfies TraefikDashboardData,
|
|
umamiWebsites: [{ id: "homarr-demo", name: "Homarr demo", domain: "demo.homarr.dev" }] satisfies UmamiWebsite[],
|
|
umamiVisitorStats: {
|
|
domain: "demo.homarr.dev",
|
|
websiteId: "homarr-demo",
|
|
websiteName: "Homarr demo",
|
|
totalVisitors: 8_429,
|
|
totalPageviews: 21_384,
|
|
totalVisits: 11_207,
|
|
bounceRate: 32.4,
|
|
avgDuration: 284,
|
|
timeFrame: "24h",
|
|
dataPoints: [
|
|
{ timestamp: "2026-08-24T08:00:00.000Z", visitors: 280, events: 0 },
|
|
{ timestamp: "2026-08-24T10:00:00.000Z", visitors: 410, events: 0 },
|
|
{ timestamp: "2026-08-24T12:00:00.000Z", visitors: 536, events: 0 },
|
|
],
|
|
eventCount: 0,
|
|
} satisfies UmamiVisitorStats,
|
|
umamiEventNames: ["dashboard_opened", "widget_added", "board_shared"],
|
|
umamiTopPages: [
|
|
{ x: "/", y: 8_240 },
|
|
{ x: "/boards/home", y: 5_812 },
|
|
{ x: "/manage/integrations", y: 1_942 },
|
|
] satisfies UmamiMetricItem[],
|
|
umamiTopReferrers: [
|
|
{ x: "github.com", y: 3_842 },
|
|
{ x: "google.com", y: 2_106 },
|
|
{ x: "docs.homarr.dev", y: 1_284 },
|
|
] satisfies UmamiMetricItem[],
|
|
umamiEventSeries: [
|
|
{
|
|
eventName: "dashboard_opened",
|
|
dataPoints: [
|
|
{ x: "2026-08-24T08:00:00.000Z", y: 92 },
|
|
{ x: "2026-08-24T10:00:00.000Z", y: 134 },
|
|
{ x: "2026-08-24T12:00:00.000Z", y: 188 },
|
|
],
|
|
},
|
|
] satisfies UmamiEventSeries[],
|
|
uptimeKuma: {
|
|
totalMonitors: 6,
|
|
upCount: 5,
|
|
downCount: 1,
|
|
pausedCount: 0,
|
|
averageUptimePercent: 99.72,
|
|
monitors: [
|
|
{ id: 1, name: "Homarr", status: "up", uptimePercent24h: 100 },
|
|
{ id: 2, name: "Media server", status: "up", uptimePercent24h: 99.98 },
|
|
{ id: 3, name: "Home cloud", status: "up", uptimePercent24h: 99.91 },
|
|
{ id: 4, name: "Backups", status: "up", uptimePercent24h: 99.62 },
|
|
{ id: 5, name: "VPN", status: "up", uptimePercent24h: 99.8 },
|
|
{ id: 6, name: "Lab service", status: "down", uptimePercent24h: 98.99 },
|
|
],
|
|
} satisfies UptimeKumaDashboardData,
|
|
vpn: {
|
|
vpnStatus: "running",
|
|
dnsStatus: "running",
|
|
publicIp: "198.51.100.42",
|
|
country: "France",
|
|
city: "Paris",
|
|
vpnProvider: { protocol: "wireguard", provider: "Mullvad" },
|
|
} satisfies VpnSummary,
|
|
wud: {
|
|
totalContainers: 24,
|
|
updatesAvailable: 3,
|
|
updates: [
|
|
{
|
|
id: "homarr",
|
|
name: "Homarr",
|
|
currentVersion: "v1.35.0",
|
|
newVersion: "v1.36.0",
|
|
link: "https://github.com/homarr-labs/homarr",
|
|
},
|
|
{ id: "postgres", name: "Postgres", currentVersion: "17.5", newVersion: "17.6", link: null },
|
|
{ id: "redis", name: "Redis", currentVersion: "8.0.2", newVersion: "8.0.3", link: null },
|
|
],
|
|
} satisfies WudStats,
|
|
} as const;
|