docs: add ArtifactHub screenshots and verify appVersion

Add 3 SVG mockup screenshots (Overview, GPU Nodes, Metrics) to
docs/screenshots/ and wire them into the artifacthub-pkg.yml
screenshots section. Resolves the last metadata polish item for
v1.0.

appVersion 0.35.0 verified current — Intel Device Plugins latest
release is v0.35.0 (2026-02-16), no update needed.

Closes #16 (screenshots item)
This commit is contained in:
2026-03-21 14:15:53 +00:00
parent 6d889494c4
commit e0ebd38653
4 changed files with 390 additions and 0 deletions
+8
View File
@@ -90,6 +90,14 @@ changes:
- kind: fixed - kind: fixed
description: "Resolve ESLint/Prettier indent conflict by disabling ESLint indent rule (Prettier is formatting authority)" description: "Resolve ESLint/Prettier indent conflict by disabling ESLint indent rule (Prettier is formatting authority)"
screenshots:
- title: Overview — cluster GPU summary, operator status, and active workloads
url: https://raw.githubusercontent.com/privilegedescalation/headlamp-intel-gpu-plugin/main/docs/screenshots/01-overview.svg
- title: GPU Nodes — per-node GPU type, capacity, and allocation bars
url: https://raw.githubusercontent.com/privilegedescalation/headlamp-intel-gpu-plugin/main/docs/screenshots/02-nodes.svg
- title: Metrics — real-time GPU power draw and TDP utilization (discrete GPUs)
url: https://raw.githubusercontent.com/privilegedescalation/headlamp-intel-gpu-plugin/main/docs/screenshots/03-metrics.svg
annotations: annotations:
headlamp/plugin/archive-url: "https://github.com/privilegedescalation/headlamp-intel-gpu-plugin/releases/download/v0.4.3/intel-gpu-0.4.3.tar.gz" headlamp/plugin/archive-url: "https://github.com/privilegedescalation/headlamp-intel-gpu-plugin/releases/download/v0.4.3/intel-gpu-0.4.3.tar.gz"
headlamp/plugin/archive-checksum: sha256:d9c78b3d678d3e6b92c81315bfed88bd22ec4f5cd63578467206727244db7dab headlamp/plugin/archive-checksum: sha256:d9c78b3d678d3e6b92c81315bfed88bd22ec4f5cd63578467206727244db7dab
+123
View File
@@ -0,0 +1,123 @@
<svg xmlns="http://www.w3.org/2000/svg" width="1200" height="750" viewBox="0 0 1200 750" font-family="Inter, Segoe UI, Arial, sans-serif">
<!-- Background -->
<rect width="1200" height="750" fill="#0f1117"/>
<!-- Top nav bar -->
<rect width="1200" height="48" fill="#1a1d27"/>
<text x="16" y="30" font-size="18" font-weight="700" fill="#ffffff">⚡ Headlamp</text>
<text x="120" y="30" font-size="14" fill="#8b8fa8">Intel GPU</text>
<text x="200" y="30" font-size="14" fill="#8b8fa8">/</text>
<text x="214" y="30" font-size="14" fill="#a78bfa">Overview</text>
<!-- Sidebar -->
<rect x="0" y="48" width="200" height="702" fill="#13151f"/>
<rect x="0" y="90" width="200" height="36" fill="#a78bfa22"/>
<text x="16" y="113" font-size="13" fill="#a78bfa" font-weight="600">Overview</text>
<text x="16" y="153" font-size="13" fill="#8b8fa8">Device Plugins</text>
<text x="16" y="193" font-size="13" fill="#8b8fa8">GPU Nodes</text>
<text x="16" y="233" font-size="13" fill="#8b8fa8">GPU Pods</text>
<text x="16" y="273" font-size="13" fill="#8b8fa8">Metrics</text>
<!-- Page title -->
<text x="220" y="90" font-size="22" font-weight="700" fill="#ffffff">Intel GPU Overview</text>
<text x="220" y="112" font-size="13" fill="#8b8fa8">Cluster-wide GPU device plugin status and workload summary</text>
<!-- Summary cards row -->
<!-- Card 1: GPU Nodes -->
<rect x="220" y="130" width="200" height="100" rx="8" fill="#1e2130"/>
<rect x="220" y="130" width="200" height="4" rx="2" fill="#a78bfa"/>
<text x="240" y="165" font-size="12" fill="#8b8fa8">GPU Nodes</text>
<text x="240" y="200" font-size="36" font-weight="700" fill="#a78bfa">6</text>
<text x="290" y="200" font-size="13" fill="#8b8fa8">/ 12 total</text>
<!-- Card 2: Active GPU Pods -->
<rect x="436" y="130" width="200" height="100" rx="8" fill="#1e2130"/>
<rect x="436" y="130" width="200" height="4" rx="2" fill="#34d399"/>
<text x="456" y="165" font-size="12" fill="#8b8fa8">Active GPU Pods</text>
<text x="456" y="200" font-size="36" font-weight="700" fill="#34d399">14</text>
<text x="506" y="200" font-size="13" fill="#8b8fa8">running</text>
<!-- Card 3: Device Plugins -->
<rect x="652" y="130" width="200" height="100" rx="8" fill="#1e2130"/>
<rect x="652" y="130" width="200" height="4" rx="2" fill="#60a5fa"/>
<text x="672" y="165" font-size="12" fill="#8b8fa8">Device Plugins</text>
<text x="672" y="200" font-size="36" font-weight="700" fill="#60a5fa">2</text>
<text x="722" y="200" font-size="13" fill="#8b8fa8">healthy</text>
<!-- Card 4: GPU Allocation -->
<rect x="868" y="130" width="300" height="100" rx="8" fill="#1e2130"/>
<rect x="868" y="130" width="300" height="4" rx="2" fill="#fb923c"/>
<text x="888" y="165" font-size="12" fill="#8b8fa8">Cluster GPU Allocation</text>
<text x="888" y="195" font-size="28" font-weight="700" fill="#fb923c">58%</text>
<!-- Allocation bar -->
<rect x="888" y="208" width="260" height="8" rx="4" fill="#2d3148"/>
<rect x="888" y="208" width="151" height="8" rx="4" fill="#fb923c"/>
<!-- GPU Type Distribution -->
<rect x="220" y="248" width="440" height="220" rx="8" fill="#1e2130"/>
<text x="240" y="278" font-size="15" font-weight="600" fill="#ffffff">GPU Type Distribution</text>
<!-- Pie chart mockup -->
<circle cx="340" cy="370" r="70" fill="none" stroke="#2d3148" stroke-width="30"/>
<circle cx="340" cy="370" r="70" fill="none" stroke="#a78bfa" stroke-width="30" stroke-dasharray="176 264" stroke-dashoffset="0"/>
<circle cx="340" cy="370" r="70" fill="none" stroke="#60a5fa" stroke-width="30" stroke-dasharray="88 352" stroke-dashoffset="-176"/>
<!-- Legend -->
<rect x="430" y="340" width="12" height="12" rx="2" fill="#a78bfa"/>
<text x="448" y="352" font-size="13" fill="#e2e4f0">Discrete (i915/Xe)</text>
<text x="448" y="370" font-size="12" fill="#8b8fa8">4 nodes · 67%</text>
<rect x="430" y="390" width="12" height="12" rx="2" fill="#60a5fa"/>
<text x="448" y="402" font-size="13" fill="#e2e4f0">Integrated</text>
<text x="448" y="420" font-size="12" fill="#8b8fa8">2 nodes · 33%</text>
<!-- Operator Status -->
<rect x="676" y="248" width="492" height="220" rx="8" fill="#1e2130"/>
<text x="696" y="278" font-size="15" font-weight="600" fill="#ffffff">Operator Status</text>
<!-- Status rows -->
<rect x="696" y="295" width="452" height="40" rx="4" fill="#13151f"/>
<circle cx="720" cy="315" r="6" fill="#34d399"/>
<text x="736" y="320" font-size="13" fill="#e2e4f0">gpu-device-plugin</text>
<text x="1020" y="320" font-size="12" fill="#34d399">Running</text>
<text x="1060" y="320" font-size="12" fill="#8b8fa8">6/6</text>
<rect x="696" y="343" width="452" height="40" rx="4" fill="#13151f"/>
<circle cx="720" cy="363" r="6" fill="#34d399"/>
<text x="736" y="368" font-size="13" fill="#e2e4f0">node-feature-discovery</text>
<text x="1020" y="368" font-size="12" fill="#34d399">Running</text>
<text x="1060" y="368" font-size="12" fill="#8b8fa8">1/1</text>
<rect x="696" y="391" width="452" height="40" rx="4" fill="#13151f"/>
<circle cx="720" cy="411" r="6" fill="#60a5fa"/>
<text x="736" y="416" font-size="13" fill="#e2e4f0">prometheus / node-exporter</text>
<text x="1020" y="416" font-size="12" fill="#60a5fa">Available</text>
<text x="1060" y="416" font-size="12" fill="#8b8fa8">6/6</text>
<!-- Recent GPU Pods table -->
<rect x="220" y="486" width="948" height="220" rx="8" fill="#1e2130"/>
<text x="240" y="516" font-size="15" font-weight="600" fill="#ffffff">Active GPU Pods</text>
<!-- Table header -->
<rect x="220" y="526" width="948" height="30" fill="#13151f"/>
<text x="240" y="546" font-size="12" fill="#8b8fa8" font-weight="600">NAME</text>
<text x="480" y="546" font-size="12" fill="#8b8fa8" font-weight="600">NAMESPACE</text>
<text x="660" y="546" font-size="12" fill="#8b8fa8" font-weight="600">NODE</text>
<text x="860" y="546" font-size="12" fill="#8b8fa8" font-weight="600">GPU REQUEST</text>
<text x="1000" y="546" font-size="12" fill="#8b8fa8" font-weight="600">STATUS</text>
<!-- Rows -->
<rect x="220" y="556" width="948" height="34" fill="#1e2130"/>
<text x="240" y="578" font-size="13" fill="#e2e4f0">gpu-inference-7d9c4f</text>
<text x="480" y="578" font-size="13" fill="#8b8fa8">ml-workloads</text>
<text x="660" y="578" font-size="13" fill="#8b8fa8">gpu-node-01</text>
<text x="860" y="578" font-size="13" fill="#a78bfa">2</text>
<rect x="998" y="563" width="60" height="20" rx="10" fill="#34d39922"/>
<text x="1028" y="578" font-size="12" fill="#34d399" text-anchor="middle">Running</text>
<rect x="220" y="590" width="948" height="34" fill="#13151f"/>
<text x="240" y="612" font-size="13" fill="#e2e4f0">training-job-abc12</text>
<text x="480" y="612" font-size="13" fill="#8b8fa8">training</text>
<text x="660" y="612" font-size="13" fill="#8b8fa8">gpu-node-03</text>
<text x="860" y="612" font-size="13" fill="#a78bfa">4</text>
<rect x="998" y="597" width="60" height="20" rx="10" fill="#34d39922"/>
<text x="1028" y="612" font-size="12" fill="#34d399" text-anchor="middle">Running</text>
<rect x="220" y="624" width="948" height="34" fill="#1e2130"/>
<text x="240" y="646" font-size="13" fill="#e2e4f0">render-worker-9xk2p</text>
<text x="480" y="646" font-size="13" fill="#8b8fa8">rendering</text>
<text x="660" y="646" font-size="13" fill="#8b8fa8">gpu-node-02</text>
<text x="860" y="646" font-size="13" fill="#a78bfa">1</text>
<rect x="998" y="631" width="60" height="20" rx="10" fill="#fbbf2422"/>
<text x="1028" y="646" font-size="12" fill="#fbbf24" text-anchor="middle">Pending</text>
</svg>

