diff --git a/src/app/features/admin/monitoring/models/admin-monitoring.model.ts b/src/app/features/admin/monitoring/models/admin-monitoring.model.ts
index ce6dfe8..fef48fb 100644
--- a/src/app/features/admin/monitoring/models/admin-monitoring.model.ts
+++ b/src/app/features/admin/monitoring/models/admin-monitoring.model.ts
@@ -8,6 +8,8 @@ export interface AdminMonitoringEvent {
category: AdminMonitoringCategory;
level: AdminMonitoringLevel;
message: string;
+ /** Raw technical detail (endpoint, status code, latency, etc.), shown only behind "Technical details". */
+ technicalDetail?: string;
actor: string;
timestamp: string;
}
diff --git a/src/app/features/admin/monitoring/pages/admin-monitoring-page.component.html b/src/app/features/admin/monitoring/pages/admin-monitoring-page.component.html
index ff96129..cfdcff4 100644
--- a/src/app/features/admin/monitoring/pages/admin-monitoring-page.component.html
+++ b/src/app/features/admin/monitoring/pages/admin-monitoring-page.component.html
@@ -24,7 +24,7 @@
@for (queue of facade.queues(); track queue.name) {
-
{{ queue.name }}
+
{{ queueLabel(queue.name) }}
{{ 'adminMonitoring.depth' | translate }}: {{ queue.depth }}
{{ ('adminMonitoring.queueStatus.' + queue.status) | translate }}
@@ -47,7 +47,7 @@
@for (delivery of facade.webhooks(); track delivery.id) {
| {{ delivery.endpoint }} |
- {{ delivery.event }} |
+ {{ webhookEventLabel(delivery.event) }} |
{{ ('adminMonitoring.webhookStatus.' + delivery.status) | translate }} |
{{ delivery.timestamp | date:'short' }} |
@@ -97,7 +97,15 @@
| {{ ('adminMonitoring.categoryValue.' + event.category) | translate }} |
{{ ('adminMonitoring.levelValue.' + event.level) | translate }} |
- {{ event.message }} |
+
+ {{ event.message }}
+ @if (event.technicalDetail) {
+
+ {{ 'adminMonitoring.technicalDetails' | translate }}
+ {{ event.technicalDetail }}
+
+ }
+ |
{{ event.actor }} |
{{ event.timestamp | date:'short' }} |
diff --git a/src/app/features/admin/monitoring/pages/admin-monitoring-page.component.scss b/src/app/features/admin/monitoring/pages/admin-monitoring-page.component.scss
index 7d731af..ac8562d 100644
--- a/src/app/features/admin/monitoring/pages/admin-monitoring-page.component.scss
+++ b/src/app/features/admin/monitoring/pages/admin-monitoring-page.component.scss
@@ -13,3 +13,12 @@ select { min-height: 40px; padding: 0 10px; border: 1px solid var(--border-color
// to a plain
- only the semantics change, not the visuals.
tbody th[scope='row'] { font-weight: inherit; color: inherit; text-align: left; vertical-align: middle; }
tbody tr:last-child th[scope='row'] { border-bottom: none; }
+
+.monitoring-technical-detail {
+ margin-top: 4px;
+ font-size: var(--font-size-sm, 0.8125rem);
+ color: var(--text-secondary);
+
+ summary { cursor: pointer; color: var(--text-secondary); }
+ code { display: block; margin-top: 4px; word-break: break-all; }
+}
diff --git a/src/app/features/admin/monitoring/pages/admin-monitoring-page.component.ts b/src/app/features/admin/monitoring/pages/admin-monitoring-page.component.ts
index 72053d0..a9cbf27 100644
--- a/src/app/features/admin/monitoring/pages/admin-monitoring-page.component.ts
+++ b/src/app/features/admin/monitoring/pages/admin-monitoring-page.component.ts
@@ -25,7 +25,26 @@ export class AdminMonitoringPageComponent {
readonly categories = ['all', 'audit', 'security', 'login', 'failed_login', 'api', 'error', 'warning'] as const;
+ private readonly queueLabels: Record = {
+ 'order-notifications': 'Order notifications',
+ 'media-processing': 'Media processing',
+ 'webhook-delivery': 'Webhook delivery',
+ };
+
+ private readonly webhookEventLabels: Record = {
+ 'order.created': 'New order placed',
+ 'inventory.updated': 'Inventory updated',
+ };
+
constructor() {
this.facade.loadAll();
}
+
+ queueLabel(name: string): string {
+ return this.queueLabels[name] ?? name;
+ }
+
+ webhookEventLabel(event: string): string {
+ return this.webhookEventLabels[event] ?? event;
+ }
}
diff --git a/src/app/features/admin/monitoring/services/admin-monitoring-local.gateway.ts b/src/app/features/admin/monitoring/services/admin-monitoring-local.gateway.ts
index 26aea0e..2515fcb 100644
--- a/src/app/features/admin/monitoring/services/admin-monitoring-local.gateway.ts
+++ b/src/app/features/admin/monitoring/services/admin-monitoring-local.gateway.ts
@@ -62,6 +62,7 @@ export class AdminMonitoringLocalGateway implements AdminMonitoringGateway {
category,
level,
message: this.messageFor(category, index),
+ technicalDetail: this.technicalDetailFor(category, index),
actor: ACTORS[index % ACTORS.length],
timestamp: new Date(Date.now() - index * 45 * 60 * 1000).toISOString(),
};
@@ -73,10 +74,19 @@ export class AdminMonitoringLocalGateway implements AdminMonitoringGateway {
case 'security': return `Security policy check passed (#${index})`;
case 'login': return `Successful admin login (#${index})`;
case 'failed_login': return `Failed login attempt (#${index})`;
- case 'api': return `GET /api/products responded 200 in ${80 + index}ms`;
- case 'error': return `Unhandled exception in checkout flow (#${index})`;
- case 'warning': return `Slow query detected (#${index})`;
+ case 'api': return `Product data refreshed successfully`;
+ case 'error': return `A background task failed unexpectedly`;
+ case 'warning': return `A data lookup took longer than usual`;
default: return `Event #${index}`;
}
}
+
+ private technicalDetailFor(category: AdminMonitoringCategory, index: number): string | undefined {
+ switch (category) {
+ case 'api': return `GET /api/products responded 200 in ${80 + index}ms`;
+ case 'error': return `Unhandled exception in checkout flow (#${index})`;
+ case 'warning': return `Slow query detected (#${index})`;
+ default: return undefined;
+ }
+ }
}
diff --git a/src/app/i18n/en.ts b/src/app/i18n/en.ts
index 7b42583..518b016 100644
--- a/src/app/i18n/en.ts
+++ b/src/app/i18n/en.ts
@@ -1850,6 +1850,7 @@ export const en: Translations = {
category: 'Category',
level: 'Severity',
message: 'Description',
+ technicalDetails: 'Technical details',
categoryValue: {
all: 'All categories',
audit: 'Admin activity',
diff --git a/src/app/i18n/hy.ts b/src/app/i18n/hy.ts
index 782e2c2..d76fcd0 100644
--- a/src/app/i18n/hy.ts
+++ b/src/app/i18n/hy.ts
@@ -1845,6 +1845,7 @@ export const hy: Translations = {
category: 'Կատեգորիա',
level: 'Կարևորություն',
message: 'Նկարագրություն',
+ technicalDetails: 'Տեխնիկական մանրամասներ',
categoryValue: {
all: 'Բոլոր կատեգորիաները',
audit: 'Ադմինի գործողություններ',
diff --git a/src/app/i18n/ru.ts b/src/app/i18n/ru.ts
index e299a45..c6c194f 100644
--- a/src/app/i18n/ru.ts
+++ b/src/app/i18n/ru.ts
@@ -1845,6 +1845,7 @@ export const ru: Translations = {
category: 'Категория',
level: 'Важность',
message: 'Описание',
+ technicalDetails: 'Технические детали',
categoryValue: {
all: 'Все категории',
audit: 'Действия администраторов',
diff --git a/src/app/i18n/translations.ts b/src/app/i18n/translations.ts
index 65e06be..2219ca0 100644
--- a/src/app/i18n/translations.ts
+++ b/src/app/i18n/translations.ts
@@ -1858,6 +1858,7 @@ export interface Translations {
category: string;
level: string;
message: string;
+ technicalDetails: string;
categoryValue: {
all: string;
audit: string;
|