aril 1.2.7 → 1.2.8
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/esm2022/theme/layout/app/site-map/site-map-sidebar.component.mjs +3 -3
- package/esm2022/ui-business/trace-drawer/index.mjs +3 -1
- package/esm2022/ui-business/trace-drawer/src/app-log.service.mjs +25 -0
- package/esm2022/ui-business/trace-drawer/src/interfaces.mjs +1 -1
- package/esm2022/ui-business/trace-drawer/src/trace-drawer.component.mjs +143 -15
- package/esm2022/util/sync-active-tab-route/src/sync-active-tab-route.directive.mjs +1 -1
- package/fesm2022/aril-theme-layout.mjs +2 -2
- package/fesm2022/aril-theme-layout.mjs.map +1 -1
- package/fesm2022/aril-ui-business-trace-drawer.mjs +162 -16
- package/fesm2022/aril-ui-business-trace-drawer.mjs.map +1 -1
- package/fesm2022/aril-util-sync-active-tab-route.mjs.map +1 -1
- package/package.json +170 -170
- package/theme/layout/app/site-map/site-map-sidebar.component.html +121 -121
- package/ui-business/trace-drawer/index.d.ts +2 -0
- package/ui-business/trace-drawer/src/app-log.service.d.ts +10 -0
- package/ui-business/trace-drawer/src/interfaces.d.ts +32 -0
- package/ui-business/trace-drawer/src/trace-drawer.component.d.ts +22 -1
|
@@ -1,21 +1,44 @@
|
|
|
1
1
|
import { JsonPipe } from '@angular/common';
|
|
2
2
|
import * as i0 from '@angular/core';
|
|
3
|
-
import { Injectable, inject, input, EventEmitter, signal, effect, Component, ChangeDetectionStrategy, Output } from '@angular/core';
|
|
3
|
+
import { Injectable, inject, input, EventEmitter, signal, computed, effect, Component, ChangeDetectionStrategy, Output } from '@angular/core';
|
|
4
4
|
import { toSignal } from '@angular/core/rxjs-interop';
|
|
5
|
-
import { Observable, Subject, switchMap, catchError, EMPTY } from 'rxjs';
|
|
5
|
+
import { Observable, Subject, switchMap, map, catchError, EMPTY } from 'rxjs';
|
|
6
6
|
import * as i4 from 'primeng/progressspinner';
|
|
7
7
|
import { ProgressSpinnerModule } from 'primeng/progressspinner';
|
|
8
8
|
import * as i2 from 'primeng/sidebar';
|
|
9
9
|
import { SidebarModule } from 'primeng/sidebar';
|
|
10
|
+
import * as i5 from 'primeng/tooltip';
|
|
11
|
+
import { TooltipModule } from 'primeng/tooltip';
|
|
10
12
|
import * as i1 from '@ngneat/transloco';
|
|
11
|
-
import { TranslocoModule } from '@ngneat/transloco';
|
|
13
|
+
import { TranslocoService, TranslocoModule } from '@ngneat/transloco';
|
|
14
|
+
import { KeycloakService } from 'keycloak-angular';
|
|
15
|
+
import * as i3 from 'primeng/api';
|
|
16
|
+
import { MessageService } from 'primeng/api';
|
|
12
17
|
import { BadgeComponent } from 'aril/ui/badge';
|
|
13
18
|
import { ButtonComponent } from 'aril/ui/button';
|
|
14
19
|
import 'aril/util/primitive-extensions';
|
|
15
20
|
import { __decorate } from 'tslib';
|
|
16
21
|
import { Apps } from 'aril/boot/config/apps';
|
|
17
22
|
import { RestClient, ServiceCall, HTTPMethods, ProxyTypes } from 'aril/http';
|
|
18
|
-
|
|
23
|
+
|
|
24
|
+
class AppLogService extends RestClient {
|
|
25
|
+
constructor() {
|
|
26
|
+
super(...arguments);
|
|
27
|
+
this.states = {};
|
|
28
|
+
}
|
|
29
|
+
searchByTraceId(req) {
|
|
30
|
+
return new Observable();
|
|
31
|
+
}
|
|
32
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: AppLogService, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
33
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: AppLogService, providedIn: 'root' }); }
|
|
34
|
+
}
|
|
35
|
+
__decorate([
|
|
36
|
+
ServiceCall(HTTPMethods.POST, ProxyTypes.ClientSide, 'application-logs/filter', {}, Apps.MW)
|
|
37
|
+
], AppLogService.prototype, "searchByTraceId", null);
|
|
38
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: AppLogService, decorators: [{
|
|
39
|
+
type: Injectable,
|
|
40
|
+
args: [{ providedIn: 'root' }]
|
|
41
|
+
}], propDecorators: { searchByTraceId: [] } });
|
|
19
42
|
|
|
20
43
|
class TraceLogService extends RestClient {
|
|
21
44
|
constructor() {
|
|
@@ -39,29 +62,55 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImpor
|
|
|
39
62
|
class TraceDrawerComponent {
|
|
40
63
|
constructor() {
|
|
41
64
|
this.traceLogService = inject(TraceLogService);
|
|
65
|
+
this.appLogService = inject(AppLogService);
|
|
66
|
+
this.messageService = inject(MessageService);
|
|
67
|
+
this.translocoService = inject(TranslocoService);
|
|
68
|
+
this.keycloakService = inject(KeycloakService);
|
|
42
69
|
this.visible = input(false);
|
|
43
70
|
this.traceId = input.required();
|
|
44
71
|
this.position = input('right');
|
|
45
72
|
this.width = input('min(680px, 90vw)');
|
|
46
73
|
this.modal = input(false);
|
|
47
|
-
this.pageSize = input(
|
|
74
|
+
this.pageSize = input(10);
|
|
48
75
|
this.startTime = input();
|
|
49
76
|
this.endTime = input();
|
|
50
77
|
this.visibleChange = new EventEmitter();
|
|
51
78
|
this.loading = signal(false);
|
|
79
|
+
this.loadingMore = signal(false);
|
|
52
80
|
this.errorMessage = signal(undefined);
|
|
53
81
|
this.apisixHits = signal([]);
|
|
82
|
+
this.totalItem = signal(0);
|
|
83
|
+
this.pageNumber = signal(1);
|
|
84
|
+
this.appLogs = signal([]);
|
|
85
|
+
this.appLogsLoadingMore = signal(false);
|
|
86
|
+
this.appLogsTotal = signal(0);
|
|
87
|
+
this.appLogsPage = signal(1);
|
|
88
|
+
this.hasMore = computed(() => this.apisixHits().length < this.totalItem());
|
|
89
|
+
this.appLogsHasMore = computed(() => this.appLogs().length < this.appLogsTotal());
|
|
54
90
|
this.request = new Subject();
|
|
55
|
-
this.
|
|
91
|
+
this.appLogsRequest = new Subject();
|
|
92
|
+
this.response = toSignal(this.request.pipe(switchMap((req) => this.traceLogService
|
|
56
93
|
.searchByTraceId({
|
|
57
|
-
traceId,
|
|
94
|
+
traceId: req.traceId,
|
|
58
95
|
startTime: this.startTime() ?? 20000101000000,
|
|
59
96
|
endTime: this.endTime() ?? (new Date().dateToLong('time') ?? 99991231235959),
|
|
60
|
-
pager: { pageSize: this.pageSize(), pageNumber:
|
|
97
|
+
pager: { pageSize: this.pageSize(), pageNumber: req.pageNumber }
|
|
61
98
|
})
|
|
62
|
-
.pipe(catchError((err) => {
|
|
99
|
+
.pipe(map((resp) => ({ resp, append: req.append })), catchError((err) => {
|
|
63
100
|
this.errorMessage.set(err?.error?.message ?? err?.message ?? 'İstek başarısız oldu');
|
|
64
101
|
this.loading.set(false);
|
|
102
|
+
this.loadingMore.set(false);
|
|
103
|
+
return EMPTY;
|
|
104
|
+
})))));
|
|
105
|
+
this.appLogsResponse = toSignal(this.appLogsRequest.pipe(switchMap((req) => this.appLogService
|
|
106
|
+
.searchByTraceId({
|
|
107
|
+
traceId: req.traceId,
|
|
108
|
+
startTime: this.startTime() ?? 20000101000000,
|
|
109
|
+
endTime: this.endTime() ?? (new Date().dateToLong('time') ?? 99991231235959),
|
|
110
|
+
pager: { pageSize: this.pageSize(), pageNumber: req.pageNumber }
|
|
111
|
+
})
|
|
112
|
+
.pipe(map((resp) => ({ resp, append: req.append })), catchError(() => {
|
|
113
|
+
this.appLogsLoadingMore.set(false);
|
|
65
114
|
return EMPTY;
|
|
66
115
|
})))));
|
|
67
116
|
effect(() => {
|
|
@@ -70,13 +119,45 @@ class TraceDrawerComponent {
|
|
|
70
119
|
}
|
|
71
120
|
}, { allowSignalWrites: true });
|
|
72
121
|
effect(() => {
|
|
73
|
-
const
|
|
74
|
-
if (!
|
|
122
|
+
const wrapped = this.response();
|
|
123
|
+
if (!wrapped)
|
|
75
124
|
return;
|
|
76
|
-
|
|
125
|
+
const result = wrapped.resp.response?.result ?? [];
|
|
126
|
+
const total = wrapped.resp.response?.resultInfo?.totalItem ?? 0;
|
|
127
|
+
this.apisixHits.update((prev) => (wrapped.append ? [...prev, ...result] : result));
|
|
128
|
+
this.totalItem.set(total);
|
|
77
129
|
this.loading.set(false);
|
|
130
|
+
this.loadingMore.set(false);
|
|
78
131
|
this.errorMessage.set(undefined);
|
|
79
132
|
}, { allowSignalWrites: true });
|
|
133
|
+
effect(() => {
|
|
134
|
+
const wrapped = this.appLogsResponse();
|
|
135
|
+
if (!wrapped)
|
|
136
|
+
return;
|
|
137
|
+
const result = wrapped.resp.response?.result ?? [];
|
|
138
|
+
const total = wrapped.resp.response?.resultInfo?.totalItem ?? 0;
|
|
139
|
+
this.appLogs.update((prev) => (wrapped.append ? [...prev, ...result] : result));
|
|
140
|
+
this.appLogsTotal.set(total);
|
|
141
|
+
this.appLogsLoadingMore.set(false);
|
|
142
|
+
}, { allowSignalWrites: true });
|
|
143
|
+
}
|
|
144
|
+
loadMore() {
|
|
145
|
+
const id = this.traceId();
|
|
146
|
+
if (!id || this.loadingMore() || !this.hasMore())
|
|
147
|
+
return;
|
|
148
|
+
const next = this.pageNumber() + 1;
|
|
149
|
+
this.pageNumber.set(next);
|
|
150
|
+
this.loadingMore.set(true);
|
|
151
|
+
this.request.next({ traceId: id, pageNumber: next, append: true });
|
|
152
|
+
}
|
|
153
|
+
loadMoreAppLogs() {
|
|
154
|
+
const id = this.traceId();
|
|
155
|
+
if (!id || this.appLogsLoadingMore() || !this.appLogsHasMore())
|
|
156
|
+
return;
|
|
157
|
+
const next = this.appLogsPage() + 1;
|
|
158
|
+
this.appLogsPage.set(next);
|
|
159
|
+
this.appLogsLoadingMore.set(true);
|
|
160
|
+
this.appLogsRequest.next({ traceId: id, pageNumber: next, append: true });
|
|
80
161
|
}
|
|
81
162
|
onVisibleChange(value) {
|
|
82
163
|
this.visibleChange.emit(value);
|
|
@@ -86,11 +167,59 @@ class TraceDrawerComponent {
|
|
|
86
167
|
if (id)
|
|
87
168
|
this.fetch(id);
|
|
88
169
|
}
|
|
170
|
+
shareLink() {
|
|
171
|
+
const id = this.traceId();
|
|
172
|
+
if (!id)
|
|
173
|
+
return;
|
|
174
|
+
const base = window.location.href.split('?')[0];
|
|
175
|
+
const url = `${base}?traceId=${encodeURIComponent(id)}`;
|
|
176
|
+
navigator.clipboard.writeText(url).then(() => {
|
|
177
|
+
this.messageService.add({
|
|
178
|
+
severity: 'success',
|
|
179
|
+
summary: this.translocoService.translate('traceDrawer.linkCopied'),
|
|
180
|
+
key: 'toast-root'
|
|
181
|
+
});
|
|
182
|
+
});
|
|
183
|
+
}
|
|
184
|
+
async copyAsCurl(hit) {
|
|
185
|
+
const token = await this.keycloakService.getToken().catch(() => '');
|
|
186
|
+
const cmd = this.buildCurl(hit, token);
|
|
187
|
+
await navigator.clipboard.writeText(cmd);
|
|
188
|
+
this.messageService.add({
|
|
189
|
+
severity: 'success',
|
|
190
|
+
summary: this.translocoService.translate('traceDrawer.curlCopied'),
|
|
191
|
+
key: 'toast-root'
|
|
192
|
+
});
|
|
193
|
+
}
|
|
194
|
+
buildCurl(hit, token) {
|
|
195
|
+
const method = (hit.requestMethod ?? 'GET').toUpperCase();
|
|
196
|
+
const host = hit.upstreamHost ? hit.upstreamHost.replace(/\/+$/, '') : '';
|
|
197
|
+
const uri = hit.requestUri ?? '';
|
|
198
|
+
const url = host ? (host.startsWith('http') ? `${host}${uri}` : `https://${host}${uri}`) : uri;
|
|
199
|
+
const escape = (s) => s.replace(/'/g, `'\\''`);
|
|
200
|
+
const lines = [`curl -X ${method} '${escape(url)}'`];
|
|
201
|
+
if (token)
|
|
202
|
+
lines.push(`-H 'Authorization: Bearer ${escape(token)}'`);
|
|
203
|
+
const body = hit.requestBody?.trim();
|
|
204
|
+
if (body) {
|
|
205
|
+
const isJson = (body.startsWith('{') && body.endsWith('}')) || (body.startsWith('[') && body.endsWith(']'));
|
|
206
|
+
if (isJson)
|
|
207
|
+
lines.push(`-H 'Content-Type: application/json'`);
|
|
208
|
+
lines.push(`-d '${escape(body)}'`);
|
|
209
|
+
}
|
|
210
|
+
return lines.join(' \\\n ');
|
|
211
|
+
}
|
|
89
212
|
fetch(traceId) {
|
|
90
213
|
this.loading.set(true);
|
|
91
214
|
this.errorMessage.set(undefined);
|
|
92
215
|
this.apisixHits.set([]);
|
|
93
|
-
this.
|
|
216
|
+
this.totalItem.set(0);
|
|
217
|
+
this.pageNumber.set(1);
|
|
218
|
+
this.appLogs.set([]);
|
|
219
|
+
this.appLogsTotal.set(0);
|
|
220
|
+
this.appLogsPage.set(1);
|
|
221
|
+
this.request.next({ traceId, pageNumber: 1, append: false });
|
|
222
|
+
this.appLogsRequest.next({ traceId, pageNumber: 1, append: false });
|
|
94
223
|
}
|
|
95
224
|
statusSeverity(status) {
|
|
96
225
|
if (status >= 500)
|
|
@@ -103,6 +232,23 @@ class TraceDrawerComponent {
|
|
|
103
232
|
return 'success';
|
|
104
233
|
return 'secondary';
|
|
105
234
|
}
|
|
235
|
+
levelSeverity(level) {
|
|
236
|
+
switch ((level ?? '').toUpperCase()) {
|
|
237
|
+
case 'ERROR':
|
|
238
|
+
case 'FATAL':
|
|
239
|
+
return 'danger';
|
|
240
|
+
case 'WARN':
|
|
241
|
+
case 'WARNING':
|
|
242
|
+
return 'warning';
|
|
243
|
+
case 'INFO':
|
|
244
|
+
return 'info';
|
|
245
|
+
case 'DEBUG':
|
|
246
|
+
case 'TRACE':
|
|
247
|
+
return 'secondary';
|
|
248
|
+
default:
|
|
249
|
+
return 'secondary';
|
|
250
|
+
}
|
|
251
|
+
}
|
|
106
252
|
durationSeverity(seconds) {
|
|
107
253
|
const ms = (seconds ?? 0) * 1000;
|
|
108
254
|
if (ms >= 1000)
|
|
@@ -159,11 +305,11 @@ class TraceDrawerComponent {
|
|
|
159
305
|
}
|
|
160
306
|
}
|
|
161
307
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: TraceDrawerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
162
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.1.2", type: TraceDrawerComponent, isStandalone: true, selector: "aril-trace-drawer", inputs: { visible: { classPropertyName: "visible", publicName: "visible", isSignal: true, isRequired: false, transformFunction: null }, traceId: { classPropertyName: "traceId", publicName: "traceId", isSignal: true, isRequired: true, transformFunction: null }, position: { classPropertyName: "position", publicName: "position", isSignal: true, isRequired: false, transformFunction: null }, width: { classPropertyName: "width", publicName: "width", isSignal: true, isRequired: false, transformFunction: null }, modal: { classPropertyName: "modal", publicName: "modal", isSignal: true, isRequired: false, transformFunction: null }, pageSize: { classPropertyName: "pageSize", publicName: "pageSize", isSignal: true, isRequired: false, transformFunction: null }, startTime: { classPropertyName: "startTime", publicName: "startTime", isSignal: true, isRequired: false, transformFunction: null }, endTime: { classPropertyName: "endTime", publicName: "endTime", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { visibleChange: "visibleChange" }, ngImport: i0, template: "<ng-container *transloco=\"let t\">\r\n\t<p-sidebar\r\n\t\t[visible]=\"visible()\"\r\n\t\t(visibleChange)=\"onVisibleChange($event)\"\r\n\t\t[position]=\"position()\"\r\n\t\t[style]=\"{ width: width() }\"\r\n\t\t[modal]=\"modal()\"\r\n\t\t[dismissible]=\"true\"\r\n\t\t[showCloseIcon]=\"true\"\r\n\t\tstyleClass=\"aril-trace-drawer\">\r\n\t\t<ng-template pTemplate=\"header\">\r\n\t\t\t<div class=\"aril-trace-drawer__header\">\r\n\t\t\t\t<i class=\"pi pi-sitemap\"></i>\r\n\t\t\t\t<span class=\"aril-trace-drawer__title\">{{ t('traceDrawer.title') }}</span>\r\n\t\t\t\t<code class=\"aril-trace-drawer__chip\" [title]=\"traceId()\">{{ traceId() }}</code>\r\n\t\t\t</div>\r\n\t\t</ng-template>\r\n\r\n\t\t<div class=\"aril-trace-drawer__body\">\r\n\t\t\t@if (loading()) {\r\n\t\t\t\t<div class=\"aril-trace-drawer__state\">\r\n\t\t\t\t\t<p-progressSpinner strokeWidth=\"3\" styleClass=\"w-3rem h-3rem\"></p-progressSpinner>\r\n\t\t\t\t\t<span>{{ t('traceDrawer.loading') }}</span>\r\n\t\t\t\t</div>\r\n\t\t\t} @else if (errorMessage()) {\r\n\t\t\t\t<div class=\"aril-trace-drawer__state aril-trace-drawer__state--error\">\r\n\t\t\t\t\t<i class=\"pi pi-exclamation-triangle\"></i>\r\n\t\t\t\t\t<p>{{ errorMessage() }}</p>\r\n\t\t\t\t\t<aril-button\r\n\t\t\t\t\t\t[label]=\"t('traceDrawer.retry')\"\r\n\t\t\t\t\t\ticon=\"REFRESH\"\r\n\t\t\t\t\t\tcolor=\"primary\"\r\n\t\t\t\t\t\t(clickEvent)=\"retry()\" />\r\n\t\t\t\t</div>\r\n\t\t\t} @else if (apisixHits().length) {\r\n\t\t\t\t<section class=\"aril-trace-drawer__section\">\r\n\t\t\t\t\t<h3 class=\"aril-trace-drawer__section-title\">\r\n\t\t\t\t\t\t<i class=\"pi pi-globe\"></i>\r\n\t\t\t\t\t\t{{ t('traceDrawer.apisixHeader') }}\r\n\t\t\t\t\t\t<aril-badge [value]=\"apisixHits().length.toString()\" severity=\"info\" [rounded]=\"true\" />\r\n\t\t\t\t\t</h3>\r\n\t\t\t\t\t@for (hit of apisixHits(); track hit.id) {\r\n\t\t\t\t\t\t<div class=\"apisix-card\">\r\n\t\t\t\t\t\t\t<div class=\"apisix-card__head\">\r\n\t\t\t\t\t\t\t\t<aril-badge [value]=\"hit.status.toString()\" [severity]=\"statusSeverity(hit.status)\" />\r\n\t\t\t\t\t\t\t\t<span class=\"apisix-card__method\">{{ hit.requestMethod }}</span>\r\n\t\t\t\t\t\t\t\t<span class=\"apisix-card__uri\" [title]=\"hit.requestUri\">{{ hit.requestUri }}</span>\r\n\t\t\t\t\t\t\t\t<aril-badge\r\n\t\t\t\t\t\t\t\t\t[value]=\"formatDuration(hit.responseTime)\"\r\n\t\t\t\t\t\t\t\t\t[severity]=\"durationSeverity(hit.responseTime)\" />\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t<div class=\"apisix-card__meta\">\r\n\t\t\t\t\t\t\t\t@if (hit.routeName) {\r\n\t\t\t\t\t\t\t\t\t<div><span class=\"meta-label\">{{ t('traceDrawer.route') }}</span><span>{{ hit.routeName }}</span></div>\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t@if (hit.timestamp) {\r\n\t\t\t\t\t\t\t\t\t<div><span class=\"meta-label\">{{ t('traceDrawer.timestamp') }}</span><span>{{ formatTimestamp(hit.timestamp) }}</span></div>\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t@if (hit.sourceApp || hit.sourceModule) {\r\n\t\t\t\t\t\t\t\t\t<div>\r\n\t\t\t\t\t\t\t\t\t\t<span class=\"meta-label\">{{ t('traceDrawer.source') }}</span>\r\n\t\t\t\t\t\t\t\t\t\t<span>{{ hit.sourceApp }}{{ hit.sourceModule ? ' / ' + hit.sourceModule : '' }}</span>\r\n\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t@if (hit.targetApp || hit.targetModule) {\r\n\t\t\t\t\t\t\t\t\t<div>\r\n\t\t\t\t\t\t\t\t\t\t<span class=\"meta-label\">{{ t('traceDrawer.target') }}</span>\r\n\t\t\t\t\t\t\t\t\t\t<span>{{ hit.targetApp }}{{ hit.targetModule ? ' / ' + hit.targetModule : '' }}</span>\r\n\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t@if (hit.upstreamHost) {\r\n\t\t\t\t\t\t\t\t\t<div><span class=\"meta-label\">{{ t('traceDrawer.upstream') }}</span><span>{{ hit.upstreamHost }}</span></div>\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t@if (hit.username) {\r\n\t\t\t\t\t\t\t\t\t<div><span class=\"meta-label\">{{ t('traceDrawer.user') }}</span><span>{{ hit.username }}</span></div>\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t@if (hit.requestSize !== undefined) {\r\n\t\t\t\t\t\t\t\t\t<div><span class=\"meta-label\">{{ t('traceDrawer.requestSize') }}</span><span>{{ formatBytes(hit.requestSize) }}</span></div>\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t@if (hit.responseSize !== undefined) {\r\n\t\t\t\t\t\t\t\t\t<div><span class=\"meta-label\">{{ t('traceDrawer.responseSize') }}</span><span>{{ formatBytes(hit.responseSize) }}</span></div>\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t@if (hit.requestBody) {\r\n\t\t\t\t\t\t\t\t<details class=\"apisix-card__body\">\r\n\t\t\t\t\t\t\t\t\t<summary>{{ t('traceDrawer.requestBody') }}</summary>\r\n\t\t\t\t\t\t\t\t\t@if (tryParseJson(hit.requestBody); as parsed) {\r\n\t\t\t\t\t\t\t\t\t\t<pre>{{ parsed | json }}</pre>\r\n\t\t\t\t\t\t\t\t\t} @else {\r\n\t\t\t\t\t\t\t\t\t\t<pre>{{ hit.requestBody }}</pre>\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t</details>\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t@if (hit.responseBody) {\r\n\t\t\t\t\t\t\t\t<details class=\"apisix-card__body\">\r\n\t\t\t\t\t\t\t\t\t<summary>{{ t('traceDrawer.responseBody') }}</summary>\r\n\t\t\t\t\t\t\t\t\t@if (tryParseJson(hit.responseBody); as parsed) {\r\n\t\t\t\t\t\t\t\t\t\t<pre>{{ parsed | json }}</pre>\r\n\t\t\t\t\t\t\t\t\t} @else {\r\n\t\t\t\t\t\t\t\t\t\t<pre>{{ hit.responseBody }}</pre>\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t</details>\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t}\r\n\t\t\t\t</section>\r\n\t\t\t} @else {\r\n\t\t\t\t<div class=\"aril-trace-drawer__state\">\r\n\t\t\t\t\t<i class=\"pi pi-inbox\"></i>\r\n\t\t\t\t\t<p>{{ t('traceDrawer.empty') }}</p>\r\n\t\t\t\t</div>\r\n\t\t\t}\r\n\t\t</div>\r\n\t</p-sidebar>\r\n</ng-container>\r\n", styles: [":host ::ng-deep .aril-trace-drawer .p-sidebar-header{padding:1rem 1.25rem;border-bottom:1px solid var(--surface-border, #e5e7eb)}:host ::ng-deep .aril-trace-drawer .p-sidebar-content{padding:0;overflow-y:auto}.aril-trace-drawer__header{display:flex;align-items:center;gap:.5rem;flex:1;min-width:0}.aril-trace-drawer__header .pi-sitemap{font-size:1.25rem;color:var(--primary-color, #1890ff)}.aril-trace-drawer__title{font-weight:600;font-size:1.1rem}.aril-trace-drawer__chip{font-size:.875rem;padding:.2rem .55rem;border-radius:4px;background:var(--surface-100, #f3f4f6);color:var(--text-color-secondary, #6b7280);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:240px}.aril-trace-drawer__body{padding:1rem 1.25rem;display:flex;flex-direction:column;gap:1.5rem}.aril-trace-drawer__state{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:.75rem;padding:3rem 1rem;color:var(--text-color-secondary, #6b7280);text-align:center;font-size:.95rem}.aril-trace-drawer__state .pi{font-size:2rem}.aril-trace-drawer__state--error .pi{color:var(--red-500, #ef4444)}.aril-trace-drawer__section-title{display:flex;align-items:center;gap:.5rem;margin:0 0 .75rem;font-size:1.05rem;font-weight:600}.aril-trace-drawer__section-title .pi{color:var(--primary-color, #1890ff)}.apisix-card{border:1px solid var(--surface-border, #e5e7eb);border-radius:6px;padding:.75rem;margin-bottom:.75rem;background:var(--surface-card, #ffffff);transition:box-shadow .15s ease}.apisix-card:hover{box-shadow:0 2px 8px #0000000f}.apisix-card__head{display:flex;align-items:center;gap:.5rem;flex-wrap:wrap;margin-bottom:.5rem}.apisix-card__method{font-weight:600;color:var(--primary-color, #1890ff);font-size:.9rem}.apisix-card__uri{font-size:.9rem;color:var(--text-color, #111827);flex:1;min-width:0;word-break:break-all;overflow-wrap:anywhere}.apisix-card__meta{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:.4rem 1rem;font-size:.9rem}.apisix-card__meta>div{display:grid;grid-template-columns:max-content 1fr;column-gap:.5rem;align-items:baseline;min-width:0}.apisix-card__meta .meta-label{color:var(--text-color-secondary, #6b7280);font-weight:500}.apisix-card__meta .meta-label:after{content:\":\"}.apisix-card__meta span:not(.meta-label){color:var(--text-color, #111827);word-break:break-word}.apisix-card__body{margin-top:.5rem}.apisix-card__body summary{cursor:pointer;font-size:.9rem;color:var(--primary-color, #1890ff);padding:.25rem 0;-webkit-user-select:none;user-select:none}.apisix-card__body summary:hover{text-decoration:underline}.apisix-card__body pre{margin:.35rem 0 0;padding:.6rem .85rem;background:var(--surface-100, #f3f4f6);border-radius:4px;font-size:.85rem;line-height:1.5;max-height:360px;overflow:auto;white-space:pre-wrap;word-break:break-word}\n"], dependencies: [{ kind: "pipe", type: JsonPipe, name: "json" }, { kind: "ngmodule", type: TranslocoModule }, { kind: "directive", type: i1.TranslocoDirective, selector: "[transloco]", inputs: ["transloco", "translocoParams", "translocoScope", "translocoRead", "translocoLang", "translocoLoadingTpl"] }, { kind: "ngmodule", type: SidebarModule }, { kind: "component", type: i2.Sidebar, selector: "p-sidebar", inputs: ["appendTo", "blockScroll", "style", "styleClass", "ariaCloseLabel", "autoZIndex", "baseZIndex", "modal", "dismissible", "showCloseIcon", "closeOnEscape", "transitionOptions", "visible", "position", "fullScreen"], outputs: ["onShow", "onHide", "visibleChange"] }, { kind: "directive", type: i3.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "ngmodule", type: ProgressSpinnerModule }, { kind: "component", type: i4.ProgressSpinner, selector: "p-progressSpinner", inputs: ["styleClass", "style", "strokeWidth", "fill", "animationDuration", "ariaLabel"] }, { kind: "component", type: BadgeComponent, selector: "aril-badge", inputs: ["icon", "value", "severity", "rounded", "background", "styleClass", "textColor", "borderColor", "textClampCharacters"] }, { kind: "component", type: ButtonComponent, selector: "aril-button:not([click])", inputs: ["label", "loading", "disabled", "raised", "rounded", "text", "outlined", "badge", "size", "icon", "iconPos", "color"], outputs: ["clickEvent"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
308
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.1.2", type: TraceDrawerComponent, isStandalone: true, selector: "aril-trace-drawer", inputs: { visible: { classPropertyName: "visible", publicName: "visible", isSignal: true, isRequired: false, transformFunction: null }, traceId: { classPropertyName: "traceId", publicName: "traceId", isSignal: true, isRequired: true, transformFunction: null }, position: { classPropertyName: "position", publicName: "position", isSignal: true, isRequired: false, transformFunction: null }, width: { classPropertyName: "width", publicName: "width", isSignal: true, isRequired: false, transformFunction: null }, modal: { classPropertyName: "modal", publicName: "modal", isSignal: true, isRequired: false, transformFunction: null }, pageSize: { classPropertyName: "pageSize", publicName: "pageSize", isSignal: true, isRequired: false, transformFunction: null }, startTime: { classPropertyName: "startTime", publicName: "startTime", isSignal: true, isRequired: false, transformFunction: null }, endTime: { classPropertyName: "endTime", publicName: "endTime", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { visibleChange: "visibleChange" }, ngImport: i0, template: "<ng-container *transloco=\"let t\">\r\n\t<p-sidebar\r\n\t\t[visible]=\"visible()\"\r\n\t\t(visibleChange)=\"onVisibleChange($event)\"\r\n\t\t[position]=\"position()\"\r\n\t\t[style]=\"{ width: width() }\"\r\n\t\t[modal]=\"modal()\"\r\n\t\t[dismissible]=\"true\"\r\n\t\t[showCloseIcon]=\"true\"\r\n\t\tstyleClass=\"aril-trace-drawer\">\r\n\t\t<ng-template pTemplate=\"header\">\r\n\t\t\t<div class=\"aril-trace-drawer__header\">\r\n\t\t\t\t<i class=\"pi pi-sitemap\"></i>\r\n\t\t\t\t<span class=\"aril-trace-drawer__title\">{{ t('traceDrawer.title') }}</span>\r\n\t\t\t\t<code class=\"aril-trace-drawer__chip\">{{ traceId() }}</code>\r\n\t\t\t\t<i\r\n\t\t\t\t\trole=\"button\"\r\n\t\t\t\t\tclass=\"pi pi-share-alt aril-trace-drawer__share\"\r\n\t\t\t\t\t[pTooltip]=\"t('traceDrawer.shareLink')\"\r\n\t\t\t\t\ttooltipPosition=\"bottom\"\r\n\t\t\t\t\t(click)=\"shareLink()\"></i>\r\n\t\t\t</div>\r\n\t\t</ng-template>\r\n\r\n\t\t<div class=\"aril-trace-drawer__body\">\r\n\t\t\t@if (loading()) {\r\n\t\t\t\t<div class=\"aril-trace-drawer__state\">\r\n\t\t\t\t\t<p-progressSpinner strokeWidth=\"3\" styleClass=\"w-3rem h-3rem\"></p-progressSpinner>\r\n\t\t\t\t\t<span>{{ t('traceDrawer.loading') }}</span>\r\n\t\t\t\t</div>\r\n\t\t\t} @else if (errorMessage()) {\r\n\t\t\t\t<div class=\"aril-trace-drawer__state aril-trace-drawer__state--error\">\r\n\t\t\t\t\t<i class=\"pi pi-exclamation-triangle\"></i>\r\n\t\t\t\t\t<p>{{ errorMessage() }}</p>\r\n\t\t\t\t\t<aril-button [label]=\"t('traceDrawer.retry')\" icon=\"REFRESH\" color=\"primary\" (clickEvent)=\"retry()\" />\r\n\t\t\t\t</div>\r\n\t\t\t} @else {\r\n\t\t\t\t@if (apisixHits().length) {\r\n\t\t\t\t\t<section class=\"aril-trace-drawer__section\">\r\n\t\t\t\t\t\t<h3 class=\"aril-trace-drawer__section-title\">\r\n\t\t\t\t\t\t\t<i class=\"pi pi-globe\"></i>\r\n\t\t\t\t\t\t\t{{ t('traceDrawer.apisixHeader') }}\r\n\t\t\t\t\t\t\t<aril-badge [value]=\"apisixHits().length + ' / ' + totalItem()\" [rounded]=\"true\" />\r\n\t\t\t\t\t\t</h3>\r\n\t\t\t\t\t\t@for (hit of apisixHits(); track hit.id) {\r\n\t\t\t\t\t\t\t<details class=\"trace-row trace-row--{{ statusSeverity(hit.status) }}\">\r\n\t\t\t\t\t\t\t\t<summary class=\"trace-row__summary\">\r\n\t\t\t\t\t\t\t\t\t<i class=\"pi pi-chevron-right trace-row__chevron\"></i>\r\n\t\t\t\t\t\t\t\t\t<aril-badge [value]=\"hit.status.toString()\" [severity]=\"statusSeverity(hit.status)\" />\r\n\t\t\t\t\t\t\t\t\t<span class=\"trace-row__tag\">{{ hit.requestMethod }}</span>\r\n\t\t\t\t\t\t\t\t\t<span class=\"trace-row__main\">{{ hit.requestUri }}</span>\r\n\t\t\t\t\t\t\t\t\t<aril-badge\r\n\t\t\t\t\t\t\t\t\t\t[value]=\"formatDuration(hit.responseTime)\"\r\n\t\t\t\t\t\t\t\t\t\t[severity]=\"durationSeverity(hit.responseTime)\" />\r\n\t\t\t\t\t\t\t\t\t@if (hit.timestamp) {\r\n\t\t\t\t\t\t\t\t\t\t<span class=\"trace-row__time\">{{ formatTimestamp(hit.timestamp) }}</span>\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t<i\r\n\t\t\t\t\t\t\t\t\t\trole=\"button\"\r\n\t\t\t\t\t\t\t\t\t\tclass=\"pi pi-code trace-row__action\"\r\n\t\t\t\t\t\t\t\t\t\t[pTooltip]=\"t('traceDrawer.copyCurl')\"\r\n\t\t\t\t\t\t\t\t\t\ttooltipPosition=\"left\"\r\n\t\t\t\t\t\t\t\t\t\t(click)=\"$event.preventDefault(); $event.stopPropagation(); copyAsCurl(hit)\"></i>\r\n\t\t\t\t\t\t\t\t</summary>\r\n\t\t\t\t\t\t\t\t<div class=\"trace-row__body\">\r\n\t\t\t\t\t\t\t\t\t<div class=\"trace-row__meta\">\r\n\t\t\t\t\t\t\t\t\t\t@if (hit.routeName) {\r\n\t\t\t\t\t\t\t\t\t\t\t<div>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"meta-label\">{{ t('traceDrawer.route') }}</span\r\n\t\t\t\t\t\t\t\t\t\t\t\t><span>{{ hit.routeName }}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t@if (hit.sourceApp || hit.sourceModule) {\r\n\t\t\t\t\t\t\t\t\t\t\t<div>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"meta-label\">{{ t('traceDrawer.source') }}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<span>{{ hit.sourceApp }}{{ hit.sourceModule ? ' / ' + hit.sourceModule : '' }}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t@if (hit.targetApp || hit.targetModule) {\r\n\t\t\t\t\t\t\t\t\t\t\t<div>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"meta-label\">{{ t('traceDrawer.target') }}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<span>{{ hit.targetApp }}{{ hit.targetModule ? ' / ' + hit.targetModule : '' }}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t@if (hit.upstreamHost) {\r\n\t\t\t\t\t\t\t\t\t\t\t<div>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"meta-label\">{{ t('traceDrawer.upstream') }}</span\r\n\t\t\t\t\t\t\t\t\t\t\t\t><span>{{ hit.upstreamHost }}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t@if (hit.username) {\r\n\t\t\t\t\t\t\t\t\t\t\t<div>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"meta-label\">{{ t('traceDrawer.user') }}</span\r\n\t\t\t\t\t\t\t\t\t\t\t\t><span>{{ hit.username }}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t@if (hit.requestSize !== undefined) {\r\n\t\t\t\t\t\t\t\t\t\t\t<div>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"meta-label\">{{ t('traceDrawer.requestSize') }}</span\r\n\t\t\t\t\t\t\t\t\t\t\t\t><span>{{ formatBytes(hit.requestSize) }}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t@if (hit.responseSize !== undefined) {\r\n\t\t\t\t\t\t\t\t\t\t\t<div>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"meta-label\">{{ t('traceDrawer.responseSize') }}</span\r\n\t\t\t\t\t\t\t\t\t\t\t\t><span>{{ formatBytes(hit.responseSize) }}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t@if (hit.requestBody) {\r\n\t\t\t\t\t\t\t\t\t\t<details class=\"trace-row__sub\">\r\n\t\t\t\t\t\t\t\t\t\t\t<summary>{{ t('traceDrawer.requestBody') }}</summary>\r\n\t\t\t\t\t\t\t\t\t\t\t@if (tryParseJson(hit.requestBody); as parsed) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t<pre>{{ parsed | json }}</pre>\r\n\t\t\t\t\t\t\t\t\t\t\t} @else {\r\n\t\t\t\t\t\t\t\t\t\t\t\t<pre>{{ hit.requestBody }}</pre>\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t</details>\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t@if (hit.responseBody) {\r\n\t\t\t\t\t\t\t\t\t\t<details class=\"trace-row__sub\">\r\n\t\t\t\t\t\t\t\t\t\t\t<summary>{{ t('traceDrawer.responseBody') }}</summary>\r\n\t\t\t\t\t\t\t\t\t\t\t@if (tryParseJson(hit.responseBody); as parsed) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t<pre>{{ parsed | json }}</pre>\r\n\t\t\t\t\t\t\t\t\t\t\t} @else {\r\n\t\t\t\t\t\t\t\t\t\t\t\t<pre>{{ hit.responseBody }}</pre>\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t</details>\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t</details>\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t@if (hasMore()) {\r\n\t\t\t\t\t\t\t<div class=\"aril-trace-drawer__load-more\">\r\n\t\t\t\t\t\t\t\t<aril-button\r\n\t\t\t\t\t\t\t\t\t[label]=\"t('traceDrawer.loadMore')\"\r\n\t\t\t\t\t\t\t\t\ticon=\"CHEVRON_DOWN\"\r\n\t\t\t\t\t\t\t\t\tcolor=\"primary\"\r\n\t\t\t\t\t\t\t\t\t[outlined]=\"true\"\r\n\t\t\t\t\t\t\t\t\t[loading]=\"loadingMore()\"\r\n\t\t\t\t\t\t\t\t\t[disabled]=\"loadingMore()\"\r\n\t\t\t\t\t\t\t\t\t(clickEvent)=\"loadMore()\" />\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t</section>\r\n\t\t\t\t}\r\n\t\t\t\t@if (appLogs().length) {\r\n\t\t\t\t\t<section class=\"aril-trace-drawer__section\">\r\n\t\t\t\t\t\t<h3 class=\"aril-trace-drawer__section-title\">\r\n\t\t\t\t\t\t\t<i class=\"pi pi-list\"></i>\r\n\t\t\t\t\t\t\t{{ t('traceDrawer.appLogsHeader') }}\r\n\t\t\t\t\t\t\t<aril-badge [value]=\"appLogs().length + ' / ' + appLogsTotal()\" [rounded]=\"true\" />\r\n\t\t\t\t\t\t</h3>\r\n\t\t\t\t\t\t@for (log of appLogs(); track log.id) {\r\n\t\t\t\t\t\t\t<details class=\"trace-row trace-row--{{ levelSeverity(log.level) }}\">\r\n\t\t\t\t\t\t\t\t<summary class=\"trace-row__summary\">\r\n\t\t\t\t\t\t\t\t\t<i class=\"pi pi-chevron-right trace-row__chevron\"></i>\r\n\t\t\t\t\t\t\t\t\t@if (log.level) {\r\n\t\t\t\t\t\t\t\t\t\t<aril-badge [value]=\"log.level\" [severity]=\"levelSeverity(log.level)\" />\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t@if (log.module) {\r\n\t\t\t\t\t\t\t\t\t\t<span class=\"trace-row__tag\">{{ log.module }}</span>\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t<span class=\"trace-row__main\">{{ log.message }}</span>\r\n\t\t\t\t\t\t\t\t\t@if (log.timestamp) {\r\n\t\t\t\t\t\t\t\t\t\t<span class=\"trace-row__time\">{{ formatTimestamp(log.timestamp) }}</span>\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t</summary>\r\n\t\t\t\t\t\t\t\t<div class=\"trace-row__body\">\r\n\t\t\t\t\t\t\t\t\t@if (log.message) {\r\n\t\t\t\t\t\t\t\t\t\t<div class=\"trace-row__message\">{{ log.message }}</div>\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t@if (log.username || log.app) {\r\n\t\t\t\t\t\t\t\t\t\t<div class=\"trace-row__meta\">\r\n\t\t\t\t\t\t\t\t\t\t\t@if (log.app) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t<div>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"meta-label\">{{ t('traceDrawer.target') }}</span\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t><span>{{ log.app }}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t@if (log.username) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t<div>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"meta-label\">{{ t('traceDrawer.user') }}</span\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t><span>{{ log.username }}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t@if (log.errorDetail) {\r\n\t\t\t\t\t\t\t\t\t\t<details class=\"trace-row__sub\" open>\r\n\t\t\t\t\t\t\t\t\t\t\t<summary>{{ t('traceDrawer.appLogErrorDetail') }}</summary>\r\n\t\t\t\t\t\t\t\t\t\t\t<pre>{{ log.errorDetail }}</pre>\r\n\t\t\t\t\t\t\t\t\t\t</details>\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t@if (log.referenceFields?.length) {\r\n\t\t\t\t\t\t\t\t\t\t<details class=\"trace-row__sub\">\r\n\t\t\t\t\t\t\t\t\t\t\t<summary>{{ t('traceDrawer.appLogRefFields') }}</summary>\r\n\t\t\t\t\t\t\t\t\t\t\t<div class=\"trace-row__meta\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t@for (rf of log.referenceFields; track rf.field) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<div>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"meta-label\">{{ rf.field }}</span\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t><span>{{ rf.value }}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t\t</details>\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t</details>\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t@if (appLogsHasMore()) {\r\n\t\t\t\t\t\t\t<div class=\"aril-trace-drawer__load-more\">\r\n\t\t\t\t\t\t\t\t<aril-button\r\n\t\t\t\t\t\t\t\t\t[label]=\"t('traceDrawer.loadMore')\"\r\n\t\t\t\t\t\t\t\t\ticon=\"CHEVRON_DOWN\"\r\n\t\t\t\t\t\t\t\t\tcolor=\"primary\"\r\n\t\t\t\t\t\t\t\t\t[outlined]=\"true\"\r\n\t\t\t\t\t\t\t\t\t[loading]=\"appLogsLoadingMore()\"\r\n\t\t\t\t\t\t\t\t\t[disabled]=\"appLogsLoadingMore()\"\r\n\t\t\t\t\t\t\t\t\t(clickEvent)=\"loadMoreAppLogs()\" />\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t</section>\r\n\t\t\t\t}\r\n\t\t\t\t@if (!apisixHits().length && !appLogs().length) {\r\n\t\t\t\t\t<div class=\"aril-trace-drawer__state\">\r\n\t\t\t\t\t\t<i class=\"pi pi-inbox\"></i>\r\n\t\t\t\t\t\t<p>{{ t('traceDrawer.empty') }}</p>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t</div>\r\n\t</p-sidebar>\r\n</ng-container>\r\n", styles: [":host ::ng-deep .aril-trace-drawer{display:flex;flex-direction:column;height:100%}:host ::ng-deep .aril-trace-drawer .p-sidebar-header{padding:1rem 1.25rem;border-bottom:1px solid var(--surface-border, #e5e7eb);flex:0 0 auto}:host ::ng-deep .aril-trace-drawer .p-sidebar-content{padding:0;flex:1 1 auto;min-height:0;overflow-y:auto;overflow-x:hidden}.aril-trace-drawer__header{display:flex;align-items:center;gap:.5rem;flex:1;min-width:0}.aril-trace-drawer__header .pi-sitemap{font-size:1.25rem;color:var(--primary-color, #1890ff)}.aril-trace-drawer__title{font-weight:600;font-size:1.1rem}.aril-trace-drawer__chip{font-size:.875rem;padding:.2rem .55rem;border-radius:4px;background:var(--surface-100, #f3f4f6);color:var(--text-color-secondary, #6b7280);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:240px}.aril-trace-drawer__share{cursor:pointer;font-size:1rem;padding:.4rem;border-radius:4px;color:var(--primary-color, #1890ff);transition:background .15s ease}.aril-trace-drawer__share:hover{background:var(--surface-100, #f3f4f6)}.aril-trace-drawer__body{padding:1rem 1.25rem;display:flex;flex-direction:column;gap:1.5rem;min-height:min-content}.aril-trace-drawer__state{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:.75rem;padding:3rem 1rem;color:var(--text-color-secondary, #6b7280);text-align:center;font-size:.95rem}.aril-trace-drawer__state .pi{font-size:2rem}.aril-trace-drawer__state--error .pi{color:var(--red-500, #ef4444)}.aril-trace-drawer__section-title{display:flex;align-items:center;gap:.5rem;margin:0 0 .5rem;font-size:1rem;font-weight:600}.aril-trace-drawer__section-title .pi{color:var(--primary-color, #1890ff)}.trace-row{display:block;border:1px solid var(--surface-border, #e5e7eb);border-left:3px solid var(--surface-border, #e5e7eb);background:var(--surface-card, #ffffff);border-radius:4px;overflow:hidden;transition:background .15s ease,border-color .15s ease,box-shadow .15s ease}.trace-row+.trace-row{margin-top:.4rem}.trace-row:hover{border-top-color:var(--surface-300, #d1d5db);border-right-color:var(--surface-300, #d1d5db);border-bottom-color:var(--surface-300, #d1d5db);box-shadow:0 1px 3px #0000000a}.trace-row[open]{background:var(--surface-50, #fafafa);border-top-color:var(--surface-300, #d1d5db);border-right-color:var(--surface-300, #d1d5db);border-bottom-color:var(--surface-300, #d1d5db);box-shadow:0 1px 4px #0000000d}.trace-row--success{border-left-color:var(--green-500, #22c55e)}.trace-row--info{border-left-color:var(--blue-500, #3b82f6)}.trace-row--warning{border-left-color:var(--orange-500, #f97316)}.trace-row--danger{border-left-color:var(--red-500, #ef4444)}.trace-row--secondary{border-left-color:var(--gray-400, #9ca3af)}.trace-row__summary{cursor:pointer;-webkit-user-select:none;user-select:none;list-style:none;display:flex;align-items:center;gap:.5rem;padding:.5rem .75rem}.trace-row__summary::-webkit-details-marker{display:none}.trace-row__summary:hover{background:var(--surface-50, #fafafa)}.trace-row[open] .trace-row__summary:hover{background:var(--surface-100, #f3f4f6)}.trace-row__chevron{color:var(--text-color-secondary, #6b7280);font-size:.7rem;transition:transform .15s ease;flex-shrink:0}.trace-row[open] .trace-row__chevron{transform:rotate(90deg)}.trace-row__tag{font-weight:600;color:var(--primary-color, #1890ff);font-size:.8rem;white-space:nowrap;flex-shrink:0;letter-spacing:.02em}.trace-row__main{font-size:.85rem;color:var(--text-color, #111827);flex:1;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.trace-row__time{font-size:.75rem;color:var(--text-color-secondary, #6b7280);font-variant-numeric:tabular-nums;white-space:nowrap;flex-shrink:0}.trace-row__action{cursor:pointer;padding:.25rem;border-radius:4px;color:var(--text-color-secondary, #6b7280);flex-shrink:0;transition:background .15s ease,color .15s ease}.trace-row__action:hover{background:var(--surface-100, #f3f4f6);color:var(--primary-color, #1890ff)}.trace-row__body{padding:.5rem .75rem .75rem;border-top:1px solid var(--surface-border, #e5e7eb);display:flex;flex-direction:column;gap:.5rem;background:var(--surface-0, #ffffff)}.trace-row__message{font-size:.85rem;color:var(--text-color, #111827);line-height:1.5;white-space:pre-wrap;word-break:break-word;overflow-wrap:anywhere;background:var(--surface-100, #f3f4f6);border-radius:4px;padding:.5rem .65rem}.trace-row__meta{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:.25rem .75rem;font-size:.8rem}.trace-row__meta>div{display:grid;grid-template-columns:max-content 1fr;column-gap:.4rem;align-items:baseline;min-width:0}.trace-row__meta .meta-label{color:var(--text-color-secondary, #6b7280);font-weight:500}.trace-row__meta .meta-label:after{content:\":\"}.trace-row__meta span:not(.meta-label){color:var(--text-color, #111827);word-break:break-word}.trace-row__sub{margin:0}.trace-row__sub summary{cursor:pointer;font-size:.8rem;color:var(--primary-color, #1890ff);padding:.15rem 0;-webkit-user-select:none;user-select:none}.trace-row__sub summary:hover{text-decoration:underline}.trace-row__sub pre{margin:.25rem 0 0;padding:.5rem .75rem;background:var(--surface-100, #f3f4f6);border-radius:4px;font-size:.78rem;line-height:1.45;max-height:320px;overflow:auto;white-space:pre-wrap;word-break:break-word}.aril-trace-drawer__load-more{display:flex;justify-content:center;margin-top:.5rem}\n"], dependencies: [{ kind: "pipe", type: JsonPipe, name: "json" }, { kind: "ngmodule", type: TranslocoModule }, { kind: "directive", type: i1.TranslocoDirective, selector: "[transloco]", inputs: ["transloco", "translocoParams", "translocoScope", "translocoRead", "translocoLang", "translocoLoadingTpl"] }, { kind: "ngmodule", type: SidebarModule }, { kind: "component", type: i2.Sidebar, selector: "p-sidebar", inputs: ["appendTo", "blockScroll", "style", "styleClass", "ariaCloseLabel", "autoZIndex", "baseZIndex", "modal", "dismissible", "showCloseIcon", "closeOnEscape", "transitionOptions", "visible", "position", "fullScreen"], outputs: ["onShow", "onHide", "visibleChange"] }, { kind: "directive", type: i3.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "ngmodule", type: ProgressSpinnerModule }, { kind: "component", type: i4.ProgressSpinner, selector: "p-progressSpinner", inputs: ["styleClass", "style", "strokeWidth", "fill", "animationDuration", "ariaLabel"] }, { kind: "ngmodule", type: TooltipModule }, { kind: "directive", type: i5.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "component", type: BadgeComponent, selector: "aril-badge", inputs: ["icon", "value", "severity", "rounded", "background", "styleClass", "textColor", "borderColor", "textClampCharacters"] }, { kind: "component", type: ButtonComponent, selector: "aril-button:not([click])", inputs: ["label", "loading", "disabled", "raised", "rounded", "text", "outlined", "badge", "size", "icon", "iconPos", "color"], outputs: ["clickEvent"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
163
309
|
}
|
|
164
310
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: TraceDrawerComponent, decorators: [{
|
|
165
311
|
type: Component,
|
|
166
|
-
args: [{ standalone: true, selector: 'aril-trace-drawer', imports: [JsonPipe, TranslocoModule, SidebarModule, ProgressSpinnerModule, BadgeComponent, ButtonComponent], changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container *transloco=\"let t\">\r\n\t<p-sidebar\r\n\t\t[visible]=\"visible()\"\r\n\t\t(visibleChange)=\"onVisibleChange($event)\"\r\n\t\t[position]=\"position()\"\r\n\t\t[style]=\"{ width: width() }\"\r\n\t\t[modal]=\"modal()\"\r\n\t\t[dismissible]=\"true\"\r\n\t\t[showCloseIcon]=\"true\"\r\n\t\tstyleClass=\"aril-trace-drawer\">\r\n\t\t<ng-template pTemplate=\"header\">\r\n\t\t\t<div class=\"aril-trace-drawer__header\">\r\n\t\t\t\t<i class=\"pi pi-sitemap\"></i>\r\n\t\t\t\t<span class=\"aril-trace-drawer__title\">{{ t('traceDrawer.title') }}</span>\r\n\t\t\t\t<code class=\"aril-trace-drawer__chip\" [title]=\"traceId()\">{{ traceId() }}</code>\r\n\t\t\t</div>\r\n\t\t</ng-template>\r\n\r\n\t\t<div class=\"aril-trace-drawer__body\">\r\n\t\t\t@if (loading()) {\r\n\t\t\t\t<div class=\"aril-trace-drawer__state\">\r\n\t\t\t\t\t<p-progressSpinner strokeWidth=\"3\" styleClass=\"w-3rem h-3rem\"></p-progressSpinner>\r\n\t\t\t\t\t<span>{{ t('traceDrawer.loading') }}</span>\r\n\t\t\t\t</div>\r\n\t\t\t} @else if (errorMessage()) {\r\n\t\t\t\t<div class=\"aril-trace-drawer__state aril-trace-drawer__state--error\">\r\n\t\t\t\t\t<i class=\"pi pi-exclamation-triangle\"></i>\r\n\t\t\t\t\t<p>{{ errorMessage() }}</p>\r\n\t\t\t\t\t<aril-button\r\n\t\t\t\t\t\t[label]=\"t('traceDrawer.retry')\"\r\n\t\t\t\t\t\ticon=\"REFRESH\"\r\n\t\t\t\t\t\tcolor=\"primary\"\r\n\t\t\t\t\t\t(clickEvent)=\"retry()\" />\r\n\t\t\t\t</div>\r\n\t\t\t} @else if (apisixHits().length) {\r\n\t\t\t\t<section class=\"aril-trace-drawer__section\">\r\n\t\t\t\t\t<h3 class=\"aril-trace-drawer__section-title\">\r\n\t\t\t\t\t\t<i class=\"pi pi-globe\"></i>\r\n\t\t\t\t\t\t{{ t('traceDrawer.apisixHeader') }}\r\n\t\t\t\t\t\t<aril-badge [value]=\"apisixHits().length.toString()\" severity=\"info\" [rounded]=\"true\" />\r\n\t\t\t\t\t</h3>\r\n\t\t\t\t\t@for (hit of apisixHits(); track hit.id) {\r\n\t\t\t\t\t\t<div class=\"apisix-card\">\r\n\t\t\t\t\t\t\t<div class=\"apisix-card__head\">\r\n\t\t\t\t\t\t\t\t<aril-badge [value]=\"hit.status.toString()\" [severity]=\"statusSeverity(hit.status)\" />\r\n\t\t\t\t\t\t\t\t<span class=\"apisix-card__method\">{{ hit.requestMethod }}</span>\r\n\t\t\t\t\t\t\t\t<span class=\"apisix-card__uri\" [title]=\"hit.requestUri\">{{ hit.requestUri }}</span>\r\n\t\t\t\t\t\t\t\t<aril-badge\r\n\t\t\t\t\t\t\t\t\t[value]=\"formatDuration(hit.responseTime)\"\r\n\t\t\t\t\t\t\t\t\t[severity]=\"durationSeverity(hit.responseTime)\" />\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t<div class=\"apisix-card__meta\">\r\n\t\t\t\t\t\t\t\t@if (hit.routeName) {\r\n\t\t\t\t\t\t\t\t\t<div><span class=\"meta-label\">{{ t('traceDrawer.route') }}</span><span>{{ hit.routeName }}</span></div>\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t@if (hit.timestamp) {\r\n\t\t\t\t\t\t\t\t\t<div><span class=\"meta-label\">{{ t('traceDrawer.timestamp') }}</span><span>{{ formatTimestamp(hit.timestamp) }}</span></div>\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t@if (hit.sourceApp || hit.sourceModule) {\r\n\t\t\t\t\t\t\t\t\t<div>\r\n\t\t\t\t\t\t\t\t\t\t<span class=\"meta-label\">{{ t('traceDrawer.source') }}</span>\r\n\t\t\t\t\t\t\t\t\t\t<span>{{ hit.sourceApp }}{{ hit.sourceModule ? ' / ' + hit.sourceModule : '' }}</span>\r\n\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t@if (hit.targetApp || hit.targetModule) {\r\n\t\t\t\t\t\t\t\t\t<div>\r\n\t\t\t\t\t\t\t\t\t\t<span class=\"meta-label\">{{ t('traceDrawer.target') }}</span>\r\n\t\t\t\t\t\t\t\t\t\t<span>{{ hit.targetApp }}{{ hit.targetModule ? ' / ' + hit.targetModule : '' }}</span>\r\n\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t@if (hit.upstreamHost) {\r\n\t\t\t\t\t\t\t\t\t<div><span class=\"meta-label\">{{ t('traceDrawer.upstream') }}</span><span>{{ hit.upstreamHost }}</span></div>\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t@if (hit.username) {\r\n\t\t\t\t\t\t\t\t\t<div><span class=\"meta-label\">{{ t('traceDrawer.user') }}</span><span>{{ hit.username }}</span></div>\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t@if (hit.requestSize !== undefined) {\r\n\t\t\t\t\t\t\t\t\t<div><span class=\"meta-label\">{{ t('traceDrawer.requestSize') }}</span><span>{{ formatBytes(hit.requestSize) }}</span></div>\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t@if (hit.responseSize !== undefined) {\r\n\t\t\t\t\t\t\t\t\t<div><span class=\"meta-label\">{{ t('traceDrawer.responseSize') }}</span><span>{{ formatBytes(hit.responseSize) }}</span></div>\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t@if (hit.requestBody) {\r\n\t\t\t\t\t\t\t\t<details class=\"apisix-card__body\">\r\n\t\t\t\t\t\t\t\t\t<summary>{{ t('traceDrawer.requestBody') }}</summary>\r\n\t\t\t\t\t\t\t\t\t@if (tryParseJson(hit.requestBody); as parsed) {\r\n\t\t\t\t\t\t\t\t\t\t<pre>{{ parsed | json }}</pre>\r\n\t\t\t\t\t\t\t\t\t} @else {\r\n\t\t\t\t\t\t\t\t\t\t<pre>{{ hit.requestBody }}</pre>\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t</details>\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t@if (hit.responseBody) {\r\n\t\t\t\t\t\t\t\t<details class=\"apisix-card__body\">\r\n\t\t\t\t\t\t\t\t\t<summary>{{ t('traceDrawer.responseBody') }}</summary>\r\n\t\t\t\t\t\t\t\t\t@if (tryParseJson(hit.responseBody); as parsed) {\r\n\t\t\t\t\t\t\t\t\t\t<pre>{{ parsed | json }}</pre>\r\n\t\t\t\t\t\t\t\t\t} @else {\r\n\t\t\t\t\t\t\t\t\t\t<pre>{{ hit.responseBody }}</pre>\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t</details>\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t}\r\n\t\t\t\t</section>\r\n\t\t\t} @else {\r\n\t\t\t\t<div class=\"aril-trace-drawer__state\">\r\n\t\t\t\t\t<i class=\"pi pi-inbox\"></i>\r\n\t\t\t\t\t<p>{{ t('traceDrawer.empty') }}</p>\r\n\t\t\t\t</div>\r\n\t\t\t}\r\n\t\t</div>\r\n\t</p-sidebar>\r\n</ng-container>\r\n", styles: [":host ::ng-deep .aril-trace-drawer .p-sidebar-header{padding:1rem 1.25rem;border-bottom:1px solid var(--surface-border, #e5e7eb)}:host ::ng-deep .aril-trace-drawer .p-sidebar-content{padding:0;overflow-y:auto}.aril-trace-drawer__header{display:flex;align-items:center;gap:.5rem;flex:1;min-width:0}.aril-trace-drawer__header .pi-sitemap{font-size:1.25rem;color:var(--primary-color, #1890ff)}.aril-trace-drawer__title{font-weight:600;font-size:1.1rem}.aril-trace-drawer__chip{font-size:.875rem;padding:.2rem .55rem;border-radius:4px;background:var(--surface-100, #f3f4f6);color:var(--text-color-secondary, #6b7280);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:240px}.aril-trace-drawer__body{padding:1rem 1.25rem;display:flex;flex-direction:column;gap:1.5rem}.aril-trace-drawer__state{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:.75rem;padding:3rem 1rem;color:var(--text-color-secondary, #6b7280);text-align:center;font-size:.95rem}.aril-trace-drawer__state .pi{font-size:2rem}.aril-trace-drawer__state--error .pi{color:var(--red-500, #ef4444)}.aril-trace-drawer__section-title{display:flex;align-items:center;gap:.5rem;margin:0 0 .75rem;font-size:1.05rem;font-weight:600}.aril-trace-drawer__section-title .pi{color:var(--primary-color, #1890ff)}.apisix-card{border:1px solid var(--surface-border, #e5e7eb);border-radius:6px;padding:.75rem;margin-bottom:.75rem;background:var(--surface-card, #ffffff);transition:box-shadow .15s ease}.apisix-card:hover{box-shadow:0 2px 8px #0000000f}.apisix-card__head{display:flex;align-items:center;gap:.5rem;flex-wrap:wrap;margin-bottom:.5rem}.apisix-card__method{font-weight:600;color:var(--primary-color, #1890ff);font-size:.9rem}.apisix-card__uri{font-size:.9rem;color:var(--text-color, #111827);flex:1;min-width:0;word-break:break-all;overflow-wrap:anywhere}.apisix-card__meta{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:.4rem 1rem;font-size:.9rem}.apisix-card__meta>div{display:grid;grid-template-columns:max-content 1fr;column-gap:.5rem;align-items:baseline;min-width:0}.apisix-card__meta .meta-label{color:var(--text-color-secondary, #6b7280);font-weight:500}.apisix-card__meta .meta-label:after{content:\":\"}.apisix-card__meta span:not(.meta-label){color:var(--text-color, #111827);word-break:break-word}.apisix-card__body{margin-top:.5rem}.apisix-card__body summary{cursor:pointer;font-size:.9rem;color:var(--primary-color, #1890ff);padding:.25rem 0;-webkit-user-select:none;user-select:none}.apisix-card__body summary:hover{text-decoration:underline}.apisix-card__body pre{margin:.35rem 0 0;padding:.6rem .85rem;background:var(--surface-100, #f3f4f6);border-radius:4px;font-size:.85rem;line-height:1.5;max-height:360px;overflow:auto;white-space:pre-wrap;word-break:break-word}\n"] }]
|
|
312
|
+
args: [{ standalone: true, selector: 'aril-trace-drawer', imports: [JsonPipe, TranslocoModule, SidebarModule, ProgressSpinnerModule, TooltipModule, BadgeComponent, ButtonComponent], changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container *transloco=\"let t\">\r\n\t<p-sidebar\r\n\t\t[visible]=\"visible()\"\r\n\t\t(visibleChange)=\"onVisibleChange($event)\"\r\n\t\t[position]=\"position()\"\r\n\t\t[style]=\"{ width: width() }\"\r\n\t\t[modal]=\"modal()\"\r\n\t\t[dismissible]=\"true\"\r\n\t\t[showCloseIcon]=\"true\"\r\n\t\tstyleClass=\"aril-trace-drawer\">\r\n\t\t<ng-template pTemplate=\"header\">\r\n\t\t\t<div class=\"aril-trace-drawer__header\">\r\n\t\t\t\t<i class=\"pi pi-sitemap\"></i>\r\n\t\t\t\t<span class=\"aril-trace-drawer__title\">{{ t('traceDrawer.title') }}</span>\r\n\t\t\t\t<code class=\"aril-trace-drawer__chip\">{{ traceId() }}</code>\r\n\t\t\t\t<i\r\n\t\t\t\t\trole=\"button\"\r\n\t\t\t\t\tclass=\"pi pi-share-alt aril-trace-drawer__share\"\r\n\t\t\t\t\t[pTooltip]=\"t('traceDrawer.shareLink')\"\r\n\t\t\t\t\ttooltipPosition=\"bottom\"\r\n\t\t\t\t\t(click)=\"shareLink()\"></i>\r\n\t\t\t</div>\r\n\t\t</ng-template>\r\n\r\n\t\t<div class=\"aril-trace-drawer__body\">\r\n\t\t\t@if (loading()) {\r\n\t\t\t\t<div class=\"aril-trace-drawer__state\">\r\n\t\t\t\t\t<p-progressSpinner strokeWidth=\"3\" styleClass=\"w-3rem h-3rem\"></p-progressSpinner>\r\n\t\t\t\t\t<span>{{ t('traceDrawer.loading') }}</span>\r\n\t\t\t\t</div>\r\n\t\t\t} @else if (errorMessage()) {\r\n\t\t\t\t<div class=\"aril-trace-drawer__state aril-trace-drawer__state--error\">\r\n\t\t\t\t\t<i class=\"pi pi-exclamation-triangle\"></i>\r\n\t\t\t\t\t<p>{{ errorMessage() }}</p>\r\n\t\t\t\t\t<aril-button [label]=\"t('traceDrawer.retry')\" icon=\"REFRESH\" color=\"primary\" (clickEvent)=\"retry()\" />\r\n\t\t\t\t</div>\r\n\t\t\t} @else {\r\n\t\t\t\t@if (apisixHits().length) {\r\n\t\t\t\t\t<section class=\"aril-trace-drawer__section\">\r\n\t\t\t\t\t\t<h3 class=\"aril-trace-drawer__section-title\">\r\n\t\t\t\t\t\t\t<i class=\"pi pi-globe\"></i>\r\n\t\t\t\t\t\t\t{{ t('traceDrawer.apisixHeader') }}\r\n\t\t\t\t\t\t\t<aril-badge [value]=\"apisixHits().length + ' / ' + totalItem()\" [rounded]=\"true\" />\r\n\t\t\t\t\t\t</h3>\r\n\t\t\t\t\t\t@for (hit of apisixHits(); track hit.id) {\r\n\t\t\t\t\t\t\t<details class=\"trace-row trace-row--{{ statusSeverity(hit.status) }}\">\r\n\t\t\t\t\t\t\t\t<summary class=\"trace-row__summary\">\r\n\t\t\t\t\t\t\t\t\t<i class=\"pi pi-chevron-right trace-row__chevron\"></i>\r\n\t\t\t\t\t\t\t\t\t<aril-badge [value]=\"hit.status.toString()\" [severity]=\"statusSeverity(hit.status)\" />\r\n\t\t\t\t\t\t\t\t\t<span class=\"trace-row__tag\">{{ hit.requestMethod }}</span>\r\n\t\t\t\t\t\t\t\t\t<span class=\"trace-row__main\">{{ hit.requestUri }}</span>\r\n\t\t\t\t\t\t\t\t\t<aril-badge\r\n\t\t\t\t\t\t\t\t\t\t[value]=\"formatDuration(hit.responseTime)\"\r\n\t\t\t\t\t\t\t\t\t\t[severity]=\"durationSeverity(hit.responseTime)\" />\r\n\t\t\t\t\t\t\t\t\t@if (hit.timestamp) {\r\n\t\t\t\t\t\t\t\t\t\t<span class=\"trace-row__time\">{{ formatTimestamp(hit.timestamp) }}</span>\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t<i\r\n\t\t\t\t\t\t\t\t\t\trole=\"button\"\r\n\t\t\t\t\t\t\t\t\t\tclass=\"pi pi-code trace-row__action\"\r\n\t\t\t\t\t\t\t\t\t\t[pTooltip]=\"t('traceDrawer.copyCurl')\"\r\n\t\t\t\t\t\t\t\t\t\ttooltipPosition=\"left\"\r\n\t\t\t\t\t\t\t\t\t\t(click)=\"$event.preventDefault(); $event.stopPropagation(); copyAsCurl(hit)\"></i>\r\n\t\t\t\t\t\t\t\t</summary>\r\n\t\t\t\t\t\t\t\t<div class=\"trace-row__body\">\r\n\t\t\t\t\t\t\t\t\t<div class=\"trace-row__meta\">\r\n\t\t\t\t\t\t\t\t\t\t@if (hit.routeName) {\r\n\t\t\t\t\t\t\t\t\t\t\t<div>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"meta-label\">{{ t('traceDrawer.route') }}</span\r\n\t\t\t\t\t\t\t\t\t\t\t\t><span>{{ hit.routeName }}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t@if (hit.sourceApp || hit.sourceModule) {\r\n\t\t\t\t\t\t\t\t\t\t\t<div>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"meta-label\">{{ t('traceDrawer.source') }}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<span>{{ hit.sourceApp }}{{ hit.sourceModule ? ' / ' + hit.sourceModule : '' }}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t@if (hit.targetApp || hit.targetModule) {\r\n\t\t\t\t\t\t\t\t\t\t\t<div>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"meta-label\">{{ t('traceDrawer.target') }}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<span>{{ hit.targetApp }}{{ hit.targetModule ? ' / ' + hit.targetModule : '' }}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t@if (hit.upstreamHost) {\r\n\t\t\t\t\t\t\t\t\t\t\t<div>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"meta-label\">{{ t('traceDrawer.upstream') }}</span\r\n\t\t\t\t\t\t\t\t\t\t\t\t><span>{{ hit.upstreamHost }}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t@if (hit.username) {\r\n\t\t\t\t\t\t\t\t\t\t\t<div>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"meta-label\">{{ t('traceDrawer.user') }}</span\r\n\t\t\t\t\t\t\t\t\t\t\t\t><span>{{ hit.username }}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t@if (hit.requestSize !== undefined) {\r\n\t\t\t\t\t\t\t\t\t\t\t<div>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"meta-label\">{{ t('traceDrawer.requestSize') }}</span\r\n\t\t\t\t\t\t\t\t\t\t\t\t><span>{{ formatBytes(hit.requestSize) }}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t@if (hit.responseSize !== undefined) {\r\n\t\t\t\t\t\t\t\t\t\t\t<div>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"meta-label\">{{ t('traceDrawer.responseSize') }}</span\r\n\t\t\t\t\t\t\t\t\t\t\t\t><span>{{ formatBytes(hit.responseSize) }}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t@if (hit.requestBody) {\r\n\t\t\t\t\t\t\t\t\t\t<details class=\"trace-row__sub\">\r\n\t\t\t\t\t\t\t\t\t\t\t<summary>{{ t('traceDrawer.requestBody') }}</summary>\r\n\t\t\t\t\t\t\t\t\t\t\t@if (tryParseJson(hit.requestBody); as parsed) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t<pre>{{ parsed | json }}</pre>\r\n\t\t\t\t\t\t\t\t\t\t\t} @else {\r\n\t\t\t\t\t\t\t\t\t\t\t\t<pre>{{ hit.requestBody }}</pre>\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t</details>\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t@if (hit.responseBody) {\r\n\t\t\t\t\t\t\t\t\t\t<details class=\"trace-row__sub\">\r\n\t\t\t\t\t\t\t\t\t\t\t<summary>{{ t('traceDrawer.responseBody') }}</summary>\r\n\t\t\t\t\t\t\t\t\t\t\t@if (tryParseJson(hit.responseBody); as parsed) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t<pre>{{ parsed | json }}</pre>\r\n\t\t\t\t\t\t\t\t\t\t\t} @else {\r\n\t\t\t\t\t\t\t\t\t\t\t\t<pre>{{ hit.responseBody }}</pre>\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t</details>\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t</details>\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t@if (hasMore()) {\r\n\t\t\t\t\t\t\t<div class=\"aril-trace-drawer__load-more\">\r\n\t\t\t\t\t\t\t\t<aril-button\r\n\t\t\t\t\t\t\t\t\t[label]=\"t('traceDrawer.loadMore')\"\r\n\t\t\t\t\t\t\t\t\ticon=\"CHEVRON_DOWN\"\r\n\t\t\t\t\t\t\t\t\tcolor=\"primary\"\r\n\t\t\t\t\t\t\t\t\t[outlined]=\"true\"\r\n\t\t\t\t\t\t\t\t\t[loading]=\"loadingMore()\"\r\n\t\t\t\t\t\t\t\t\t[disabled]=\"loadingMore()\"\r\n\t\t\t\t\t\t\t\t\t(clickEvent)=\"loadMore()\" />\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t</section>\r\n\t\t\t\t}\r\n\t\t\t\t@if (appLogs().length) {\r\n\t\t\t\t\t<section class=\"aril-trace-drawer__section\">\r\n\t\t\t\t\t\t<h3 class=\"aril-trace-drawer__section-title\">\r\n\t\t\t\t\t\t\t<i class=\"pi pi-list\"></i>\r\n\t\t\t\t\t\t\t{{ t('traceDrawer.appLogsHeader') }}\r\n\t\t\t\t\t\t\t<aril-badge [value]=\"appLogs().length + ' / ' + appLogsTotal()\" [rounded]=\"true\" />\r\n\t\t\t\t\t\t</h3>\r\n\t\t\t\t\t\t@for (log of appLogs(); track log.id) {\r\n\t\t\t\t\t\t\t<details class=\"trace-row trace-row--{{ levelSeverity(log.level) }}\">\r\n\t\t\t\t\t\t\t\t<summary class=\"trace-row__summary\">\r\n\t\t\t\t\t\t\t\t\t<i class=\"pi pi-chevron-right trace-row__chevron\"></i>\r\n\t\t\t\t\t\t\t\t\t@if (log.level) {\r\n\t\t\t\t\t\t\t\t\t\t<aril-badge [value]=\"log.level\" [severity]=\"levelSeverity(log.level)\" />\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t@if (log.module) {\r\n\t\t\t\t\t\t\t\t\t\t<span class=\"trace-row__tag\">{{ log.module }}</span>\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t<span class=\"trace-row__main\">{{ log.message }}</span>\r\n\t\t\t\t\t\t\t\t\t@if (log.timestamp) {\r\n\t\t\t\t\t\t\t\t\t\t<span class=\"trace-row__time\">{{ formatTimestamp(log.timestamp) }}</span>\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t</summary>\r\n\t\t\t\t\t\t\t\t<div class=\"trace-row__body\">\r\n\t\t\t\t\t\t\t\t\t@if (log.message) {\r\n\t\t\t\t\t\t\t\t\t\t<div class=\"trace-row__message\">{{ log.message }}</div>\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t@if (log.username || log.app) {\r\n\t\t\t\t\t\t\t\t\t\t<div class=\"trace-row__meta\">\r\n\t\t\t\t\t\t\t\t\t\t\t@if (log.app) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t<div>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"meta-label\">{{ t('traceDrawer.target') }}</span\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t><span>{{ log.app }}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t@if (log.username) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t<div>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"meta-label\">{{ t('traceDrawer.user') }}</span\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t><span>{{ log.username }}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t@if (log.errorDetail) {\r\n\t\t\t\t\t\t\t\t\t\t<details class=\"trace-row__sub\" open>\r\n\t\t\t\t\t\t\t\t\t\t\t<summary>{{ t('traceDrawer.appLogErrorDetail') }}</summary>\r\n\t\t\t\t\t\t\t\t\t\t\t<pre>{{ log.errorDetail }}</pre>\r\n\t\t\t\t\t\t\t\t\t\t</details>\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t@if (log.referenceFields?.length) {\r\n\t\t\t\t\t\t\t\t\t\t<details class=\"trace-row__sub\">\r\n\t\t\t\t\t\t\t\t\t\t\t<summary>{{ t('traceDrawer.appLogRefFields') }}</summary>\r\n\t\t\t\t\t\t\t\t\t\t\t<div class=\"trace-row__meta\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t@for (rf of log.referenceFields; track rf.field) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<div>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"meta-label\">{{ rf.field }}</span\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t><span>{{ rf.value }}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t\t</details>\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t</details>\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t@if (appLogsHasMore()) {\r\n\t\t\t\t\t\t\t<div class=\"aril-trace-drawer__load-more\">\r\n\t\t\t\t\t\t\t\t<aril-button\r\n\t\t\t\t\t\t\t\t\t[label]=\"t('traceDrawer.loadMore')\"\r\n\t\t\t\t\t\t\t\t\ticon=\"CHEVRON_DOWN\"\r\n\t\t\t\t\t\t\t\t\tcolor=\"primary\"\r\n\t\t\t\t\t\t\t\t\t[outlined]=\"true\"\r\n\t\t\t\t\t\t\t\t\t[loading]=\"appLogsLoadingMore()\"\r\n\t\t\t\t\t\t\t\t\t[disabled]=\"appLogsLoadingMore()\"\r\n\t\t\t\t\t\t\t\t\t(clickEvent)=\"loadMoreAppLogs()\" />\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t</section>\r\n\t\t\t\t}\r\n\t\t\t\t@if (!apisixHits().length && !appLogs().length) {\r\n\t\t\t\t\t<div class=\"aril-trace-drawer__state\">\r\n\t\t\t\t\t\t<i class=\"pi pi-inbox\"></i>\r\n\t\t\t\t\t\t<p>{{ t('traceDrawer.empty') }}</p>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t</div>\r\n\t</p-sidebar>\r\n</ng-container>\r\n", styles: [":host ::ng-deep .aril-trace-drawer{display:flex;flex-direction:column;height:100%}:host ::ng-deep .aril-trace-drawer .p-sidebar-header{padding:1rem 1.25rem;border-bottom:1px solid var(--surface-border, #e5e7eb);flex:0 0 auto}:host ::ng-deep .aril-trace-drawer .p-sidebar-content{padding:0;flex:1 1 auto;min-height:0;overflow-y:auto;overflow-x:hidden}.aril-trace-drawer__header{display:flex;align-items:center;gap:.5rem;flex:1;min-width:0}.aril-trace-drawer__header .pi-sitemap{font-size:1.25rem;color:var(--primary-color, #1890ff)}.aril-trace-drawer__title{font-weight:600;font-size:1.1rem}.aril-trace-drawer__chip{font-size:.875rem;padding:.2rem .55rem;border-radius:4px;background:var(--surface-100, #f3f4f6);color:var(--text-color-secondary, #6b7280);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:240px}.aril-trace-drawer__share{cursor:pointer;font-size:1rem;padding:.4rem;border-radius:4px;color:var(--primary-color, #1890ff);transition:background .15s ease}.aril-trace-drawer__share:hover{background:var(--surface-100, #f3f4f6)}.aril-trace-drawer__body{padding:1rem 1.25rem;display:flex;flex-direction:column;gap:1.5rem;min-height:min-content}.aril-trace-drawer__state{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:.75rem;padding:3rem 1rem;color:var(--text-color-secondary, #6b7280);text-align:center;font-size:.95rem}.aril-trace-drawer__state .pi{font-size:2rem}.aril-trace-drawer__state--error .pi{color:var(--red-500, #ef4444)}.aril-trace-drawer__section-title{display:flex;align-items:center;gap:.5rem;margin:0 0 .5rem;font-size:1rem;font-weight:600}.aril-trace-drawer__section-title .pi{color:var(--primary-color, #1890ff)}.trace-row{display:block;border:1px solid var(--surface-border, #e5e7eb);border-left:3px solid var(--surface-border, #e5e7eb);background:var(--surface-card, #ffffff);border-radius:4px;overflow:hidden;transition:background .15s ease,border-color .15s ease,box-shadow .15s ease}.trace-row+.trace-row{margin-top:.4rem}.trace-row:hover{border-top-color:var(--surface-300, #d1d5db);border-right-color:var(--surface-300, #d1d5db);border-bottom-color:var(--surface-300, #d1d5db);box-shadow:0 1px 3px #0000000a}.trace-row[open]{background:var(--surface-50, #fafafa);border-top-color:var(--surface-300, #d1d5db);border-right-color:var(--surface-300, #d1d5db);border-bottom-color:var(--surface-300, #d1d5db);box-shadow:0 1px 4px #0000000d}.trace-row--success{border-left-color:var(--green-500, #22c55e)}.trace-row--info{border-left-color:var(--blue-500, #3b82f6)}.trace-row--warning{border-left-color:var(--orange-500, #f97316)}.trace-row--danger{border-left-color:var(--red-500, #ef4444)}.trace-row--secondary{border-left-color:var(--gray-400, #9ca3af)}.trace-row__summary{cursor:pointer;-webkit-user-select:none;user-select:none;list-style:none;display:flex;align-items:center;gap:.5rem;padding:.5rem .75rem}.trace-row__summary::-webkit-details-marker{display:none}.trace-row__summary:hover{background:var(--surface-50, #fafafa)}.trace-row[open] .trace-row__summary:hover{background:var(--surface-100, #f3f4f6)}.trace-row__chevron{color:var(--text-color-secondary, #6b7280);font-size:.7rem;transition:transform .15s ease;flex-shrink:0}.trace-row[open] .trace-row__chevron{transform:rotate(90deg)}.trace-row__tag{font-weight:600;color:var(--primary-color, #1890ff);font-size:.8rem;white-space:nowrap;flex-shrink:0;letter-spacing:.02em}.trace-row__main{font-size:.85rem;color:var(--text-color, #111827);flex:1;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.trace-row__time{font-size:.75rem;color:var(--text-color-secondary, #6b7280);font-variant-numeric:tabular-nums;white-space:nowrap;flex-shrink:0}.trace-row__action{cursor:pointer;padding:.25rem;border-radius:4px;color:var(--text-color-secondary, #6b7280);flex-shrink:0;transition:background .15s ease,color .15s ease}.trace-row__action:hover{background:var(--surface-100, #f3f4f6);color:var(--primary-color, #1890ff)}.trace-row__body{padding:.5rem .75rem .75rem;border-top:1px solid var(--surface-border, #e5e7eb);display:flex;flex-direction:column;gap:.5rem;background:var(--surface-0, #ffffff)}.trace-row__message{font-size:.85rem;color:var(--text-color, #111827);line-height:1.5;white-space:pre-wrap;word-break:break-word;overflow-wrap:anywhere;background:var(--surface-100, #f3f4f6);border-radius:4px;padding:.5rem .65rem}.trace-row__meta{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:.25rem .75rem;font-size:.8rem}.trace-row__meta>div{display:grid;grid-template-columns:max-content 1fr;column-gap:.4rem;align-items:baseline;min-width:0}.trace-row__meta .meta-label{color:var(--text-color-secondary, #6b7280);font-weight:500}.trace-row__meta .meta-label:after{content:\":\"}.trace-row__meta span:not(.meta-label){color:var(--text-color, #111827);word-break:break-word}.trace-row__sub{margin:0}.trace-row__sub summary{cursor:pointer;font-size:.8rem;color:var(--primary-color, #1890ff);padding:.15rem 0;-webkit-user-select:none;user-select:none}.trace-row__sub summary:hover{text-decoration:underline}.trace-row__sub pre{margin:.25rem 0 0;padding:.5rem .75rem;background:var(--surface-100, #f3f4f6);border-radius:4px;font-size:.78rem;line-height:1.45;max-height:320px;overflow:auto;white-space:pre-wrap;word-break:break-word}.aril-trace-drawer__load-more{display:flex;justify-content:center;margin-top:.5rem}\n"] }]
|
|
167
313
|
}], ctorParameters: () => [], propDecorators: { visibleChange: [{
|
|
168
314
|
type: Output
|
|
169
315
|
}] } });
|
|
@@ -172,5 +318,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImpor
|
|
|
172
318
|
* Generated bundle index. Do not edit.
|
|
173
319
|
*/
|
|
174
320
|
|
|
175
|
-
export { TraceDrawerComponent };
|
|
321
|
+
export { AppLogService, TraceDrawerComponent, TraceLogService };
|
|
176
322
|
//# sourceMappingURL=aril-ui-business-trace-drawer.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"aril-ui-business-trace-drawer.mjs","sources":["../../projects/aril/ui-business/trace-drawer/src/trace-log.service.ts","../../projects/aril/ui-business/trace-drawer/src/trace-drawer.component.ts","../../projects/aril/ui-business/trace-drawer/src/trace-drawer.component.html","../../projects/aril/ui-business/trace-drawer/aril-ui-business-trace-drawer.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\r\n\r\nimport { Observable } from 'rxjs';\r\n\r\nimport { Apps } from 'aril/boot/config/apps';\r\nimport { HTTPMethods, ProxyTypes, RestClient, ServiceCall, ServiceCallStateMap, ServiceResponse } from 'aril/http';\r\n\r\nimport { ApisixHit } from './interfaces';\r\n\r\nexport interface TraceSearchRequest {\r\n\ttraceId: string;\r\n\tstartTime?: number;\r\n\tendTime?: number;\r\n\tpager: { pageSize: number; pageNumber: number };\r\n}\r\n\r\nexport interface TraceSearchResponse {\r\n\tresultInfo?: { totalItem?: number; totalPage?: number };\r\n\tresult: ApisixHit[];\r\n}\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class TraceLogService extends RestClient {\r\n\toverride states: ServiceCallStateMap<TraceLogService> = {};\r\n\r\n\t@ServiceCall(HTTPMethods.POST, ProxyTypes.ClientSide, 'request-logs/filter', {}, Apps.MNG)\r\n\tsearchByTraceId(req: TraceSearchRequest): Observable<ServiceResponse<TraceSearchResponse>> {\r\n\t\treturn new Observable<ServiceResponse<TraceSearchResponse>>();\r\n\t}\r\n}\r\n","import { JsonPipe } from '@angular/common';\r\nimport { ChangeDetectionStrategy, Component, EventEmitter, Output, effect, inject, input, signal } from '@angular/core';\r\nimport { toSignal } from '@angular/core/rxjs-interop';\r\n\r\nimport { EMPTY, Subject, catchError, switchMap } from 'rxjs';\r\n\r\nimport { ProgressSpinnerModule } from 'primeng/progressspinner';\r\nimport { SidebarModule } from 'primeng/sidebar';\r\n\r\nimport { TranslocoModule } from '@ngneat/transloco';\r\n\r\nimport { BadgeComponent } from 'aril/ui/badge';\r\nimport { ButtonComponent } from 'aril/ui/button';\r\nimport 'aril/util/primitive-extensions';\r\n\r\nimport { ApisixHit } from './interfaces';\r\nimport { TraceLogService } from './trace-log.service';\r\n\r\ntype Position = 'right' | 'left';\r\ntype Severity = 'success' | 'secondary' | 'info' | 'warning' | 'danger' | 'contrast' | undefined;\r\n\r\n@Component({\r\n\tstandalone: true,\r\n\tselector: 'aril-trace-drawer',\r\n\ttemplateUrl: './trace-drawer.component.html',\r\n\tstyleUrls: ['./trace-drawer.component.scss'],\r\n\timports: [JsonPipe, TranslocoModule, SidebarModule, ProgressSpinnerModule, BadgeComponent, ButtonComponent],\r\n\tchangeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class TraceDrawerComponent {\r\n\tprivate readonly traceLogService = inject(TraceLogService);\r\n\r\n\tvisible = input<boolean>(false);\r\n\ttraceId = input.required<string>();\r\n\tposition = input<Position>('right');\r\n\twidth = input<string>('min(680px, 90vw)');\r\n\tmodal = input<boolean>(false);\r\n\tpageSize = input<number>(100);\r\n\tstartTime = input<number | undefined>();\r\n\tendTime = input<number | undefined>();\r\n\r\n\t@Output() visibleChange = new EventEmitter<boolean>();\r\n\r\n\tprotected readonly loading = signal(false);\r\n\tprotected readonly errorMessage = signal<string | undefined>(undefined);\r\n\tprotected readonly apisixHits = signal<ApisixHit[]>([]);\r\n\r\n\tprivate readonly request = new Subject<string>();\r\n\tprivate readonly response = toSignal(\r\n\t\tthis.request.pipe(\r\n\t\t\tswitchMap((traceId) =>\r\n\t\t\t\tthis.traceLogService\r\n\t\t\t\t\t.searchByTraceId({\r\n\t\t\t\t\t\ttraceId,\r\n\t\t\t\t\t\tstartTime: this.startTime() ?? 20000101000000,\r\n\t\t\t\t\t\tendTime: this.endTime() ?? (new Date().dateToLong('time') ?? 99991231235959),\r\n\t\t\t\t\t\tpager: { pageSize: this.pageSize(), pageNumber: 1 }\r\n\t\t\t\t\t})\r\n\t\t\t\t\t.pipe(\r\n\t\t\t\t\t\tcatchError((err) => {\r\n\t\t\t\t\t\t\tthis.errorMessage.set(err?.error?.message ?? err?.message ?? 'İstek başarısız oldu');\r\n\t\t\t\t\t\t\tthis.loading.set(false);\r\n\t\t\t\t\t\t\treturn EMPTY;\r\n\t\t\t\t\t\t})\r\n\t\t\t\t\t)\r\n\t\t\t)\r\n\t\t)\r\n\t);\r\n\r\n\tconstructor() {\r\n\t\teffect(\r\n\t\t\t() => {\r\n\t\t\t\tif (this.visible() && this.traceId()) {\r\n\t\t\t\t\tthis.fetch(this.traceId());\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\t{ allowSignalWrites: true }\r\n\t\t);\r\n\r\n\t\teffect(\r\n\t\t\t() => {\r\n\t\t\t\tconst resp = this.response();\r\n\t\t\t\tif (!resp) return;\r\n\t\t\t\tthis.apisixHits.set(resp.response?.result ?? []);\r\n\t\t\t\tthis.loading.set(false);\r\n\t\t\t\tthis.errorMessage.set(undefined);\r\n\t\t\t},\r\n\t\t\t{ allowSignalWrites: true }\r\n\t\t);\r\n\t}\r\n\r\n\tprotected onVisibleChange(value: boolean): void {\r\n\t\tthis.visibleChange.emit(value);\r\n\t}\r\n\r\n\tprotected retry(): void {\r\n\t\tconst id = this.traceId();\r\n\t\tif (id) this.fetch(id);\r\n\t}\r\n\r\n\tprivate fetch(traceId: string): void {\r\n\t\tthis.loading.set(true);\r\n\t\tthis.errorMessage.set(undefined);\r\n\t\tthis.apisixHits.set([]);\r\n\t\tthis.request.next(traceId);\r\n\t}\r\n\r\n\tprotected statusSeverity(status: number): Severity {\r\n\t\tif (status >= 500) return 'danger';\r\n\t\tif (status >= 400) return 'warning';\r\n\t\tif (status >= 300) return 'info';\r\n\t\tif (status >= 200) return 'success';\r\n\t\treturn 'secondary';\r\n\t}\r\n\r\n\tprotected durationSeverity(seconds: number): Severity {\r\n\t\tconst ms = (seconds ?? 0) * 1000;\r\n\t\tif (ms >= 1000) return 'danger';\r\n\t\tif (ms >= 200) return 'warning';\r\n\t\treturn 'success';\r\n\t}\r\n\r\n\tprotected formatDuration(seconds: number | undefined): string {\r\n\t\tif (seconds === undefined || seconds === null) return '';\r\n\t\tconst ms = seconds * 1000;\r\n\t\tif (ms < 1) return `${ms.toFixed(2)} ms`;\r\n\t\tif (ms < 1000) return `${Math.round(ms)} ms`;\r\n\t\treturn `${(ms / 1000).toFixed(2)} s`;\r\n\t}\r\n\r\n\tprotected formatBytes(bytes: number | undefined): string {\r\n\t\tif (bytes === undefined || bytes === null) return '-';\r\n\t\tif (bytes < 1024) return `${bytes} B`;\r\n\t\tif (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;\r\n\t\treturn `${(bytes / (1024 * 1024)).toFixed(1)} MB`;\r\n\t}\r\n\r\n\tprotected formatTimestamp(ts: string | number | undefined): string {\r\n\t\tif (ts === undefined || ts === null || ts === '') return '';\r\n\t\tif (typeof ts === 'string') return ts;\r\n\t\tconst s = String(ts);\r\n\t\tif (s.length === 14) {\r\n\t\t\treturn `${s.slice(8, 10)}:${s.slice(10, 12)}:${s.slice(12, 14)} ${s.slice(6, 8)}.${s.slice(4, 6)}.${s.slice(0, 4)}`;\r\n\t\t}\r\n\t\tif (ts > 1e11) {\r\n\t\t\treturn new Date(ts).toLocaleString();\r\n\t\t}\r\n\t\treturn s;\r\n\t}\r\n\r\n\tprotected tryParseJson(content: string | undefined): unknown {\r\n\t\tif (!content) return null;\r\n\t\tconst trimmed = content.trim();\r\n\t\tif (!((trimmed.startsWith('{') && trimmed.endsWith('}')) || (trimmed.startsWith('[') && trimmed.endsWith(']')))) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\ttry {\r\n\t\t\treturn JSON.parse(trimmed);\r\n\t\t} catch {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t}\r\n}\r\n","<ng-container *transloco=\"let t\">\r\n\t<p-sidebar\r\n\t\t[visible]=\"visible()\"\r\n\t\t(visibleChange)=\"onVisibleChange($event)\"\r\n\t\t[position]=\"position()\"\r\n\t\t[style]=\"{ width: width() }\"\r\n\t\t[modal]=\"modal()\"\r\n\t\t[dismissible]=\"true\"\r\n\t\t[showCloseIcon]=\"true\"\r\n\t\tstyleClass=\"aril-trace-drawer\">\r\n\t\t<ng-template pTemplate=\"header\">\r\n\t\t\t<div class=\"aril-trace-drawer__header\">\r\n\t\t\t\t<i class=\"pi pi-sitemap\"></i>\r\n\t\t\t\t<span class=\"aril-trace-drawer__title\">{{ t('traceDrawer.title') }}</span>\r\n\t\t\t\t<code class=\"aril-trace-drawer__chip\" [title]=\"traceId()\">{{ traceId() }}</code>\r\n\t\t\t</div>\r\n\t\t</ng-template>\r\n\r\n\t\t<div class=\"aril-trace-drawer__body\">\r\n\t\t\t@if (loading()) {\r\n\t\t\t\t<div class=\"aril-trace-drawer__state\">\r\n\t\t\t\t\t<p-progressSpinner strokeWidth=\"3\" styleClass=\"w-3rem h-3rem\"></p-progressSpinner>\r\n\t\t\t\t\t<span>{{ t('traceDrawer.loading') }}</span>\r\n\t\t\t\t</div>\r\n\t\t\t} @else if (errorMessage()) {\r\n\t\t\t\t<div class=\"aril-trace-drawer__state aril-trace-drawer__state--error\">\r\n\t\t\t\t\t<i class=\"pi pi-exclamation-triangle\"></i>\r\n\t\t\t\t\t<p>{{ errorMessage() }}</p>\r\n\t\t\t\t\t<aril-button\r\n\t\t\t\t\t\t[label]=\"t('traceDrawer.retry')\"\r\n\t\t\t\t\t\ticon=\"REFRESH\"\r\n\t\t\t\t\t\tcolor=\"primary\"\r\n\t\t\t\t\t\t(clickEvent)=\"retry()\" />\r\n\t\t\t\t</div>\r\n\t\t\t} @else if (apisixHits().length) {\r\n\t\t\t\t<section class=\"aril-trace-drawer__section\">\r\n\t\t\t\t\t<h3 class=\"aril-trace-drawer__section-title\">\r\n\t\t\t\t\t\t<i class=\"pi pi-globe\"></i>\r\n\t\t\t\t\t\t{{ t('traceDrawer.apisixHeader') }}\r\n\t\t\t\t\t\t<aril-badge [value]=\"apisixHits().length.toString()\" severity=\"info\" [rounded]=\"true\" />\r\n\t\t\t\t\t</h3>\r\n\t\t\t\t\t@for (hit of apisixHits(); track hit.id) {\r\n\t\t\t\t\t\t<div class=\"apisix-card\">\r\n\t\t\t\t\t\t\t<div class=\"apisix-card__head\">\r\n\t\t\t\t\t\t\t\t<aril-badge [value]=\"hit.status.toString()\" [severity]=\"statusSeverity(hit.status)\" />\r\n\t\t\t\t\t\t\t\t<span class=\"apisix-card__method\">{{ hit.requestMethod }}</span>\r\n\t\t\t\t\t\t\t\t<span class=\"apisix-card__uri\" [title]=\"hit.requestUri\">{{ hit.requestUri }}</span>\r\n\t\t\t\t\t\t\t\t<aril-badge\r\n\t\t\t\t\t\t\t\t\t[value]=\"formatDuration(hit.responseTime)\"\r\n\t\t\t\t\t\t\t\t\t[severity]=\"durationSeverity(hit.responseTime)\" />\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t<div class=\"apisix-card__meta\">\r\n\t\t\t\t\t\t\t\t@if (hit.routeName) {\r\n\t\t\t\t\t\t\t\t\t<div><span class=\"meta-label\">{{ t('traceDrawer.route') }}</span><span>{{ hit.routeName }}</span></div>\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t@if (hit.timestamp) {\r\n\t\t\t\t\t\t\t\t\t<div><span class=\"meta-label\">{{ t('traceDrawer.timestamp') }}</span><span>{{ formatTimestamp(hit.timestamp) }}</span></div>\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t@if (hit.sourceApp || hit.sourceModule) {\r\n\t\t\t\t\t\t\t\t\t<div>\r\n\t\t\t\t\t\t\t\t\t\t<span class=\"meta-label\">{{ t('traceDrawer.source') }}</span>\r\n\t\t\t\t\t\t\t\t\t\t<span>{{ hit.sourceApp }}{{ hit.sourceModule ? ' / ' + hit.sourceModule : '' }}</span>\r\n\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t@if (hit.targetApp || hit.targetModule) {\r\n\t\t\t\t\t\t\t\t\t<div>\r\n\t\t\t\t\t\t\t\t\t\t<span class=\"meta-label\">{{ t('traceDrawer.target') }}</span>\r\n\t\t\t\t\t\t\t\t\t\t<span>{{ hit.targetApp }}{{ hit.targetModule ? ' / ' + hit.targetModule : '' }}</span>\r\n\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t@if (hit.upstreamHost) {\r\n\t\t\t\t\t\t\t\t\t<div><span class=\"meta-label\">{{ t('traceDrawer.upstream') }}</span><span>{{ hit.upstreamHost }}</span></div>\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t@if (hit.username) {\r\n\t\t\t\t\t\t\t\t\t<div><span class=\"meta-label\">{{ t('traceDrawer.user') }}</span><span>{{ hit.username }}</span></div>\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t@if (hit.requestSize !== undefined) {\r\n\t\t\t\t\t\t\t\t\t<div><span class=\"meta-label\">{{ t('traceDrawer.requestSize') }}</span><span>{{ formatBytes(hit.requestSize) }}</span></div>\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t@if (hit.responseSize !== undefined) {\r\n\t\t\t\t\t\t\t\t\t<div><span class=\"meta-label\">{{ t('traceDrawer.responseSize') }}</span><span>{{ formatBytes(hit.responseSize) }}</span></div>\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t@if (hit.requestBody) {\r\n\t\t\t\t\t\t\t\t<details class=\"apisix-card__body\">\r\n\t\t\t\t\t\t\t\t\t<summary>{{ t('traceDrawer.requestBody') }}</summary>\r\n\t\t\t\t\t\t\t\t\t@if (tryParseJson(hit.requestBody); as parsed) {\r\n\t\t\t\t\t\t\t\t\t\t<pre>{{ parsed | json }}</pre>\r\n\t\t\t\t\t\t\t\t\t} @else {\r\n\t\t\t\t\t\t\t\t\t\t<pre>{{ hit.requestBody }}</pre>\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t</details>\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t@if (hit.responseBody) {\r\n\t\t\t\t\t\t\t\t<details class=\"apisix-card__body\">\r\n\t\t\t\t\t\t\t\t\t<summary>{{ t('traceDrawer.responseBody') }}</summary>\r\n\t\t\t\t\t\t\t\t\t@if (tryParseJson(hit.responseBody); as parsed) {\r\n\t\t\t\t\t\t\t\t\t\t<pre>{{ parsed | json }}</pre>\r\n\t\t\t\t\t\t\t\t\t} @else {\r\n\t\t\t\t\t\t\t\t\t\t<pre>{{ hit.responseBody }}</pre>\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t</details>\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t}\r\n\t\t\t\t</section>\r\n\t\t\t} @else {\r\n\t\t\t\t<div class=\"aril-trace-drawer__state\">\r\n\t\t\t\t\t<i class=\"pi pi-inbox\"></i>\r\n\t\t\t\t\t<p>{{ t('traceDrawer.empty') }}</p>\r\n\t\t\t\t</div>\r\n\t\t\t}\r\n\t\t</div>\r\n\t</p-sidebar>\r\n</ng-container>\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"aril-ui-business-trace-drawer.mjs","sources":["../../projects/aril/ui-business/trace-drawer/src/app-log.service.ts","../../projects/aril/ui-business/trace-drawer/src/trace-log.service.ts","../../projects/aril/ui-business/trace-drawer/src/trace-drawer.component.ts","../../projects/aril/ui-business/trace-drawer/src/trace-drawer.component.html","../../projects/aril/ui-business/trace-drawer/aril-ui-business-trace-drawer.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\r\n\r\nimport { Observable } from 'rxjs';\r\n\r\nimport { Apps } from 'aril/boot/config/apps';\r\nimport { HTTPMethods, ProxyTypes, RestClient, ServiceCall, ServiceCallStateMap, ServiceResponse } from 'aril/http';\r\n\r\nimport { AppLogSearchRequest, AppLogSearchResponse } from './interfaces';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class AppLogService extends RestClient {\r\n\toverride states: ServiceCallStateMap<AppLogService> = {};\r\n\r\n\t@ServiceCall(HTTPMethods.POST, ProxyTypes.ClientSide, 'application-logs/filter', {}, Apps.MW)\r\n\tsearchByTraceId(req: AppLogSearchRequest): Observable<ServiceResponse<AppLogSearchResponse>> {\r\n\t\treturn new Observable<ServiceResponse<AppLogSearchResponse>>();\r\n\t}\r\n}\r\n","import { Injectable } from '@angular/core';\r\n\r\nimport { Observable } from 'rxjs';\r\n\r\nimport { Apps } from 'aril/boot/config/apps';\r\nimport { HTTPMethods, ProxyTypes, RestClient, ServiceCall, ServiceCallStateMap, ServiceResponse } from 'aril/http';\r\n\r\nimport { ApisixHit } from './interfaces';\r\n\r\nexport interface TraceSearchRequest {\r\n\ttraceId: string;\r\n\tstartTime?: number;\r\n\tendTime?: number;\r\n\tpager: { pageSize: number; pageNumber: number };\r\n}\r\n\r\nexport interface TraceSearchResponse {\r\n\tresultInfo?: { totalItem?: number; totalPage?: number };\r\n\tresult: ApisixHit[];\r\n}\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class TraceLogService extends RestClient {\r\n\toverride states: ServiceCallStateMap<TraceLogService> = {};\r\n\r\n\t@ServiceCall(HTTPMethods.POST, ProxyTypes.ClientSide, 'request-logs/filter', {}, Apps.MNG)\r\n\tsearchByTraceId(req: TraceSearchRequest): Observable<ServiceResponse<TraceSearchResponse>> {\r\n\t\treturn new Observable<ServiceResponse<TraceSearchResponse>>();\r\n\t}\r\n}\r\n","import { JsonPipe } from '@angular/common';\r\nimport { ChangeDetectionStrategy, Component, EventEmitter, Output, computed, effect, inject, input, signal } from '@angular/core';\r\nimport { toSignal } from '@angular/core/rxjs-interop';\r\n\r\nimport { EMPTY, Subject, catchError, map, switchMap } from 'rxjs';\r\n\r\nimport { ProgressSpinnerModule } from 'primeng/progressspinner';\r\nimport { SidebarModule } from 'primeng/sidebar';\r\nimport { TooltipModule } from 'primeng/tooltip';\r\n\r\nimport { TranslocoModule, TranslocoService } from '@ngneat/transloco';\r\nimport { KeycloakService } from 'keycloak-angular';\r\nimport { MessageService } from 'primeng/api';\r\n\r\nimport { BadgeComponent } from 'aril/ui/badge';\r\nimport { ButtonComponent } from 'aril/ui/button';\r\nimport 'aril/util/primitive-extensions';\r\n\r\nimport { AppLogService } from './app-log.service';\r\nimport { ApisixHit, AppLogItem } from './interfaces';\r\nimport { TraceLogService } from './trace-log.service';\r\n\r\ntype Position = 'right' | 'left';\r\ntype Severity = 'success' | 'secondary' | 'info' | 'warning' | 'danger' | 'contrast' | undefined;\r\n\r\n@Component({\r\n\tstandalone: true,\r\n\tselector: 'aril-trace-drawer',\r\n\ttemplateUrl: './trace-drawer.component.html',\r\n\tstyleUrls: ['./trace-drawer.component.scss'],\r\n\timports: [JsonPipe, TranslocoModule, SidebarModule, ProgressSpinnerModule, TooltipModule, BadgeComponent, ButtonComponent],\r\n\tchangeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class TraceDrawerComponent {\r\n\tprivate readonly traceLogService = inject(TraceLogService);\r\n\tprivate readonly appLogService = inject(AppLogService);\r\n\tprivate readonly messageService = inject(MessageService);\r\n\tprivate readonly translocoService = inject(TranslocoService);\r\n\tprivate readonly keycloakService = inject(KeycloakService);\r\n\r\n\tvisible = input<boolean>(false);\r\n\ttraceId = input.required<string>();\r\n\tposition = input<Position>('right');\r\n\twidth = input<string>('min(680px, 90vw)');\r\n\tmodal = input<boolean>(false);\r\n\tpageSize = input<number>(10);\r\n\tstartTime = input<number | undefined>();\r\n\tendTime = input<number | undefined>();\r\n\r\n\t@Output() visibleChange = new EventEmitter<boolean>();\r\n\r\n\tprotected readonly loading = signal(false);\r\n\tprotected readonly loadingMore = signal(false);\r\n\tprotected readonly errorMessage = signal<string | undefined>(undefined);\r\n\tprotected readonly apisixHits = signal<ApisixHit[]>([]);\r\n\tprotected readonly totalItem = signal(0);\r\n\tprotected readonly pageNumber = signal(1);\r\n\r\n\tprotected readonly appLogs = signal<AppLogItem[]>([]);\r\n\tprotected readonly appLogsLoadingMore = signal(false);\r\n\tprotected readonly appLogsTotal = signal(0);\r\n\tprotected readonly appLogsPage = signal(1);\r\n\r\n\tprotected readonly hasMore = computed(() => this.apisixHits().length < this.totalItem());\r\n\tprotected readonly appLogsHasMore = computed(() => this.appLogs().length < this.appLogsTotal());\r\n\r\n\tprivate readonly request = new Subject<{ traceId: string; pageNumber: number; append: boolean }>();\r\n\tprivate readonly appLogsRequest = new Subject<{ traceId: string; pageNumber: number; append: boolean }>();\r\n\tprivate readonly response = toSignal(\r\n\t\tthis.request.pipe(\r\n\t\t\tswitchMap((req) =>\r\n\t\t\t\tthis.traceLogService\r\n\t\t\t\t\t.searchByTraceId({\r\n\t\t\t\t\t\ttraceId: req.traceId,\r\n\t\t\t\t\t\tstartTime: this.startTime() ?? 20000101000000,\r\n\t\t\t\t\t\tendTime: this.endTime() ?? (new Date().dateToLong('time') ?? 99991231235959),\r\n\t\t\t\t\t\tpager: { pageSize: this.pageSize(), pageNumber: req.pageNumber }\r\n\t\t\t\t\t})\r\n\t\t\t\t\t.pipe(\r\n\t\t\t\t\t\tmap((resp) => ({ resp, append: req.append })),\r\n\t\t\t\t\t\tcatchError((err) => {\r\n\t\t\t\t\t\t\tthis.errorMessage.set(err?.error?.message ?? err?.message ?? 'İstek başarısız oldu');\r\n\t\t\t\t\t\t\tthis.loading.set(false);\r\n\t\t\t\t\t\t\tthis.loadingMore.set(false);\r\n\t\t\t\t\t\t\treturn EMPTY;\r\n\t\t\t\t\t\t})\r\n\t\t\t\t\t)\r\n\t\t\t)\r\n\t\t)\r\n\t);\r\n\r\n\tprivate readonly appLogsResponse = toSignal(\r\n\t\tthis.appLogsRequest.pipe(\r\n\t\t\tswitchMap((req) =>\r\n\t\t\t\tthis.appLogService\r\n\t\t\t\t\t.searchByTraceId({\r\n\t\t\t\t\t\ttraceId: req.traceId,\r\n\t\t\t\t\t\tstartTime: this.startTime() ?? 20000101000000,\r\n\t\t\t\t\t\tendTime: this.endTime() ?? (new Date().dateToLong('time') ?? 99991231235959),\r\n\t\t\t\t\t\tpager: { pageSize: this.pageSize(), pageNumber: req.pageNumber }\r\n\t\t\t\t\t})\r\n\t\t\t\t\t.pipe(\r\n\t\t\t\t\t\tmap((resp) => ({ resp, append: req.append })),\r\n\t\t\t\t\t\tcatchError(() => {\r\n\t\t\t\t\t\t\tthis.appLogsLoadingMore.set(false);\r\n\t\t\t\t\t\t\treturn EMPTY;\r\n\t\t\t\t\t\t})\r\n\t\t\t\t\t)\r\n\t\t\t)\r\n\t\t)\r\n\t);\r\n\r\n\tconstructor() {\r\n\t\teffect(\r\n\t\t\t() => {\r\n\t\t\t\tif (this.visible() && this.traceId()) {\r\n\t\t\t\t\tthis.fetch(this.traceId());\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\t{ allowSignalWrites: true }\r\n\t\t);\r\n\r\n\t\teffect(\r\n\t\t\t() => {\r\n\t\t\t\tconst wrapped = this.response();\r\n\t\t\t\tif (!wrapped) return;\r\n\t\t\t\tconst result = wrapped.resp.response?.result ?? [];\r\n\t\t\t\tconst total = wrapped.resp.response?.resultInfo?.totalItem ?? 0;\r\n\t\t\t\tthis.apisixHits.update((prev) => (wrapped.append ? [...prev, ...result] : result));\r\n\t\t\t\tthis.totalItem.set(total);\r\n\t\t\t\tthis.loading.set(false);\r\n\t\t\t\tthis.loadingMore.set(false);\r\n\t\t\t\tthis.errorMessage.set(undefined);\r\n\t\t\t},\r\n\t\t\t{ allowSignalWrites: true }\r\n\t\t);\r\n\r\n\t\teffect(\r\n\t\t\t() => {\r\n\t\t\t\tconst wrapped = this.appLogsResponse();\r\n\t\t\t\tif (!wrapped) return;\r\n\t\t\t\tconst result = wrapped.resp.response?.result ?? [];\r\n\t\t\t\tconst total = wrapped.resp.response?.resultInfo?.totalItem ?? 0;\r\n\t\t\t\tthis.appLogs.update((prev) => (wrapped.append ? [...prev, ...result] : result));\r\n\t\t\t\tthis.appLogsTotal.set(total);\r\n\t\t\t\tthis.appLogsLoadingMore.set(false);\r\n\t\t\t},\r\n\t\t\t{ allowSignalWrites: true }\r\n\t\t);\r\n\t}\r\n\r\n\tprotected loadMore(): void {\r\n\t\tconst id = this.traceId();\r\n\t\tif (!id || this.loadingMore() || !this.hasMore()) return;\r\n\t\tconst next = this.pageNumber() + 1;\r\n\t\tthis.pageNumber.set(next);\r\n\t\tthis.loadingMore.set(true);\r\n\t\tthis.request.next({ traceId: id, pageNumber: next, append: true });\r\n\t}\r\n\r\n\tprotected loadMoreAppLogs(): void {\r\n\t\tconst id = this.traceId();\r\n\t\tif (!id || this.appLogsLoadingMore() || !this.appLogsHasMore()) return;\r\n\t\tconst next = this.appLogsPage() + 1;\r\n\t\tthis.appLogsPage.set(next);\r\n\t\tthis.appLogsLoadingMore.set(true);\r\n\t\tthis.appLogsRequest.next({ traceId: id, pageNumber: next, append: true });\r\n\t}\r\n\r\n\tprotected onVisibleChange(value: boolean): void {\r\n\t\tthis.visibleChange.emit(value);\r\n\t}\r\n\r\n\tprotected retry(): void {\r\n\t\tconst id = this.traceId();\r\n\t\tif (id) this.fetch(id);\r\n\t}\r\n\r\n\tprotected shareLink(): void {\r\n\t\tconst id = this.traceId();\r\n\t\tif (!id) return;\r\n\t\tconst base = window.location.href.split('?')[0];\r\n\t\tconst url = `${base}?traceId=${encodeURIComponent(id)}`;\r\n\t\tnavigator.clipboard.writeText(url).then(() => {\r\n\t\t\tthis.messageService.add({\r\n\t\t\t\tseverity: 'success',\r\n\t\t\t\tsummary: this.translocoService.translate('traceDrawer.linkCopied'),\r\n\t\t\t\tkey: 'toast-root'\r\n\t\t\t});\r\n\t\t});\r\n\t}\r\n\r\n\tprotected async copyAsCurl(hit: ApisixHit): Promise<void> {\r\n\t\tconst token = await this.keycloakService.getToken().catch(() => '');\r\n\t\tconst cmd = this.buildCurl(hit, token);\r\n\t\tawait navigator.clipboard.writeText(cmd);\r\n\t\tthis.messageService.add({\r\n\t\t\tseverity: 'success',\r\n\t\t\tsummary: this.translocoService.translate('traceDrawer.curlCopied'),\r\n\t\t\tkey: 'toast-root'\r\n\t\t});\r\n\t}\r\n\r\n\tprivate buildCurl(hit: ApisixHit, token: string): string {\r\n\t\tconst method = (hit.requestMethod ?? 'GET').toUpperCase();\r\n\t\tconst host = hit.upstreamHost ? hit.upstreamHost.replace(/\\/+$/, '') : '';\r\n\t\tconst uri = hit.requestUri ?? '';\r\n\t\tconst url = host ? (host.startsWith('http') ? `${host}${uri}` : `https://${host}${uri}`) : uri;\r\n\t\tconst escape = (s: string) => s.replace(/'/g, `'\\\\''`);\r\n\t\tconst lines = [`curl -X ${method} '${escape(url)}'`];\r\n\t\tif (token) lines.push(`-H 'Authorization: Bearer ${escape(token)}'`);\r\n\t\tconst body = hit.requestBody?.trim();\r\n\t\tif (body) {\r\n\t\t\tconst isJson = (body.startsWith('{') && body.endsWith('}')) || (body.startsWith('[') && body.endsWith(']'));\r\n\t\t\tif (isJson) lines.push(`-H 'Content-Type: application/json'`);\r\n\t\t\tlines.push(`-d '${escape(body)}'`);\r\n\t\t}\r\n\t\treturn lines.join(' \\\\\\n ');\r\n\t}\r\n\r\n\tprivate fetch(traceId: string): void {\r\n\t\tthis.loading.set(true);\r\n\t\tthis.errorMessage.set(undefined);\r\n\t\tthis.apisixHits.set([]);\r\n\t\tthis.totalItem.set(0);\r\n\t\tthis.pageNumber.set(1);\r\n\t\tthis.appLogs.set([]);\r\n\t\tthis.appLogsTotal.set(0);\r\n\t\tthis.appLogsPage.set(1);\r\n\t\tthis.request.next({ traceId, pageNumber: 1, append: false });\r\n\t\tthis.appLogsRequest.next({ traceId, pageNumber: 1, append: false });\r\n\t}\r\n\r\n\tprotected statusSeverity(status: number): Severity {\r\n\t\tif (status >= 500) return 'danger';\r\n\t\tif (status >= 400) return 'warning';\r\n\t\tif (status >= 300) return 'info';\r\n\t\tif (status >= 200) return 'success';\r\n\t\treturn 'secondary';\r\n\t}\r\n\r\n\tprotected levelSeverity(level: string | undefined): Severity {\r\n\t\tswitch ((level ?? '').toUpperCase()) {\r\n\t\t\tcase 'ERROR':\r\n\t\t\tcase 'FATAL':\r\n\t\t\t\treturn 'danger';\r\n\t\t\tcase 'WARN':\r\n\t\t\tcase 'WARNING':\r\n\t\t\t\treturn 'warning';\r\n\t\t\tcase 'INFO':\r\n\t\t\t\treturn 'info';\r\n\t\t\tcase 'DEBUG':\r\n\t\t\tcase 'TRACE':\r\n\t\t\t\treturn 'secondary';\r\n\t\t\tdefault:\r\n\t\t\t\treturn 'secondary';\r\n\t\t}\r\n\t}\r\n\r\n\tprotected durationSeverity(seconds: number): Severity {\r\n\t\tconst ms = (seconds ?? 0) * 1000;\r\n\t\tif (ms >= 1000) return 'danger';\r\n\t\tif (ms >= 200) return 'warning';\r\n\t\treturn 'success';\r\n\t}\r\n\r\n\tprotected formatDuration(seconds: number | undefined): string {\r\n\t\tif (seconds === undefined || seconds === null) return '';\r\n\t\tconst ms = seconds * 1000;\r\n\t\tif (ms < 1) return `${ms.toFixed(2)} ms`;\r\n\t\tif (ms < 1000) return `${Math.round(ms)} ms`;\r\n\t\treturn `${(ms / 1000).toFixed(2)} s`;\r\n\t}\r\n\r\n\tprotected formatBytes(bytes: number | undefined): string {\r\n\t\tif (bytes === undefined || bytes === null) return '-';\r\n\t\tif (bytes < 1024) return `${bytes} B`;\r\n\t\tif (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;\r\n\t\treturn `${(bytes / (1024 * 1024)).toFixed(1)} MB`;\r\n\t}\r\n\r\n\tprotected formatTimestamp(ts: string | number | undefined): string {\r\n\t\tif (ts === undefined || ts === null || ts === '') return '';\r\n\t\tif (typeof ts === 'string') return ts;\r\n\t\tconst s = String(ts);\r\n\t\tif (s.length === 14) {\r\n\t\t\treturn `${s.slice(8, 10)}:${s.slice(10, 12)}:${s.slice(12, 14)} ${s.slice(6, 8)}.${s.slice(4, 6)}.${s.slice(0, 4)}`;\r\n\t\t}\r\n\t\tif (ts > 1e11) {\r\n\t\t\treturn new Date(ts).toLocaleString();\r\n\t\t}\r\n\t\treturn s;\r\n\t}\r\n\r\n\tprotected tryParseJson(content: string | undefined): unknown {\r\n\t\tif (!content) return null;\r\n\t\tconst trimmed = content.trim();\r\n\t\tif (!((trimmed.startsWith('{') && trimmed.endsWith('}')) || (trimmed.startsWith('[') && trimmed.endsWith(']')))) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\ttry {\r\n\t\t\treturn JSON.parse(trimmed);\r\n\t\t} catch {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t}\r\n}\r\n","<ng-container *transloco=\"let t\">\r\n\t<p-sidebar\r\n\t\t[visible]=\"visible()\"\r\n\t\t(visibleChange)=\"onVisibleChange($event)\"\r\n\t\t[position]=\"position()\"\r\n\t\t[style]=\"{ width: width() }\"\r\n\t\t[modal]=\"modal()\"\r\n\t\t[dismissible]=\"true\"\r\n\t\t[showCloseIcon]=\"true\"\r\n\t\tstyleClass=\"aril-trace-drawer\">\r\n\t\t<ng-template pTemplate=\"header\">\r\n\t\t\t<div class=\"aril-trace-drawer__header\">\r\n\t\t\t\t<i class=\"pi pi-sitemap\"></i>\r\n\t\t\t\t<span class=\"aril-trace-drawer__title\">{{ t('traceDrawer.title') }}</span>\r\n\t\t\t\t<code class=\"aril-trace-drawer__chip\">{{ traceId() }}</code>\r\n\t\t\t\t<i\r\n\t\t\t\t\trole=\"button\"\r\n\t\t\t\t\tclass=\"pi pi-share-alt aril-trace-drawer__share\"\r\n\t\t\t\t\t[pTooltip]=\"t('traceDrawer.shareLink')\"\r\n\t\t\t\t\ttooltipPosition=\"bottom\"\r\n\t\t\t\t\t(click)=\"shareLink()\"></i>\r\n\t\t\t</div>\r\n\t\t</ng-template>\r\n\r\n\t\t<div class=\"aril-trace-drawer__body\">\r\n\t\t\t@if (loading()) {\r\n\t\t\t\t<div class=\"aril-trace-drawer__state\">\r\n\t\t\t\t\t<p-progressSpinner strokeWidth=\"3\" styleClass=\"w-3rem h-3rem\"></p-progressSpinner>\r\n\t\t\t\t\t<span>{{ t('traceDrawer.loading') }}</span>\r\n\t\t\t\t</div>\r\n\t\t\t} @else if (errorMessage()) {\r\n\t\t\t\t<div class=\"aril-trace-drawer__state aril-trace-drawer__state--error\">\r\n\t\t\t\t\t<i class=\"pi pi-exclamation-triangle\"></i>\r\n\t\t\t\t\t<p>{{ errorMessage() }}</p>\r\n\t\t\t\t\t<aril-button [label]=\"t('traceDrawer.retry')\" icon=\"REFRESH\" color=\"primary\" (clickEvent)=\"retry()\" />\r\n\t\t\t\t</div>\r\n\t\t\t} @else {\r\n\t\t\t\t@if (apisixHits().length) {\r\n\t\t\t\t\t<section class=\"aril-trace-drawer__section\">\r\n\t\t\t\t\t\t<h3 class=\"aril-trace-drawer__section-title\">\r\n\t\t\t\t\t\t\t<i class=\"pi pi-globe\"></i>\r\n\t\t\t\t\t\t\t{{ t('traceDrawer.apisixHeader') }}\r\n\t\t\t\t\t\t\t<aril-badge [value]=\"apisixHits().length + ' / ' + totalItem()\" [rounded]=\"true\" />\r\n\t\t\t\t\t\t</h3>\r\n\t\t\t\t\t\t@for (hit of apisixHits(); track hit.id) {\r\n\t\t\t\t\t\t\t<details class=\"trace-row trace-row--{{ statusSeverity(hit.status) }}\">\r\n\t\t\t\t\t\t\t\t<summary class=\"trace-row__summary\">\r\n\t\t\t\t\t\t\t\t\t<i class=\"pi pi-chevron-right trace-row__chevron\"></i>\r\n\t\t\t\t\t\t\t\t\t<aril-badge [value]=\"hit.status.toString()\" [severity]=\"statusSeverity(hit.status)\" />\r\n\t\t\t\t\t\t\t\t\t<span class=\"trace-row__tag\">{{ hit.requestMethod }}</span>\r\n\t\t\t\t\t\t\t\t\t<span class=\"trace-row__main\">{{ hit.requestUri }}</span>\r\n\t\t\t\t\t\t\t\t\t<aril-badge\r\n\t\t\t\t\t\t\t\t\t\t[value]=\"formatDuration(hit.responseTime)\"\r\n\t\t\t\t\t\t\t\t\t\t[severity]=\"durationSeverity(hit.responseTime)\" />\r\n\t\t\t\t\t\t\t\t\t@if (hit.timestamp) {\r\n\t\t\t\t\t\t\t\t\t\t<span class=\"trace-row__time\">{{ formatTimestamp(hit.timestamp) }}</span>\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t<i\r\n\t\t\t\t\t\t\t\t\t\trole=\"button\"\r\n\t\t\t\t\t\t\t\t\t\tclass=\"pi pi-code trace-row__action\"\r\n\t\t\t\t\t\t\t\t\t\t[pTooltip]=\"t('traceDrawer.copyCurl')\"\r\n\t\t\t\t\t\t\t\t\t\ttooltipPosition=\"left\"\r\n\t\t\t\t\t\t\t\t\t\t(click)=\"$event.preventDefault(); $event.stopPropagation(); copyAsCurl(hit)\"></i>\r\n\t\t\t\t\t\t\t\t</summary>\r\n\t\t\t\t\t\t\t\t<div class=\"trace-row__body\">\r\n\t\t\t\t\t\t\t\t\t<div class=\"trace-row__meta\">\r\n\t\t\t\t\t\t\t\t\t\t@if (hit.routeName) {\r\n\t\t\t\t\t\t\t\t\t\t\t<div>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"meta-label\">{{ t('traceDrawer.route') }}</span\r\n\t\t\t\t\t\t\t\t\t\t\t\t><span>{{ hit.routeName }}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t@if (hit.sourceApp || hit.sourceModule) {\r\n\t\t\t\t\t\t\t\t\t\t\t<div>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"meta-label\">{{ t('traceDrawer.source') }}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<span>{{ hit.sourceApp }}{{ hit.sourceModule ? ' / ' + hit.sourceModule : '' }}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t@if (hit.targetApp || hit.targetModule) {\r\n\t\t\t\t\t\t\t\t\t\t\t<div>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"meta-label\">{{ t('traceDrawer.target') }}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<span>{{ hit.targetApp }}{{ hit.targetModule ? ' / ' + hit.targetModule : '' }}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t@if (hit.upstreamHost) {\r\n\t\t\t\t\t\t\t\t\t\t\t<div>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"meta-label\">{{ t('traceDrawer.upstream') }}</span\r\n\t\t\t\t\t\t\t\t\t\t\t\t><span>{{ hit.upstreamHost }}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t@if (hit.username) {\r\n\t\t\t\t\t\t\t\t\t\t\t<div>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"meta-label\">{{ t('traceDrawer.user') }}</span\r\n\t\t\t\t\t\t\t\t\t\t\t\t><span>{{ hit.username }}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t@if (hit.requestSize !== undefined) {\r\n\t\t\t\t\t\t\t\t\t\t\t<div>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"meta-label\">{{ t('traceDrawer.requestSize') }}</span\r\n\t\t\t\t\t\t\t\t\t\t\t\t><span>{{ formatBytes(hit.requestSize) }}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t@if (hit.responseSize !== undefined) {\r\n\t\t\t\t\t\t\t\t\t\t\t<div>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"meta-label\">{{ t('traceDrawer.responseSize') }}</span\r\n\t\t\t\t\t\t\t\t\t\t\t\t><span>{{ formatBytes(hit.responseSize) }}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t@if (hit.requestBody) {\r\n\t\t\t\t\t\t\t\t\t\t<details class=\"trace-row__sub\">\r\n\t\t\t\t\t\t\t\t\t\t\t<summary>{{ t('traceDrawer.requestBody') }}</summary>\r\n\t\t\t\t\t\t\t\t\t\t\t@if (tryParseJson(hit.requestBody); as parsed) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t<pre>{{ parsed | json }}</pre>\r\n\t\t\t\t\t\t\t\t\t\t\t} @else {\r\n\t\t\t\t\t\t\t\t\t\t\t\t<pre>{{ hit.requestBody }}</pre>\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t</details>\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t@if (hit.responseBody) {\r\n\t\t\t\t\t\t\t\t\t\t<details class=\"trace-row__sub\">\r\n\t\t\t\t\t\t\t\t\t\t\t<summary>{{ t('traceDrawer.responseBody') }}</summary>\r\n\t\t\t\t\t\t\t\t\t\t\t@if (tryParseJson(hit.responseBody); as parsed) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t<pre>{{ parsed | json }}</pre>\r\n\t\t\t\t\t\t\t\t\t\t\t} @else {\r\n\t\t\t\t\t\t\t\t\t\t\t\t<pre>{{ hit.responseBody }}</pre>\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t</details>\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t</details>\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t@if (hasMore()) {\r\n\t\t\t\t\t\t\t<div class=\"aril-trace-drawer__load-more\">\r\n\t\t\t\t\t\t\t\t<aril-button\r\n\t\t\t\t\t\t\t\t\t[label]=\"t('traceDrawer.loadMore')\"\r\n\t\t\t\t\t\t\t\t\ticon=\"CHEVRON_DOWN\"\r\n\t\t\t\t\t\t\t\t\tcolor=\"primary\"\r\n\t\t\t\t\t\t\t\t\t[outlined]=\"true\"\r\n\t\t\t\t\t\t\t\t\t[loading]=\"loadingMore()\"\r\n\t\t\t\t\t\t\t\t\t[disabled]=\"loadingMore()\"\r\n\t\t\t\t\t\t\t\t\t(clickEvent)=\"loadMore()\" />\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t</section>\r\n\t\t\t\t}\r\n\t\t\t\t@if (appLogs().length) {\r\n\t\t\t\t\t<section class=\"aril-trace-drawer__section\">\r\n\t\t\t\t\t\t<h3 class=\"aril-trace-drawer__section-title\">\r\n\t\t\t\t\t\t\t<i class=\"pi pi-list\"></i>\r\n\t\t\t\t\t\t\t{{ t('traceDrawer.appLogsHeader') }}\r\n\t\t\t\t\t\t\t<aril-badge [value]=\"appLogs().length + ' / ' + appLogsTotal()\" [rounded]=\"true\" />\r\n\t\t\t\t\t\t</h3>\r\n\t\t\t\t\t\t@for (log of appLogs(); track log.id) {\r\n\t\t\t\t\t\t\t<details class=\"trace-row trace-row--{{ levelSeverity(log.level) }}\">\r\n\t\t\t\t\t\t\t\t<summary class=\"trace-row__summary\">\r\n\t\t\t\t\t\t\t\t\t<i class=\"pi pi-chevron-right trace-row__chevron\"></i>\r\n\t\t\t\t\t\t\t\t\t@if (log.level) {\r\n\t\t\t\t\t\t\t\t\t\t<aril-badge [value]=\"log.level\" [severity]=\"levelSeverity(log.level)\" />\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t@if (log.module) {\r\n\t\t\t\t\t\t\t\t\t\t<span class=\"trace-row__tag\">{{ log.module }}</span>\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t<span class=\"trace-row__main\">{{ log.message }}</span>\r\n\t\t\t\t\t\t\t\t\t@if (log.timestamp) {\r\n\t\t\t\t\t\t\t\t\t\t<span class=\"trace-row__time\">{{ formatTimestamp(log.timestamp) }}</span>\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t</summary>\r\n\t\t\t\t\t\t\t\t<div class=\"trace-row__body\">\r\n\t\t\t\t\t\t\t\t\t@if (log.message) {\r\n\t\t\t\t\t\t\t\t\t\t<div class=\"trace-row__message\">{{ log.message }}</div>\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t@if (log.username || log.app) {\r\n\t\t\t\t\t\t\t\t\t\t<div class=\"trace-row__meta\">\r\n\t\t\t\t\t\t\t\t\t\t\t@if (log.app) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t<div>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"meta-label\">{{ t('traceDrawer.target') }}</span\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t><span>{{ log.app }}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t@if (log.username) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t<div>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"meta-label\">{{ t('traceDrawer.user') }}</span\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t><span>{{ log.username }}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t@if (log.errorDetail) {\r\n\t\t\t\t\t\t\t\t\t\t<details class=\"trace-row__sub\" open>\r\n\t\t\t\t\t\t\t\t\t\t\t<summary>{{ t('traceDrawer.appLogErrorDetail') }}</summary>\r\n\t\t\t\t\t\t\t\t\t\t\t<pre>{{ log.errorDetail }}</pre>\r\n\t\t\t\t\t\t\t\t\t\t</details>\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t@if (log.referenceFields?.length) {\r\n\t\t\t\t\t\t\t\t\t\t<details class=\"trace-row__sub\">\r\n\t\t\t\t\t\t\t\t\t\t\t<summary>{{ t('traceDrawer.appLogRefFields') }}</summary>\r\n\t\t\t\t\t\t\t\t\t\t\t<div class=\"trace-row__meta\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t@for (rf of log.referenceFields; track rf.field) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<div>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"meta-label\">{{ rf.field }}</span\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t><span>{{ rf.value }}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t\t</details>\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t</details>\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t@if (appLogsHasMore()) {\r\n\t\t\t\t\t\t\t<div class=\"aril-trace-drawer__load-more\">\r\n\t\t\t\t\t\t\t\t<aril-button\r\n\t\t\t\t\t\t\t\t\t[label]=\"t('traceDrawer.loadMore')\"\r\n\t\t\t\t\t\t\t\t\ticon=\"CHEVRON_DOWN\"\r\n\t\t\t\t\t\t\t\t\tcolor=\"primary\"\r\n\t\t\t\t\t\t\t\t\t[outlined]=\"true\"\r\n\t\t\t\t\t\t\t\t\t[loading]=\"appLogsLoadingMore()\"\r\n\t\t\t\t\t\t\t\t\t[disabled]=\"appLogsLoadingMore()\"\r\n\t\t\t\t\t\t\t\t\t(clickEvent)=\"loadMoreAppLogs()\" />\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t</section>\r\n\t\t\t\t}\r\n\t\t\t\t@if (!apisixHits().length && !appLogs().length) {\r\n\t\t\t\t\t<div class=\"aril-trace-drawer__state\">\r\n\t\t\t\t\t\t<i class=\"pi pi-inbox\"></i>\r\n\t\t\t\t\t\t<p>{{ t('traceDrawer.empty') }}</p>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t</div>\r\n\t</p-sidebar>\r\n</ng-container>\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"aril-util-sync-active-tab-route.mjs","sources":["../../projects/aril/util/sync-active-tab-route/src/sync-active-tab-route.directive.ts","../../projects/aril/util/sync-active-tab-route/aril-util-sync-active-tab-route.ts"],"sourcesContent":["import { Location } from '@angular/common';\
|
|
1
|
+
{"version":3,"file":"aril-util-sync-active-tab-route.mjs","sources":["../../projects/aril/util/sync-active-tab-route/src/sync-active-tab-route.directive.ts","../../projects/aril/util/sync-active-tab-route/aril-util-sync-active-tab-route.ts"],"sourcesContent":["import { Location } from '@angular/common';\nimport { Directive, HostListener, OnDestroy, OnInit } from '@angular/core';\nimport { Router } from '@angular/router';\n\nimport { TabView } from 'primeng/tabview';\n\nimport { Subscription } from 'rxjs';\n\n@Directive({\n\tselector: '[syncActiveTabRoute]',\n\tstandalone: true\n})\nexport class SyncActiveTabRouteDirective implements OnInit, OnDestroy {\n\tprivate readonly subscription = new Subscription();\n\n\tconstructor(\n\t\tprivate readonly router: Router,\n\t\tprivate readonly tabView: TabView,\n\t\tprivate readonly location: Location\n\t) {}\n\n\tngOnInit() {\n\t\tthis.subscription.add(\n\t\t\tthis.router.routerState.root.queryParamMap.subscribe((params) => {\n\t\t\t\tif (params.has('activeTab')) {\n\t\t\t\t\tthis.tabView.activeIndex = Number(params.get('activeTab'));\n\t\t\t\t}\n\t\t\t})\n\t\t);\n\t}\n\n\t@HostListener('activeIndexChange', ['$event'])\n\tonTabChange(e: number) {\n\t\tthis.location.replaceState(\n\t\t\tthis.router\n\t\t\t\t.createUrlTree([], {\n\t\t\t\t\tqueryParams: { activeTab: e },\n\t\t\t\t\tqueryParamsHandling: 'merge'\n\t\t\t\t})\n\t\t\t\t.toString()\n\t\t);\n\t}\n\n\tngOnDestroy() {\n\t\tthis.subscription.unsubscribe();\n\t}\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;MAYa,2BAA2B,CAAA;AAGvC,IAAA,WAAA,CACkB,MAAc,EACd,OAAgB,EAChB,QAAkB,EAAA;QAFlB,IAAM,CAAA,MAAA,GAAN,MAAM,CAAQ;QACd,IAAO,CAAA,OAAA,GAAP,OAAO,CAAS;QAChB,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAAU;AALnB,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,YAAY,EAAE,CAAC;KAM/C;IAEJ,QAAQ,GAAA;QACP,IAAI,CAAC,YAAY,CAAC,GAAG,CACpB,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,MAAM,KAAI;AAC/D,YAAA,IAAI,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE;AAC5B,gBAAA,IAAI,CAAC,OAAO,CAAC,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC;aAC3D;SACD,CAAC,CACF,CAAC;KACF;AAGD,IAAA,WAAW,CAAC,CAAS,EAAA;AACpB,QAAA,IAAI,CAAC,QAAQ,CAAC,YAAY,CACzB,IAAI,CAAC,MAAM;aACT,aAAa,CAAC,EAAE,EAAE;AAClB,YAAA,WAAW,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE;AAC7B,YAAA,mBAAmB,EAAE,OAAO;SAC5B,CAAC;aACD,QAAQ,EAAE,CACZ,CAAC;KACF;IAED,WAAW,GAAA;AACV,QAAA,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC;KAChC;8GAjCW,2BAA2B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,MAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,OAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,QAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;kGAA3B,2BAA2B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA,EAAA;;2FAA3B,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBAJvC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,QAAQ,EAAE,sBAAsB;AAChC,oBAAA,UAAU,EAAE,IAAI;AAChB,iBAAA,CAAA;wHAqBA,WAAW,EAAA,CAAA;sBADV,YAAY;uBAAC,mBAAmB,EAAE,CAAC,QAAQ,CAAC,CAAA;;;AC/B9C;;AAEG;;;;"}
|