@acorex-platform/module-system-insight-client 0.0.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/acorex-platform-module-system-insight-client-contracts.mjs +293 -0
- package/fesm2022/acorex-platform-module-system-insight-client-contracts.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-system-insight-client-index-D-Sy2f4K.mjs +708 -0
- package/fesm2022/acorex-platform-module-system-insight-client-index-D-Sy2f4K.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-system-insight-client-open-trace-timeline.command-DPbr-AYZ.mjs +50 -0
- package/fesm2022/acorex-platform-module-system-insight-client-open-trace-timeline.command-DPbr-AYZ.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-system-insight-client.mjs +366 -0
- package/fesm2022/acorex-platform-module-system-insight-client.mjs.map +1 -0
- package/package.json +28 -0
- package/types/acorex-platform-module-system-insight-client-contracts.d.ts +637 -0
- package/types/acorex-platform-module-system-insight-client.d.ts +28 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"acorex-platform-module-system-insight-client-index-D-Sy2f4K.mjs","sources":["../../../../libs/modules/system-insight/client/src/lib/features/traces/trace-timeline-page-component.provider.ts","../../../../libs/modules/system-insight/client/src/lib/features/traces/trace-timeline-page.component.ts","../../../../libs/modules/system-insight/client/src/lib/features/traces/trace-flow-diagram.utils.ts","../../../../libs/modules/system-insight/client/src/lib/features/traces/trace-flow-display.util.ts","../../../../libs/modules/system-insight/client/src/lib/features/traces/trace-flow-page.component.ts","../../../../libs/modules/system-insight/client/src/lib/features/traces/trace-flow-page.component.html"],"sourcesContent":["import { AXPPageComponentDefinition, AXPPageComponentProvider } from '@acorex-platform/framework-client/layout/components';\r\nimport {\r\n TRACE_FLOW_PAGE_COMPONENT_KEY,\r\n TRACE_TIMELINE_PAGE_COMPONENT_KEY,\r\n} from '@acorex-platform/module-system-insight-contracts';\r\nimport { Injectable } from '@angular/core';\r\n\r\n//#region ---- Trace page providers ----\r\n\r\n@Injectable()\r\nexport class AXMTraceTimelinePageComponentProvider implements AXPPageComponentProvider {\r\n async components(): Promise<AXPPageComponentDefinition[]> {\r\n return [\r\n {\r\n key: TRACE_TIMELINE_PAGE_COMPONENT_KEY,\r\n loader: () =>\r\n import('./trace-timeline-page.component').then((m) => m.AXMTraceTimelinePageComponent),\r\n },\r\n {\r\n key: TRACE_FLOW_PAGE_COMPONENT_KEY,\r\n loader: () => import('./trace-flow-page.component').then((m) => m.AXMTraceFlowPageComponent),\r\n },\r\n ];\r\n }\r\n}\r\n\r\n//#endregion\r\n","import { convertArrayToDataSource } from '@acorex/cdk/common';\nimport { AXBadgeModule } from '@acorex/components/badge';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXDataTableModule } from '@acorex/components/data-table';\nimport { AXLoadingModule } from '@acorex/components/loading';\nimport { AXProgressBarModule } from '@acorex/components/progress-bar';\nimport { AXTranslationModule, AXTranslationService } from '@acorex/core/translation';\nimport {\n AXPPageLayoutBase,\n AXPPageLayoutBaseComponent,\n} from '@acorex-platform/framework-client/layout/views';\nimport { AXPQueryExecutor } from '@acorex-platform/framework-client/runtime';\nimport { runtimeQueryPayloadData } from '@acorex-platform/framework-shared/core';\nimport type { TraceSpanDto, TraceTimelineDto } from '@acorex-platform/module-system-insight-contracts';\nimport { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n inject,\n input,\n signal,\n} from '@angular/core';\n\n//#region ---- Types ----\n\ntype TimelineSpanRow = TraceSpanDto & {\n offsetPercent: number;\n widthPercent: number;\n durationShare: number;\n};\n\n//#endregion\n\n/**\n * TraceEntry detail tab — same hosting pattern as workflow Activities / RuleSet Simulate.\n * Chrome comes from entity details; content uses ACOREX controls only.\n */\n@Component({\n selector: 'axm-trace-timeline-page',\n standalone: true,\n imports: [\n CommonModule,\n AXBadgeModule,\n AXButtonModule,\n AXDataTableModule,\n AXLoadingModule,\n AXProgressBarModule,\n AXTranslationModule,\n ],\n template: `\n <div class=\"axm-trace-timeline flex flex-col gap-4 p-4 w-full min-h-0\">\n @if (loading()) {\n <div class=\"flex justify-center py-10\">\n <ax-loading />\n </div>\n } @else if (timeline(); as data) {\n <div class=\"flex flex-wrap items-center gap-2\">\n <ax-badge [text]=\"spanCountBadge()\" color=\"primary\" size=\"sm\"></ax-badge>\n @for (service of data.services; track service) {\n <ax-badge [text]=\"service\" color=\"secondary\" size=\"sm\"></ax-badge>\n }\n <span class=\"text-sm text-muted ms-auto\">\n {{ '@system-insight:pages.trace-timeline.duration' | translate | async }}:\n {{ data.duration }} ms\n </span>\n <ax-button\n look=\"outline\"\n color=\"primary\"\n [text]=\"('@system-insight:pages.trace-timeline.view-logs' | translate | async) || ''\"\n (onClick)=\"goToRelatedLogs()\"\n ></ax-button>\n </div>\n\n <ax-data-table\n class=\"w-full border border-lightest rounded-md overflow-hidden\"\n [paging]=\"false\"\n [dataSource]=\"dataSource()\"\n >\n <ax-text-column\n dataField=\"operationName\"\n [caption]=\"'@system-insight:fields.operation' | translate | async\"\n [width]=\"'200px'\"\n [allowResizing]=\"true\"\n ></ax-text-column>\n <ax-text-column\n dataField=\"serviceName\"\n [caption]=\"'@system-insight:fields.service-name' | translate | async\"\n [width]=\"'140px'\"\n [allowResizing]=\"true\"\n ></ax-text-column>\n <ax-text-column\n dataField=\"status\"\n [caption]=\"'@system-insight:fields.status' | translate | async\"\n [width]=\"'100px'\"\n [cellTemplate]=\"statusTpl\"\n [allowResizing]=\"true\"\n ></ax-text-column>\n <ax-text-column\n dataField=\"duration\"\n [caption]=\"'@system-insight:fields.duration' | translate | async\"\n [width]=\"'110px'\"\n [cellTemplate]=\"durationTpl\"\n [allowResizing]=\"true\"\n ></ax-text-column>\n <ax-text-column\n dataField=\"durationShare\"\n [caption]=\"'@system-insight:pages.trace-timeline.timeline' | translate | async\"\n [width]=\"'280px'\"\n [cellTemplate]=\"timelineTpl\"\n [allowResizing]=\"true\"\n ></ax-text-column>\n <ax-text-column\n dataField=\"spanId\"\n [caption]=\"'@system-insight:fields.span-id' | translate | async\"\n [width]=\"'180px'\"\n [allowResizing]=\"true\"\n ></ax-text-column>\n </ax-data-table>\n } @else {\n <p class=\"text-sm text-muted p-2\">\n {{ '@system-insight:pages.trace-timeline.not-found' | translate | async }}\n </p>\n }\n </div>\n\n <ng-template #statusTpl let-item>\n <ax-badge\n [text]=\"item.data?.status || 'ok'\"\n [color]=\"item.data?.status === 'error' ? 'danger' : 'success'\"\n size=\"sm\"\n ></ax-badge>\n </ng-template>\n\n <ng-template #durationTpl let-item>{{ item.data?.duration ?? 0 }} ms</ng-template>\n\n <ng-template #timelineTpl let-item>\n <div class=\"flex w-full items-center gap-0 py-1\">\n <div class=\"shrink-0\" [style.width.%]=\"item.data?.offsetPercent ?? 0\"></div>\n <div class=\"min-w-0\" [style.width.%]=\"item.data?.widthPercent ?? 3\">\n <ax-progress-bar\n [progress]=\"100\"\n [color]=\"item.data?.status === 'error' ? 'danger' : 'primary'\"\n [style.height.px]=\"10\"\n ></ax-progress-bar>\n </div>\n </div>\n </ng-template>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: AXPPageLayoutBase,\n useExisting: AXMTraceTimelinePageComponent,\n },\n ],\n host: { class: 'axm-trace-timeline-page block w-full min-h-0' },\n})\nexport class AXMTraceTimelinePageComponent extends AXPPageLayoutBaseComponent {\n private readonly queryExecutor = inject(AXPQueryExecutor);\n private readonly translationService = inject(AXTranslationService);\n\n /** Entity record from TraceEntry detail host. */\n rootContext = input<Record<string, unknown>>();\n pageConfig = input<Record<string, unknown>>();\n\n readonly loading = signal(true);\n readonly timeline = signal<TraceTimelineDto | null>(null);\n readonly spanRows = signal<TimelineSpanRow[]>([]);\n readonly spansLabel = signal('Spans');\n\n readonly spanCountBadge = computed(() => `${this.spanRows().length} ${this.spansLabel()}`);\n\n readonly dataSource = signal(convertArrayToDataSource<TimelineSpanRow>([], { key: 'id', pageSize: 100 }));\n\n readonly traceId = computed(() => {\n const ctx = this.rootContext() ?? {};\n const fromTraceId = typeof ctx['traceId'] === 'string' ? ctx['traceId'].trim() : '';\n if (fromTraceId) {\n return fromTraceId;\n }\n const fromId = typeof ctx['id'] === 'string' ? ctx['id'].trim() : '';\n return fromId;\n });\n\n #loadEffect = effect(() => {\n const id = this.traceId();\n void this.loadTimeline(id);\n });\n\n constructor() {\n super();\n void this.translationService\n .translateAsync('@system-insight:pages.trace-timeline.spans')\n .then((label) => this.spansLabel.set(label));\n }\n\n override async getPageTitle(): Promise<string> {\n return this.translationService.translateAsync('@system-insight:pages.trace-timeline.title');\n }\n\n goToRelatedLogs(): void {\n const traceId = this.timeline()?.traceId ?? this.traceId();\n if (!traceId) {\n return;\n }\n const app = this.sessionService.application?.name;\n if (!app) {\n return;\n }\n void this.router.navigate([`/${app}/m/SystemInsight/e/LogEntry/list`], {\n queryParams: { traceId },\n });\n }\n\n private async loadTimeline(traceId: string): Promise<void> {\n if (!traceId) {\n this.timeline.set(null);\n this.spanRows.set([]);\n this.dataSource.set(convertArrayToDataSource<TimelineSpanRow>([], { key: 'id', pageSize: 100 }));\n this.loading.set(false);\n return;\n }\n\n this.loading.set(true);\n try {\n const result = await this.queryExecutor.fetch<string, TraceTimelineDto>(\n 'SystemInsight:TraceTimeline:Get',\n traceId,\n );\n const timeline = runtimeQueryPayloadData(result) ?? null;\n const rows = this.buildSpanRows(timeline);\n this.timeline.set(timeline);\n this.spanRows.set(rows);\n this.dataSource.set(convertArrayToDataSource(rows, { key: 'id', pageSize: 100 }));\n this.recompute();\n } finally {\n this.loading.set(false);\n }\n }\n\n private buildSpanRows(timeline: TraceTimelineDto | null | undefined): TimelineSpanRow[] {\n if (!timeline?.spans?.length) {\n return [];\n }\n\n const spanStarts = timeline.spans\n .map((span) => Date.parse(span.startTime))\n .filter((value) => Number.isFinite(value));\n const rootStart = spanStarts.length ? Math.min(...spanStarts) : Date.parse(timeline.startTime) || 0;\n const maxEnd = Math.max(\n ...timeline.spans.map((span) => {\n const start = Date.parse(span.startTime);\n const startMs = Number.isFinite(start) ? start : rootStart;\n return startMs + (span.duration || 0);\n }),\n rootStart + (timeline.duration || 0),\n );\n const total = Math.max(maxEnd - rootStart, timeline.duration || 1, 1);\n\n return timeline.spans.map((span) => {\n const start = Date.parse(span.startTime);\n const offsetMs = Number.isFinite(start) ? Math.max(0, start - rootStart) : 0;\n const widthPercent = Math.max(3, Math.min(100, ((span.duration || 0) / total) * 100));\n const offsetPercent = Math.max(0, Math.min(100 - widthPercent, (offsetMs / total) * 100));\n return {\n ...span,\n offsetPercent,\n widthPercent,\n durationShare: span.duration ?? 0,\n };\n });\n }\n}\n","//#region ---- Imports ----\n\nimport {\n arrangeWorkflowDiagram,\n type AXPWorkflowDiagramModel,\n type AXPWorkflowNode,\n type AXPWorkflowSemanticColor,\n} from '@acorex-platform/module-platform-management-client';\nimport type { TraceSpanDto, TraceTimelineDto } from '@acorex-platform/module-system-insight-contracts';\n\n//#endregion\n\n//#region ---- Constants ----\n\nconst DEFAULT_NODE_W = 220;\nconst DEFAULT_NODE_H = 88;\n\n//#endregion\n\n//#region ---- Helpers ----\n\nfunction spanTitle(span: TraceSpanDto): string {\n if (span.middlewareName) {\n return span.middlewareName;\n }\n return span.operationName;\n}\n\nfunction spanSubtitle(span: TraceSpanDto): string {\n const parts: string[] = [];\n if (span.spanKind) {\n parts.push(span.spanKind);\n }\n if (span.duration != null) {\n parts.push(`${span.duration} ms`);\n }\n if (span.nextMiddleware) {\n parts.push(`→ ${span.nextMiddleware}`);\n }\n return parts.join(' · ');\n}\n\nfunction statusColors(status: string | undefined): {\n color?: AXPWorkflowSemanticColor;\n borderColor?: AXPWorkflowSemanticColor;\n} {\n if (status === 'error') {\n return { color: 'danger', borderColor: 'danger' };\n }\n if (status === 'running') {\n return { color: 'warning', borderColor: 'warning' };\n }\n return { borderColor: 'success' };\n}\n\nfunction sortSpans(spans: TraceSpanDto[]): TraceSpanDto[] {\n return [...spans].sort((a, b) => {\n const aStart = Date.parse(a.startTime) || 0;\n const bStart = Date.parse(b.startTime) || 0;\n if (aStart !== bStart) {\n return aStart - bStart;\n }\n return (a.order ?? 0) - (b.order ?? 0);\n });\n}\n\n//#endregion\n\n//#region ---- Builder ----\n\nexport function buildTraceFlowDiagram(timeline: TraceTimelineDto | null | undefined): AXPWorkflowDiagramModel | null {\n if (!timeline?.spans?.length) {\n return null;\n }\n\n const spans = sortSpans(timeline.spans);\n const nodes: AXPWorkflowNode[] = spans.map((span, index) => {\n const colors = statusColors(span.status);\n return {\n id: span.spanId,\n type: span.spanKind ?? 'span',\n title: spanTitle(span),\n icon:\n span.spanKind === 'middleware'\n ? 'fa-light fa-layer-group'\n : span.spanKind === 'backend'\n ? 'fa-light fa-database'\n : 'fa-light fa-play',\n shape: 'rounded-rectangle',\n position: { x: index * 280, y: 40 },\n size: { width: DEFAULT_NODE_W, height: DEFAULT_NODE_H },\n inboundPorts: [{ id: `${span.spanId}:in`, kind: 'inbound', side: 'left', ratio: 0.5 }],\n outboundPorts: [{ id: `${span.spanId}:out`, kind: 'outbound', side: 'right', ratio: 0.5 }],\n readonly: true,\n color: colors.color as AXPWorkflowSemanticColor | undefined,\n borderColor: colors.borderColor as AXPWorkflowSemanticColor | undefined,\n data: {\n subtitle: spanSubtitle(span),\n span,\n },\n };\n });\n\n const spanIds = new Set(spans.map((span) => span.spanId));\n const connectors = spans\n .filter((span) => span.parentSpanId && spanIds.has(span.parentSpanId))\n .map((span) => ({\n id: `${span.parentSpanId}->${span.spanId}`,\n sourceNodeId: span.parentSpanId!,\n sourcePortId: `${span.parentSpanId}:out`,\n targetNodeId: span.spanId,\n targetPortId: `${span.spanId}:in`,\n readonly: true,\n borderColor: (span.status === 'error' ? 'danger' : 'primary') as AXPWorkflowSemanticColor,\n }));\n\n // Fallback linear chain when parent links are missing\n if (!connectors.length && nodes.length > 1) {\n for (let i = 0; i < nodes.length - 1; i += 1) {\n connectors.push({\n id: `${nodes[i].id}->${nodes[i + 1].id}`,\n sourceNodeId: nodes[i].id,\n sourcePortId: `${nodes[i].id}:out`,\n targetNodeId: nodes[i + 1].id,\n targetPortId: `${nodes[i + 1].id}:in`,\n readonly: true,\n borderColor: 'primary' as AXPWorkflowSemanticColor,\n });\n }\n }\n\n return arrangeWorkflowDiagram(\n {\n nodes,\n connectors,\n data: {\n traceId: timeline.traceId,\n kind: timeline.kind,\n operation: timeline.operation,\n },\n },\n { direction: 'horizontal' },\n );\n}\n\n//#endregion\n","//#region ---- Trace flow display normalization ----\n\n/**\n * Prepares a value for the Trace Flow detail viewer:\n * - plain string → unchanged\n * - JSON string → parsed object/array (recursively)\n * - object/array → nested JSON strings expanded\n */\nexport function normalizeTraceDisplayValue(value: unknown, depth = 0): unknown {\n if (depth > 8) {\n return value;\n }\n\n if (typeof value === 'string') {\n return tryParseJsonString(value, depth);\n }\n\n if (Array.isArray(value)) {\n return value.map((entry) => normalizeTraceDisplayValue(entry, depth + 1));\n }\n\n if (value && typeof value === 'object') {\n const result: Record<string, unknown> = {};\n for (const [key, entry] of Object.entries(value as Record<string, unknown>)) {\n result[key] = normalizeTraceDisplayValue(entry, depth + 1);\n }\n return result;\n }\n\n return value;\n}\n\nfunction tryParseJsonString(value: string, depth: number): unknown {\n const trimmed = value.trim();\n if (!trimmed) {\n return value;\n }\n\n const looksLikeJson =\n (trimmed.startsWith('{') && trimmed.endsWith('}')) ||\n (trimmed.startsWith('[') && trimmed.endsWith(']')) ||\n ((trimmed.startsWith('\"') && trimmed.endsWith('\"')) && trimmed.length > 1);\n\n if (!looksLikeJson) {\n return value;\n }\n\n try {\n const parsed = JSON.parse(trimmed) as unknown;\n return normalizeTraceDisplayValue(parsed, depth + 1);\n } catch {\n return value;\n }\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXBadgeModule } from '@acorex/components/badge';\nimport { AXLoadingModule } from '@acorex/components/loading';\nimport { AXTranslationModule, AXTranslationService } from '@acorex/core/translation';\nimport {\n AXPPageLayoutBase,\n AXPPageLayoutBaseComponent,\n} from '@acorex-platform/framework-client/layout/views';\nimport { AXPQueryExecutor } from '@acorex-platform/framework-client/runtime';\nimport { runtimeQueryPayloadData } from '@acorex-platform/framework-shared/core';\nimport type { TraceSpanDto, TraceTimelineDto } from '@acorex-platform/module-system-insight-contracts';\nimport {\n AXPWorkflowDesignerComponent,\n type AXPWorkflowDiagramModel,\n type AXPWorkflowNode,\n} from '@acorex-platform/module-platform-management-client';\nimport { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n inject,\n input,\n signal,\n} from '@angular/core';\nimport { buildTraceFlowDiagram } from './trace-flow-diagram.utils';\nimport { normalizeTraceDisplayValue } from './trace-flow-display.util';\n\n//#endregion\n\n//#region ---- Component ----\n\n/**\n * TraceEntry detail tab — readonly flow chart of spans (middleware chain),\n * same hosting pattern as Timeline / workflow history Visual.\n */\n@Component({\n selector: 'axm-trace-flow-page',\n standalone: true,\n imports: [\n CommonModule,\n AXBadgeModule,\n AXLoadingModule,\n AXTranslationModule,\n AXPWorkflowDesignerComponent,\n ],\n templateUrl: './trace-flow-page.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: AXPPageLayoutBase,\n useExisting: AXMTraceFlowPageComponent,\n },\n ],\n host: { class: 'axm-trace-flow-page block w-full min-h-0' },\n})\nexport class AXMTraceFlowPageComponent extends AXPPageLayoutBaseComponent {\n //#region ---- Services & Dependencies ----\n\n private readonly queryExecutor = inject(AXPQueryExecutor);\n private readonly translationService = inject(AXTranslationService);\n\n //#endregion\n\n //#region ---- Inputs ----\n\n /** Entity record from TraceEntry detail host. */\n rootContext = input<Record<string, unknown>>();\n pageConfig = input<Record<string, unknown>>();\n\n //#endregion\n\n //#region ---- State Signals ----\n\n readonly loading = signal(true);\n readonly timeline = signal<TraceTimelineDto | null>(null);\n readonly selectedSpan = signal<TraceSpanDto | null>(null);\n\n readonly diagram = computed<AXPWorkflowDiagramModel | null>(() =>\n buildTraceFlowDiagram(this.timeline()),\n );\n\n readonly highlightedNodeIds = computed(() => {\n const id = this.selectedSpan()?.spanId;\n return id ? [id] : [];\n });\n\n readonly traceId = computed(() => {\n const ctx = this.rootContext() ?? {};\n const fromTraceId = typeof ctx['traceId'] === 'string' ? ctx['traceId'].trim() : '';\n if (fromTraceId) {\n return fromTraceId;\n }\n const fromId = typeof ctx['id'] === 'string' ? ctx['id'].trim() : '';\n return fromId;\n });\n\n //#endregion\n\n //#region ---- Lifecycle ----\n\n #loadEffect = effect(() => {\n const id = this.traceId();\n void this.loadTimeline(id);\n });\n\n //#endregion\n\n //#region ---- Page metadata ----\n\n override async getPageTitle(): Promise<string> {\n return this.translationService.translateAsync('@system-insight:pages.trace-flow.title');\n }\n\n //#endregion\n\n //#region ---- Event Handlers ----\n\n onNodeClick(event: { node: AXPWorkflowNode }): void {\n const nodeId = event.node.id;\n const fromData = event.node.data?.['span'] as TraceSpanDto | undefined;\n const fromTimeline = this.timeline()?.spans?.find(\n (span) => span.spanId === nodeId || span.id === nodeId,\n );\n this.selectedSpan.set(fromData ?? fromTimeline ?? null);\n this.recompute();\n }\n\n hasValue(value: unknown): boolean {\n if (value === undefined || value === null) {\n return false;\n }\n if (typeof value === 'string') {\n return value.trim().length > 0;\n }\n if (Array.isArray(value)) {\n return value.length > 0;\n }\n if (typeof value === 'object') {\n return Object.keys(value as Record<string, unknown>).length > 0;\n }\n return true;\n }\n\n /**\n * Display rules:\n * - plain string → as-is\n * - JSON string → parse, then pretty JSON\n * - object/array → pretty JSON (nested JSON strings also expanded)\n */\n formatJson(value: unknown): string {\n const normalized = normalizeTraceDisplayValue(value);\n if (typeof normalized === 'string') {\n return normalized;\n }\n try {\n return JSON.stringify(normalized, null, 2);\n } catch {\n return String(value);\n }\n }\n\n //#endregion\n\n //#region ---- Data Loading ----\n\n private async loadTimeline(traceId: string): Promise<void> {\n if (!traceId) {\n this.timeline.set(null);\n this.selectedSpan.set(null);\n this.loading.set(false);\n return;\n }\n\n this.loading.set(true);\n try {\n const result = await this.queryExecutor.fetch<string, TraceTimelineDto>(\n 'SystemInsight:TraceTimeline:Get',\n traceId,\n );\n const timeline = runtimeQueryPayloadData(result) ?? null;\n this.timeline.set(timeline);\n this.selectedSpan.set(timeline?.spans?.[0] ?? null);\n this.recompute();\n } finally {\n this.loading.set(false);\n }\n }\n\n //#endregion\n}\n\n//#endregion\n","<!-- ----- Trace flow chart page ----- -->\n<div class=\"axm-trace-flow flex flex-col gap-4 p-4 w-full min-h-0 h-full\">\n @if (loading()) {\n <!-- ----- Loading indicator while timeline is fetched ----- -->\n <div class=\"flex justify-center py-10\">\n <ax-loading />\n </div>\n }\n <!-- ----- Empty state when timeline is missing ----- -->\n @else if (!timeline()) {\n <p class=\"typo-caption text-muted\">\n {{ '@system-insight:pages.trace-flow.not-found' | translate | async }}\n </p>\n }\n <!-- ----- Flow chart + span details ----- -->\n @else {\n <div class=\"flex flex-wrap items-center gap-2\">\n @if (timeline()?.kind; as kind) {\n <ax-badge [text]=\"kind\" color=\"primary\" size=\"sm\"></ax-badge>\n }\n @if (timeline()?.operation; as operation) {\n <span class=\"text-sm\">{{ operation }}</span>\n }\n <span class=\"text-sm text-muted ms-auto\">\n {{ '@system-insight:pages.trace-flow.duration' | translate | async }}:\n {{ timeline()?.duration }} ms\n </span>\n </div>\n\n <div class=\"axm-trace-flow__canvas border border-lightest rounded-md overflow-hidden min-h-[360px] flex-1\">\n @if (diagram(); as model) {\n <!-- ----- Readonly span flow chart ----- -->\n <axp-workflow-designer\n [model]=\"model\"\n [readonly]=\"true\"\n [showPortLabels]=\"false\"\n [highlightedNodeIds]=\"highlightedNodeIds()\"\n (nodeClick)=\"onNodeClick($event)\"\n />\n }\n <!-- ----- Empty diagram fallback ----- -->\n @else {\n <p class=\"typo-caption text-muted p-4\">\n {{ '@system-insight:pages.trace-flow.empty' | translate | async }}\n </p>\n }\n </div>\n\n @if (selectedSpan(); as span) {\n <!-- ----- Selected span details (metadata + IO) ----- -->\n <div class=\"border border-lightest rounded-md p-4 flex flex-col gap-4\">\n <div class=\"flex flex-wrap items-center gap-2\">\n <strong class=\"text-base\">{{ span.operationName }}</strong>\n @if (span.spanKind) {\n <ax-badge [text]=\"span.spanKind\" color=\"primary\" size=\"sm\"></ax-badge>\n }\n @if (span.middlewareName) {\n <ax-badge [text]=\"span.middlewareName\" color=\"secondary\" size=\"sm\"></ax-badge>\n }\n @if (span.status) {\n <ax-badge\n [text]=\"span.status\"\n [color]=\"span.status === 'error' ? 'danger' : 'success'\"\n size=\"sm\"\n ></ax-badge>\n }\n </div>\n\n <!-- ----- Span metadata grid ----- -->\n <div class=\"grid grid-cols-1 md:grid-cols-2 xl:grid-cols-3 gap-3 text-sm\">\n <div>\n <div class=\"text-muted mb-1\">\n {{ '@system-insight:pages.trace-flow.span-id' | translate | async }}\n </div>\n <div class=\"font-mono break-all\">{{ span.spanId }}</div>\n </div>\n @if (span.parentSpanId) {\n <div>\n <div class=\"text-muted mb-1\">\n {{ '@system-insight:pages.trace-flow.parent-span-id' | translate | async }}\n </div>\n <div class=\"font-mono break-all\">{{ span.parentSpanId }}</div>\n </div>\n }\n @if (span.serviceName) {\n <div>\n <div class=\"text-muted mb-1\">\n {{ '@system-insight:fields.service-name' | translate | async }}\n </div>\n <div>{{ span.serviceName }}</div>\n </div>\n }\n <div>\n <div class=\"text-muted mb-1\">\n {{ '@system-insight:pages.trace-flow.duration' | translate | async }}\n </div>\n <div>{{ span.duration ?? 0 }} ms</div>\n </div>\n <div>\n <div class=\"text-muted mb-1\">\n {{ '@system-insight:fields.start-time' | translate | async }}\n </div>\n <div>{{ span.startTime }}</div>\n </div>\n @if (span.order != null) {\n <div>\n <div class=\"text-muted mb-1\">\n {{ '@system-insight:fields.order' | translate | async }}\n </div>\n <div>{{ span.order }}</div>\n </div>\n }\n @if (span.nextMiddleware) {\n <div>\n <div class=\"text-muted mb-1\">\n {{ '@system-insight:pages.trace-flow.next-middleware' | translate | async }}\n </div>\n <div>{{ span.nextMiddleware }}</div>\n </div>\n }\n </div>\n\n @if (span.error) {\n <!-- ----- Span error ----- -->\n <div>\n <div class=\"text-sm font-medium mb-1 text-danger\">\n {{ '@system-insight:fields.error' | translate | async }}\n </div>\n <pre class=\"text-sm whitespace-pre-wrap m-0 p-2 rounded-md bg-lightest overflow-auto max-h-40\">{{\n span.error\n }}</pre>\n </div>\n }\n\n <!-- ----- Input snapshot (always visible) ----- -->\n <div>\n <div class=\"text-sm font-medium mb-1\">\n {{ '@system-insight:pages.trace-flow.input' | translate | async }}\n </div>\n @if (hasValue(span.input)) {\n <pre class=\"text-xs whitespace-pre-wrap m-0 p-2 rounded-md bg-lightest overflow-auto max-h-56\">{{\n formatJson(span.input)\n }}</pre>\n }\n @else {\n <p class=\"typo-caption text-muted m-0\">\n {{ '@system-insight:pages.trace-flow.no-input' | translate | async }}\n </p>\n }\n </div>\n\n <!-- ----- Output snapshot (always visible) ----- -->\n <div>\n <div class=\"text-sm font-medium mb-1\">\n {{ '@system-insight:pages.trace-flow.output' | translate | async }}\n </div>\n @if (hasValue(span.output)) {\n <pre class=\"text-xs whitespace-pre-wrap m-0 p-2 rounded-md bg-lightest overflow-auto max-h-56\">{{\n formatJson(span.output)\n }}</pre>\n }\n @else {\n <p class=\"typo-caption text-muted m-0\">\n {{ '@system-insight:pages.trace-flow.no-output' | translate | async }}\n </p>\n }\n </div>\n\n @if (hasValue(span.tags)) {\n <!-- ----- Span tags / attributes ----- -->\n <div>\n <div class=\"text-sm font-medium mb-1\">\n {{ '@system-insight:pages.trace-flow.attributes' | translate | async }}\n </div>\n <pre class=\"text-xs whitespace-pre-wrap m-0 p-2 rounded-md bg-lightest overflow-auto max-h-56\">{{\n formatJson(span.tags)\n }}</pre>\n </div>\n }\n\n @if (span.logs?.length) {\n <!-- ----- Span logs / events ----- -->\n <div>\n <div class=\"text-sm font-medium mb-1\">\n {{ '@system-insight:pages.trace-flow.events' | translate | async }}\n </div>\n <pre class=\"text-xs whitespace-pre-wrap m-0 p-2 rounded-md bg-lightest overflow-auto max-h-56\">{{\n formatJson(span.logs)\n }}</pre>\n </div>\n }\n </div>\n }\n }\n</div>\n"],"names":["i2","i3","i4"],"mappings":"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"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { AXPSessionService } from '@acorex-platform/framework-client/auth';
|
|
2
|
+
import { axpNavigateAppPath } from '@acorex-platform/framework-client/common';
|
|
3
|
+
import { TRACE_TIMELINE_PAGE_COMPONENT_KEY } from '@acorex-platform/module-system-insight-contracts';
|
|
4
|
+
import * as i0 from '@angular/core';
|
|
5
|
+
import { inject, Injectable } from '@angular/core';
|
|
6
|
+
import { Router } from '@angular/router';
|
|
7
|
+
|
|
8
|
+
const SYSTEM_INSIGHT_MODULE = 'SystemInsight';
|
|
9
|
+
const TRACE_ENTRY_ENTITY = 'TraceEntry';
|
|
10
|
+
/**
|
|
11
|
+
* Opens TraceEntry entity details on the Timeline tab (entity custom page).
|
|
12
|
+
*/
|
|
13
|
+
class AXMOpenTraceTimelineCommand {
|
|
14
|
+
constructor() {
|
|
15
|
+
this.sessionService = inject(AXPSessionService);
|
|
16
|
+
this.router = inject(Router);
|
|
17
|
+
}
|
|
18
|
+
async execute(input) {
|
|
19
|
+
const row = input?.data ?? input?.data ?? input;
|
|
20
|
+
const traceId = (row?.traceId ?? row?.id ?? input?.traceId)?.toString?.().trim();
|
|
21
|
+
if (!traceId) {
|
|
22
|
+
return {
|
|
23
|
+
success: false,
|
|
24
|
+
message: { text: 'Trace ID is required' },
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
const app = this.sessionService.application?.name;
|
|
28
|
+
if (!app) {
|
|
29
|
+
return {
|
|
30
|
+
success: false,
|
|
31
|
+
message: { text: 'Application context is not available' },
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
const entityId = (row?.id ?? traceId)?.toString?.().trim() || traceId;
|
|
35
|
+
const url = `/${app}/m/${SYSTEM_INSIGHT_MODULE}/e/${TRACE_ENTRY_ENTITY}/${entityId}/view`;
|
|
36
|
+
await axpNavigateAppPath(this.router, url, {
|
|
37
|
+
queryParams: { page: TRACE_TIMELINE_PAGE_COMPONENT_KEY },
|
|
38
|
+
});
|
|
39
|
+
return { success: true, kind: 'object', data: undefined };
|
|
40
|
+
}
|
|
41
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMOpenTraceTimelineCommand, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
42
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMOpenTraceTimelineCommand, providedIn: 'root' }); }
|
|
43
|
+
}
|
|
44
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMOpenTraceTimelineCommand, decorators: [{
|
|
45
|
+
type: Injectable,
|
|
46
|
+
args: [{ providedIn: 'root' }]
|
|
47
|
+
}] });
|
|
48
|
+
|
|
49
|
+
export { AXMOpenTraceTimelineCommand };
|
|
50
|
+
//# sourceMappingURL=acorex-platform-module-system-insight-client-open-trace-timeline.command-DPbr-AYZ.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"acorex-platform-module-system-insight-client-open-trace-timeline.command-DPbr-AYZ.mjs","sources":["../../../../libs/modules/system-insight/client/src/lib/commands/open-trace-timeline.command.ts"],"sourcesContent":["import { AXPSessionService } from '@acorex-platform/framework-client/auth';\nimport { axpNavigateAppPath } from '@acorex-platform/framework-client/common';\nimport { AXPRuntimeCommandResult } from '@acorex-platform/framework-shared/core';\nimport { AXPCommand, type AXPCommandExecuteResultPromise } from '@acorex-platform/framework-shared/runtime';\nimport { TRACE_TIMELINE_PAGE_COMPONENT_KEY } from '@acorex-platform/module-system-insight-contracts';\nimport { inject, Injectable } from '@angular/core';\nimport { Router } from '@angular/router';\n\nconst SYSTEM_INSIGHT_MODULE = 'SystemInsight';\nconst TRACE_ENTRY_ENTITY = 'TraceEntry';\n\n/**\n * Opens TraceEntry entity details on the Timeline tab (entity custom page).\n */\n@Injectable({ providedIn: 'root' })\nexport class AXMOpenTraceTimelineCommand implements AXPCommand<any, void> {\n private readonly sessionService = inject(AXPSessionService);\n private readonly router = inject(Router);\n\n async execute(input: any): AXPCommandExecuteResultPromise<void> {\n const row = input?.data ?? input?.data ?? input;\n const traceId = (row?.traceId ?? row?.id ?? input?.traceId)?.toString?.().trim();\n if (!traceId) {\n return {\n success: false,\n message: { text: 'Trace ID is required' },\n };\n }\n\n const app = this.sessionService.application?.name;\n if (!app) {\n return {\n success: false,\n message: { text: 'Application context is not available' },\n };\n }\n\n const entityId = (row?.id ?? traceId)?.toString?.().trim() || traceId;\n const url = `/${app}/m/${SYSTEM_INSIGHT_MODULE}/e/${TRACE_ENTRY_ENTITY}/${entityId}/view`;\n await axpNavigateAppPath(this.router, url, {\n queryParams: { page: TRACE_TIMELINE_PAGE_COMPONENT_KEY },\n });\n\n return { success: true, kind: 'object', data: undefined };\n }\n}\n"],"names":[],"mappings":";;;;;;;AAQA,MAAM,qBAAqB,GAAG,eAAe;AAC7C,MAAM,kBAAkB,GAAG,YAAY;AAEvC;;AAEG;MAEU,2BAA2B,CAAA;AADxC,IAAA,WAAA,GAAA;AAEmB,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAC1C,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;AA4BzC,IAAA;IA1BC,MAAM,OAAO,CAAC,KAAU,EAAA;QACtB,MAAM,GAAG,GAAG,KAAK,EAAE,IAAI,IAAI,KAAK,EAAE,IAAI,IAAI,KAAK;QAC/C,MAAM,OAAO,GAAG,CAAC,GAAG,EAAE,OAAO,IAAI,GAAG,EAAE,EAAE,IAAI,KAAK,EAAE,OAAO,GAAG,QAAQ,IAAI,CAAC,IAAI,EAAE;QAChF,IAAI,CAAC,OAAO,EAAE;YACZ,OAAO;AACL,gBAAA,OAAO,EAAE,KAAK;AACd,gBAAA,OAAO,EAAE,EAAE,IAAI,EAAE,sBAAsB,EAAE;aAC1C;QACH;QAEA,MAAM,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE,IAAI;QACjD,IAAI,CAAC,GAAG,EAAE;YACR,OAAO;AACL,gBAAA,OAAO,EAAE,KAAK;AACd,gBAAA,OAAO,EAAE,EAAE,IAAI,EAAE,sCAAsC,EAAE;aAC1D;QACH;AAEA,QAAA,MAAM,QAAQ,GAAG,CAAC,GAAG,EAAE,EAAE,IAAI,OAAO,GAAG,QAAQ,IAAI,CAAC,IAAI,EAAE,IAAI,OAAO;QACrE,MAAM,GAAG,GAAG,CAAA,CAAA,EAAI,GAAG,CAAA,GAAA,EAAM,qBAAqB,CAAA,GAAA,EAAM,kBAAkB,CAAA,CAAA,EAAI,QAAQ,CAAA,KAAA,CAAO;AACzF,QAAA,MAAM,kBAAkB,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE;AACzC,YAAA,WAAW,EAAE,EAAE,IAAI,EAAE,iCAAiC,EAAE;AACzD,SAAA,CAAC;AAEF,QAAA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE;IAC3D;8GA7BW,2BAA2B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAA3B,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,2BAA2B,cADd,MAAM,EAAA,CAAA,CAAA;;2FACnB,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBADvC,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;;;"}
|
|
@@ -0,0 +1,366 @@
|
|
|
1
|
+
import { AXP_PERMISSION_DEFINITION_PROVIDER } from '@acorex-platform/framework-client/auth';
|
|
2
|
+
import { AXP_MODULE_MANIFEST_PROVIDER, provideLazyProvider } from '@acorex-platform/framework-client/core';
|
|
3
|
+
import { AXP_PAGE_COMPONENT_PROVIDER } from '@acorex-platform/framework-client/layout/components';
|
|
4
|
+
import { AXPRuntimeModule, provideCommandSetups } from '@acorex-platform/framework-client/runtime';
|
|
5
|
+
import * as i0 from '@angular/core';
|
|
6
|
+
import { inject, Injectable, NgModule } from '@angular/core';
|
|
7
|
+
import { AXPSearchCommandProvider, AXP_MENU_PROVIDER, AXP_SETTING_DEFINITION_PROVIDER, AXP_SEARCH_PROVIDER } from '@acorex-platform/framework-client/common';
|
|
8
|
+
import { RootConfig, AXPAdministrationPermissionKeys, AXMSystemInsightMenuKeys, AXPSystemInsightSettings } from '@acorex-platform/module-system-insight-client/contracts';
|
|
9
|
+
import { AXPEntityService } from '@acorex-platform/framework-client/layout/entity';
|
|
10
|
+
import { AXPCommonMenuKeys, AXPCommonPermissionGroupKeys } from '@acorex-platform/module-common-client/contracts';
|
|
11
|
+
import { AXPWidgetsList } from '@acorex-platform/framework-shared/core';
|
|
12
|
+
|
|
13
|
+
//#region ---- Imports ----
|
|
14
|
+
//#endregion
|
|
15
|
+
//#region ---- Manifest Definition ----
|
|
16
|
+
/**
|
|
17
|
+
* System Insight Module Manifest.
|
|
18
|
+
* Defines module metadata, features, and provider references.
|
|
19
|
+
*/
|
|
20
|
+
const SystemInsightManifest = {
|
|
21
|
+
name: RootConfig.module.name,
|
|
22
|
+
version: '1.0.0',
|
|
23
|
+
title: RootConfig.module.title,
|
|
24
|
+
icon: RootConfig.module.icon,
|
|
25
|
+
i18n: RootConfig.config.i18n,
|
|
26
|
+
type: 'platform',
|
|
27
|
+
domain: 'platform',
|
|
28
|
+
// Module dependencies
|
|
29
|
+
dependencies: ['ReportManagement'],
|
|
30
|
+
};
|
|
31
|
+
//#endregion
|
|
32
|
+
|
|
33
|
+
//#region ---- Imports ----
|
|
34
|
+
//#endregion
|
|
35
|
+
class AXMSystemInsightMenuProvider {
|
|
36
|
+
constructor() {
|
|
37
|
+
this.entityService = inject(AXPEntityService);
|
|
38
|
+
}
|
|
39
|
+
async provide(context) {
|
|
40
|
+
const module = RootConfig.module;
|
|
41
|
+
const entityPath = (entityName) => this.entityService.createPath(module.name, entityName);
|
|
42
|
+
const viewObservabilityPolicy = {
|
|
43
|
+
features: [module.name],
|
|
44
|
+
permissions: [AXPAdministrationPermissionKeys.ViewObservability],
|
|
45
|
+
};
|
|
46
|
+
context.find(AXPCommonMenuKeys.Administration).addItems([
|
|
47
|
+
{
|
|
48
|
+
name: AXMSystemInsightMenuKeys.Root,
|
|
49
|
+
priority: 3,
|
|
50
|
+
text: module.title,
|
|
51
|
+
icon: module.icon,
|
|
52
|
+
type: 'menu',
|
|
53
|
+
policy: viewObservabilityPolicy,
|
|
54
|
+
children: [
|
|
55
|
+
{
|
|
56
|
+
name: AXMSystemInsightMenuKeys.Logs,
|
|
57
|
+
text: RootConfig.entities.logEntry.titlePlural,
|
|
58
|
+
path: entityPath(RootConfig.entities.logEntry.name),
|
|
59
|
+
icon: RootConfig.entities.logEntry.icon,
|
|
60
|
+
priority: 1,
|
|
61
|
+
policy: viewObservabilityPolicy,
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
name: AXMSystemInsightMenuKeys.Traces,
|
|
65
|
+
text: RootConfig.entities.traceEntry.titlePlural,
|
|
66
|
+
path: entityPath(RootConfig.entities.traceEntry.name),
|
|
67
|
+
icon: RootConfig.entities.traceEntry.icon,
|
|
68
|
+
priority: 2,
|
|
69
|
+
policy: viewObservabilityPolicy,
|
|
70
|
+
},
|
|
71
|
+
],
|
|
72
|
+
},
|
|
73
|
+
]);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* Provides configuration definitions for the System Insight module.
|
|
79
|
+
* Settings are consumed on the server for retention, log level, indexing, and critical-error file fallback.
|
|
80
|
+
*/
|
|
81
|
+
class AXPSystemInsightSettingProvider {
|
|
82
|
+
async provide(context) {
|
|
83
|
+
const retentionVisibility = `{{ context.eval('${AXPSystemInsightSettings.RetentionEnabled}') }}`;
|
|
84
|
+
const asyncVisibility = `{{ context.eval('${AXPSystemInsightSettings.AsyncLogging}') }}`;
|
|
85
|
+
const fileFallbackVisibility = `{{ context.eval('${AXPSystemInsightSettings.CriticalErrorFileEnabled}') }}`;
|
|
86
|
+
context
|
|
87
|
+
.addGroup('system-insight', '@system-insight:logs.settings.group.title', '@system-insight:logs.settings.group.description', 'fa-light fa-file-lines', undefined, 900)
|
|
88
|
+
//#region ---- Retention ----
|
|
89
|
+
.addSection('retention', '@system-insight:logs.settings.retention.title', '@system-insight:logs.settings.retention.description')
|
|
90
|
+
.addSetting({
|
|
91
|
+
key: AXPSystemInsightSettings.RetentionEnabled,
|
|
92
|
+
title: '@system-insight:logs.settings.retention.items.enabled.title',
|
|
93
|
+
description: '@system-insight:logs.settings.retention.items.enabled.description',
|
|
94
|
+
scope: 'P',
|
|
95
|
+
overridableAt: [],
|
|
96
|
+
isInherited: false,
|
|
97
|
+
defaultValue: true,
|
|
98
|
+
widget: {
|
|
99
|
+
type: AXPWidgetsList.Editors.ToggleSwitch,
|
|
100
|
+
},
|
|
101
|
+
})
|
|
102
|
+
.addSetting({
|
|
103
|
+
key: AXPSystemInsightSettings.RetentionPeriod,
|
|
104
|
+
title: '@system-insight:logs.settings.retention.items.period.title',
|
|
105
|
+
description: '@system-insight:logs.settings.retention.items.period.description',
|
|
106
|
+
scope: 'P',
|
|
107
|
+
overridableAt: [],
|
|
108
|
+
isInherited: false,
|
|
109
|
+
defaultValue: 30,
|
|
110
|
+
widget: {
|
|
111
|
+
type: AXPWidgetsList.Editors.NumberBox,
|
|
112
|
+
options: {
|
|
113
|
+
minValue: 1,
|
|
114
|
+
maxValue: 365,
|
|
115
|
+
visibility: retentionVisibility,
|
|
116
|
+
},
|
|
117
|
+
},
|
|
118
|
+
validationRules: [{ rule: 'required' }],
|
|
119
|
+
})
|
|
120
|
+
.addSetting({
|
|
121
|
+
key: AXPSystemInsightSettings.RetentionBatchSize,
|
|
122
|
+
title: '@system-insight:logs.settings.retention.items.batch-size.title',
|
|
123
|
+
description: '@system-insight:logs.settings.retention.items.batch-size.description',
|
|
124
|
+
scope: 'P',
|
|
125
|
+
overridableAt: [],
|
|
126
|
+
isInherited: false,
|
|
127
|
+
defaultValue: 500,
|
|
128
|
+
widget: {
|
|
129
|
+
type: AXPWidgetsList.Editors.NumberBox,
|
|
130
|
+
options: {
|
|
131
|
+
minValue: 1,
|
|
132
|
+
maxValue: 5000,
|
|
133
|
+
visibility: retentionVisibility,
|
|
134
|
+
},
|
|
135
|
+
},
|
|
136
|
+
validationRules: [{ rule: 'required' }],
|
|
137
|
+
})
|
|
138
|
+
.addSetting({
|
|
139
|
+
key: AXPSystemInsightSettings.RetentionPurgeCron,
|
|
140
|
+
title: '@system-insight:logs.settings.retention.items.purge-cron.title',
|
|
141
|
+
description: '@system-insight:logs.settings.retention.items.purge-cron.description',
|
|
142
|
+
scope: 'P',
|
|
143
|
+
overridableAt: [],
|
|
144
|
+
isInherited: false,
|
|
145
|
+
defaultValue: '0 4 * * *',
|
|
146
|
+
widget: {
|
|
147
|
+
type: AXPWidgetsList.Editors.TextBox,
|
|
148
|
+
options: { visibility: retentionVisibility },
|
|
149
|
+
},
|
|
150
|
+
validationRules: [{ rule: 'required' }],
|
|
151
|
+
})
|
|
152
|
+
.endSection()
|
|
153
|
+
//#endregion
|
|
154
|
+
//#region ---- Critical Error File Fallback ----
|
|
155
|
+
.addSection('storage', '@system-insight:logs.settings.storage.title', '@system-insight:logs.settings.storage.description')
|
|
156
|
+
.addSetting({
|
|
157
|
+
key: AXPSystemInsightSettings.CriticalErrorFileEnabled,
|
|
158
|
+
title: '@system-insight:logs.settings.storage.items.critical-file-enabled.title',
|
|
159
|
+
description: '@system-insight:logs.settings.storage.items.critical-file-enabled.description',
|
|
160
|
+
scope: 'P',
|
|
161
|
+
overridableAt: [],
|
|
162
|
+
isInherited: false,
|
|
163
|
+
defaultValue: true,
|
|
164
|
+
widget: {
|
|
165
|
+
type: AXPWidgetsList.Editors.ToggleSwitch,
|
|
166
|
+
},
|
|
167
|
+
})
|
|
168
|
+
.addSetting({
|
|
169
|
+
key: AXPSystemInsightSettings.StorageLocation,
|
|
170
|
+
title: '@system-insight:logs.settings.storage.items.location.title',
|
|
171
|
+
description: '@system-insight:logs.settings.storage.items.location.description',
|
|
172
|
+
scope: 'P',
|
|
173
|
+
overridableAt: [],
|
|
174
|
+
isInherited: false,
|
|
175
|
+
defaultValue: './logs/acorex',
|
|
176
|
+
widget: {
|
|
177
|
+
type: AXPWidgetsList.Editors.TextBox,
|
|
178
|
+
options: {
|
|
179
|
+
placeholder: '@system-insight:logs.settings.storage.items.location.placeholder',
|
|
180
|
+
visibility: fileFallbackVisibility,
|
|
181
|
+
},
|
|
182
|
+
},
|
|
183
|
+
validationRules: [{ rule: 'required' }],
|
|
184
|
+
})
|
|
185
|
+
.endSection()
|
|
186
|
+
//#endregion
|
|
187
|
+
//#region ---- Log Level ----
|
|
188
|
+
.addSection('level', '@system-insight:logs.settings.level.title', '@system-insight:logs.settings.level.description')
|
|
189
|
+
.addSetting({
|
|
190
|
+
key: AXPSystemInsightSettings.DefaultLogLevel,
|
|
191
|
+
title: '@system-insight:logs.settings.level.items.default.title',
|
|
192
|
+
description: '@system-insight:logs.settings.level.items.default.description',
|
|
193
|
+
scope: 'P',
|
|
194
|
+
overridableAt: [],
|
|
195
|
+
isInherited: false,
|
|
196
|
+
defaultValue: 'info',
|
|
197
|
+
widget: {
|
|
198
|
+
type: AXPWidgetsList.Editors.SelectBox,
|
|
199
|
+
options: {
|
|
200
|
+
valueField: 'id',
|
|
201
|
+
textField: 'title',
|
|
202
|
+
dataSource: [
|
|
203
|
+
{ id: 'error', title: '@system-insight:logs.settings.level.items.default.options.error' },
|
|
204
|
+
{ id: 'warn', title: '@system-insight:logs.settings.level.items.default.options.warn' },
|
|
205
|
+
{ id: 'info', title: '@system-insight:logs.settings.level.items.default.options.info' },
|
|
206
|
+
{ id: 'debug', title: '@system-insight:logs.settings.level.items.default.options.debug' },
|
|
207
|
+
{ id: 'trace', title: '@system-insight:logs.settings.level.items.default.options.trace' },
|
|
208
|
+
],
|
|
209
|
+
},
|
|
210
|
+
},
|
|
211
|
+
})
|
|
212
|
+
.endSection()
|
|
213
|
+
//#endregion
|
|
214
|
+
//#region ---- Performance ----
|
|
215
|
+
.addSection('performance', '@system-insight:logs.settings.performance.title', '@system-insight:logs.settings.performance.description')
|
|
216
|
+
.addSetting({
|
|
217
|
+
key: AXPSystemInsightSettings.SlowRequestThresholdMs,
|
|
218
|
+
title: '@system-insight:logs.settings.performance.items.slow-request-threshold.title',
|
|
219
|
+
description: '@system-insight:logs.settings.performance.items.slow-request-threshold.description',
|
|
220
|
+
scope: 'P',
|
|
221
|
+
overridableAt: [],
|
|
222
|
+
isInherited: false,
|
|
223
|
+
defaultValue: 500,
|
|
224
|
+
widget: {
|
|
225
|
+
type: AXPWidgetsList.Editors.NumberBox,
|
|
226
|
+
options: {
|
|
227
|
+
minValue: 100,
|
|
228
|
+
maxValue: 60000,
|
|
229
|
+
step: 100,
|
|
230
|
+
suffix: 'ms',
|
|
231
|
+
},
|
|
232
|
+
},
|
|
233
|
+
})
|
|
234
|
+
.addSetting({
|
|
235
|
+
key: AXPSystemInsightSettings.AsyncLogging,
|
|
236
|
+
title: '@system-insight:logs.settings.performance.items.async.title',
|
|
237
|
+
description: '@system-insight:logs.settings.performance.items.async.description',
|
|
238
|
+
scope: 'P',
|
|
239
|
+
overridableAt: [],
|
|
240
|
+
isInherited: false,
|
|
241
|
+
defaultValue: true,
|
|
242
|
+
widget: {
|
|
243
|
+
type: AXPWidgetsList.Editors.ToggleSwitch,
|
|
244
|
+
},
|
|
245
|
+
})
|
|
246
|
+
.addSetting({
|
|
247
|
+
key: AXPSystemInsightSettings.BatchSize,
|
|
248
|
+
title: '@system-insight:logs.settings.performance.items.batch-size.title',
|
|
249
|
+
description: '@system-insight:logs.settings.performance.items.batch-size.description',
|
|
250
|
+
scope: 'P',
|
|
251
|
+
overridableAt: [],
|
|
252
|
+
isInherited: false,
|
|
253
|
+
defaultValue: 100,
|
|
254
|
+
widget: {
|
|
255
|
+
type: AXPWidgetsList.Editors.NumberBox,
|
|
256
|
+
options: {
|
|
257
|
+
minValue: 1,
|
|
258
|
+
maxValue: 1000,
|
|
259
|
+
visibility: asyncVisibility,
|
|
260
|
+
},
|
|
261
|
+
},
|
|
262
|
+
})
|
|
263
|
+
.addSetting({
|
|
264
|
+
key: AXPSystemInsightSettings.FlushInterval,
|
|
265
|
+
title: '@system-insight:logs.settings.performance.items.flush-interval.title',
|
|
266
|
+
description: '@system-insight:logs.settings.performance.items.flush-interval.description',
|
|
267
|
+
scope: 'P',
|
|
268
|
+
overridableAt: [],
|
|
269
|
+
isInherited: false,
|
|
270
|
+
defaultValue: 5000,
|
|
271
|
+
widget: {
|
|
272
|
+
type: AXPWidgetsList.Editors.NumberBox,
|
|
273
|
+
options: {
|
|
274
|
+
minValue: 1000,
|
|
275
|
+
maxValue: 60000,
|
|
276
|
+
step: 1000,
|
|
277
|
+
suffix: 'ms',
|
|
278
|
+
visibility: asyncVisibility,
|
|
279
|
+
},
|
|
280
|
+
},
|
|
281
|
+
})
|
|
282
|
+
.endSection()
|
|
283
|
+
//#endregion
|
|
284
|
+
.endGroup();
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
class AXMSystemInsightSearchCommandProvider extends AXPSearchCommandProvider {
|
|
289
|
+
constructor() {
|
|
290
|
+
super(...arguments);
|
|
291
|
+
this.commands = [];
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
//#endregion
|
|
296
|
+
//#region ---- Permission Definition Provider ----
|
|
297
|
+
/**
|
|
298
|
+
* Registers Observability section capabilities under Administration.
|
|
299
|
+
*/
|
|
300
|
+
class AXMSystemInsightPermissionDefinitionProvider {
|
|
301
|
+
async define(context) {
|
|
302
|
+
const keys = AXPAdministrationPermissionKeys;
|
|
303
|
+
const groups = AXPCommonPermissionGroupKeys;
|
|
304
|
+
const P = '@common:administration.permissions';
|
|
305
|
+
const G = '@common:permission-groups';
|
|
306
|
+
context.addGroup(groups.Administration.Root, `${G}.administration.title`, `${G}.administration.description`, { order: 120 });
|
|
307
|
+
context
|
|
308
|
+
.addGroup(groups.Administration.Observability, `${G}.administration-observability.title`, `${G}.administration-observability.description`, { parent: groups.Administration.Root, order: 80 })
|
|
309
|
+
.addPermission(keys.ViewObservability, `${P}.view-observability.title`, `${P}.view-observability.description`)
|
|
310
|
+
.endPermission()
|
|
311
|
+
.addPermission(keys.MaintainObservability, `${P}.maintain-observability.title`, `${P}.maintain-observability.description`)
|
|
312
|
+
.endPermission()
|
|
313
|
+
.endGroup();
|
|
314
|
+
}
|
|
315
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMSystemInsightPermissionDefinitionProvider, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
316
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMSystemInsightPermissionDefinitionProvider }); }
|
|
317
|
+
}
|
|
318
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMSystemInsightPermissionDefinitionProvider, decorators: [{
|
|
319
|
+
type: Injectable
|
|
320
|
+
}] });
|
|
321
|
+
|
|
322
|
+
class AXMSystemInsightModule {
|
|
323
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMSystemInsightModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
324
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "22.0.8", ngImport: i0, type: AXMSystemInsightModule, imports: [AXPRuntimeModule] }); }
|
|
325
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMSystemInsightModule, providers: [
|
|
326
|
+
provideCommandSetups([
|
|
327
|
+
{
|
|
328
|
+
key: 'SystemInsight:Trace:OpenTimeline',
|
|
329
|
+
command: () => import('./acorex-platform-module-system-insight-client-open-trace-timeline.command-DPbr-AYZ.mjs').then((m) => m.AXMOpenTraceTimelineCommand),
|
|
330
|
+
},
|
|
331
|
+
]),
|
|
332
|
+
provideLazyProvider(AXP_PAGE_COMPONENT_PROVIDER, () => import('./acorex-platform-module-system-insight-client-index-D-Sy2f4K.mjs').then((m) => m.AXMTraceTimelinePageComponentProvider)),
|
|
333
|
+
{ provide: AXP_MODULE_MANIFEST_PROVIDER, useValue: SystemInsightManifest, multi: true },
|
|
334
|
+
{ provide: AXP_PERMISSION_DEFINITION_PROVIDER, useClass: AXMSystemInsightPermissionDefinitionProvider, multi: true },
|
|
335
|
+
{ provide: AXP_MENU_PROVIDER, useClass: AXMSystemInsightMenuProvider, multi: true },
|
|
336
|
+
{ provide: AXP_SETTING_DEFINITION_PROVIDER, useClass: AXPSystemInsightSettingProvider, multi: true },
|
|
337
|
+
{ provide: AXP_SEARCH_PROVIDER, useClass: AXMSystemInsightSearchCommandProvider, multi: true },
|
|
338
|
+
], imports: [AXPRuntimeModule] }); }
|
|
339
|
+
}
|
|
340
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMSystemInsightModule, decorators: [{
|
|
341
|
+
type: NgModule,
|
|
342
|
+
args: [{
|
|
343
|
+
imports: [AXPRuntimeModule],
|
|
344
|
+
providers: [
|
|
345
|
+
provideCommandSetups([
|
|
346
|
+
{
|
|
347
|
+
key: 'SystemInsight:Trace:OpenTimeline',
|
|
348
|
+
command: () => import('./acorex-platform-module-system-insight-client-open-trace-timeline.command-DPbr-AYZ.mjs').then((m) => m.AXMOpenTraceTimelineCommand),
|
|
349
|
+
},
|
|
350
|
+
]),
|
|
351
|
+
provideLazyProvider(AXP_PAGE_COMPONENT_PROVIDER, () => import('./acorex-platform-module-system-insight-client-index-D-Sy2f4K.mjs').then((m) => m.AXMTraceTimelinePageComponentProvider)),
|
|
352
|
+
{ provide: AXP_MODULE_MANIFEST_PROVIDER, useValue: SystemInsightManifest, multi: true },
|
|
353
|
+
{ provide: AXP_PERMISSION_DEFINITION_PROVIDER, useClass: AXMSystemInsightPermissionDefinitionProvider, multi: true },
|
|
354
|
+
{ provide: AXP_MENU_PROVIDER, useClass: AXMSystemInsightMenuProvider, multi: true },
|
|
355
|
+
{ provide: AXP_SETTING_DEFINITION_PROVIDER, useClass: AXPSystemInsightSettingProvider, multi: true },
|
|
356
|
+
{ provide: AXP_SEARCH_PROVIDER, useClass: AXMSystemInsightSearchCommandProvider, multi: true },
|
|
357
|
+
],
|
|
358
|
+
}]
|
|
359
|
+
}] });
|
|
360
|
+
|
|
361
|
+
/**
|
|
362
|
+
* Generated bundle index. Do not edit.
|
|
363
|
+
*/
|
|
364
|
+
|
|
365
|
+
export { AXMSystemInsightMenuProvider, AXMSystemInsightModule, AXMSystemInsightSearchCommandProvider, AXPSystemInsightSettingProvider };
|
|
366
|
+
//# sourceMappingURL=acorex-platform-module-system-insight-client.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"acorex-platform-module-system-insight-client.mjs","sources":["../../../../libs/modules/system-insight/client/src/lib/manifest.ts","../../../../libs/modules/system-insight/client/src/lib/menu.provider.ts","../../../../libs/modules/system-insight/client/src/lib/settings.provider.ts","../../../../libs/modules/system-insight/client/src/lib/search-command.provider.ts","../../../../libs/modules/system-insight/client/src/lib/permission-definition.provider.ts","../../../../libs/modules/system-insight/client/src/lib/system-insight.module.ts","../../../../libs/modules/system-insight/client/src/acorex-platform-module-system-insight-client.ts"],"sourcesContent":["//#region ---- Imports ----\n\nimport { AXPModuleManifest } from '@acorex-platform/framework-client/core';\nimport { RootConfig } from '@acorex-platform/module-system-insight-client/contracts';\n\n//#endregion\n\n//#region ---- Manifest Definition ----\n\n/**\n * System Insight Module Manifest.\n * Defines module metadata, features, and provider references.\n */\nexport const SystemInsightManifest: AXPModuleManifest = {\n name: RootConfig.module.name,\n version: '1.0.0',\n title: RootConfig.module.title,\n icon: RootConfig.module.icon,\n i18n: RootConfig.config.i18n,\n\n type: 'platform',\n domain: 'platform',\n // Module dependencies\n dependencies: ['ReportManagement'],\n};\n\n//#endregion\n\n","//#region ---- Imports ----\n\nimport { AXPMenuProvider, AXPMenuProviderContext } from '@acorex-platform/framework-client/common';\nimport { AXPEntityService } from '@acorex-platform/framework-client/layout/entity';\nimport { inject } from '@angular/core';\nimport { AXPCommonMenuKeys } from '@acorex-platform/module-common-client/contracts';\nimport {\n AXPAdministrationPermissionKeys,\n AXMSystemInsightMenuKeys,\n RootConfig,\n} from '@acorex-platform/module-system-insight-client/contracts';\n\n//#endregion\n\nexport class AXMSystemInsightMenuProvider implements AXPMenuProvider {\n private readonly entityService = inject(AXPEntityService);\n\n async provide(context: AXPMenuProviderContext): Promise<void> {\n const module = RootConfig.module;\n const entityPath = (entityName: string) => this.entityService.createPath(module.name, entityName);\n const viewObservabilityPolicy = {\n features: [module.name],\n permissions: [AXPAdministrationPermissionKeys.ViewObservability],\n };\n\n context.find(AXPCommonMenuKeys.Administration).addItems([\n {\n name: AXMSystemInsightMenuKeys.Root,\n priority: 3,\n text: module.title,\n icon: module.icon,\n type: 'menu',\n policy: viewObservabilityPolicy,\n children: [\n {\n name: AXMSystemInsightMenuKeys.Logs,\n text: RootConfig.entities.logEntry.titlePlural,\n path: entityPath(RootConfig.entities.logEntry.name),\n icon: RootConfig.entities.logEntry.icon,\n priority: 1,\n policy: viewObservabilityPolicy,\n },\n {\n name: AXMSystemInsightMenuKeys.Traces,\n text: RootConfig.entities.traceEntry.titlePlural,\n path: entityPath(RootConfig.entities.traceEntry.name),\n icon: RootConfig.entities.traceEntry.icon,\n priority: 2,\n policy: viewObservabilityPolicy,\n },\n ],\n },\n ]);\n }\n}\n","import { AXPSettingDefinitionProvider, AXPSettingDefinitionProviderContext } from '@acorex-platform/framework-client/common';\nimport { AXPWidgetsList } from '@acorex-platform/framework-shared/core';\nimport { AXPSystemInsightSettings } from '@acorex-platform/module-system-insight-client/contracts';\n\n/**\n * Provides configuration definitions for the System Insight module.\n * Settings are consumed on the server for retention, log level, indexing, and critical-error file fallback.\n */\nexport class AXPSystemInsightSettingProvider implements AXPSettingDefinitionProvider {\n async provide(context: AXPSettingDefinitionProviderContext): Promise<void> {\n const retentionVisibility = `{{ context.eval('${AXPSystemInsightSettings.RetentionEnabled}') }}`;\n const asyncVisibility = `{{ context.eval('${AXPSystemInsightSettings.AsyncLogging}') }}`;\n const fileFallbackVisibility = `{{ context.eval('${AXPSystemInsightSettings.CriticalErrorFileEnabled}') }}`;\n\n context\n .addGroup(\n 'system-insight',\n '@system-insight:logs.settings.group.title',\n '@system-insight:logs.settings.group.description',\n 'fa-light fa-file-lines',\n undefined,\n 900,\n )\n\n //#region ---- Retention ----\n .addSection(\n 'retention',\n '@system-insight:logs.settings.retention.title',\n '@system-insight:logs.settings.retention.description',\n )\n .addSetting({\n key: AXPSystemInsightSettings.RetentionEnabled,\n title: '@system-insight:logs.settings.retention.items.enabled.title',\n description: '@system-insight:logs.settings.retention.items.enabled.description',\n scope: 'P',\n overridableAt: [],\n isInherited: false,\n defaultValue: true,\n widget: {\n type: AXPWidgetsList.Editors.ToggleSwitch,\n },\n })\n .addSetting({\n key: AXPSystemInsightSettings.RetentionPeriod,\n title: '@system-insight:logs.settings.retention.items.period.title',\n description: '@system-insight:logs.settings.retention.items.period.description',\n scope: 'P',\n overridableAt: [],\n isInherited: false,\n defaultValue: 30,\n widget: {\n type: AXPWidgetsList.Editors.NumberBox,\n options: {\n minValue: 1,\n maxValue: 365,\n visibility: retentionVisibility,\n },\n },\n validationRules: [{ rule: 'required' }],\n })\n .addSetting({\n key: AXPSystemInsightSettings.RetentionBatchSize,\n title: '@system-insight:logs.settings.retention.items.batch-size.title',\n description: '@system-insight:logs.settings.retention.items.batch-size.description',\n scope: 'P',\n overridableAt: [],\n isInherited: false,\n defaultValue: 500,\n widget: {\n type: AXPWidgetsList.Editors.NumberBox,\n options: {\n minValue: 1,\n maxValue: 5000,\n visibility: retentionVisibility,\n },\n },\n validationRules: [{ rule: 'required' }],\n })\n .addSetting({\n key: AXPSystemInsightSettings.RetentionPurgeCron,\n title: '@system-insight:logs.settings.retention.items.purge-cron.title',\n description: '@system-insight:logs.settings.retention.items.purge-cron.description',\n scope: 'P',\n overridableAt: [],\n isInherited: false,\n defaultValue: '0 4 * * *',\n widget: {\n type: AXPWidgetsList.Editors.TextBox,\n options: { visibility: retentionVisibility },\n },\n validationRules: [{ rule: 'required' }],\n })\n .endSection()\n //#endregion\n\n //#region ---- Critical Error File Fallback ----\n .addSection(\n 'storage',\n '@system-insight:logs.settings.storage.title',\n '@system-insight:logs.settings.storage.description',\n )\n .addSetting({\n key: AXPSystemInsightSettings.CriticalErrorFileEnabled,\n title: '@system-insight:logs.settings.storage.items.critical-file-enabled.title',\n description: '@system-insight:logs.settings.storage.items.critical-file-enabled.description',\n scope: 'P',\n overridableAt: [],\n isInherited: false,\n defaultValue: true,\n widget: {\n type: AXPWidgetsList.Editors.ToggleSwitch,\n },\n })\n .addSetting({\n key: AXPSystemInsightSettings.StorageLocation,\n title: '@system-insight:logs.settings.storage.items.location.title',\n description: '@system-insight:logs.settings.storage.items.location.description',\n scope: 'P',\n overridableAt: [],\n isInherited: false,\n defaultValue: './logs/acorex',\n widget: {\n type: AXPWidgetsList.Editors.TextBox,\n options: {\n placeholder: '@system-insight:logs.settings.storage.items.location.placeholder',\n visibility: fileFallbackVisibility,\n },\n },\n validationRules: [{ rule: 'required' }],\n })\n .endSection()\n //#endregion\n\n //#region ---- Log Level ----\n .addSection(\n 'level',\n '@system-insight:logs.settings.level.title',\n '@system-insight:logs.settings.level.description',\n )\n .addSetting({\n key: AXPSystemInsightSettings.DefaultLogLevel,\n title: '@system-insight:logs.settings.level.items.default.title',\n description: '@system-insight:logs.settings.level.items.default.description',\n scope: 'P',\n overridableAt: [],\n isInherited: false,\n defaultValue: 'info',\n widget: {\n type: AXPWidgetsList.Editors.SelectBox,\n options: {\n valueField: 'id',\n textField: 'title',\n dataSource: [\n { id: 'error', title: '@system-insight:logs.settings.level.items.default.options.error' },\n { id: 'warn', title: '@system-insight:logs.settings.level.items.default.options.warn' },\n { id: 'info', title: '@system-insight:logs.settings.level.items.default.options.info' },\n { id: 'debug', title: '@system-insight:logs.settings.level.items.default.options.debug' },\n { id: 'trace', title: '@system-insight:logs.settings.level.items.default.options.trace' },\n ],\n },\n },\n })\n .endSection()\n //#endregion\n\n //#region ---- Performance ----\n .addSection(\n 'performance',\n '@system-insight:logs.settings.performance.title',\n '@system-insight:logs.settings.performance.description',\n )\n .addSetting({\n key: AXPSystemInsightSettings.SlowRequestThresholdMs,\n title: '@system-insight:logs.settings.performance.items.slow-request-threshold.title',\n description: '@system-insight:logs.settings.performance.items.slow-request-threshold.description',\n scope: 'P',\n overridableAt: [],\n isInherited: false,\n defaultValue: 500,\n widget: {\n type: AXPWidgetsList.Editors.NumberBox,\n options: {\n minValue: 100,\n maxValue: 60000,\n step: 100,\n suffix: 'ms',\n },\n },\n })\n .addSetting({\n key: AXPSystemInsightSettings.AsyncLogging,\n title: '@system-insight:logs.settings.performance.items.async.title',\n description: '@system-insight:logs.settings.performance.items.async.description',\n scope: 'P',\n overridableAt: [],\n isInherited: false,\n defaultValue: true,\n widget: {\n type: AXPWidgetsList.Editors.ToggleSwitch,\n },\n })\n .addSetting({\n key: AXPSystemInsightSettings.BatchSize,\n title: '@system-insight:logs.settings.performance.items.batch-size.title',\n description: '@system-insight:logs.settings.performance.items.batch-size.description',\n scope: 'P',\n overridableAt: [],\n isInherited: false,\n defaultValue: 100,\n widget: {\n type: AXPWidgetsList.Editors.NumberBox,\n options: {\n minValue: 1,\n maxValue: 1000,\n visibility: asyncVisibility,\n },\n },\n })\n .addSetting({\n key: AXPSystemInsightSettings.FlushInterval,\n title: '@system-insight:logs.settings.performance.items.flush-interval.title',\n description: '@system-insight:logs.settings.performance.items.flush-interval.description',\n scope: 'P',\n overridableAt: [],\n isInherited: false,\n defaultValue: 5000,\n widget: {\n type: AXPWidgetsList.Editors.NumberBox,\n options: {\n minValue: 1000,\n maxValue: 60000,\n step: 1000,\n suffix: 'ms',\n visibility: asyncVisibility,\n },\n },\n })\n .endSection()\n //#endregion\n\n .endGroup();\n }\n}\n","import { AXPSearchCommandProvider, AXPSearchResult } from '@acorex-platform/framework-client/common';\n\nexport class AXMSystemInsightSearchCommandProvider extends AXPSearchCommandProvider {\n commands: AXPSearchResult[] = [];\n}\n","//#region ---- Imports ----\n\nimport {\n AXPPermissionDefinitionProvider,\n AXPPermissionDefinitionProviderContext,\n} from '@acorex-platform/framework-client/auth';\nimport { AXPCommonPermissionGroupKeys } from '@acorex-platform/module-common-client/contracts';\nimport { AXPAdministrationPermissionKeys } from '@acorex-platform/module-system-insight-client/contracts';\nimport { Injectable } from '@angular/core';\n\n//#endregion\n\n//#region ---- Permission Definition Provider ----\n\n/**\n * Registers Observability section capabilities under Administration.\n */\n@Injectable()\nexport class AXMSystemInsightPermissionDefinitionProvider implements AXPPermissionDefinitionProvider {\n async define(context: AXPPermissionDefinitionProviderContext): Promise<void> {\n const keys = AXPAdministrationPermissionKeys;\n const groups = AXPCommonPermissionGroupKeys;\n const P = '@common:administration.permissions';\n const G = '@common:permission-groups';\n\n context.addGroup(groups.Administration.Root, `${G}.administration.title`, `${G}.administration.description`, { order: 120 });\n\n context\n .addGroup(\n groups.Administration.Observability,\n `${G}.administration-observability.title`,\n `${G}.administration-observability.description`,\n { parent: groups.Administration.Root, order: 80 },\n )\n .addPermission(\n keys.ViewObservability,\n `${P}.view-observability.title`,\n `${P}.view-observability.description`,\n )\n .endPermission()\n .addPermission(\n keys.MaintainObservability,\n `${P}.maintain-observability.title`,\n `${P}.maintain-observability.description`,\n )\n .endPermission()\n .endGroup();\n }\n}\n\n//#endregion\n","import { AXP_PERMISSION_DEFINITION_PROVIDER } from '@acorex-platform/framework-client/auth';\nimport { AXP_MODULE_MANIFEST_PROVIDER, provideLazyProvider } from '@acorex-platform/framework-client/core';\nimport { AXP_PAGE_COMPONENT_PROVIDER } from '@acorex-platform/framework-client/layout/components';\nimport { AXPRuntimeModule, provideCommandSetups } from '@acorex-platform/framework-client/runtime';\nimport { NgModule } from '@angular/core';\nimport { AXP_MENU_PROVIDER, AXP_SEARCH_PROVIDER, AXP_SETTING_DEFINITION_PROVIDER } from '@acorex-platform/framework-client/common';\nimport { SystemInsightManifest } from './manifest';\nimport { AXMSystemInsightMenuProvider } from './menu.provider';\n\nimport { AXPSystemInsightSettingProvider } from './settings.provider';\nimport { AXMSystemInsightSearchCommandProvider } from './search-command.provider';\nimport { AXMSystemInsightPermissionDefinitionProvider } from './permission-definition.provider';\n\n@NgModule({\n imports: [AXPRuntimeModule],\n providers: [\n provideCommandSetups([\n {\n key: 'SystemInsight:Trace:OpenTimeline',\n command: () => import('./commands/open-trace-timeline.command').then((m) => m.AXMOpenTraceTimelineCommand),\n },\n ]),\n provideLazyProvider(AXP_PAGE_COMPONENT_PROVIDER, () =>\n import('./features/traces').then((m) => m.AXMTraceTimelinePageComponentProvider),\n ),\n { provide: AXP_MODULE_MANIFEST_PROVIDER, useValue: SystemInsightManifest, multi: true },\n { provide: AXP_PERMISSION_DEFINITION_PROVIDER, useClass: AXMSystemInsightPermissionDefinitionProvider, multi: true },\n { provide: AXP_MENU_PROVIDER, useClass: AXMSystemInsightMenuProvider, multi: true },\n \n { provide: AXP_SETTING_DEFINITION_PROVIDER, useClass: AXPSystemInsightSettingProvider, multi: true },\n { provide: AXP_SEARCH_PROVIDER, useClass: AXMSystemInsightSearchCommandProvider, multi: true },\n ],\n})\nexport class AXMSystemInsightModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;;;;;;AAAA;AAKA;AAEA;AAEA;;;AAGG;AACI,MAAM,qBAAqB,GAAsB;AACtD,IAAA,IAAI,EAAE,UAAU,CAAC,MAAM,CAAC,IAAI;AAC5B,IAAA,OAAO,EAAE,OAAO;AAChB,IAAA,KAAK,EAAE,UAAU,CAAC,MAAM,CAAC,KAAK;AAC9B,IAAA,IAAI,EAAE,UAAU,CAAC,MAAM,CAAC,IAAI;AAC5B,IAAA,IAAI,EAAE,UAAU,CAAC,MAAM,CAAC,IAAI;AAE5B,IAAA,IAAI,EAAE,UAAU;AAChB,IAAA,MAAM,EAAE,UAAU;;IAElB,YAAY,EAAE,CAAC,kBAAkB,CAAC;CACnC;AAED;;AC1BA;AAYA;MAEa,4BAA4B,CAAA;AAAzC,IAAA,WAAA,GAAA;AACmB,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,gBAAgB,CAAC;IAuC3D;IArCE,MAAM,OAAO,CAAC,OAA+B,EAAA;AAC3C,QAAA,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM;AAChC,QAAA,MAAM,UAAU,GAAG,CAAC,UAAkB,KAAK,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC;AACjG,QAAA,MAAM,uBAAuB,GAAG;AAC9B,YAAA,QAAQ,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC;AACvB,YAAA,WAAW,EAAE,CAAC,+BAA+B,CAAC,iBAAiB,CAAC;SACjE;QAED,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC,QAAQ,CAAC;AACtD,YAAA;gBACE,IAAI,EAAE,wBAAwB,CAAC,IAAI;AACnC,gBAAA,QAAQ,EAAE,CAAC;gBACX,IAAI,EAAE,MAAM,CAAC,KAAK;gBAClB,IAAI,EAAE,MAAM,CAAC,IAAI;AACjB,gBAAA,IAAI,EAAE,MAAM;AACZ,gBAAA,MAAM,EAAE,uBAAuB;AAC/B,gBAAA,QAAQ,EAAE;AACR,oBAAA;wBACE,IAAI,EAAE,wBAAwB,CAAC,IAAI;AACnC,wBAAA,IAAI,EAAE,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,WAAW;wBAC9C,IAAI,EAAE,UAAU,CAAC,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC;AACnD,wBAAA,IAAI,EAAE,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI;AACvC,wBAAA,QAAQ,EAAE,CAAC;AACX,wBAAA,MAAM,EAAE,uBAAuB;AAChC,qBAAA;AACD,oBAAA;wBACE,IAAI,EAAE,wBAAwB,CAAC,MAAM;AACrC,wBAAA,IAAI,EAAE,UAAU,CAAC,QAAQ,CAAC,UAAU,CAAC,WAAW;wBAChD,IAAI,EAAE,UAAU,CAAC,UAAU,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC;AACrD,wBAAA,IAAI,EAAE,UAAU,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI;AACzC,wBAAA,QAAQ,EAAE,CAAC;AACX,wBAAA,MAAM,EAAE,uBAAuB;AAChC,qBAAA;AACF,iBAAA;AACF,aAAA;AACF,SAAA,CAAC;IACJ;AACD;;AClDD;;;AAGG;MACU,+BAA+B,CAAA;IAC1C,MAAM,OAAO,CAAC,OAA4C,EAAA;AACxD,QAAA,MAAM,mBAAmB,GAAG,CAAA,iBAAA,EAAoB,wBAAwB,CAAC,gBAAgB,OAAO;AAChG,QAAA,MAAM,eAAe,GAAG,CAAA,iBAAA,EAAoB,wBAAwB,CAAC,YAAY,OAAO;AACxF,QAAA,MAAM,sBAAsB,GAAG,CAAA,iBAAA,EAAoB,wBAAwB,CAAC,wBAAwB,OAAO;QAE3G;AACG,aAAA,QAAQ,CACP,gBAAgB,EAChB,2CAA2C,EAC3C,iDAAiD,EACjD,wBAAwB,EACxB,SAAS,EACT,GAAG;;AAIJ,aAAA,UAAU,CACT,WAAW,EACX,+CAA+C,EAC/C,qDAAqD;AAEtD,aAAA,UAAU,CAAC;YACV,GAAG,EAAE,wBAAwB,CAAC,gBAAgB;AAC9C,YAAA,KAAK,EAAE,6DAA6D;AACpE,YAAA,WAAW,EAAE,mEAAmE;AAChF,YAAA,KAAK,EAAE,GAAG;AACV,YAAA,aAAa,EAAE,EAAE;AACjB,YAAA,WAAW,EAAE,KAAK;AAClB,YAAA,YAAY,EAAE,IAAI;AAClB,YAAA,MAAM,EAAE;AACN,gBAAA,IAAI,EAAE,cAAc,CAAC,OAAO,CAAC,YAAY;AAC1C,aAAA;SACF;AACA,aAAA,UAAU,CAAC;YACV,GAAG,EAAE,wBAAwB,CAAC,eAAe;AAC7C,YAAA,KAAK,EAAE,4DAA4D;AACnE,YAAA,WAAW,EAAE,kEAAkE;AAC/E,YAAA,KAAK,EAAE,GAAG;AACV,YAAA,aAAa,EAAE,EAAE;AACjB,YAAA,WAAW,EAAE,KAAK;AAClB,YAAA,YAAY,EAAE,EAAE;AAChB,YAAA,MAAM,EAAE;AACN,gBAAA,IAAI,EAAE,cAAc,CAAC,OAAO,CAAC,SAAS;AACtC,gBAAA,OAAO,EAAE;AACP,oBAAA,QAAQ,EAAE,CAAC;AACX,oBAAA,QAAQ,EAAE,GAAG;AACb,oBAAA,UAAU,EAAE,mBAAmB;AAChC,iBAAA;AACF,aAAA;AACD,YAAA,eAAe,EAAE,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;SACxC;AACA,aAAA,UAAU,CAAC;YACV,GAAG,EAAE,wBAAwB,CAAC,kBAAkB;AAChD,YAAA,KAAK,EAAE,gEAAgE;AACvE,YAAA,WAAW,EAAE,sEAAsE;AACnF,YAAA,KAAK,EAAE,GAAG;AACV,YAAA,aAAa,EAAE,EAAE;AACjB,YAAA,WAAW,EAAE,KAAK;AAClB,YAAA,YAAY,EAAE,GAAG;AACjB,YAAA,MAAM,EAAE;AACN,gBAAA,IAAI,EAAE,cAAc,CAAC,OAAO,CAAC,SAAS;AACtC,gBAAA,OAAO,EAAE;AACP,oBAAA,QAAQ,EAAE,CAAC;AACX,oBAAA,QAAQ,EAAE,IAAI;AACd,oBAAA,UAAU,EAAE,mBAAmB;AAChC,iBAAA;AACF,aAAA;AACD,YAAA,eAAe,EAAE,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;SACxC;AACA,aAAA,UAAU,CAAC;YACV,GAAG,EAAE,wBAAwB,CAAC,kBAAkB;AAChD,YAAA,KAAK,EAAE,gEAAgE;AACvE,YAAA,WAAW,EAAE,sEAAsE;AACnF,YAAA,KAAK,EAAE,GAAG;AACV,YAAA,aAAa,EAAE,EAAE;AACjB,YAAA,WAAW,EAAE,KAAK;AAClB,YAAA,YAAY,EAAE,WAAW;AACzB,YAAA,MAAM,EAAE;AACN,gBAAA,IAAI,EAAE,cAAc,CAAC,OAAO,CAAC,OAAO;AACpC,gBAAA,OAAO,EAAE,EAAE,UAAU,EAAE,mBAAmB,EAAE;AAC7C,aAAA;AACD,YAAA,eAAe,EAAE,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;SACxC;AACA,aAAA,UAAU;;;AAIV,aAAA,UAAU,CACT,SAAS,EACT,6CAA6C,EAC7C,mDAAmD;AAEpD,aAAA,UAAU,CAAC;YACV,GAAG,EAAE,wBAAwB,CAAC,wBAAwB;AACtD,YAAA,KAAK,EAAE,yEAAyE;AAChF,YAAA,WAAW,EAAE,+EAA+E;AAC5F,YAAA,KAAK,EAAE,GAAG;AACV,YAAA,aAAa,EAAE,EAAE;AACjB,YAAA,WAAW,EAAE,KAAK;AAClB,YAAA,YAAY,EAAE,IAAI;AAClB,YAAA,MAAM,EAAE;AACN,gBAAA,IAAI,EAAE,cAAc,CAAC,OAAO,CAAC,YAAY;AAC1C,aAAA;SACF;AACA,aAAA,UAAU,CAAC;YACV,GAAG,EAAE,wBAAwB,CAAC,eAAe;AAC7C,YAAA,KAAK,EAAE,4DAA4D;AACnE,YAAA,WAAW,EAAE,kEAAkE;AAC/E,YAAA,KAAK,EAAE,GAAG;AACV,YAAA,aAAa,EAAE,EAAE;AACjB,YAAA,WAAW,EAAE,KAAK;AAClB,YAAA,YAAY,EAAE,eAAe;AAC7B,YAAA,MAAM,EAAE;AACN,gBAAA,IAAI,EAAE,cAAc,CAAC,OAAO,CAAC,OAAO;AACpC,gBAAA,OAAO,EAAE;AACP,oBAAA,WAAW,EAAE,kEAAkE;AAC/E,oBAAA,UAAU,EAAE,sBAAsB;AACnC,iBAAA;AACF,aAAA;AACD,YAAA,eAAe,EAAE,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;SACxC;AACA,aAAA,UAAU;;;AAIV,aAAA,UAAU,CACT,OAAO,EACP,2CAA2C,EAC3C,iDAAiD;AAElD,aAAA,UAAU,CAAC;YACV,GAAG,EAAE,wBAAwB,CAAC,eAAe;AAC7C,YAAA,KAAK,EAAE,yDAAyD;AAChE,YAAA,WAAW,EAAE,+DAA+D;AAC5E,YAAA,KAAK,EAAE,GAAG;AACV,YAAA,aAAa,EAAE,EAAE;AACjB,YAAA,WAAW,EAAE,KAAK;AAClB,YAAA,YAAY,EAAE,MAAM;AACpB,YAAA,MAAM,EAAE;AACN,gBAAA,IAAI,EAAE,cAAc,CAAC,OAAO,CAAC,SAAS;AACtC,gBAAA,OAAO,EAAE;AACP,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,SAAS,EAAE,OAAO;AAClB,oBAAA,UAAU,EAAE;AACV,wBAAA,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,iEAAiE,EAAE;AACzF,wBAAA,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,gEAAgE,EAAE;AACvF,wBAAA,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,gEAAgE,EAAE;AACvF,wBAAA,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,iEAAiE,EAAE;AACzF,wBAAA,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,iEAAiE,EAAE;AAC1F,qBAAA;AACF,iBAAA;AACF,aAAA;SACF;AACA,aAAA,UAAU;;;AAIV,aAAA,UAAU,CACT,aAAa,EACb,iDAAiD,EACjD,uDAAuD;AAExD,aAAA,UAAU,CAAC;YACV,GAAG,EAAE,wBAAwB,CAAC,sBAAsB;AACpD,YAAA,KAAK,EAAE,8EAA8E;AACrF,YAAA,WAAW,EAAE,oFAAoF;AACjG,YAAA,KAAK,EAAE,GAAG;AACV,YAAA,aAAa,EAAE,EAAE;AACjB,YAAA,WAAW,EAAE,KAAK;AAClB,YAAA,YAAY,EAAE,GAAG;AACjB,YAAA,MAAM,EAAE;AACN,gBAAA,IAAI,EAAE,cAAc,CAAC,OAAO,CAAC,SAAS;AACtC,gBAAA,OAAO,EAAE;AACP,oBAAA,QAAQ,EAAE,GAAG;AACb,oBAAA,QAAQ,EAAE,KAAK;AACf,oBAAA,IAAI,EAAE,GAAG;AACT,oBAAA,MAAM,EAAE,IAAI;AACb,iBAAA;AACF,aAAA;SACF;AACA,aAAA,UAAU,CAAC;YACV,GAAG,EAAE,wBAAwB,CAAC,YAAY;AAC1C,YAAA,KAAK,EAAE,6DAA6D;AACpE,YAAA,WAAW,EAAE,mEAAmE;AAChF,YAAA,KAAK,EAAE,GAAG;AACV,YAAA,aAAa,EAAE,EAAE;AACjB,YAAA,WAAW,EAAE,KAAK;AAClB,YAAA,YAAY,EAAE,IAAI;AAClB,YAAA,MAAM,EAAE;AACN,gBAAA,IAAI,EAAE,cAAc,CAAC,OAAO,CAAC,YAAY;AAC1C,aAAA;SACF;AACA,aAAA,UAAU,CAAC;YACV,GAAG,EAAE,wBAAwB,CAAC,SAAS;AACvC,YAAA,KAAK,EAAE,kEAAkE;AACzE,YAAA,WAAW,EAAE,wEAAwE;AACrF,YAAA,KAAK,EAAE,GAAG;AACV,YAAA,aAAa,EAAE,EAAE;AACjB,YAAA,WAAW,EAAE,KAAK;AAClB,YAAA,YAAY,EAAE,GAAG;AACjB,YAAA,MAAM,EAAE;AACN,gBAAA,IAAI,EAAE,cAAc,CAAC,OAAO,CAAC,SAAS;AACtC,gBAAA,OAAO,EAAE;AACP,oBAAA,QAAQ,EAAE,CAAC;AACX,oBAAA,QAAQ,EAAE,IAAI;AACd,oBAAA,UAAU,EAAE,eAAe;AAC5B,iBAAA;AACF,aAAA;SACF;AACA,aAAA,UAAU,CAAC;YACV,GAAG,EAAE,wBAAwB,CAAC,aAAa;AAC3C,YAAA,KAAK,EAAE,sEAAsE;AAC7E,YAAA,WAAW,EAAE,4EAA4E;AACzF,YAAA,KAAK,EAAE,GAAG;AACV,YAAA,aAAa,EAAE,EAAE;AACjB,YAAA,WAAW,EAAE,KAAK;AAClB,YAAA,YAAY,EAAE,IAAI;AAClB,YAAA,MAAM,EAAE;AACN,gBAAA,IAAI,EAAE,cAAc,CAAC,OAAO,CAAC,SAAS;AACtC,gBAAA,OAAO,EAAE;AACP,oBAAA,QAAQ,EAAE,IAAI;AACd,oBAAA,QAAQ,EAAE,KAAK;AACf,oBAAA,IAAI,EAAE,IAAI;AACV,oBAAA,MAAM,EAAE,IAAI;AACZ,oBAAA,UAAU,EAAE,eAAe;AAC5B,iBAAA;AACF,aAAA;SACF;AACA,aAAA,UAAU;;AAGV,aAAA,QAAQ,EAAE;IACf;AACD;;AChPK,MAAO,qCAAsC,SAAQ,wBAAwB,CAAA;AAAnF,IAAA,WAAA,GAAA;;QACE,IAAA,CAAA,QAAQ,GAAsB,EAAE;IAClC;AAAC;;ACMD;AAEA;AAEA;;AAEG;MAEU,4CAA4C,CAAA;IACvD,MAAM,MAAM,CAAC,OAA+C,EAAA;QAC1D,MAAM,IAAI,GAAG,+BAA+B;QAC5C,MAAM,MAAM,GAAG,4BAA4B;QAC3C,MAAM,CAAC,GAAG,oCAAoC;QAC9C,MAAM,CAAC,GAAG,2BAA2B;QAErC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,CAAA,EAAG,CAAC,uBAAuB,EAAE,CAAA,EAAG,CAAC,CAAA,2BAAA,CAA6B,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;QAE5H;AACG,aAAA,QAAQ,CACP,MAAM,CAAC,cAAc,CAAC,aAAa,EACnC,CAAA,EAAG,CAAC,CAAA,mCAAA,CAAqC,EACzC,CAAA,EAAG,CAAC,CAAA,yCAAA,CAA2C,EAC/C,EAAE,MAAM,EAAE,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE;AAElD,aAAA,aAAa,CACZ,IAAI,CAAC,iBAAiB,EACtB,CAAA,EAAG,CAAC,CAAA,yBAAA,CAA2B,EAC/B,CAAA,EAAG,CAAC,CAAA,+BAAA,CAAiC;AAEtC,aAAA,aAAa;AACb,aAAA,aAAa,CACZ,IAAI,CAAC,qBAAqB,EAC1B,CAAA,EAAG,CAAC,CAAA,6BAAA,CAA+B,EACnC,CAAA,EAAG,CAAC,CAAA,mCAAA,CAAqC;AAE1C,aAAA,aAAa;AACb,aAAA,QAAQ,EAAE;IACf;8GA7BW,4CAA4C,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAA5C,4CAA4C,EAAA,CAAA,CAAA;;2FAA5C,4CAA4C,EAAA,UAAA,EAAA,CAAA;kBADxD;;;MCgBY,sBAAsB,CAAA;8GAAtB,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAtB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,sBAAsB,YAnBvB,gBAAgB,CAAA,EAAA,CAAA,CAAA;AAmBf,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,sBAAsB,EAAA,SAAA,EAlBtB;AACT,YAAA,oBAAoB,CAAC;AACnB,gBAAA;AACE,oBAAA,GAAG,EAAE,kCAAkC;AACvC,oBAAA,OAAO,EAAE,MAAM,OAAO,yFAAwC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,2BAA2B,CAAC;AAC3G,iBAAA;aACF,CAAC;YACF,mBAAmB,CAAC,2BAA2B,EAAE,MAC/C,OAAO,mEAAmB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,qCAAqC,CAAC,CACjF;YACD,EAAE,OAAO,EAAE,4BAA4B,EAAE,QAAQ,EAAE,qBAAqB,EAAE,KAAK,EAAE,IAAI,EAAE;YACvF,EAAE,OAAO,EAAE,kCAAkC,EAAE,QAAQ,EAAE,4CAA4C,EAAE,KAAK,EAAE,IAAI,EAAE;YACpH,EAAE,OAAO,EAAE,iBAAiB,EAAE,QAAQ,EAAE,4BAA4B,EAAE,KAAK,EAAE,IAAI,EAAE;YAEnF,EAAE,OAAO,EAAE,+BAA+B,EAAE,QAAQ,EAAE,+BAA+B,EAAE,KAAK,EAAE,IAAI,EAAE;YACpG,EAAE,OAAO,EAAE,mBAAmB,EAAE,QAAQ,EAAE,qCAAqC,EAAE,KAAK,EAAE,IAAI,EAAE;AAC/F,SAAA,EAAA,OAAA,EAAA,CAjBS,gBAAgB,CAAA,EAAA,CAAA,CAAA;;2FAmBf,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBApBlC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACR,OAAO,EAAE,CAAC,gBAAgB,CAAC;AAC3B,oBAAA,SAAS,EAAE;AACT,wBAAA,oBAAoB,CAAC;AACnB,4BAAA;AACE,gCAAA,GAAG,EAAE,kCAAkC;AACvC,gCAAA,OAAO,EAAE,MAAM,OAAO,yFAAwC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,2BAA2B,CAAC;AAC3G,6BAAA;yBACF,CAAC;wBACF,mBAAmB,CAAC,2BAA2B,EAAE,MAC/C,OAAO,mEAAmB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,qCAAqC,CAAC,CACjF;wBACD,EAAE,OAAO,EAAE,4BAA4B,EAAE,QAAQ,EAAE,qBAAqB,EAAE,KAAK,EAAE,IAAI,EAAE;wBACvF,EAAE,OAAO,EAAE,kCAAkC,EAAE,QAAQ,EAAE,4CAA4C,EAAE,KAAK,EAAE,IAAI,EAAE;wBACpH,EAAE,OAAO,EAAE,iBAAiB,EAAE,QAAQ,EAAE,4BAA4B,EAAE,KAAK,EAAE,IAAI,EAAE;wBAEnF,EAAE,OAAO,EAAE,+BAA+B,EAAE,QAAQ,EAAE,+BAA+B,EAAE,KAAK,EAAE,IAAI,EAAE;wBACpG,EAAE,OAAO,EAAE,mBAAmB,EAAE,QAAQ,EAAE,qCAAqC,EAAE,KAAK,EAAE,IAAI,EAAE;AAC/F,qBAAA;AACF,iBAAA;;;AChCD;;AAEG;;;;"}
|