{ "$schema": "homarr-custom-widget-v3", "name": "Beszel systems studio", "description": "Systems overview, configurable columns, selected-system history and live details using your existing Beszel integration. No HTTP source or copied API token required.", "sources": {}, "requests": {}, "options": { "beszel": { "label": "Beszel integration", "control": "integration", "integrationKinds": ["beszel"], "default": "" } }, "extensions": { "stylesheet": ".metric { padding: 14px; border-radius: 12px; background: var(--mantine-color-default-hover); } .system-table { font-variant-numeric: tabular-nums; }", "preferences": { "system": { "type": "string", "defaultValue": "" }, "period": { "type": "string", "defaultValue": "1h" }, "columns": { "type": "string[]", "defaultValue": ["cpu", "memory", "disk"] } }, "fragments": { "metric": "{props.label}{Number(props.value ?? 0).toFixed(1)}{props.suffix ?? \"%\"}", "containers": "\n {props.items.length} containers \u00b7 {Date.toLocaleTimeString(props.updatedAt)}\n {!props.items.length && No containers reported.}\n {props.items.length > 0 && \n ContainerCPUMemorySentReceived\n {props.items.map((row) => \n {row.n}\n {Number(row.c ?? 0).toFixed(1)}%\n {Number(row.m ?? 0).toFixed(1)} MiB\n {Number((row.b?.[0] ?? (row.ns ?? 0) * 1048576) / 1024).toFixed(1)} KiB/s\n {Number((row.b?.[1] ?? (row.nr ?? 0) * 1048576) / 1024).toFixed(1)} KiB/s\n )}\n
}\n
" }, "native": { "systems": { "capability": "beszel.systems", "integrationOption": "beszel", "kind": "query", "permission": "view", "trigger": "load", "input": {} }, "history": { "capability": "beszel.history", "integrationOption": "beszel", "kind": "query", "permission": "view", "trigger": "manual", "input": { "systemId": { "$param": "systemId" }, "timePeriod": { "$param": "period" }, "includeDocker": true } }, "live": { "capability": "beszel.live", "integrationOption": "beszel", "kind": "query", "permission": "view", "trigger": "manual", "input": { "systemId": { "$param": "systemId" } } } } }, "template": "{(services) => (\n \n Systems{services.flatMap((service) => service.systems).length} hosts\n \n \n \n {(history) => \n Resource history\n {!history.systemStats.length && No history in this period.}\n {history.systemStats.length > 0 && a.created.localeCompare(b.created)).map((point) => ({time:Date.toLocaleTimeString(point.created),cpu:point.stats.cpu,memory:point.stats.mp,disk:point.stats.dp}))} dataKey=\"time\" series={[{name:\"cpu\",color:\"blue.6\"},{name:\"memory\",color:\"violet.6\"},{name:\"disk\",color:\"teal.6\"}]} withLegend unit=\"%\" />}\n Latest container statistics\n {!history.containerStats.length && No container history in this period.}\n {history.containerStats.slice().sort((a,b) => b.created.localeCompare(a.created)).slice(0,1).map((record) => )}\n }\n {(event,meta) => \n Live event{meta.stale && Last received data}\n {event.type} \u00b7 {Date.toLocaleTimeString(event.record.created)}\n {event.type === \"system_stats\" && }\n {event.type === \"container_stats\" && }\n }\n \n }\n \n)}" }