wu-sheng opened a new pull request, #17:
URL: https://github.com/apache/skywalking-horizon-ui/pull/17
## Summary
Product-readiness pass for Horizon UI. The pillars below describe the
operator-visible result; full per-bullet detail is in
[CHANGELOG.md](CHANGELOG.md) under `0.6.0`.
- **Eight-locale parity.** Every admin and operate page is now fully
translated (Roles, Users, Auth status, Alert page setup, Global defaults,
Alerting rules, DSL catalog / editor / dump, OAL catalog, Live debugger + MAL /
LAL / OAL, Capture history, Metrics inspect, OAP config, TTL, Alarms, shared
modals). Split-sentence ledes that rendered as `English | one localized word |
English` mid-sentence converted to single `<i18n-t keypath>` units with named
slots. Each non-English catalog received AI-assisted seed translations per
CLAUDE.md (IT terms / OAP enums / catalog slugs / status enums stay English;
placeholders preserved verbatim).
- **Inter + JetBrains Mono self-hosted** via `@fontsource-variable`. Google
Fonts CDN dependency removed — air-gapped / firewalled deployments render the
intended typography. New typography tokens (`--sw-fs-*`, `--sw-fw-*`,
`--sw-lh-*`, `--sw-ls-*`) + `.sw-uplabel` / `.sw-kicker` utility classes give
every page the same vocabulary.
- **OAP-local timestamps across every query route.** Lifted
`getServerOffsetMinutes` from the alarms route into shared `util/window.ts`;
every dashboard / landing / topology / endpoint / instance / eBPF / traces /
logs / trace-tag query now formats `Duration.start` / `end` in OAP-server local
time. Wrong-window data on non-UTC OAP installs fixed. Traces + logs
additionally query at SECOND step (records, not metric buckets — verified via
`DurationUtils.MAX_TIME_RANGE` source cross-reference).
- **Performance fixes.** Landing chunks the N×M MQE fragment batch at 6
services per round-trip + `Promise.all` (was 250 fragments tripping OAP's
complexity ceiling). `NativeTraceWaterfall` rows virtualized via
`content-visibility` — 5000-span traces no longer freeze the main thread.
Auto-refresh ticker pauses on `document.visibilitychange` and resumes with one
immediate tick on return.
- **RBAC + input-validation hardening.** `/api/health` no longer leaks
`sessions.size()`; `pageSize` capped server-side on trace (200) / log (100) /
Zipkin paths; async-profiler + pprof + eBPF + network-profiling task-create
bodies sanitized with duration / instance-list / payload-size caps.
- **Diff modal console-error fixed.** `MonacoEnvironment.getWorker` now
dispatches by `label` and registers the JSON worker. Stops the `Missing
requestHandler or method: resetSchema` errors logged whenever the admin "Check
diff & push" modal opened.
- **DSL / OAL catalog renames** (`Catalog · otel-rules` → `Metrics Analysis
Language - OpenTelemetry Rules`; `… - Telegraf Rules` / `… - Log MAL Rules`;
LAL → `Log Analysis Language`; OAL browse → `Observability Analysis Language`).
New `catalog-labels.ts` helper.
- **Admin editor opens REMOTE on diverged rows** (Layer Dashboards +
Overview Templates). Previously seeded from bundled — so operators were editing
a copy that silently disagreed with what the live menu rendered. Priority is
now local → remote (diverged / remote-only) → bundled. Source pill reads `from
local / from remote / from bundled` consistently.
- **RuleCard arrow stays glued to the rule name.** Short names like
`default` / `mesh-dp` / `vm` no longer float mid-card with a gap from the ▶ run
arrow.
- **Sync-status counters ignore translation rows.** Per-locale overlay rows
on OAP no longer inflate the `remote-only` / `diverged` counts on the Overview
Templates and Layer Dashboards admin banners.
- **`demo.skywalking.apache.org` removed** from CLAUDE.md + `topology.ts`
comment per request (skills exempted; CHANGELOG historical entry preserved as
immutable record).
## Test plan
- [x] `pnpm --filter ui exec vue-tsc --noEmit` — clean.
- [x] `pnpm --filter bff exec tsc --noEmit` — clean.
- [x] `pnpm --filter bff test:unit` — 80 / 80 pass.
- [x] `license-eye -c .licenserc.yaml header check` — 904 files, 0 invalid
(new `catalog-labels.ts` carries the ASF header).
- [ ] Smoke against a non-UTC OAP — confirm dashboards / topology / traces /
logs render the correct window.
- [ ] Locale switch from English to each of zh-CN / ja / ko / es / pt / de /
fr on Config, Overview Templates, Layer Dashboards, Alert page setup — confirm
slot interpolation works (no literal `{endpoint}` / `{mask}` placeholders).
- [ ] Open the Check diff & push modal on Layer Dashboards in production
build — confirm no Monaco console error.
- [ ] Open a 5000-span trace on the Traces tab — confirm it opens
responsively.
--
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]