wu-sheng opened a new pull request, #69:
URL: https://github.com/apache/skywalking-horizon-ui/pull/69
## Why
Operational tuning — how hard the BFF fans metric queries out to OAP, and
the caps that protect storage — was scattered in two wrong places: **hardcoded
constants** in the query routes, and a **`pipeline` block inside the 3D
dashboard template** (which is published to OAP, editable in the admin UI, and
travels with export/import — none of which fits per-deployment fan-out tuning).
Operators had no single, documented place to tune it, and couldn't tune it
per-instance at all.
This consolidates all of it into one operator-owned, hot-reloaded
`performance` section in `horizon.yaml`, next to the existing
`query.landingServiceCap` / `oap.timeoutMs` knobs.
## What
**New `performance` section** (defaults equal today's built-ins, so it's
optional and behavior-preserving):
- `performance.bulk` — per-route bulk (request) size + concurrency for the
**topology / 3D-map / landing / dashboard** OAP fan-outs.
- `performance.limits` — the **service-map render valve**
(`topologyMaxNodes` 5000 / `topologyMaxEdges` 15000) and per-request **record
caps** (`maxPageSize.{traces,logs,browserLogs}` = 100). Every value clamps to a
hard ceiling (config can lower, never exceed).
**3D pipeline relocation** — the 3D map's metric fan-out moved out of the
OAP-published template into `performance.bulk.infra3d`. The BFF injects it into
the config response, so the UI is unchanged; a stale template still carrying
the old `pipeline` block is **accept-and-ignored** (no breakage on upgrade).
**Unified page-size pickers** — Traces, Logs, and Browser Logs now share a
`20 / 30 / 50 / 100` dropdown. Browser Logs **gains a picker it never had** (it
was a fixed 100); the trace cap drops `200 → 100` to match the dropdown. Each
picker's max equals the server-side cap.
**Memory** — the image sets a default `NODE_OPTIONS=--max-old-space-size`,
with docs on sizing the Node heap against the in-memory source-map budget.
(It's a process flag, not a config field — V8 reads it before `horizon.yaml`
loads.)
**Drift guard** — a new test (`schema.test.ts`) asserts
`configSchema.parse({})` succeeds (every field has a default) **and** that
`horizon.example.yaml` is byte-identical to the schema defaults — so the
example can't silently drift again. (It already had: the rbac roles were
missing `infra-3d:read`; fixed here.)
## Validation
- BFF + UI **type-check**, **lint**, **124 BFF + 113 UI tests** (+the new
drift test), both **builds**, **license-eye** 0 invalid.
- Behavior-preserving by construction (defaults == prior literals) and
enforced by the drift test.
- **Live demo-OAP smoke**: topology renders 6 nodes / 5 calls (fan-out +
caps path) and traces returns through the new `maxPageSize` path — unchanged.
## Stays put (deliberately)
The **alarm page-setup** (pinned layers / default window / overview fetch
cap), and the overview/layer templates — those are *authored, admin-editable*
dashboard content (they have a structured editor + Save to OAP), not
operational tuning, so they correctly remain templates.
--
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]