Dashboard Modules¶
The dashboard has 11 modules, reachable from the sidebar. This page describes
what each one does, the data it shows, and the actions it provides. Role gating
follows the two-tier model: read views are open to dashboard-viewer, write and
exec actions require dashboard-admin. See security/iam.md
for the per-route matrix.
See Dashboard Overview for architecture and access details.
Overview¶
Area: Cluster
The landing view. Cluster-wide status at a glance.
- Stat cards: total pods, running, pending, failed, average CPU, average memory
- CPU and memory sparklines (15-minute trend)
- Node cards with status and resource usage
- Network Function status cards; selecting one opens its detail in the 5G Core module
Read-only.
Kubernetes¶
Area: Cluster
Raw Kubernetes resource browser, namespace-scoped.
- Five tabs: Namespaces, Nodes, Storage, Services, Events
- Namespace filter on the Storage, Services, and Events tabs
- Tables: namespace phase and labels; node roles, taints, kubelet version; PVCs; Services with ports and selectors; recent Events
- Manual refresh plus auto-refresh every 15 seconds
Read-only.
5G Core¶
Area: 5G
Per-NF view of the Open5GS core, grouped into Control Plane, User Plane, Data, and Other.
- NF cards with phase, restart count, and node placement; expandable for detail
- AMF CNI alert banner with a "Manage" action to scale the AMF controllers (repair path for the CNI/replicaset issue)
- "Check updates" compares deployed image tags against a version manifest
Admin actions: restart an NF deployment, scale the AMF controller, trigger a streamed NF image update.
Topology¶
Area: Network
Visual map of the running system.
- Two tabs: Logical (NFs, interfaces, NADs, live traffic) and Infrastructure (cluster nodes)
- Interface and NetworkAttachmentDefinition metadata
- Live traffic indicator driven by a WebSocket stream
Read-only.
RAN¶
Area: 5G
RAN attachment control, with a tab per mode.
- "Physical RAN" tab: detect host bridge interfaces, create
br-ranand patch it intobr-n2/br-n3, patch the AMFn2phyannotation, and show the resulting OVS and annotation state; generates thePHYSICAL_RAN_BRIDGE=<nic> vagrant reload workercommand - gNB Management Console: expose the physical gNB/femtocell web UI at
kelt-gnb.<base>by entering its management address (IP:port); KELT registers it as an external endpoint reached via the dynamic apps route, no deploy-time change. Behind the front-door perimeter plus the appliance login - "UERANSIM" tab: simulated RAN controls
Admin actions: bridge setup and RAN configuration changes. See Physical RAN Integration and RAN Modes.
Subscribers¶
Area: 5G
CRUD for Open5GS subscriber records in MongoDB.
- Expandable list by IMSI, with slice and session detail (SST, SD, APN, QCI, AMBR)
- Subscriber form: IMSI, K, OP/OPc, AMF, aggregate AMBR, default slice
- Import from JSON, and "Initialize from playbook" to reset to the default subscriber set (phase 5 import)
Admin actions: create, edit, delete, import, initialize.
UE Monitor¶
Area: 5G
Live view of registered UEs and RAN activity.
- Summary cards: connected gNBs, RAN UEs, active sessions, registered subscribers
- Registration counters over a selectable window (1m to 6h), with auth-reject context
- gNB table (id, PLMN, SCTP peer, UE count) and active UE table with per-IMSI nickname and icon personalization
- Event feed (registration, session, attach, detach, errors) with expandable cause and debug guidance
- Connectivity tests (ping, iperf3) from a selected UERANSIM pod
Admin actions: run ping or iperf3, edit UE personalization. UE session data comes from a native Open5GS endpoint.
Diagnostics¶
Area: Network
Connectivity and traffic inspection.
- "Network Health" tab: per-interface health (N2, N3, N4, N6c), latency, live PPS and throughput, on-demand in-pod probes, and an animated data-path diagram driven by OVS counter deltas
- "Packet Sniffer" tab: live packet capture
Admin actions: run health checks and packet captures.
Metrics¶
Area: Cluster
Resource metrics from Prometheus, with a Nodes tab and an NFs tab.
- Nodes: per-node CPU, memory, disk cards plus CPU and memory history charts
- NFs: per-NF CPU (millicores) and memory (MB) bars plus a CPU trend chart
- Range selector: 15m, 30m, 1h, 6h, 24h
Read-only. A "Grafana (advanced)" link in the sidebar opens the full Grafana stack.
Northbound¶
Area: Positioning / CAMARA
Service-management console for the northbound positioning stack. Read views are
open to dashboard-viewer; all write controls require dashboard-admin.
- Services: inventory of the camara/positioning/mec deployments (image, ready replicas, pod phases). Each service offers a guided Configure action (admin)
- Guided setup (per service): reads the service's own
/contractand walks the operator through its fields in order, required then recommended then optional, each with description and example. Apply routes every value by the contractsensitiveflag (Secret for sensitive, ConfigMap otherwise, both via envFrom) and rolls the deployment. A service that exposes no contract degrades to a read-only notice. Sensitive current values are never shown, only set/unset - Adapter registry: the live registry read from the engine (
GET /adapters), showing each adapter's kind,registered_via, last-seen, and derived state (live / unreachable / stale). Adapters self-register; admins can force-remove a stale entry. No manual name+URL registration - Deploy adapter from image: pin an
image:tag, port, optionalkind, env vars (secret-marked vars go into a Secret), optionalimagePullSecret; the backend creates the Deployment + ClusterIP Service and injects the self-registration env so the adapter announces itself to the engine. The catalog separates a singleton source (wifi-positioning, deployed at most once) from the genericrest-adapter, a per-vendor template instantiated once per vendor (name it after the vendor, point it at the vendor API via env). Gated by the backendallow_workload_createsetting on top of admin. - Fusion config: edit
FUSION_STRATEGY/FUSION_COMPARE/DEVICE_MAP - Managed image rollout: retarget gateway / engine / demo to a new image
- Adapter contract: the
Measurementschema, a Python adapter skeleton, anenv.contract.yamltemplate, and links to the upstream5g-northbounddocs
See architecture/positioning-adapters.md.
Edge apps¶
Area: Services hub โ Edge apps
Console for operator-deployed application pods (phase 12). Reached from the
Services hub. Read views are open to dashboard-viewer; deploy/delete require
dashboard-admin plus the backend allow_workload_create gate.
- Deployed apps: name, image, ready replicas, the public link (
kelt-<name>.<base>) for exposed apps, and an n6m badge for MEC-attached apps. Admins can delete an app, or switch it to another pushed tag from a date-ordered version picker; an "update available" hint appears when the registry holds a newer image for the tag - Deploy from image: a registry image (
<host>/name:tag), port, replicas, env vars (secret-marked go into a Secret), optionalimagePullSecret, an expose toggle, and an attach to MEC network (n6m) toggle (optional fixed IP + extra UDP ingest ports) so UEs reach the app over the 5G user plane. The backend creates a worker-pinned Deployment and, when exposed, a port-80 Service the front-door reaches atkelt-<name>.<base> - Starter kit: admins download a zip (README +
.env.example+deploy.sh, prefilled with the registry host) to hand to an app developer
The image must be pushed to the in-cluster local registry first. See architecture/edge-apps.md.
IAM¶
Area: Settings โ Identity & Access ยท admin only
A static reference for the identity model. No write actions; realm changes happen in the Keycloak console.
- Realm info: name, issuer, current user and roles
- Role matrix:
dashboard-admin,dashboard-viewer,camara-location-read, with abilities and restrictions - Seed users (phase 08) and OIDC clients (dashboard, positioning-demo, camara-gateway, dashboard-readonly)
- Links to the Keycloak realm and master admin consoles; M2M
client_credentialscurl snippets are shown to admins only
See security/iam.md for the full role matrix.
Storage¶
Area: Settings โ Storage
Disk state for the worker node, and the actions that reclaim space.
The page leads with a breakdown rather than a percentage, because the intuitive culprit is usually the wrong one: nearly all of a node's disk is extracted container image layers, while the in-cluster registry (the thing an operator tends to blame) holds a fraction of that. Each consumer is listed separately, with the registry called out as a subset of the volumes so the relative size is visible, and persistent volumes broken down per claim.
Sizes come from walking the filesystem, so they are measured on request and cached rather than polled. The filesystem totals are always live.
Reclaim actions, in the order they appear (most effective first):
| Action | Frees | Notes |
|---|---|---|
| Prune unused images | GB | Removes image layers no container references |
| Vacuum journals | MB to GB | Trims systemd logs to the cap phase 01 configures |
| Registry garbage collect | MB | Unreferenced blobs; offers a dry run first |
Each action shows what it would free before it is run, and is disabled when the answer is nothing, so no button is a blind click. Those figures are estimates (shared image layers are counted once per image); the amount actually freed is measured from the filesystem after the action and reported back.
Reading is open to dashboard-viewer; every action requires dashboard-admin
and an explicit confirmation. See api-reference.md for the
endpoints and ../security/iam.md for the role matrix.
Sidebar: Cluster Clock & Time Sync¶
Area: Infrastructure visibility
The sidebar footer includes a live clock and a time synchronization monitor.
Features¶
Live clock:
- Displays current time in the user's local timezone (e.g. 01:32:05 CET)
- Synced to the backend server time (corrected for browser-server drift via the /health endpoint, polled every 5 seconds)
- Starts ticking immediately on page load using the browser clock, then silently corrects when the first server response arrives
Time Sync popover (click the clock to open): - Shows per-VM time readings for all testbed VMs (ansible, master, worker, edge) - Times tick forward live in the browser - Offset column shows drift relative to the ansible VM (reference clock) - Color-coded: green (< 500ms), amber (500ms-2s), red (> 2s) - Max drift summary and IN SYNC / DRIFT DETECTED badge - Auto-refreshes every 30 seconds while open
Automatic drift correction:
- When the popover detects drift (> 1 second), it automatically triggers chronyc makestep on all VMs via POST /api/v1/time/force-sync
- Auto-correction fires once per popover open to prevent loops
- A manual "Force Sync" button also appears when drift is detected, for on-demand correction
- The endpoint SSHs to each VM, runs the sync command, and returns updated time readings
What you need¶
- SSH access from ansible VM to all nodes (for time reads and force-sync)
chronyinstalled on all VMs (deployed by Phase 1)sudoaccess forchronycon remote nodes (configured by Phase 1)
Planned / Stubbed¶
The following endpoints are stubbed for future modules:
| Endpoint | Planned purpose |
|---|---|
POST /api/v1/experiments/run |
Run automated test scenarios (E2E, performance) |
POST /api/v1/snapshot/create |
Create a point-in-time snapshot of the testbed state |
Related Documentation¶
- Dashboard Overview: architecture, access, security, deployment
- API Reference: full endpoint listing
- RAN Modes: switching between physical and simulated RAN
- Physical RAN Integration: full physical RAN setup guide