This is an automated email from the ASF dual-hosted git repository. wu-sheng pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/skywalking-horizon-ui.git
commit 34a776bc990fefdbd290901a7a98d15b05f53bc4 Author: Wu Sheng <[email protected]> AuthorDate: Tue May 12 10:33:33 2026 +0800 ui: operate section is vantage parity, drop audit log viewer --- apps/ui/src/components/shell/AppSidebar.vue | 12 ++++++++---- apps/ui/src/router/index.ts | 17 ++++++++++------- 2 files changed, 18 insertions(+), 11 deletions(-) diff --git a/apps/ui/src/components/shell/AppSidebar.vue b/apps/ui/src/components/shell/AppSidebar.vue index 948e983..982db3e 100644 --- a/apps/ui/src/components/shell/AppSidebar.vue +++ b/apps/ui/src/components/shell/AppSidebar.vue @@ -43,16 +43,20 @@ interface NavRow { badge?: { text: string; kind?: 'ok' | 'warn' | 'err' | 'info' }; } -// Cross-layer operations stay global. +// Operate = OAP runtime operations (vantage-parity) + alarms. +// Trace search is per-layer (lives under /layer/:key/traces) so it's NOT here. const operate: NavRow[] = [ { icon: 'alert', label: 'Alarms', to: '/operate/alarms', badge: { text: '7', kind: 'err' } }, - { icon: 'trace', label: 'Trace search', to: '/operate/traces' }, + { icon: 'svc', label: 'Cluster status', to: '/operate/cluster' }, + { icon: 'set', label: 'DSL catalog', to: '/operate/dsl' }, + { icon: 'metric', label: 'Inspect', to: '/operate/inspect' }, + { icon: 'flame', label: 'Live debug', to: '/operate/live-debug' }, + { icon: 'trace', label: 'OAL viewer', to: '/operate/oal' }, + { icon: 'download', label: 'Dump', to: '/operate/dump' }, ]; const admin: NavRow[] = [ - { icon: 'svc', label: 'Cluster status', to: '/cluster' }, { icon: 'user', label: 'Users', to: '/admin/users' }, { icon: 'set', label: 'Roles', to: '/admin/roles' }, - { icon: 'log', label: 'Audit log', to: '/admin/audit' }, ]; </script> diff --git a/apps/ui/src/router/index.ts b/apps/ui/src/router/index.ts index 41c949a..d297819 100644 --- a/apps/ui/src/router/index.ts +++ b/apps/ui/src/router/index.ts @@ -85,15 +85,18 @@ function layerSubRoutes(): RouteRecordRaw[] { const shellRoutes: RouteRecordRaw[] = [ { path: '', name: 'home', component: () => import('@/views/landing/LandingView.vue') }, ...layerSubRoutes(), - // Cross-layer operate - { path: 'operate/alarms', component: placeholder, props: { title: 'Alarms', phase: 'Phase 5', note: 'Read-only; recovery is backend-auto.' } }, - { path: 'operate/traces', component: placeholder, props: { title: 'Trace search', phase: 'Phase 5', note: 'Cross-layer trace search. Per-layer trace explorers live under /layer/:key/traces.' } }, - { path: 'operate/traces/:traceId', component: placeholder, props: (r) => ({ title: `Trace · ${r.params.traceId}`, phase: 'Phase 5' }) }, - // Admin - { path: 'cluster', component: placeholder, props: { title: 'Cluster status', phase: 'Phase 6 / 7', note: 'Module activity matrix · storage health · receiver activity · effective config tree · TTL grid.' } }, + // Operate (vantage-parity) — OAP runtime operations + { path: 'operate/alarms', component: placeholder, props: { title: 'Alarms', phase: 'Phase 5', note: 'Read-only; recovery is backend-auto. Live debug card via admin REST.' } }, + { path: 'operate/cluster', component: placeholder, props: { title: 'Cluster status', phase: 'Phase 6 / 7', note: 'Module activity matrix · storage health · receiver activity · effective config tree · TTL grid.' } }, + { path: 'operate/dsl', component: placeholder, props: { title: 'DSL catalog', phase: 'Phase 6', note: 'MAL / LAL rule catalog + Monaco editor with diff and revert-to-bundled.' } }, + { path: 'operate/dsl/:catalog/:name', component: placeholder, props: (r) => ({ title: `Edit · ${r.params.name}`, phase: 'Phase 6' }) }, + { path: 'operate/inspect', component: placeholder, props: { title: 'Inspect', phase: 'Phase 6', note: 'OAP metric catalog browse + MQE ad-hoc charts with rule attribution.' } }, + { path: 'operate/live-debug/:tab(mal|lal|oal)?', component: placeholder, props: (r) => ({ title: `Live debug · ${r.params.tab ?? 'mal'}`, phase: 'Phase 6' }) }, + { path: 'operate/oal', component: placeholder, props: { title: 'OAL viewer', phase: 'Phase 6', note: 'Read-only OAL files with line-numbered syntax highlighting.' } }, + { path: 'operate/dump', component: placeholder, props: { title: 'Dump', phase: 'Phase 6', note: 'Stream OAP runtime-rule dump as tar.gz.' } }, + // Admin (users + roles only; no audit log UI — BFF JSONL is server-side forensic only) { path: 'admin/users', component: placeholder, props: { title: 'Users', phase: 'Phase 7' } }, { path: 'admin/roles', component: placeholder, props: { title: 'Roles & permissions', phase: 'Phase 7' } }, - { path: 'admin/audit', component: placeholder, props: { title: 'Audit log', phase: 'Phase 7' } }, ]; const router = createRouter({
