wu-sheng opened a new pull request, #24: URL: https://github.com/apache/skywalking-horizon-ui/pull/24
## Summary A standalone WebGL view at `/3d/map` that stacks every OAP layer's services as cubes onto configurable **tiers** (apps / service mesh / middleware / infra), with live traffic, alarm beacons, and call relationships drawn between them. Plus an admin config editor and an operator guide. This turns the earlier 3D map PoC into a complete, config-driven feature. ## What's included **View (`/3d/map`, standalone full-screen, verb `infra-3d:read`)** - Config-driven tiers + per-layer color (replaces the hard-coded 3-plane PoC). - Per-cube traffic chips from a staged, chunked MQE fetch; chips share the cube's depth, hide when zoomed out or occluded by an upper tier. - Past-20m alarm beacon — a pulsing red marker on the cube corner; the cube keeps its layer color. - Three edge classes: in-layer calls (cyan + animated packets), cross-layer same-tier calls (orange, arrowed), and selection-gated hierarchy links (gray) showing a selected cube's cross-tier identity. - Per-zone project logo stamped into the tier surface as a baked texture (Istio + Kubernetes use their project marks). - Bottom loading-timeline strip (services → templates → topologies → layout → metrics) with per-stage detail drawers. - Side panel simplified to tiers only (focus + show/hide per tier). **Admin (`/admin/3d-map`, verb `infra-3d:write`)** - Structured config editor over the live OAP layer catalog: global + per-tier layer filters, tier ordering, per-layer color, traffic MQE (topology server/client or single load), edge styling, plus an advanced raw-JSON view. **BFF** - Bundled 3D-map config (4 tiers, 52 layers; traffic MQEs seeded from layer dashboard templates) with a file-backed override store. - `GET`/`POST /api/infra-3d/config` (+ bundled baseline) with strict zod validation; `POST /api/infra-3d/metrics` for batched per-service MQE. - Verbs `infra-3d:read` (all roles) and `infra-3d:write` (operator/admin). **Incidental fix** - Setup-store `ensure()` ran its reconciliation (incl. an unconditional `headerColumns` reassignment) on every call; reading it from a computed produced "Maximum recursive updates exceeded" and froze layer pages. Reconciliation is now once-per-snapshot and `useLandingOrder` reads priority side-effect-free. - `RuleCard.vue` `statusLabel` switched to a keyed record (removes a non-returning computed lint error on the default branch). **Docs** - Operator guide: `docs/operate/infra-3d-map.md` (feature overview + what tiers are + the four bundled tiers), linked in `docs/menu.yml`. ## Test plan - [x] `tsc --noEmit` clean (BFF + UI) - [x] UI unit tests (69) + BFF unit tests (80) pass - [x] `eslint` 0 errors (UI + BFF) - [x] `vite build` succeeds - [x] `license-eye header check` clean (0 invalid) - [x] Validated against the live Apache demo OAP: config GET/POST round-trip, per-service `/api/infra-3d/metrics` returns real RPM values, alarm beacons reflect the 20m alarm feed - [ ] Reviewer: open `/3d/map` and `/admin/3d-map`, confirm tier layout, traffic chips, alarm beacons, and edge rendering -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: [email protected] For queries about this service, please contact Infrastructure at: [email protected]