After

Width:  |  Height:  |  Size: 7.5 KiB

+142
View File
@@ -0,0 +1,142 @@
<svg xmlns="http://www.w3.org/2000/svg" width="1200" height="750" viewBox="0 0 1200 750" font-family="Inter, Segoe UI, Arial, sans-serif">
<!-- Background -->
<rect width="1200" height="750" fill="#0f1117"/>
<!-- Top nav bar -->
<rect width="1200" height="48" fill="#1a1d27"/>
<text x="16" y="30" font-size="18" font-weight="700" fill="#ffffff">⚡ Headlamp</text>
<text x="120" y="30" font-size="14" fill="#8b8fa8">Intel GPU</text>
<text x="200" y="30" font-size="14" fill="#8b8fa8">/</text>
<text x="214" y="30" font-size="14" fill="#a78bfa">GPU Nodes</text>
<!-- Sidebar -->
<rect x="0" y="48" width="200" height="702" fill="#13151f"/>
<text x="16" y="113" font-size="13" fill="#8b8fa8">Overview</text>
<text x="16" y="153" font-size="13" fill="#8b8fa8">Device Plugins</text>
<rect x="0" y="170" width="200" height="36" fill="#a78bfa22"/>
<text x="16" y="193" font-size="13" fill="#a78bfa" font-weight="600">GPU Nodes</text>
<text x="16" y="233" font-size="13" fill="#8b8fa8">GPU Pods</text>
<text x="16" y="273" font-size="13" fill="#8b8fa8">Metrics</text>
<!-- Page title -->
<text x="220" y="90" font-size="22" font-weight="700" fill="#ffffff">GPU Nodes</text>
<text x="220" y="112" font-size="13" fill="#8b8fa8">Per-node GPU capacity, allocatable, allocation, and active workloads</text>
<!-- Node Card 1 -->
<rect x="220" y="130" width="460" height="170" rx="8" fill="#1e2130"/>
<rect x="220" y="130" width="460" height="4" rx="2" fill="#a78bfa"/>
<text x="240" y="160" font-size="15" font-weight="600" fill="#ffffff">gpu-node-01</text>
<rect x="550" y="142" width="80" height="22" rx="11" fill="#34d39922"/>
<text x="590" y="158" font-size="12" fill="#34d399" text-anchor="middle">Ready</text>
<text x="240" y="183" font-size="12" fill="#8b8fa8">Type</text>
<text x="320" y="183" font-size="12" fill="#e2e4f0">Discrete (i915)</text>
<text x="240" y="205" font-size="12" fill="#8b8fa8">Capacity</text>
<text x="320" y="205" font-size="12" fill="#e2e4f0">4 GPUs</text>
<text x="240" y="227" font-size="12" fill="#8b8fa8">Allocatable</text>
<text x="320" y="227" font-size="12" fill="#e2e4f0">4 GPUs</text>
<!-- Allocation bar -->
<text x="240" y="255" font-size="12" fill="#8b8fa8">Allocation</text>
<text x="640" y="255" font-size="12" fill="#fb923c" text-anchor="end">75% (3/4)</text>
<rect x="240" y="262" width="380" height="12" rx="6" fill="#2d3148"/>
<rect x="240" y="262" width="285" height="12" rx="6" fill="#fb923c"/>
<text x="240" y="293" font-size="12" fill="#8b8fa8">Active Pods: </text>
<text x="316" y="293" font-size="12" fill="#e2e4f0">gpu-inference-7d9c4f, render-worker-9xk2p</text>
<!-- Node Card 2 -->
<rect x="700" y="130" width="460" height="170" rx="8" fill="#1e2130"/>
<rect x="700" y="130" width="460" height="4" rx="2" fill="#a78bfa"/>
<text x="720" y="160" font-size="15" font-weight="600" fill="#ffffff">gpu-node-02</text>
<rect x="1030" y="142" width="80" height="22" rx="11" fill="#34d39922"/>
<text x="1070" y="158" font-size="12" fill="#34d399" text-anchor="middle">Ready</text>
<text x="720" y="183" font-size="12" fill="#8b8fa8">Type</text>
<text x="800" y="183" font-size="12" fill="#e2e4f0">Discrete (Xe)</text>
<text x="720" y="205" font-size="12" fill="#8b8fa8">Capacity</text>
<text x="800" y="205" font-size="12" fill="#e2e4f0">2 GPUs</text>
<text x="720" y="227" font-size="12" fill="#8b8fa8">Allocatable</text>
<text x="800" y="227" font-size="12" fill="#e2e4f0">2 GPUs</text>
<!-- Allocation bar -->
<text x="720" y="255" font-size="12" fill="#8b8fa8">Allocation</text>
<text x="1120" y="255" font-size="12" fill="#34d399" text-anchor="end">50% (1/2)</text>
<rect x="720" y="262" width="380" height="12" rx="6" fill="#2d3148"/>
<rect x="720" y="262" width="190" height="12" rx="6" fill="#34d399"/>
<text x="720" y="293" font-size="12" fill="#8b8fa8">Active Pods: </text>
<text x="796" y="293" font-size="12" fill="#e2e4f0">render-worker-9xk2p</text>
<!-- Node Card 3 -->
<rect x="220" y="318" width="460" height="170" rx="8" fill="#1e2130"/>
<rect x="220" y="318" width="460" height="4" rx="2" fill="#a78bfa"/>
<text x="240" y="348" font-size="15" font-weight="600" fill="#ffffff">gpu-node-03</text>
<rect x="550" y="330" width="80" height="22" rx="11" fill="#34d39922"/>
<text x="590" y="346" font-size="12" fill="#34d399" text-anchor="middle">Ready</text>
<text x="240" y="371" font-size="12" fill="#8b8fa8">Type</text>
<text x="320" y="371" font-size="12" fill="#e2e4f0">Discrete (i915)</text>
<text x="240" y="393" font-size="12" fill="#8b8fa8">Capacity</text>
<text x="320" y="393" font-size="12" fill="#e2e4f0">8 GPUs</text>
<text x="240" y="415" font-size="12" fill="#8b8fa8">Allocatable</text>
<text x="320" y="415" font-size="12" fill="#e2e4f0">8 GPUs</text>
<!-- Allocation bar -->
<text x="240" y="443" font-size="12" fill="#8b8fa8">Allocation</text>
<text x="640" y="443" font-size="12" fill="#fb923c" text-anchor="end">100% (8/8)</text>
<rect x="240" y="450" width="380" height="12" rx="6" fill="#2d3148"/>
<rect x="240" y="450" width="380" height="12" rx="6" fill="#f87171"/>
<text x="240" y="481" font-size="12" fill="#8b8fa8">Active Pods: </text>
<text x="316" y="481" font-size="12" fill="#e2e4f0">training-job-abc12 (+3 more)</text>
<!-- Node Card 4 (integrated) -->
<rect x="700" y="318" width="460" height="170" rx="8" fill="#1e2130"/>
<rect x="700" y="318" width="460" height="4" rx="2" fill="#60a5fa"/>
<text x="720" y="348" font-size="15" font-weight="600" fill="#ffffff">worker-node-05</text>
<rect x="1030" y="330" width="80" height="22" rx="11" fill="#34d39922"/>
<text x="1070" y="346" font-size="12" fill="#34d399" text-anchor="middle">Ready</text>
<text x="720" y="371" font-size="12" fill="#8b8fa8">Type</text>
<text x="800" y="371" font-size="12" fill="#e2e4f0">Integrated</text>
<text x="720" y="393" font-size="12" fill="#8b8fa8">Capacity</text>
<text x="800" y="393" font-size="12" fill="#e2e4f0">1 GPU</text>
<text x="720" y="415" font-size="12" fill="#8b8fa8">Allocatable</text>
<text x="800" y="415" font-size="12" fill="#e2e4f0">1 GPU</text>
<!-- Allocation bar -->
<text x="720" y="443" font-size="12" fill="#8b8fa8">Allocation</text>
<text x="1120" y="443" font-size="12" fill="#8b8fa8" text-anchor="end">0% (0/1)</text>
<rect x="720" y="450" width="380" height="12" rx="6" fill="#2d3148"/>
<text x="720" y="481" font-size="12" fill="#8b8fa8">Active Pods: </text>
<text x="796" y="481" font-size="12" fill="#6b7280">none</text>
<!-- Node Card 5 -->
<rect x="220" y="506" width="460" height="170" rx="8" fill="#1e2130"/>
<rect x="220" y="506" width="460" height="4" rx="2" fill="#a78bfa"/>
<text x="240" y="536" font-size="15" font-weight="600" fill="#ffffff">gpu-node-04</text>
<rect x="550" y="518" width="80" height="22" rx="11" fill="#34d39922"/>
<text x="590" y="534" font-size="12" fill="#34d399" text-anchor="middle">Ready</text>
<text x="240" y="559" font-size="12" fill="#8b8fa8">Type</text>
<text x="320" y="559" font-size="12" fill="#e2e4f0">Discrete (i915)</text>
<text x="240" y="581" font-size="12" fill="#8b8fa8">Capacity</text>
<text x="320" y="581" font-size="12" fill="#e2e4f0">2 GPUs</text>
<text x="240" y="603" font-size="12" fill="#8b8fa8">Allocatable</text>
<text x="320" y="603" font-size="12" fill="#e2e4f0">2 GPUs</text>
<!-- Allocation bar -->
<text x="240" y="631" font-size="12" fill="#8b8fa8">Allocation</text>
<text x="640" y="631" font-size="12" fill="#34d399" text-anchor="end">25% (0.5/2)</text>
<rect x="240" y="638" width="380" height="12" rx="6" fill="#2d3148"/>
<rect x="240" y="638" width="95" height="12" rx="6" fill="#34d399"/>
<text x="240" y="669" font-size="12" fill="#8b8fa8">Active Pods: </text>
<text x="316" y="669" font-size="12" fill="#e2e4f0">light-inference-pod</text>
<!-- Node Card 6 (integrated) -->
<rect x="700" y="506" width="460" height="170" rx="8" fill="#1e2130"/>
<rect x="700" y="506" width="460" height="4" rx="2" fill="#60a5fa"/>
<text x="720" y="536" font-size="15" font-weight="600" fill="#ffffff">worker-node-07</text>
<rect x="1030" y="518" width="80" height="22" rx="11" fill="#fbbf2422"/>
<text x="1070" y="534" font-size="12" fill="#fbbf24" text-anchor="middle">NotReady</text>
<text x="720" y="559" font-size="12" fill="#8b8fa8">Type</text>
<text x="800" y="559" font-size="12" fill="#e2e4f0">Integrated</text>
<text x="720" y="581" font-size="12" fill="#8b8fa8">Capacity</text>
<text x="800" y="581" font-size="12" fill="#e2e4f0">1 GPU</text>
<text x="720" y="603" font-size="12" fill="#8b8fa8">Allocatable</text>
<text x="800" y="603" font-size="12" fill="#8b8fa8"></text>
<!-- Allocation bar -->
<text x="720" y="631" font-size="12" fill="#8b8fa8">Allocation</text>
<text x="1120" y="631" font-size="12" fill="#6b7280" text-anchor="end"></text>
<rect x="720" y="638" width="380" height="12" rx="6" fill="#2d3148"/>
<text x="720" y="669" font-size="12" fill="#8b8fa8">Active Pods: </text>
<text x="796" y="669" font-size="12" fill="#6b7280">node unavailable</text>
</svg>

