# kanoai7/lab-gpu-monitor architecture

> Architecture diagram of the GitHub repository kanoai7/lab-gpu-monitor, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-10-01). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/kanoai7/lab-gpu-monitor
- Repository: https://github.com/kanoai7/lab-gpu-monitor

## Overview

Lab GPU Monitor collects machine and per-GPU metrics through per-host agents, then exposes them to two user-facing clients: a terminal CLI and a central web dashboard. The main web workflow is operator configuration of agents, dashboard polling of their snapshots, and overview/detail pages presenting live metrics and history. The README documents the agent and client roles; sampled frontend files show the dashboard’s API-backed views and components. Backend internals and the CLI were not excerpted, so their finer-grained relationships are limited to documented behavior.

Main entry points: [`monitor_dashboard/frontend/src/api.js`](https://github.com/kanoai7/lab-gpu-monitor/blob/master/monitor_dashboard/frontend/src/api.js) (Dashboard API client), [`monitor_dashboard/frontend/src/router.js`](https://github.com/kanoai7/lab-gpu-monitor/blob/master/monitor_dashboard/frontend/src/router.js) (Page routing), [`monitor_dashboard/frontend/src/views/Host.vue`](https://github.com/kanoai7/lab-gpu-monitor/blob/master/monitor_dashboard/frontend/src/views/Host.vue) (Host detail), [`monitor_dashboard/dashboard.py`](https://github.com/kanoai7/lab-gpu-monitor/blob/master/monitor_dashboard/dashboard.py) (Dashboard server)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_collection["Metric collection"]
  node_agent["Host metrics agent<br/>[agent.py]"]
end

subgraph group_web_backend["Dashboard backend"]
  node_dashboard_server["Dashboard server<br/>[dashboard.py]"]
  node_history_store[("Metric history<br/>[history.py]")]
end

subgraph group_web_ui["Dashboard interface"]
  node_web_app["Web application shell<br/>[App.vue]"]
  node_web_routes["Page routing<br/>[router.js]"]
  node_overview["Cluster overview<br/>[Overview.vue]"]
  node_host_detail["Host detail<br/>[Host.vue]"]
  node_settings["Runtime settings<br/>[Settings.vue]"]
  node_web_api["Dashboard API client<br/>[api.js]"]
  node_host_card["Host summary card<br/>[HostCard.vue]"]
  node_gpu_panel["GPU panel<br/>[GpuPanel.vue]"]
  node_metric_chart["Metric charts<br/>[MetricChart.vue]"]
  node_gpu_processes["GPU process table<br/>[ProcTable.vue]"]
  node_bar_gauge["Metric bar gauge<br/>[BarGauge.vue]"]
  node_gauge["Metric gauge<br/>[Gauge.vue]"]
end

subgraph group_terminal["Terminal client"]
  node_cli["Terminal monitor client<br/>[main.py]"]
end

node_operator(("Lab operator"))

node_operator -->|"operates"| node_cli
node_operator -->|"uses"| node_web_app
node_agent -->|"serves metrics to"| node_dashboard_server
node_cli -->|"polls"| node_agent
node_dashboard_server -->|"polls"| node_agent
node_dashboard_server -->|"uses history"| node_history_store
node_web_app -->|"uses routes"| node_web_routes
node_web_app -->|"loads config through"| node_web_api
node_web_routes -->|"routes to"| node_overview
node_web_routes -->|"routes to"| node_host_detail
node_web_routes -->|"routes to"| node_settings
node_overview -->|"fetches snapshots"| node_web_api
node_overview -->|"renders"| node_host_card
node_host_detail -->|"requests data"| node_web_api
node_host_detail -->|"renders"| node_metric_chart
node_host_detail -->|"renders"| node_gpu_panel
node_host_card -->|"renders"| node_gpu_panel
node_host_card -->|"renders"| node_gauge
node_gpu_panel -->|"renders"| node_gpu_processes
node_gpu_panel -->|"renders"| node_bar_gauge
node_settings -->|"loads and saves"| node_web_api
node_web_api -.->|"HTTP requests"| node_dashboard_server
node_cli -.->|"displays snapshots"| node_agent

click node_agent "https://github.com/kanoai7/lab-gpu-monitor/blob/master/monitor_serve/agent.py"
click node_dashboard_server "https://github.com/kanoai7/lab-gpu-monitor/blob/master/monitor_dashboard/dashboard.py"
click node_history_store "https://github.com/kanoai7/lab-gpu-monitor/blob/master/monitor_dashboard/history.py"
click node_web_app "https://github.com/kanoai7/lab-gpu-monitor/blob/master/monitor_dashboard/frontend/src/App.vue"
click node_web_routes "https://github.com/kanoai7/lab-gpu-monitor/blob/master/monitor_dashboard/frontend/src/router.js"
click node_overview "https://github.com/kanoai7/lab-gpu-monitor/blob/master/monitor_dashboard/frontend/src/views/Overview.vue"
click node_host_detail "https://github.com/kanoai7/lab-gpu-monitor/blob/master/monitor_dashboard/frontend/src/views/Host.vue"
click node_settings "https://github.com/kanoai7/lab-gpu-monitor/blob/master/monitor_dashboard/frontend/src/views/Settings.vue"
click node_web_api "https://github.com/kanoai7/lab-gpu-monitor/blob/master/monitor_dashboard/frontend/src/api.js"
click node_host_card "https://github.com/kanoai7/lab-gpu-monitor/blob/master/monitor_dashboard/frontend/src/components/HostCard.vue"
click node_gpu_panel "https://github.com/kanoai7/lab-gpu-monitor/blob/master/monitor_dashboard/frontend/src/components/GpuPanel.vue"
click node_metric_chart "https://github.com/kanoai7/lab-gpu-monitor/blob/master/monitor_dashboard/frontend/src/components/MetricChart.vue"
click node_gpu_processes "https://github.com/kanoai7/lab-gpu-monitor/blob/master/monitor_dashboard/frontend/src/components/ProcTable.vue"
click node_bar_gauge "https://github.com/kanoai7/lab-gpu-monitor/blob/master/monitor_dashboard/frontend/src/components/BarGauge.vue"
click node_gauge "https://github.com/kanoai7/lab-gpu-monitor/blob/master/monitor_dashboard/frontend/src/components/Gauge.vue"
click node_cli "https://github.com/kanoai7/lab-gpu-monitor/blob/master/monitor_cli_client/main.py"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_agent toneBlue
class node_dashboard_server,node_history_store toneAmber
class node_web_app,node_web_routes,node_overview,node_host_detail,node_settings,node_web_api,node_host_card,node_gpu_panel,node_metric_chart,node_gpu_processes,node_bar_gauge,node_gauge toneMint
class node_cli toneRose
class node_operator toneIndigo
```

## Components

### Metric collection

- [Host metrics agent](https://github.com/kanoai7/lab-gpu-monitor/blob/master/monitor_serve/agent.py): `monitor_serve/agent.py`

### Dashboard backend

- [Dashboard server](https://github.com/kanoai7/lab-gpu-monitor/blob/master/monitor_dashboard/dashboard.py): `monitor_dashboard/dashboard.py`
- [Metric history](https://github.com/kanoai7/lab-gpu-monitor/blob/master/monitor_dashboard/history.py): `monitor_dashboard/history.py`

### Dashboard interface

- [Web application shell](https://github.com/kanoai7/lab-gpu-monitor/blob/master/monitor_dashboard/frontend/src/App.vue): `monitor_dashboard/frontend/src/App.vue`
- [Page routing](https://github.com/kanoai7/lab-gpu-monitor/blob/master/monitor_dashboard/frontend/src/router.js): `monitor_dashboard/frontend/src/router.js`
- [Cluster overview](https://github.com/kanoai7/lab-gpu-monitor/blob/master/monitor_dashboard/frontend/src/views/Overview.vue): `monitor_dashboard/frontend/src/views/Overview.vue`
- [Host detail](https://github.com/kanoai7/lab-gpu-monitor/blob/master/monitor_dashboard/frontend/src/views/Host.vue): `monitor_dashboard/frontend/src/views/Host.vue`
- [Runtime settings](https://github.com/kanoai7/lab-gpu-monitor/blob/master/monitor_dashboard/frontend/src/views/Settings.vue): `monitor_dashboard/frontend/src/views/Settings.vue`
- [Dashboard API client](https://github.com/kanoai7/lab-gpu-monitor/blob/master/monitor_dashboard/frontend/src/api.js): `monitor_dashboard/frontend/src/api.js`
- [Host summary card](https://github.com/kanoai7/lab-gpu-monitor/blob/master/monitor_dashboard/frontend/src/components/HostCard.vue): `monitor_dashboard/frontend/src/components/HostCard.vue`
- [GPU panel](https://github.com/kanoai7/lab-gpu-monitor/blob/master/monitor_dashboard/frontend/src/components/GpuPanel.vue): `monitor_dashboard/frontend/src/components/GpuPanel.vue`
- [Metric charts](https://github.com/kanoai7/lab-gpu-monitor/blob/master/monitor_dashboard/frontend/src/components/MetricChart.vue): `monitor_dashboard/frontend/src/components/MetricChart.vue`
- [GPU process table](https://github.com/kanoai7/lab-gpu-monitor/blob/master/monitor_dashboard/frontend/src/components/ProcTable.vue): `monitor_dashboard/frontend/src/components/ProcTable.vue`
- [Metric bar gauge](https://github.com/kanoai7/lab-gpu-monitor/blob/master/monitor_dashboard/frontend/src/components/BarGauge.vue): `monitor_dashboard/frontend/src/components/BarGauge.vue`
- [Metric gauge](https://github.com/kanoai7/lab-gpu-monitor/blob/master/monitor_dashboard/frontend/src/components/Gauge.vue): `monitor_dashboard/frontend/src/components/Gauge.vue`

### Terminal client

- [Terminal monitor client](https://github.com/kanoai7/lab-gpu-monitor/blob/master/monitor_cli_client/main.py): `monitor_cli_client/main.py`

### Other components

- **Lab operator**

## Connections

- Lab operator → Terminal monitor client: operates (evidence: `README.md`)
- Lab operator → Web application shell: uses (evidence: `README.md`)
- Host metrics agent → Dashboard server: serves metrics to (evidence: `README.md`)
- Terminal monitor client → Host metrics agent: polls (evidence: `README.md`)
- Dashboard server → Host metrics agent: polls (evidence: `README.md`)
- Dashboard server → Metric history: uses history (evidence: `monitor_dashboard/dashboard.py`)
- Web application shell → Page routing: uses routes (evidence: `monitor_dashboard/frontend/src/main.js`)
- Web application shell → Dashboard API client: loads config through (evidence: `monitor_dashboard/frontend/src/App.vue`)
- Page routing → Cluster overview: routes to (evidence: `monitor_dashboard/frontend/src/router.js`)
- Page routing → Host detail: routes to (evidence: `monitor_dashboard/frontend/src/router.js`)
- Page routing → Runtime settings: routes to (evidence: `monitor_dashboard/frontend/src/router.js`)
- Cluster overview → Dashboard API client: fetches snapshots (evidence: `monitor_dashboard/frontend/src/views/Overview.vue`)
- Cluster overview → Host summary card: renders (evidence: `monitor_dashboard/frontend/src/views/Overview.vue`)
- Host detail → Dashboard API client: requests data (evidence: `monitor_dashboard/frontend/src/views/Host.vue`)
- Host detail → Metric charts: renders (evidence: `monitor_dashboard/frontend/src/views/Host.vue`)
- Host detail → GPU panel: renders (evidence: `monitor_dashboard/frontend/src/views/Host.vue`)
- Host summary card → GPU panel: renders (evidence: `monitor_dashboard/frontend/src/components/HostCard.vue`)
- Host summary card → Metric gauge: renders (evidence: `monitor_dashboard/frontend/src/components/HostCard.vue`)
- GPU panel → GPU process table: renders (evidence: `monitor_dashboard/frontend/src/components/GpuPanel.vue`)
- GPU panel → Metric bar gauge: renders (evidence: `monitor_dashboard/frontend/src/components/GpuPanel.vue`)
- Runtime settings → Dashboard API client: loads and saves (evidence: `monitor_dashboard/frontend/src/views/Settings.vue`)
- Dashboard API client → Dashboard server: HTTP requests
- Terminal monitor client → Host metrics agent: displays snapshots