After

Width:  |  Height:  |  Size: 9.0 KiB

+117
View File
@@ -0,0 +1,117 @@
<svg xmlns="http://www.w3.org/2000/svg" width="1200" height="750" viewBox="0 0 1200 750" font-family="Inter, Segoe UI, Arial, sans-serif">
<!-- Background -->
<rect width="1200" height="750" fill="#0f1117"/>
<!-- Top nav bar -->
<rect width="1200" height="48" fill="#1a1d27"/>
<text x="16" y="30" font-size="18" font-weight="700" fill="#ffffff">⚡ Headlamp</text>
<text x="120" y="30" font-size="14" fill="#8b8fa8">Intel GPU</text>
<text x="200" y="30" font-size="14" fill="#8b8fa8">/</text>
<text x="214" y="30" font-size="14" fill="#a78bfa">Metrics</text>
<!-- Sidebar -->
<rect x="0" y="48" width="200" height="702" fill="#13151f"/>
<text x="16" y="113" font-size="13" fill="#8b8fa8">Overview</text>
<text x="16" y="153" font-size="13" fill="#8b8fa8">Device Plugins</text>
<text x="16" y="193" font-size="13" fill="#8b8fa8">GPU Nodes</text>
<text x="16" y="233" font-size="13" fill="#8b8fa8">GPU Pods</text>
<rect x="0" y="250" width="200" height="36" fill="#a78bfa22"/>
<text x="16" y="273" font-size="13" fill="#a78bfa" font-weight="600">Metrics</text>
<!-- Page title -->
<text x="220" y="90" font-size="22" font-weight="700" fill="#ffffff">GPU Metrics</text>
<text x="220" y="112" font-size="13" fill="#8b8fa8">Real-time GPU power draw from node-exporter i915 hwmon (discrete GPU nodes only)</text>
<!-- Time range selector -->
<rect x="980" y="72" width="200" height="30" rx="6" fill="#1e2130"/>
<text x="1000" y="92" font-size="13" fill="#8b8fa8">Last 30 min ▾</text>
<!-- Summary stat cards -->
<rect x="220" y="130" width="230" height="80" rx="8" fill="#1e2130"/>
<text x="240" y="158" font-size="12" fill="#8b8fa8">Peak Power Draw</text>
<text x="240" y="195" font-size="28" font-weight="700" fill="#f87171">186 W</text>
<text x="360" y="195" font-size="12" fill="#8b8fa8">gpu-node-03</text>
<rect x="466" y="130" width="230" height="80" rx="8" fill="#1e2130"/>
<text x="486" y="158" font-size="12" fill="#8b8fa8">Avg Power (cluster)</text>
<text x="486" y="195" font-size="28" font-weight="700" fill="#fb923c">124 W</text>
<text x="606" y="195" font-size="12" fill="#8b8fa8">3 nodes</text>
<rect x="712" y="130" width="230" height="80" rx="8" fill="#1e2130"/>
<text x="732" y="158" font-size="12" fill="#8b8fa8">Avg TDP Utilization</text>
<text x="732" y="195" font-size="28" font-weight="700" fill="#a78bfa">68%</text>
<text x="820" y="195" font-size="12" fill="#8b8fa8">of 250W TDP</text>
<rect x="958" y="130" width="210" height="80" rx="8" fill="#1e2130"/>
<text x="978" y="158" font-size="12" fill="#8b8fa8">Nodes Reporting</text>
<text x="978" y="195" font-size="28" font-weight="700" fill="#34d399">3</text>
<text x="1030" y="195" font-size="12" fill="#8b8fa8">/ 4 discrete</text>
<!-- Main chart: GPU Power Draw over time -->
<rect x="220" y="226" width="948" height="300" rx="8" fill="#1e2130"/>
<text x="240" y="256" font-size="15" font-weight="600" fill="#ffffff">GPU Power Draw (W) — Last 30 Minutes</text>
<!-- Chart area -->
<rect x="260" y="270" width="880" height="230" fill="#13151f" rx="4"/>
<!-- Y axis labels -->
<text x="250" y="498" font-size="11" fill="#6b7280" text-anchor="end">0</text>
<text x="250" y="440" font-size="11" fill="#6b7280" text-anchor="end">50</text>
<text x="250" y="382" font-size="11" fill="#6b7280" text-anchor="end">100</text>
<text x="250" y="325" font-size="11" fill="#6b7280" text-anchor="end">150</text>
<text x="250" y="278" font-size="11" fill="#6b7280" text-anchor="end">200</text>
<!-- Y grid lines -->
<line x1="260" y1="497" x2="1140" y2="497" stroke="#2d3148" stroke-width="1"/>
<line x1="260" y1="439" x2="1140" y2="439" stroke="#2d3148" stroke-width="1"/>
<line x1="260" y1="381" x2="1140" y2="381" stroke="#2d3148" stroke-width="1"/>
<line x1="260" y1="323" x2="1140" y2="323" stroke="#2d3148" stroke-width="1"/>
<line x1="260" y1="275" x2="1140" y2="275" stroke="#2d3148" stroke-width="1"/>
<!-- X axis labels -->
<text x="260" y="515" font-size="11" fill="#6b7280">-30m</text>
<text x="480" y="515" font-size="11" fill="#6b7280">-22m</text>
<text x="700" y="515" font-size="11" fill="#6b7280">-15m</text>
<text x="920" y="515" font-size="11" fill="#6b7280">-7m</text>
<text x="1120" y="515" font-size="11" fill="#6b7280">now</text>
<!-- Line for gpu-node-01 (purple) — ~186W with some variation -->
<polyline points="260,323 315,318 370,310 425,315 480,325 535,320 590,312 645,308 700,315 755,322 810,318 865,310 920,305 975,312 1030,320 1085,315 1140,318" fill="none" stroke="#a78bfa" stroke-width="2.5" stroke-linejoin="round"/>
<!-- Line for gpu-node-03 (orange) — ~124W workload burst then taper -->
<polyline points="260,381 315,370 370,355 425,340 480,330 535,328 590,335 645,340 700,345 755,350 810,355 865,345 920,338 975,340 1030,348 1085,355 1140,350" fill="none" stroke="#fb923c" stroke-width="2.5" stroke-linejoin="round"/>
<!-- Line for gpu-node-02 (blue) — ~80W relatively steady -->
<polyline points="260,429 315,427 370,425 425,430 480,432 535,428 590,426 645,422 700,425 755,428 810,430 865,427 920,423 975,428 1030,430 1085,425 1140,427" fill="none" stroke="#60a5fa" stroke-width="2.5" stroke-linejoin="round"/>
<!-- Legend -->
<line x1="240" y1="553" x2="268" y2="553" stroke="#a78bfa" stroke-width="2.5"/>
<text x="276" y="558" font-size="12" fill="#e2e4f0">gpu-node-01 (i915, 4x GPU, avg 186W)</text>
<line x1="540" y1="553" x2="568" y2="553" stroke="#fb923c" stroke-width="2.5"/>
<text x="576" y="558" font-size="12" fill="#e2e4f0">gpu-node-03 (i915, 8x GPU, avg 124W)</text>
<line x1="860" y1="553" x2="888" y2="553" stroke="#60a5fa" stroke-width="2.5"/>
<text x="896" y="558" font-size="12" fill="#e2e4f0">gpu-node-02 (Xe, 2x GPU, avg 80W)</text>
<!-- TDP bars section -->
<rect x="220" y="540" width="948" height="180" rx="8" fill="#1e2130"/>
<text x="240" y="568" font-size="15" font-weight="600" fill="#ffffff">TDP Utilization — Current</text>
<!-- Node rows -->
<!-- gpu-node-01 -->
<text x="240" y="600" font-size="13" fill="#e2e4f0">gpu-node-01</text>
<text x="440" y="600" font-size="12" fill="#8b8fa8">186W / 250W TDP</text>
<rect x="600" y="588" width="500" height="16" rx="8" fill="#2d3148"/>
<rect x="600" y="588" width="372" height="16" rx="8" fill="#a78bfa"/>
<text x="1110" y="600" font-size="12" fill="#a78bfa">74%</text>
<!-- gpu-node-03 -->
<text x="240" y="634" font-size="13" fill="#e2e4f0">gpu-node-03</text>
<text x="440" y="634" font-size="12" fill="#8b8fa8">124W / 250W TDP</text>
<rect x="600" y="622" width="500" height="16" rx="8" fill="#2d3148"/>
<rect x="600" y="622" width="248" height="16" rx="8" fill="#fb923c"/>
<text x="1110" y="634" font-size="12" fill="#fb923c">50%</text>
<!-- gpu-node-02 -->
<text x="240" y="668" font-size="13" fill="#e2e4f0">gpu-node-02</text>
<text x="440" y="668" font-size="12" fill="#8b8fa8">80W / 150W TDP</text>
<rect x="600" y="656" width="500" height="16" rx="8" fill="#2d3148"/>
<rect x="600" y="656" width="267" height="16" rx="8" fill="#60a5fa"/>
<text x="1110" y="668" font-size="12" fill="#60a5fa">53%</text>
<!-- No data node -->
<text x="240" y="702" font-size="13" fill="#6b7280">gpu-node-04</text>
<text x="440" y="702" font-size="12" fill="#6b7280">No hwmon data — integrated GPU</text>
<text x="1110" y="702" font-size="12" fill="#6b7280">n/a</text>
</svg>

After

Width:  |  Height:  |  Size: 7.3 KiB