@valtimo/logging 13.4.0 → 13.5.0
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.
|
@@ -173,11 +173,11 @@ class LogDetailsComponent {
|
|
|
173
173
|
return s;
|
|
174
174
|
}
|
|
175
175
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: LogDetailsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
176
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.15", type: LogDetailsComponent, isStandalone: true, selector: "valtimo-log-details", inputs: { open: "open", logEvent: "logEvent" }, outputs: { closeModalEvent: "closeModalEvent" }, ngImport: i0, template: "<!--\n ~ Copyright 2015-2025 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<cds-modal [open]=\"open\" size=\"lg\" (close)=\"onCloseSelect()\">\n <cds-modal-header [showCloseButton]=\"true\" (closeSelect)=\"onCloseSelect()\">\n {{ 'logging.detailsTitle' | translate }}\n </cds-modal-header>\n\n <section cdsModalContent class=\"valtimo-log-details__content\">\n <h4 class=\"log-header\">\n {{ 'logging.formattedMessage' | translate }}\n </h4>\n\n <div>{{ logEventFormatted?.formattedMessage || '-' }}</div>\n\n <h4 class=\"log-header\">\n {{ 'logging.timestamp' | translate }}\n </h4>\n\n <div>\n {{ logEventFormatted?.timestamp || '-' }}\n </div>\n\n @if (logEventFormatted?.properties?.length > 0) {\n <h4 class=\"log-header\">\n {{ 'logging.properties' | translate }}\n </h4>\n <div>\n @for (property of logEventFormatted.properties; track property.key) {\n <div>\n <span class=\"property-key\">{{ property.key }}: </span>\n <span class=\"property-value\">{{ property.value }}</span>\n </div>\n }\n </div>\n }\n\n @if (logEventFormatted?.stacktrace) {\n <h4 class=\"log-header\">\n {{ 'logging.stacktrace' | translate }}\n </h4>\n <div>\n <pre class=\"valtimo-log-stacktrace\" [innerHtml]=\"logEventFormatted.stacktrace\"></pre>\n </div>\n }\n </section>\n</cds-modal>\n", styles: [".log-header{padding-top:24px;padding-bottom:12px;color:var(--cds-text-primary);font-weight:600;font-size:16px;line-height:24px}.property-key{color:var(--cds-text-primary)}.property-value{color:var(--cds-text-secondary)}.valtimo-log-details__content{padding:32px}.valtimo-log-details__content ::ng-deep .highlight1{color:var(--cds-text-primary);font-weight:600}.valtimo-log-details__content ::ng-deep .valtimo-log-stacktrace{color:var(--cds-text-primary);font-weight:400;background-color:var(--cds-layer-01)}.valtimo-log-details__content ::ng-deep .highlight3{color:var(--cds-text-on-color-disabled);font-weight:300}\n/*!\n * Copyright 2015-2025 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i5.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: ModalModule }, { kind: "component", type: i3.Modal, selector: "cds-modal, ibm-modal", inputs: ["size", "theme", "ariaLabel", "open", "trigger", "hasScrollingContent"], outputs: ["overlaySelected", "close"] }, { kind: "component", type: i3.ModalHeader, selector: "cds-modal-header, ibm-modal-header", inputs: ["theme", "closeLabel", "showCloseButton"], outputs: ["closeSelect"] }, { kind: "directive", type: i3.ModalContent, selector: "[cdsModalContent], [ibmModalContent]", inputs: ["hasForm"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
176
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.15", type: LogDetailsComponent, isStandalone: true, selector: "valtimo-log-details", inputs: { open: "open", logEvent: "logEvent" }, outputs: { closeModalEvent: "closeModalEvent" }, ngImport: i0, template: "<!--\n ~ Copyright 2015-2025 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<cds-modal [open]=\"open\" size=\"lg\" (close)=\"onCloseSelect()\">\n <cds-modal-header [showCloseButton]=\"true\" (closeSelect)=\"onCloseSelect()\">\n {{ 'logging.detailsTitle' | translate }}\n </cds-modal-header>\n\n <section cdsModalContent class=\"valtimo-log-details__content\">\n <h4 class=\"log-header\">\n {{ 'logging.formattedMessage' | translate }}\n </h4>\n\n <div class=\"log-text\">{{ logEventFormatted?.formattedMessage || '-' }}</div>\n\n <h4 class=\"log-header\">\n {{ 'logging.timestamp' | translate }}\n </h4>\n\n <div>\n {{ logEventFormatted?.timestamp || '-' }}\n </div>\n\n @if (logEventFormatted?.properties?.length > 0) {\n <h4 class=\"log-header\">\n {{ 'logging.properties' | translate }}\n </h4>\n <div>\n @for (property of logEventFormatted.properties; track property.key) {\n <div>\n <span class=\"property-key\">{{ property.key }}: </span>\n <span class=\"property-value\">{{ property.value }}</span>\n </div>\n }\n </div>\n }\n\n @if (logEventFormatted?.stacktrace) {\n <h4 class=\"log-header\">\n {{ 'logging.stacktrace' | translate }}\n </h4>\n <div>\n <pre class=\"valtimo-log-stacktrace\" [innerHtml]=\"logEventFormatted.stacktrace\"></pre>\n </div>\n }\n </section>\n</cds-modal>\n", styles: [".log-header{padding-top:24px;padding-bottom:12px;color:var(--cds-text-primary);font-weight:600;font-size:16px;line-height:24px}.log-text{white-space:pre-wrap}.property-key{color:var(--cds-text-primary)}.property-value{color:var(--cds-text-secondary)}.valtimo-log-details__content{padding:32px}.valtimo-log-details__content ::ng-deep .highlight1{color:var(--cds-text-primary);font-weight:600}.valtimo-log-details__content ::ng-deep .valtimo-log-stacktrace{color:var(--cds-text-primary);font-weight:400;background-color:var(--cds-layer-01)}.valtimo-log-details__content ::ng-deep .highlight3{color:var(--cds-text-on-color-disabled);font-weight:300}\n/*!\n * Copyright 2015-2025 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i5.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: ModalModule }, { kind: "component", type: i3.Modal, selector: "cds-modal, ibm-modal", inputs: ["size", "theme", "ariaLabel", "open", "trigger", "hasScrollingContent"], outputs: ["overlaySelected", "close"] }, { kind: "component", type: i3.ModalHeader, selector: "cds-modal-header, ibm-modal-header", inputs: ["theme", "closeLabel", "showCloseButton"], outputs: ["closeSelect"] }, { kind: "directive", type: i3.ModalContent, selector: "[cdsModalContent], [ibmModalContent]", inputs: ["hasForm"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
177
177
|
}
|
|
178
178
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: LogDetailsComponent, decorators: [{
|
|
179
179
|
type: Component,
|
|
180
|
-
args: [{ selector: 'valtimo-log-details', standalone: true, imports: [CommonModule, TranslateModule, ModalModule], changeDetection: ChangeDetectionStrategy.OnPush, template: "<!--\n ~ Copyright 2015-2025 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<cds-modal [open]=\"open\" size=\"lg\" (close)=\"onCloseSelect()\">\n <cds-modal-header [showCloseButton]=\"true\" (closeSelect)=\"onCloseSelect()\">\n {{ 'logging.detailsTitle' | translate }}\n </cds-modal-header>\n\n <section cdsModalContent class=\"valtimo-log-details__content\">\n <h4 class=\"log-header\">\n {{ 'logging.formattedMessage' | translate }}\n </h4>\n\n <div>{{ logEventFormatted?.formattedMessage || '-' }}</div>\n\n <h4 class=\"log-header\">\n {{ 'logging.timestamp' | translate }}\n </h4>\n\n <div>\n {{ logEventFormatted?.timestamp || '-' }}\n </div>\n\n @if (logEventFormatted?.properties?.length > 0) {\n <h4 class=\"log-header\">\n {{ 'logging.properties' | translate }}\n </h4>\n <div>\n @for (property of logEventFormatted.properties; track property.key) {\n <div>\n <span class=\"property-key\">{{ property.key }}: </span>\n <span class=\"property-value\">{{ property.value }}</span>\n </div>\n }\n </div>\n }\n\n @if (logEventFormatted?.stacktrace) {\n <h4 class=\"log-header\">\n {{ 'logging.stacktrace' | translate }}\n </h4>\n <div>\n <pre class=\"valtimo-log-stacktrace\" [innerHtml]=\"logEventFormatted.stacktrace\"></pre>\n </div>\n }\n </section>\n</cds-modal>\n", styles: [".log-header{padding-top:24px;padding-bottom:12px;color:var(--cds-text-primary);font-weight:600;font-size:16px;line-height:24px}.property-key{color:var(--cds-text-primary)}.property-value{color:var(--cds-text-secondary)}.valtimo-log-details__content{padding:32px}.valtimo-log-details__content ::ng-deep .highlight1{color:var(--cds-text-primary);font-weight:600}.valtimo-log-details__content ::ng-deep .valtimo-log-stacktrace{color:var(--cds-text-primary);font-weight:400;background-color:var(--cds-layer-01)}.valtimo-log-details__content ::ng-deep .highlight3{color:var(--cds-text-on-color-disabled);font-weight:300}\n/*!\n * Copyright 2015-2025 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n"] }]
|
|
180
|
+
args: [{ selector: 'valtimo-log-details', standalone: true, imports: [CommonModule, TranslateModule, ModalModule], changeDetection: ChangeDetectionStrategy.OnPush, template: "<!--\n ~ Copyright 2015-2025 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<cds-modal [open]=\"open\" size=\"lg\" (close)=\"onCloseSelect()\">\n <cds-modal-header [showCloseButton]=\"true\" (closeSelect)=\"onCloseSelect()\">\n {{ 'logging.detailsTitle' | translate }}\n </cds-modal-header>\n\n <section cdsModalContent class=\"valtimo-log-details__content\">\n <h4 class=\"log-header\">\n {{ 'logging.formattedMessage' | translate }}\n </h4>\n\n <div class=\"log-text\">{{ logEventFormatted?.formattedMessage || '-' }}</div>\n\n <h4 class=\"log-header\">\n {{ 'logging.timestamp' | translate }}\n </h4>\n\n <div>\n {{ logEventFormatted?.timestamp || '-' }}\n </div>\n\n @if (logEventFormatted?.properties?.length > 0) {\n <h4 class=\"log-header\">\n {{ 'logging.properties' | translate }}\n </h4>\n <div>\n @for (property of logEventFormatted.properties; track property.key) {\n <div>\n <span class=\"property-key\">{{ property.key }}: </span>\n <span class=\"property-value\">{{ property.value }}</span>\n </div>\n }\n </div>\n }\n\n @if (logEventFormatted?.stacktrace) {\n <h4 class=\"log-header\">\n {{ 'logging.stacktrace' | translate }}\n </h4>\n <div>\n <pre class=\"valtimo-log-stacktrace\" [innerHtml]=\"logEventFormatted.stacktrace\"></pre>\n </div>\n }\n </section>\n</cds-modal>\n", styles: [".log-header{padding-top:24px;padding-bottom:12px;color:var(--cds-text-primary);font-weight:600;font-size:16px;line-height:24px}.log-text{white-space:pre-wrap}.property-key{color:var(--cds-text-primary)}.property-value{color:var(--cds-text-secondary)}.valtimo-log-details__content{padding:32px}.valtimo-log-details__content ::ng-deep .highlight1{color:var(--cds-text-primary);font-weight:600}.valtimo-log-details__content ::ng-deep .valtimo-log-stacktrace{color:var(--cds-text-primary);font-weight:400;background-color:var(--cds-layer-01)}.valtimo-log-details__content ::ng-deep .highlight3{color:var(--cds-text-on-color-disabled);font-weight:300}\n/*!\n * Copyright 2015-2025 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n"] }]
|
|
181
181
|
}], propDecorators: { open: [{
|
|
182
182
|
type: Input
|
|
183
183
|
}], logEvent: [{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"valtimo-logging.mjs","sources":["../../../../projects/valtimo/logging/src/lib/models/logging.model.ts","../../../../projects/valtimo/logging/src/lib/models/index.ts","../../../../projects/valtimo/logging/src/lib/services/logging-api.service.ts","../../../../projects/valtimo/logging/src/lib/services/index.ts","../../../../projects/valtimo/logging/src/lib/components/log-details/log-details.component.ts","../../../../projects/valtimo/logging/src/lib/components/log-details/log-details.component.html","../../../../projects/valtimo/logging/src/lib/components/log-search/log-search.component.ts","../../../../projects/valtimo/logging/src/lib/components/log-search/log-search.component.html","../../../../projects/valtimo/logging/src/lib/components/logging-list/logging-list.component.ts","../../../../projects/valtimo/logging/src/lib/components/logging-list/logging-list.component.html","../../../../projects/valtimo/logging/src/logging-routing.module.ts","../../../../projects/valtimo/logging/src/logging.module.ts","../../../../projects/valtimo/logging/src/public_api.ts","../../../../projects/valtimo/logging/src/valtimo-logging.ts"],"sourcesContent":["/*\n * Copyright 2015-2025 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\ninterface LoggingEvent {\n timestamp: string;\n formattedMessage: string;\n level: string;\n properties: Array<LoggingEventProperty>;\n stacktrace: string;\n}\n\ninterface LoggingEventProperty {\n key: string;\n value: string;\n}\n\ninterface LoggingEventSearchRequest {\n afterTimestamp?: string;\n beforeTimestamp?: string;\n level?: string;\n likeFormattedMessage?: string;\n properties?: Array<LoggingEventProperty>;\n size?: number;\n page?: number;\n}\n\nenum LogLevel {\n DEBUG = 'DEBUG',\n ERROR = 'ERROR',\n INFO = 'INFO',\n TRACE = 'TRACE',\n WARN = 'WARN',\n}\n\nconst LOG_LEVEL_TAG = {\n [LogLevel.DEBUG]: 'teal',\n [LogLevel.ERROR]: 'red',\n [LogLevel.INFO]: 'blue',\n [LogLevel.TRACE]: 'grey',\n [LogLevel.WARN]: 'purple',\n};\n\nconst LOG_ELLIPSIS_LIMIT = 128;\n\nexport {\n LOG_ELLIPSIS_LIMIT,\n LOG_LEVEL_TAG,\n LoggingEvent,\n LoggingEventProperty,\n LoggingEventSearchRequest,\n LogLevel,\n};\n","/*\n * Copyright 2015-2025 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport * from './logging.model';\nexport * from './search.model';\n","/*\n * Copyright 2015-2025 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {HttpClient, HttpParams} from '@angular/common/http';\nimport {Injectable} from '@angular/core';\nimport {ConfigService, Page, BaseApiService} from '@valtimo/shared';\nimport {Observable} from 'rxjs';\nimport {LoggingEvent, LoggingEventSearchRequest} from '../models';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class LoggingApiService extends BaseApiService {\n constructor(\n protected readonly configService: ConfigService,\n protected readonly httpClient: HttpClient\n ) {\n super(httpClient, configService);\n }\n\n public getTechnicalLogs(\n searchRequest: LoggingEventSearchRequest\n ): Observable<Page<LoggingEvent>> {\n const {size, page, ...searchBody} = searchRequest;\n const params = new HttpParams({\n fromObject: {size, page} as any,\n });\n\n return this.httpClient.post<Page<LoggingEvent>>(\n this.getApiUrl('management/v1/logging'),\n searchBody,\n {\n params,\n }\n );\n }\n}\n","/*\n * Copyright 2015-2025 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport * from './logging-api.service';\n","/*\n * Copyright 2015-2025 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {CommonModule} from '@angular/common';\nimport {ChangeDetectionStrategy, Component, EventEmitter, Input, Output} from '@angular/core';\nimport {TranslateModule} from '@ngx-translate/core';\nimport {ModalModule} from 'carbon-components-angular';\nimport {LoggingEvent} from '../../models';\n\n@Component({\n selector: 'valtimo-log-details',\n templateUrl: './log-details.component.html',\n styleUrl: './log-details.component.scss',\n standalone: true,\n imports: [CommonModule, TranslateModule, ModalModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class LogDetailsComponent {\n @Input() public open = false;\n\n @Input() public set logEvent(logEvent: LoggingEvent) {\n this.logEventFormatted = {\n ...logEvent,\n stacktrace: this.formatStacktrace(logEvent?.stacktrace),\n };\n }\n\n @Output() public readonly closeModalEvent = new EventEmitter();\n\n public logEventFormatted: LoggingEvent;\n\n public readonly classesToIgnore: string[] = [\n 'LoggingContextKt',\n 'LoggableResourceAspect',\n 'RunWithoutAuthorizationAspect',\n 'UserLoggingFilter',\n ];\n\n public onCloseSelect(): void {\n this.closeModalEvent.emit();\n }\n\n private formatStacktrace(s?: string): string {\n if (!s) {\n return s;\n }\n\n s = s.replace(/^[^\\t].+(Exception|Error): .+/gm, '<span class=\"highlight1\">$&</span>');\n s = s.replace(/^Caused by: .+/gm, '<span class=\"highlight1\">$&</span>');\n this.classesToIgnore.forEach(\n c =>\n (s = s.replace(\n new RegExp(`^\\tat .+\\.${c}\\..+`, 'gm'),\n '<span class=\"highlight3\">$&</span>'\n ))\n );\n s = s.replace(/^\\tat com.(ritense|valtimo).+/gm, '<span class=\"highlight2\">$&</span>');\n s = s.replace(/^\\t.+common frames omitted$/gm, '<span class=\"highlight3\">$&</span>');\n s = s.replace(/^\\tat .+/gm, '<span class=\"highlight3\">$&</span>');\n return s;\n }\n}\n","<!--\n ~ Copyright 2015-2025 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<cds-modal [open]=\"open\" size=\"lg\" (close)=\"onCloseSelect()\">\n <cds-modal-header [showCloseButton]=\"true\" (closeSelect)=\"onCloseSelect()\">\n {{ 'logging.detailsTitle' | translate }}\n </cds-modal-header>\n\n <section cdsModalContent class=\"valtimo-log-details__content\">\n <h4 class=\"log-header\">\n {{ 'logging.formattedMessage' | translate }}\n </h4>\n\n <div>{{ logEventFormatted?.formattedMessage || '-' }}</div>\n\n <h4 class=\"log-header\">\n {{ 'logging.timestamp' | translate }}\n </h4>\n\n <div>\n {{ logEventFormatted?.timestamp || '-' }}\n </div>\n\n @if (logEventFormatted?.properties?.length > 0) {\n <h4 class=\"log-header\">\n {{ 'logging.properties' | translate }}\n </h4>\n <div>\n @for (property of logEventFormatted.properties; track property.key) {\n <div>\n <span class=\"property-key\">{{ property.key }}: </span>\n <span class=\"property-value\">{{ property.value }}</span>\n </div>\n }\n </div>\n }\n\n @if (logEventFormatted?.stacktrace) {\n <h4 class=\"log-header\">\n {{ 'logging.stacktrace' | translate }}\n </h4>\n <div>\n <pre class=\"valtimo-log-stacktrace\" [innerHtml]=\"logEventFormatted.stacktrace\"></pre>\n </div>\n }\n </section>\n</cds-modal>\n","/*\n * Copyright 2015-2025 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {CommonModule} from '@angular/common';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n Input,\n OnDestroy,\n OnInit,\n Output,\n ViewChild,\n} from '@angular/core';\nimport {FormArray, FormBuilder, FormsModule, ReactiveFormsModule} from '@angular/forms';\nimport {TrashCan16} from '@carbon/icons';\nimport {TranslateModule} from '@ngx-translate/core';\nimport {CARBON_THEME, CdsThemeService, CurrentCarbonTheme} from '@valtimo/components';\nimport {\n ButtonModule,\n DatePicker,\n DatePickerModule,\n DropdownModule,\n IconModule,\n IconService,\n InputModule,\n ListItem,\n TimePickerModule,\n} from 'carbon-components-angular';\nimport flatpickr from 'flatpickr';\nimport {debounceTime, map, Observable, Subscription} from 'rxjs';\nimport {\n LoggingEventProperty,\n LoggingEventSearchFormValue,\n LoggingEventSearchRequest,\n LogLevel,\n} from '../../models';\n\n@Component({\n selector: 'valtimo-log-search',\n templateUrl: './log-search.component.html',\n styleUrl: './log-search.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [\n CommonModule,\n TranslateModule,\n ButtonModule,\n DropdownModule,\n IconModule,\n InputModule,\n ReactiveFormsModule,\n FormsModule,\n DatePickerModule,\n TimePickerModule,\n ],\n})\nexport class LogSearchComponent implements OnInit, AfterViewInit, OnDestroy {\n @ViewChild('afterTimestamp') private readonly _afterTimestampDatePicker: DatePicker;\n @ViewChild('beforeTimestamp') private readonly _beforeTimestampDatePicker: DatePicker;\n\n @Input() public initSearchRequest: LoggingEventSearchRequest;\n @Output() public readonly searchSubmitEvent = new EventEmitter<LoggingEventSearchRequest>();\n\n public readonly theme$: Observable<CARBON_THEME> = this.cdsThemeService.currentTheme$.pipe(\n map((theme: CurrentCarbonTheme) =>\n theme === CurrentCarbonTheme.G10 ? CARBON_THEME.WHITE : CARBON_THEME.G100\n )\n );\n\n public readonly formGroup = this.fb.group({\n likeFormattedMessage: this.fb.control<string>(''),\n level: this.fb.control<ListItem>({content: '', selected: false}),\n beforeTimestamp: this.fb.control<string>(''),\n beforeTime: this.fb.control<string>(''),\n afterTimestamp: this.fb.control<string>(''),\n afterTime: this.fb.control<string>(''),\n properties: this.fb.array([\n this.fb.group({\n key: this.fb.control<string>(''),\n value: this.fb.control<string>(''),\n }),\n ]),\n });\n\n public logLevelItems: Partial<ListItem>[] = [\n {\n content: LogLevel.ERROR,\n },\n {\n content: LogLevel.WARN,\n },\n {\n content: LogLevel.INFO,\n },\n {\n content: LogLevel.DEBUG,\n },\n {\n content: LogLevel.TRACE,\n },\n ];\n\n private readonly _subscriptions = new Subscription();\n\n public get propertiesArray(): FormArray {\n return this.formGroup.get('properties') as FormArray;\n }\n\n constructor(\n private readonly cdsThemeService: CdsThemeService,\n private readonly fb: FormBuilder,\n private readonly iconService: IconService\n ) {\n this.iconService.register(TrashCan16);\n }\n\n public ngOnInit(): void {\n this.setInitialForm();\n\n this._subscriptions.add(\n this.formGroup.valueChanges.pipe(debounceTime(500)).subscribe(() => {\n this.searchSubmitEvent.emit(this.mapFormValueToLogSearch());\n })\n );\n }\n\n public ngAfterViewInit(): void {\n const afterTimestampControlValue = this.formGroup.get('afterTimestamp')?.value;\n const beforeTimestampControlValue = this.formGroup.get('beforeTimestamp')?.value;\n\n if (!!afterTimestampControlValue) {\n this._afterTimestampDatePicker.writeValue([\n flatpickr.formatDate(new Date(afterTimestampControlValue), 'd-m-Y'),\n ]);\n }\n\n if (!!beforeTimestampControlValue) {\n this._beforeTimestampDatePicker.writeValue([\n flatpickr.formatDate(new Date(beforeTimestampControlValue), 'd-m-Y'),\n ]);\n }\n }\n\n public ngOnDestroy(): void {\n this._subscriptions.unsubscribe();\n }\n\n public onClearFilter(): void {\n this.formGroup.reset();\n this._afterTimestampDatePicker.writeValue([]);\n this._beforeTimestampDatePicker.writeValue([]);\n }\n\n public onDateSelected(control: 'afterTimestamp' | 'beforeTimestamp', event: Date[]): void {\n this.formGroup.get(control)?.patchValue(flatpickr.formatDate(event[0], 'Z'));\n }\n\n public addPropertySearchField(): void {\n this.propertiesArray.push(\n this.fb.group({\n key: this.fb.control<string>(''),\n value: this.fb.control<string>(''),\n })\n );\n }\n\n public removePropertySearchField(index: number): void {\n this.propertiesArray.removeAt(index);\n }\n\n private initLogItems(formValue: LoggingEventSearchFormValue): void {\n if (!formValue.level) return;\n\n this.logLevelItems = this.logLevelItems.map((levelItem: Partial<ListItem>) => ({\n ...levelItem,\n selected: formValue.level?.content === levelItem.content,\n }));\n }\n\n private initPropertiesForm(formValue: LoggingEventSearchFormValue): void {\n if (!formValue.properties) return;\n\n for (let i = 1; i < formValue.properties.length; i++) {\n this.addPropertySearchField();\n }\n }\n\n private initTimeForm(formValue: LoggingEventSearchFormValue): void {\n const {beforeTimestamp, afterTimestamp} = formValue;\n\n if (!!beforeTimestamp) {\n const {hours, minutes} = this.convertTimestampToTimeString(beforeTimestamp);\n this.formGroup.patchValue({beforeTime: `${hours}:${minutes}`}, {emitEvent: false});\n }\n\n if (!!afterTimestamp) {\n const {hours, minutes} = this.convertTimestampToTimeString(afterTimestamp);\n this.formGroup.patchValue({afterTime: `${hours}:${minutes}`}, {emitEvent: false});\n }\n }\n\n private convertTimestampToTimeString(timestamp: string): {hours: string; minutes: string} {\n const date = new Date(timestamp);\n return {\n hours: `0${date.getHours()}`.slice(-2),\n minutes: `0${date.getMinutes()}`.slice(-2),\n };\n }\n\n private mapFormValueToLogSearch(): LoggingEventSearchRequest {\n const formValue = this.formGroup.getRawValue();\n const properties = formValue.properties.filter(\n (property: {key: string | null; value: string | null}) => !!property.key && !!property.value\n ) as LoggingEventProperty[];\n\n return {\n ...(!!formValue.likeFormattedMessage && {\n likeFormattedMessage: formValue.likeFormattedMessage,\n }),\n ...(!!formValue.level?.content && {level: formValue.level.content}),\n ...(!!formValue.afterTimestamp && {\n afterTimestamp: this.mapTimeStamps(formValue.afterTimestamp, formValue.afterTime),\n }),\n ...(!!formValue.beforeTimestamp && {\n beforeTimestamp: this.mapTimeStamps(formValue.beforeTimestamp, formValue.beforeTime),\n }),\n ...(!!properties.length && {properties}),\n };\n }\n\n private mapSearchRequestToFormValue(\n searchRequest: LoggingEventSearchRequest\n ): LoggingEventSearchFormValue {\n return {\n ...(searchRequest.likeFormattedMessage && {\n likeFormattedMessage: searchRequest.likeFormattedMessage,\n }),\n ...(searchRequest.level && {\n level: {\n content: searchRequest.level,\n selected: true,\n },\n }),\n ...(searchRequest.afterTimestamp && {afterTimestamp: searchRequest.afterTimestamp}),\n ...(searchRequest.beforeTimestamp && {beforeTimestamp: searchRequest.beforeTimestamp}),\n ...(searchRequest.properties && {properties: searchRequest.properties}),\n };\n }\n\n private mapTimeStamps(date: string, time: string | null): string {\n if (!time) return date;\n\n const timeValue: string[] = time.split(':');\n const dateObject = new Date(date);\n dateObject.setHours(+timeValue[0], +timeValue[1]);\n\n return flatpickr.formatDate(dateObject, 'Z');\n }\n\n private setInitialForm(): void {\n const mappedFormValue: LoggingEventSearchFormValue = this.mapSearchRequestToFormValue(\n this.initSearchRequest\n );\n this.initLogItems(mappedFormValue);\n this.initPropertiesForm(mappedFormValue);\n this.initTimeForm(mappedFormValue);\n\n this.formGroup.patchValue(mappedFormValue, {emitEvent: false});\n }\n}\n","<!--\n ~ Copyright 2015-2025 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n<form\n *ngIf=\"theme$ | async as theme\"\n class=\"valtimo-log-search\"\n [formGroup]=\"formGroup\"\n (click)=\"$event.stopImmediatePropagation()\"\n>\n <section class=\"valtimo-log-search__fields\">\n <cds-text-label class=\"valtimo-log-search__message\">\n {{ 'logging.columns.formattedMessage' | translate }}\n\n <input\n cdsText\n [attr.data-carbon-theme]=\"theme\"\n formControlName=\"likeFormattedMessage\"\n [placeholder]=\"'logging.columns.formattedMessage' | translate\"\n />\n </cds-text-label>\n\n <cds-dropdown\n class=\"valtimo-log-search__level\"\n formControlName=\"level\"\n [attr.data-carbon-theme]=\"theme\"\n [appendInline]=\"true\"\n [label]=\"'logging.columns.level' | translate\"\n [placeholder]=\"'logging.columns.level' | translate\"\n >\n <cds-dropdown-list [items]=\"logLevelItems\"></cds-dropdown-list>\n </cds-dropdown>\n\n <div class=\"valtimo-log-search__timestamp\">\n <div class=\"valtimo-log-search__datetime\">\n <cds-date-picker\n #afterTimestamp\n [attr.data-carbon-theme]=\"theme\"\n [label]=\"'logging.search.afterTimestamp' | translate\"\n placeholder=\"DD-MM-YYYY\"\n [dateFormat]=\"'d-m-Y'\"\n (valueChange)=\"onDateSelected('afterTimestamp', $event)\"\n ></cds-date-picker>\n\n <cds-timepicker [attr.data-carbon-theme]=\"theme\" formControlName=\"afterTime\">\n </cds-timepicker>\n </div>\n\n <div class=\"valtimo-log-search__datetime\">\n <cds-date-picker\n #beforeTimestamp\n [attr.data-carbon-theme]=\"theme\"\n [label]=\"'logging.search.beforeTimestamp' | translate\"\n placeholder=\"DD-MM-YYYY\"\n [dateFormat]=\"'d-m-Y'\"\n (valueChange)=\"onDateSelected('beforeTimestamp', $event)\"\n ></cds-date-picker>\n\n <cds-timepicker [attr.data-carbon-theme]=\"theme\" formControlName=\"beforeTime\">\n </cds-timepicker>\n </div>\n </div>\n </section>\n\n <section formArrayName=\"properties\" class=\"valtimo-log-search__properties\">\n <span class=\"valtimo-log-search__label\"> {{ 'logging.search.properties' | translate }} </span>\n\n @for (propertyGroup of propertiesArray.controls; track $index) {\n <form [formGroup]=\"propertyGroup\" class=\"valtimo-log-search__property\">\n <cds-text-label>\n <input\n cdsText\n [attr.data-carbon-theme]=\"theme\"\n formControlName=\"key\"\n [placeholder]=\"'interface.key' | translate\"\n />\n </cds-text-label>\n\n <cds-text-label>\n <input\n cdsText\n [attr.data-carbon-theme]=\"theme\"\n formControlName=\"value\"\n [placeholder]=\"'interface.value' | translate\"\n />\n </cds-text-label>\n\n <button\n cdsButton=\"danger--ghost\"\n [disabled]=\"$count === 1\"\n iconOnly=\"true\"\n type=\"button\"\n (click)=\"removePropertySearchField($index)\"\n >\n <svg cdsIcon=\"trash-can\" size=\"16\"></svg>\n </button>\n </form>\n }\n\n <button cdsButton=\"primary\" size=\"sm\" type=\"button\" (click)=\"addPropertySearchField()\">\n {{ 'logging.search.addProperty' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"add\" size=\"16\"></svg>\n </button>\n </section>\n\n <button cdsButton=\"tertiary\" type=\"button\" (click)=\"onClearFilter()\">\n {{ 'interface.clear' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"trash-can\" size=\"16\"></svg>\n </button>\n</form>\n","/*\n * Copyright 2015-2025 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {CommonModule} from '@angular/common';\nimport {ChangeDetectionStrategy, Component, OnDestroy, OnInit} from '@angular/core';\nimport {ActivatedRoute, Router} from '@angular/router';\nimport {Filter16, TrashCan16} from '@carbon/icons';\nimport {TranslateModule} from '@ngx-translate/core';\nimport {\n CARBON_CONSTANTS,\n CarbonListItem,\n CarbonListModule,\n CarbonTag,\n ColumnConfig,\n DEFAULT_PAGINATION,\n Pagination,\n ViewType,\n} from '@valtimo/components';\nimport {Page} from '@valtimo/shared';\nimport {\n ButtonModule,\n DialogModule,\n DropdownModule,\n IconModule,\n IconService,\n} from 'carbon-components-angular';\nimport {\n BehaviorSubject,\n combineLatest,\n map,\n Observable,\n startWith,\n Subscription,\n switchMap,\n take,\n tap,\n} from 'rxjs';\nimport {\n LOG_ELLIPSIS_LIMIT,\n LOG_LEVEL_TAG,\n LoggingEvent,\n LoggingEventProperty,\n LoggingEventQueryParams,\n LoggingEventSearchRequest,\n} from '../../models';\nimport {LoggingApiService} from '../../services';\nimport {LogDetailsComponent} from '../log-details/log-details.component';\nimport {LogSearchComponent} from '../log-search/log-search.component';\n\n@Component({\n templateUrl: './logging-list.component.html',\n styleUrl: './logging-list.component.scss',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n CommonModule,\n TranslateModule,\n ButtonModule,\n CarbonListModule,\n DialogModule,\n DropdownModule,\n IconModule,\n LogDetailsComponent,\n LogSearchComponent,\n ],\n providers: [LoggingApiService],\n})\nexport class LoggingListComponent implements OnInit, OnDestroy {\n public readonly loading$ = new BehaviorSubject<boolean>(true);\n public readonly logItems$: Observable<CarbonListItem> = this.activatedRoute.queryParamMap.pipe(\n tap(() => this.loading$.next(true)),\n switchMap(queryParams =>\n this.loggingApiService.getTechnicalLogs({\n ...queryParams['params'],\n ...(!!queryParams['params']?.properties && {\n properties: this.base64ToObject(queryParams['params'].properties),\n }),\n })\n ),\n map((loggingPage: Page<LoggingEvent>) => {\n this.pagination$.next({\n ...this.pagination$.getValue(),\n collectionSize: loggingPage.totalElements,\n });\n\n return loggingPage.content.map((logEvent: LoggingEvent) => ({\n ...logEvent,\n levelTags: [\n {\n content: logEvent.level,\n type: LOG_LEVEL_TAG[logEvent.level],\n },\n ],\n }));\n }),\n startWith([]),\n tap(() => {\n this.loading$.next(false);\n })\n );\n\n public readonly searchRequest$ = new BehaviorSubject<LoggingEventSearchRequest>({});\n public readonly isSearchActive$: Observable<boolean> = this.searchRequest$.pipe(\n map((searchRequest: LoggingEventSearchRequest) => Object.keys(searchRequest).length > 0)\n );\n public readonly pagination$ = new BehaviorSubject<Pagination>(DEFAULT_PAGINATION);\n public readonly logDetailsOpen$ = new BehaviorSubject<boolean>(false);\n public readonly selectedLogEvent$ = new BehaviorSubject<LoggingEvent | null>(null);\n\n public readonly FIELDS: ColumnConfig[] = [\n {\n key: 'timestamp',\n label: 'logging.columns.timestamp',\n viewType: ViewType.DATE_TIME,\n },\n {\n key: 'levelTags',\n label: 'logging.columns.level',\n viewType: ViewType.TAGS,\n },\n {\n key: 'formattedMessage',\n label: 'logging.columns.formattedMessage',\n viewType: ViewType.TEXT,\n tooltipCharLimit: LOG_ELLIPSIS_LIMIT,\n },\n ];\n\n private readonly _subscriptions = new Subscription();\n\n constructor(\n private readonly activatedRoute: ActivatedRoute,\n private readonly iconService: IconService,\n private readonly loggingApiService: LoggingApiService,\n private readonly router: Router\n ) {\n this.iconService.registerAll([Filter16, TrashCan16]);\n }\n\n public ngOnInit(): void {\n this.setInitialParams();\n }\n\n public ngOnDestroy(): void {\n this._subscriptions.unsubscribe();\n }\n\n public onCloseModalEvent(): void {\n this.logDetailsOpen$.next(false);\n\n setTimeout(() => {\n this.selectedLogEvent$.next(null);\n }, CARBON_CONSTANTS.modalAnimationMs);\n }\n\n public onPaginationClicked(page: number, logItems: CarbonListItem[]): void {\n const activePagination: Pagination = this.pagination$.getValue();\n const searchRequest: LoggingEventSearchRequest = this.searchRequest$.getValue();\n\n if (!searchRequest.beforeTimestamp && activePagination.page === 1)\n this.searchRequest$.next({...searchRequest, beforeTimestamp: logItems[0].timestamp});\n\n this.pagination$.next({...activePagination, page});\n }\n\n public onPaginationSet(size: number): void {\n const {collectionSize, page} = this.pagination$.getValue();\n const resetPage: boolean = Math.ceil(+collectionSize / size) <= +page && +collectionSize > 0;\n\n this.pagination$.next({...this.pagination$.getValue(), size, ...(resetPage && {page: 1})});\n }\n\n public onRowClickedEvent(\n rowClickEvent: LoggingEvent & {ctrlClick: boolean; tags: CarbonTag[]}\n ): void {\n const {ctrlClick: _1, tags: _2, ...logEvent} = rowClickEvent;\n this.logDetailsOpen$.next(true);\n this.selectedLogEvent$.next(logEvent);\n }\n\n public onSearchSubmitEvent(searchRequest: LoggingEventSearchRequest): void {\n this.searchRequest$.next(searchRequest);\n }\n\n public onClearFilter(): void {\n this.onSearchSubmitEvent({});\n }\n\n private base64ToObject(base64string: string): object {\n return JSON.parse(atob(base64string));\n }\n\n private objectToBase64(jsObject: object): string {\n return btoa(JSON.stringify(jsObject));\n }\n\n private openQueryParamsSubscription(): void {\n this._subscriptions.add(\n combineLatest([this.pagination$, this.searchRequest$]).subscribe(\n ([pagination, searchRequest]) => {\n const {size, page} = pagination;\n\n this.router.navigate(['/logging'], {\n queryParams: {\n size,\n page: page - 1,\n ...{\n ...searchRequest,\n ...(!!searchRequest.properties?.length && {\n properties: this.objectToBase64(searchRequest.properties),\n }),\n },\n },\n });\n }\n )\n );\n }\n\n private mapQueryParamsToSearchRequest(\n queryParams: LoggingEventQueryParams\n ): LoggingEventSearchRequest {\n return {\n ...(!!queryParams.likeFormattedMessage && {\n likeFormattedMessage: queryParams.likeFormattedMessage,\n }),\n ...(!!queryParams.level && {level: queryParams.level}),\n ...(!!queryParams.afterTimestamp && {afterTimestamp: queryParams.afterTimestamp}),\n ...(!!queryParams.beforeTimestamp && {beforeTimestamp: queryParams.beforeTimestamp}),\n ...(!!queryParams.properties && {\n properties: this.base64ToObject(queryParams.properties) as Array<LoggingEventProperty>,\n }),\n };\n }\n\n private setInitialParams(): void {\n this.activatedRoute.queryParamMap\n .pipe(\n take(1),\n map(queryParams => {\n const {size, page, ...searchRequest} = queryParams['params'];\n return {size, page, searchRequest};\n })\n )\n .subscribe(({size, page, searchRequest}) => {\n this.searchRequest$.next(this.mapQueryParamsToSearchRequest(searchRequest));\n this.pagination$.next({\n ...this.pagination$.getValue(),\n size: +size,\n page: +(page ?? 0) + 1,\n });\n\n this.openQueryParamsSubscription();\n });\n }\n}\n","<!--\n ~ Copyright 2015-2025 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<valtimo-carbon-list\n *ngIf=\"{logItems: logItems$ | async, isSearchActive: isSearchActive$ | async} as obs\"\n [items]=\"obs.logItems\"\n [fields]=\"FIELDS\"\n [loading]=\"loading$ | async\"\n [pagination]=\"pagination$ | async\"\n paginationIdentifier=\"logging\"\n (paginationClicked)=\"onPaginationClicked($event, obs.logItems)\"\n (paginationSet)=\"onPaginationSet($event)\"\n (rowClicked)=\"onRowClickedEvent($event)\"\n>\n <valtimo-no-results\n [action]=\"obs.isSearchActive ? clearSearchButton : null\"\n [description]=\"\n 'logging.noResults.' + (obs.isSearchActive ? 'searchDescription' : 'description') | translate\n \"\n [title]=\"'logging.noResults.title' | translate\"\n ></valtimo-no-results>\n\n <button\n carbonToolbarContent\n [cdsOverflowMenu]=\"logSearch\"\n [customPane]=\"true\"\n [iconOnly]=\"true\"\n [flip]=\"true\"\n [offset]=\"{x: 0, y: 47}\"\n cdsButton=\"ghost\"\n placement=\"bottom\"\n >\n <svg cdsIcon=\"filter\" size=\"16\"></svg>\n </button>\n</valtimo-carbon-list>\n\n<valtimo-log-details\n [open]=\"logDetailsOpen$ | async\"\n [logEvent]=\"selectedLogEvent$ | async\"\n (closeModalEvent)=\"onCloseModalEvent()\"\n></valtimo-log-details>\n\n<ng-template #logSearch>\n <valtimo-log-search\n [initSearchRequest]=\"searchRequest$ | async\"\n (searchSubmitEvent)=\"onSearchSubmitEvent($event)\"\n ></valtimo-log-search>\n</ng-template>\n\n<ng-template #clearSearchButton>\n <button cdsButton=\"primary\" (click)=\"onClearFilter()\">\n {{ 'interface.clear' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"trash-can\" size=\"16\"></svg>\n </button>\n</ng-template>\n","/*\n * Copyright 2015-2025 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {NgModule} from '@angular/core';\nimport {RouterModule, Routes} from '@angular/router';\nimport {ROLE_ADMIN} from '@valtimo/shared';\nimport {AuthGuardService} from '@valtimo/security';\nimport {LoggingListComponent} from './lib/components/logging-list/logging-list.component';\n\nconst routes: Routes = [\n {\n path: 'logging',\n component: LoggingListComponent,\n canActivate: [AuthGuardService],\n data: {title: 'Logging', roles: [ROLE_ADMIN]},\n },\n];\n\n@NgModule({\n imports: [RouterModule.forRoot(routes)],\n exports: [RouterModule],\n})\nexport class LoggingRoutingModule {}\n","/*\n * Copyright 2015-2025 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {CommonModule} from '@angular/common';\nimport {HttpClient} from '@angular/common/http';\nimport {NgModule} from '@angular/core';\nimport {TranslateLoader, TranslateModule} from '@ngx-translate/core';\nimport {HttpLoaderFactory} from '@valtimo/shared';\nimport {LoggingListComponent} from './lib/components/logging-list/logging-list.component';\nimport {LoggingRoutingModule} from './logging-routing.module';\n\n@NgModule({\n imports: [\n CommonModule,\n LoggingRoutingModule,\n TranslateModule.forRoot({\n loader: {\n provide: TranslateLoader,\n useFactory: HttpLoaderFactory,\n deps: [HttpClient],\n },\n }),\n LoggingListComponent,\n ],\n})\nexport class LoggingModule {}\n","/*\n * Copyright 2015-2025 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/*\n * Public API Surface of documenten-api\n */\n\nexport * from './logging.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i2","i1","i3.LoggingApiService","i6"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"valtimo-logging.mjs","sources":["../../../../projects/valtimo/logging/src/lib/models/logging.model.ts","../../../../projects/valtimo/logging/src/lib/models/index.ts","../../../../projects/valtimo/logging/src/lib/services/logging-api.service.ts","../../../../projects/valtimo/logging/src/lib/services/index.ts","../../../../projects/valtimo/logging/src/lib/components/log-details/log-details.component.ts","../../../../projects/valtimo/logging/src/lib/components/log-details/log-details.component.html","../../../../projects/valtimo/logging/src/lib/components/log-search/log-search.component.ts","../../../../projects/valtimo/logging/src/lib/components/log-search/log-search.component.html","../../../../projects/valtimo/logging/src/lib/components/logging-list/logging-list.component.ts","../../../../projects/valtimo/logging/src/lib/components/logging-list/logging-list.component.html","../../../../projects/valtimo/logging/src/logging-routing.module.ts","../../../../projects/valtimo/logging/src/logging.module.ts","../../../../projects/valtimo/logging/src/public_api.ts","../../../../projects/valtimo/logging/src/valtimo-logging.ts"],"sourcesContent":["/*\n * Copyright 2015-2025 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\ninterface LoggingEvent {\n timestamp: string;\n formattedMessage: string;\n level: string;\n properties: Array<LoggingEventProperty>;\n stacktrace: string;\n}\n\ninterface LoggingEventProperty {\n key: string;\n value: string;\n}\n\ninterface LoggingEventSearchRequest {\n afterTimestamp?: string;\n beforeTimestamp?: string;\n level?: string;\n likeFormattedMessage?: string;\n properties?: Array<LoggingEventProperty>;\n size?: number;\n page?: number;\n}\n\nenum LogLevel {\n DEBUG = 'DEBUG',\n ERROR = 'ERROR',\n INFO = 'INFO',\n TRACE = 'TRACE',\n WARN = 'WARN',\n}\n\nconst LOG_LEVEL_TAG = {\n [LogLevel.DEBUG]: 'teal',\n [LogLevel.ERROR]: 'red',\n [LogLevel.INFO]: 'blue',\n [LogLevel.TRACE]: 'grey',\n [LogLevel.WARN]: 'purple',\n};\n\nconst LOG_ELLIPSIS_LIMIT = 128;\n\nexport {\n LOG_ELLIPSIS_LIMIT,\n LOG_LEVEL_TAG,\n LoggingEvent,\n LoggingEventProperty,\n LoggingEventSearchRequest,\n LogLevel,\n};\n","/*\n * Copyright 2015-2025 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport * from './logging.model';\nexport * from './search.model';\n","/*\n * Copyright 2015-2025 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {HttpClient, HttpParams} from '@angular/common/http';\nimport {Injectable} from '@angular/core';\nimport {ConfigService, Page, BaseApiService} from '@valtimo/shared';\nimport {Observable} from 'rxjs';\nimport {LoggingEvent, LoggingEventSearchRequest} from '../models';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class LoggingApiService extends BaseApiService {\n constructor(\n protected readonly configService: ConfigService,\n protected readonly httpClient: HttpClient\n ) {\n super(httpClient, configService);\n }\n\n public getTechnicalLogs(\n searchRequest: LoggingEventSearchRequest\n ): Observable<Page<LoggingEvent>> {\n const {size, page, ...searchBody} = searchRequest;\n const params = new HttpParams({\n fromObject: {size, page} as any,\n });\n\n return this.httpClient.post<Page<LoggingEvent>>(\n this.getApiUrl('management/v1/logging'),\n searchBody,\n {\n params,\n }\n );\n }\n}\n","/*\n * Copyright 2015-2025 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport * from './logging-api.service';\n","/*\n * Copyright 2015-2025 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {CommonModule} from '@angular/common';\nimport {ChangeDetectionStrategy, Component, EventEmitter, Input, Output} from '@angular/core';\nimport {TranslateModule} from '@ngx-translate/core';\nimport {ModalModule} from 'carbon-components-angular';\nimport {LoggingEvent} from '../../models';\n\n@Component({\n selector: 'valtimo-log-details',\n templateUrl: './log-details.component.html',\n styleUrl: './log-details.component.scss',\n standalone: true,\n imports: [CommonModule, TranslateModule, ModalModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class LogDetailsComponent {\n @Input() public open = false;\n\n @Input() public set logEvent(logEvent: LoggingEvent) {\n this.logEventFormatted = {\n ...logEvent,\n stacktrace: this.formatStacktrace(logEvent?.stacktrace),\n };\n }\n\n @Output() public readonly closeModalEvent = new EventEmitter();\n\n public logEventFormatted: LoggingEvent;\n\n public readonly classesToIgnore: string[] = [\n 'LoggingContextKt',\n 'LoggableResourceAspect',\n 'RunWithoutAuthorizationAspect',\n 'UserLoggingFilter',\n ];\n\n public onCloseSelect(): void {\n this.closeModalEvent.emit();\n }\n\n private formatStacktrace(s?: string): string {\n if (!s) {\n return s;\n }\n\n s = s.replace(/^[^\\t].+(Exception|Error): .+/gm, '<span class=\"highlight1\">$&</span>');\n s = s.replace(/^Caused by: .+/gm, '<span class=\"highlight1\">$&</span>');\n this.classesToIgnore.forEach(\n c =>\n (s = s.replace(\n new RegExp(`^\\tat .+\\.${c}\\..+`, 'gm'),\n '<span class=\"highlight3\">$&</span>'\n ))\n );\n s = s.replace(/^\\tat com.(ritense|valtimo).+/gm, '<span class=\"highlight2\">$&</span>');\n s = s.replace(/^\\t.+common frames omitted$/gm, '<span class=\"highlight3\">$&</span>');\n s = s.replace(/^\\tat .+/gm, '<span class=\"highlight3\">$&</span>');\n return s;\n }\n}\n","<!--\n ~ Copyright 2015-2025 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<cds-modal [open]=\"open\" size=\"lg\" (close)=\"onCloseSelect()\">\n <cds-modal-header [showCloseButton]=\"true\" (closeSelect)=\"onCloseSelect()\">\n {{ 'logging.detailsTitle' | translate }}\n </cds-modal-header>\n\n <section cdsModalContent class=\"valtimo-log-details__content\">\n <h4 class=\"log-header\">\n {{ 'logging.formattedMessage' | translate }}\n </h4>\n\n <div class=\"log-text\">{{ logEventFormatted?.formattedMessage || '-' }}</div>\n\n <h4 class=\"log-header\">\n {{ 'logging.timestamp' | translate }}\n </h4>\n\n <div>\n {{ logEventFormatted?.timestamp || '-' }}\n </div>\n\n @if (logEventFormatted?.properties?.length > 0) {\n <h4 class=\"log-header\">\n {{ 'logging.properties' | translate }}\n </h4>\n <div>\n @for (property of logEventFormatted.properties; track property.key) {\n <div>\n <span class=\"property-key\">{{ property.key }}: </span>\n <span class=\"property-value\">{{ property.value }}</span>\n </div>\n }\n </div>\n }\n\n @if (logEventFormatted?.stacktrace) {\n <h4 class=\"log-header\">\n {{ 'logging.stacktrace' | translate }}\n </h4>\n <div>\n <pre class=\"valtimo-log-stacktrace\" [innerHtml]=\"logEventFormatted.stacktrace\"></pre>\n </div>\n }\n </section>\n</cds-modal>\n","/*\n * Copyright 2015-2025 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {CommonModule} from '@angular/common';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n Input,\n OnDestroy,\n OnInit,\n Output,\n ViewChild,\n} from '@angular/core';\nimport {FormArray, FormBuilder, FormsModule, ReactiveFormsModule} from '@angular/forms';\nimport {TrashCan16} from '@carbon/icons';\nimport {TranslateModule} from '@ngx-translate/core';\nimport {CARBON_THEME, CdsThemeService, CurrentCarbonTheme} from '@valtimo/components';\nimport {\n ButtonModule,\n DatePicker,\n DatePickerModule,\n DropdownModule,\n IconModule,\n IconService,\n InputModule,\n ListItem,\n TimePickerModule,\n} from 'carbon-components-angular';\nimport flatpickr from 'flatpickr';\nimport {debounceTime, map, Observable, Subscription} from 'rxjs';\nimport {\n LoggingEventProperty,\n LoggingEventSearchFormValue,\n LoggingEventSearchRequest,\n LogLevel,\n} from '../../models';\n\n@Component({\n selector: 'valtimo-log-search',\n templateUrl: './log-search.component.html',\n styleUrl: './log-search.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [\n CommonModule,\n TranslateModule,\n ButtonModule,\n DropdownModule,\n IconModule,\n InputModule,\n ReactiveFormsModule,\n FormsModule,\n DatePickerModule,\n TimePickerModule,\n ],\n})\nexport class LogSearchComponent implements OnInit, AfterViewInit, OnDestroy {\n @ViewChild('afterTimestamp') private readonly _afterTimestampDatePicker: DatePicker;\n @ViewChild('beforeTimestamp') private readonly _beforeTimestampDatePicker: DatePicker;\n\n @Input() public initSearchRequest: LoggingEventSearchRequest;\n @Output() public readonly searchSubmitEvent = new EventEmitter<LoggingEventSearchRequest>();\n\n public readonly theme$: Observable<CARBON_THEME> = this.cdsThemeService.currentTheme$.pipe(\n map((theme: CurrentCarbonTheme) =>\n theme === CurrentCarbonTheme.G10 ? CARBON_THEME.WHITE : CARBON_THEME.G100\n )\n );\n\n public readonly formGroup = this.fb.group({\n likeFormattedMessage: this.fb.control<string>(''),\n level: this.fb.control<ListItem>({content: '', selected: false}),\n beforeTimestamp: this.fb.control<string>(''),\n beforeTime: this.fb.control<string>(''),\n afterTimestamp: this.fb.control<string>(''),\n afterTime: this.fb.control<string>(''),\n properties: this.fb.array([\n this.fb.group({\n key: this.fb.control<string>(''),\n value: this.fb.control<string>(''),\n }),\n ]),\n });\n\n public logLevelItems: Partial<ListItem>[] = [\n {\n content: LogLevel.ERROR,\n },\n {\n content: LogLevel.WARN,\n },\n {\n content: LogLevel.INFO,\n },\n {\n content: LogLevel.DEBUG,\n },\n {\n content: LogLevel.TRACE,\n },\n ];\n\n private readonly _subscriptions = new Subscription();\n\n public get propertiesArray(): FormArray {\n return this.formGroup.get('properties') as FormArray;\n }\n\n constructor(\n private readonly cdsThemeService: CdsThemeService,\n private readonly fb: FormBuilder,\n private readonly iconService: IconService\n ) {\n this.iconService.register(TrashCan16);\n }\n\n public ngOnInit(): void {\n this.setInitialForm();\n\n this._subscriptions.add(\n this.formGroup.valueChanges.pipe(debounceTime(500)).subscribe(() => {\n this.searchSubmitEvent.emit(this.mapFormValueToLogSearch());\n })\n );\n }\n\n public ngAfterViewInit(): void {\n const afterTimestampControlValue = this.formGroup.get('afterTimestamp')?.value;\n const beforeTimestampControlValue = this.formGroup.get('beforeTimestamp')?.value;\n\n if (!!afterTimestampControlValue) {\n this._afterTimestampDatePicker.writeValue([\n flatpickr.formatDate(new Date(afterTimestampControlValue), 'd-m-Y'),\n ]);\n }\n\n if (!!beforeTimestampControlValue) {\n this._beforeTimestampDatePicker.writeValue([\n flatpickr.formatDate(new Date(beforeTimestampControlValue), 'd-m-Y'),\n ]);\n }\n }\n\n public ngOnDestroy(): void {\n this._subscriptions.unsubscribe();\n }\n\n public onClearFilter(): void {\n this.formGroup.reset();\n this._afterTimestampDatePicker.writeValue([]);\n this._beforeTimestampDatePicker.writeValue([]);\n }\n\n public onDateSelected(control: 'afterTimestamp' | 'beforeTimestamp', event: Date[]): void {\n this.formGroup.get(control)?.patchValue(flatpickr.formatDate(event[0], 'Z'));\n }\n\n public addPropertySearchField(): void {\n this.propertiesArray.push(\n this.fb.group({\n key: this.fb.control<string>(''),\n value: this.fb.control<string>(''),\n })\n );\n }\n\n public removePropertySearchField(index: number): void {\n this.propertiesArray.removeAt(index);\n }\n\n private initLogItems(formValue: LoggingEventSearchFormValue): void {\n if (!formValue.level) return;\n\n this.logLevelItems = this.logLevelItems.map((levelItem: Partial<ListItem>) => ({\n ...levelItem,\n selected: formValue.level?.content === levelItem.content,\n }));\n }\n\n private initPropertiesForm(formValue: LoggingEventSearchFormValue): void {\n if (!formValue.properties) return;\n\n for (let i = 1; i < formValue.properties.length; i++) {\n this.addPropertySearchField();\n }\n }\n\n private initTimeForm(formValue: LoggingEventSearchFormValue): void {\n const {beforeTimestamp, afterTimestamp} = formValue;\n\n if (!!beforeTimestamp) {\n const {hours, minutes} = this.convertTimestampToTimeString(beforeTimestamp);\n this.formGroup.patchValue({beforeTime: `${hours}:${minutes}`}, {emitEvent: false});\n }\n\n if (!!afterTimestamp) {\n const {hours, minutes} = this.convertTimestampToTimeString(afterTimestamp);\n this.formGroup.patchValue({afterTime: `${hours}:${minutes}`}, {emitEvent: false});\n }\n }\n\n private convertTimestampToTimeString(timestamp: string): {hours: string; minutes: string} {\n const date = new Date(timestamp);\n return {\n hours: `0${date.getHours()}`.slice(-2),\n minutes: `0${date.getMinutes()}`.slice(-2),\n };\n }\n\n private mapFormValueToLogSearch(): LoggingEventSearchRequest {\n const formValue = this.formGroup.getRawValue();\n const properties = formValue.properties.filter(\n (property: {key: string | null; value: string | null}) => !!property.key && !!property.value\n ) as LoggingEventProperty[];\n\n return {\n ...(!!formValue.likeFormattedMessage && {\n likeFormattedMessage: formValue.likeFormattedMessage,\n }),\n ...(!!formValue.level?.content && {level: formValue.level.content}),\n ...(!!formValue.afterTimestamp && {\n afterTimestamp: this.mapTimeStamps(formValue.afterTimestamp, formValue.afterTime),\n }),\n ...(!!formValue.beforeTimestamp && {\n beforeTimestamp: this.mapTimeStamps(formValue.beforeTimestamp, formValue.beforeTime),\n }),\n ...(!!properties.length && {properties}),\n };\n }\n\n private mapSearchRequestToFormValue(\n searchRequest: LoggingEventSearchRequest\n ): LoggingEventSearchFormValue {\n return {\n ...(searchRequest.likeFormattedMessage && {\n likeFormattedMessage: searchRequest.likeFormattedMessage,\n }),\n ...(searchRequest.level && {\n level: {\n content: searchRequest.level,\n selected: true,\n },\n }),\n ...(searchRequest.afterTimestamp && {afterTimestamp: searchRequest.afterTimestamp}),\n ...(searchRequest.beforeTimestamp && {beforeTimestamp: searchRequest.beforeTimestamp}),\n ...(searchRequest.properties && {properties: searchRequest.properties}),\n };\n }\n\n private mapTimeStamps(date: string, time: string | null): string {\n if (!time) return date;\n\n const timeValue: string[] = time.split(':');\n const dateObject = new Date(date);\n dateObject.setHours(+timeValue[0], +timeValue[1]);\n\n return flatpickr.formatDate(dateObject, 'Z');\n }\n\n private setInitialForm(): void {\n const mappedFormValue: LoggingEventSearchFormValue = this.mapSearchRequestToFormValue(\n this.initSearchRequest\n );\n this.initLogItems(mappedFormValue);\n this.initPropertiesForm(mappedFormValue);\n this.initTimeForm(mappedFormValue);\n\n this.formGroup.patchValue(mappedFormValue, {emitEvent: false});\n }\n}\n","<!--\n ~ Copyright 2015-2025 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n<form\n *ngIf=\"theme$ | async as theme\"\n class=\"valtimo-log-search\"\n [formGroup]=\"formGroup\"\n (click)=\"$event.stopImmediatePropagation()\"\n>\n <section class=\"valtimo-log-search__fields\">\n <cds-text-label class=\"valtimo-log-search__message\">\n {{ 'logging.columns.formattedMessage' | translate }}\n\n <input\n cdsText\n [attr.data-carbon-theme]=\"theme\"\n formControlName=\"likeFormattedMessage\"\n [placeholder]=\"'logging.columns.formattedMessage' | translate\"\n />\n </cds-text-label>\n\n <cds-dropdown\n class=\"valtimo-log-search__level\"\n formControlName=\"level\"\n [attr.data-carbon-theme]=\"theme\"\n [appendInline]=\"true\"\n [label]=\"'logging.columns.level' | translate\"\n [placeholder]=\"'logging.columns.level' | translate\"\n >\n <cds-dropdown-list [items]=\"logLevelItems\"></cds-dropdown-list>\n </cds-dropdown>\n\n <div class=\"valtimo-log-search__timestamp\">\n <div class=\"valtimo-log-search__datetime\">\n <cds-date-picker\n #afterTimestamp\n [attr.data-carbon-theme]=\"theme\"\n [label]=\"'logging.search.afterTimestamp' | translate\"\n placeholder=\"DD-MM-YYYY\"\n [dateFormat]=\"'d-m-Y'\"\n (valueChange)=\"onDateSelected('afterTimestamp', $event)\"\n ></cds-date-picker>\n\n <cds-timepicker [attr.data-carbon-theme]=\"theme\" formControlName=\"afterTime\">\n </cds-timepicker>\n </div>\n\n <div class=\"valtimo-log-search__datetime\">\n <cds-date-picker\n #beforeTimestamp\n [attr.data-carbon-theme]=\"theme\"\n [label]=\"'logging.search.beforeTimestamp' | translate\"\n placeholder=\"DD-MM-YYYY\"\n [dateFormat]=\"'d-m-Y'\"\n (valueChange)=\"onDateSelected('beforeTimestamp', $event)\"\n ></cds-date-picker>\n\n <cds-timepicker [attr.data-carbon-theme]=\"theme\" formControlName=\"beforeTime\">\n </cds-timepicker>\n </div>\n </div>\n </section>\n\n <section formArrayName=\"properties\" class=\"valtimo-log-search__properties\">\n <span class=\"valtimo-log-search__label\"> {{ 'logging.search.properties' | translate }} </span>\n\n @for (propertyGroup of propertiesArray.controls; track $index) {\n <form [formGroup]=\"propertyGroup\" class=\"valtimo-log-search__property\">\n <cds-text-label>\n <input\n cdsText\n [attr.data-carbon-theme]=\"theme\"\n formControlName=\"key\"\n [placeholder]=\"'interface.key' | translate\"\n />\n </cds-text-label>\n\n <cds-text-label>\n <input\n cdsText\n [attr.data-carbon-theme]=\"theme\"\n formControlName=\"value\"\n [placeholder]=\"'interface.value' | translate\"\n />\n </cds-text-label>\n\n <button\n cdsButton=\"danger--ghost\"\n [disabled]=\"$count === 1\"\n iconOnly=\"true\"\n type=\"button\"\n (click)=\"removePropertySearchField($index)\"\n >\n <svg cdsIcon=\"trash-can\" size=\"16\"></svg>\n </button>\n </form>\n }\n\n <button cdsButton=\"primary\" size=\"sm\" type=\"button\" (click)=\"addPropertySearchField()\">\n {{ 'logging.search.addProperty' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"add\" size=\"16\"></svg>\n </button>\n </section>\n\n <button cdsButton=\"tertiary\" type=\"button\" (click)=\"onClearFilter()\">\n {{ 'interface.clear' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"trash-can\" size=\"16\"></svg>\n </button>\n</form>\n","/*\n * Copyright 2015-2025 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {CommonModule} from '@angular/common';\nimport {ChangeDetectionStrategy, Component, OnDestroy, OnInit} from '@angular/core';\nimport {ActivatedRoute, Router} from '@angular/router';\nimport {Filter16, TrashCan16} from '@carbon/icons';\nimport {TranslateModule} from '@ngx-translate/core';\nimport {\n CARBON_CONSTANTS,\n CarbonListItem,\n CarbonListModule,\n CarbonTag,\n ColumnConfig,\n DEFAULT_PAGINATION,\n Pagination,\n ViewType,\n} from '@valtimo/components';\nimport {Page} from '@valtimo/shared';\nimport {\n ButtonModule,\n DialogModule,\n DropdownModule,\n IconModule,\n IconService,\n} from 'carbon-components-angular';\nimport {\n BehaviorSubject,\n combineLatest,\n map,\n Observable,\n startWith,\n Subscription,\n switchMap,\n take,\n tap,\n} from 'rxjs';\nimport {\n LOG_ELLIPSIS_LIMIT,\n LOG_LEVEL_TAG,\n LoggingEvent,\n LoggingEventProperty,\n LoggingEventQueryParams,\n LoggingEventSearchRequest,\n} from '../../models';\nimport {LoggingApiService} from '../../services';\nimport {LogDetailsComponent} from '../log-details/log-details.component';\nimport {LogSearchComponent} from '../log-search/log-search.component';\n\n@Component({\n templateUrl: './logging-list.component.html',\n styleUrl: './logging-list.component.scss',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n CommonModule,\n TranslateModule,\n ButtonModule,\n CarbonListModule,\n DialogModule,\n DropdownModule,\n IconModule,\n LogDetailsComponent,\n LogSearchComponent,\n ],\n providers: [LoggingApiService],\n})\nexport class LoggingListComponent implements OnInit, OnDestroy {\n public readonly loading$ = new BehaviorSubject<boolean>(true);\n public readonly logItems$: Observable<CarbonListItem> = this.activatedRoute.queryParamMap.pipe(\n tap(() => this.loading$.next(true)),\n switchMap(queryParams =>\n this.loggingApiService.getTechnicalLogs({\n ...queryParams['params'],\n ...(!!queryParams['params']?.properties && {\n properties: this.base64ToObject(queryParams['params'].properties),\n }),\n })\n ),\n map((loggingPage: Page<LoggingEvent>) => {\n this.pagination$.next({\n ...this.pagination$.getValue(),\n collectionSize: loggingPage.totalElements,\n });\n\n return loggingPage.content.map((logEvent: LoggingEvent) => ({\n ...logEvent,\n levelTags: [\n {\n content: logEvent.level,\n type: LOG_LEVEL_TAG[logEvent.level],\n },\n ],\n }));\n }),\n startWith([]),\n tap(() => {\n this.loading$.next(false);\n })\n );\n\n public readonly searchRequest$ = new BehaviorSubject<LoggingEventSearchRequest>({});\n public readonly isSearchActive$: Observable<boolean> = this.searchRequest$.pipe(\n map((searchRequest: LoggingEventSearchRequest) => Object.keys(searchRequest).length > 0)\n );\n public readonly pagination$ = new BehaviorSubject<Pagination>(DEFAULT_PAGINATION);\n public readonly logDetailsOpen$ = new BehaviorSubject<boolean>(false);\n public readonly selectedLogEvent$ = new BehaviorSubject<LoggingEvent | null>(null);\n\n public readonly FIELDS: ColumnConfig[] = [\n {\n key: 'timestamp',\n label: 'logging.columns.timestamp',\n viewType: ViewType.DATE_TIME,\n },\n {\n key: 'levelTags',\n label: 'logging.columns.level',\n viewType: ViewType.TAGS,\n },\n {\n key: 'formattedMessage',\n label: 'logging.columns.formattedMessage',\n viewType: ViewType.TEXT,\n tooltipCharLimit: LOG_ELLIPSIS_LIMIT,\n },\n ];\n\n private readonly _subscriptions = new Subscription();\n\n constructor(\n private readonly activatedRoute: ActivatedRoute,\n private readonly iconService: IconService,\n private readonly loggingApiService: LoggingApiService,\n private readonly router: Router\n ) {\n this.iconService.registerAll([Filter16, TrashCan16]);\n }\n\n public ngOnInit(): void {\n this.setInitialParams();\n }\n\n public ngOnDestroy(): void {\n this._subscriptions.unsubscribe();\n }\n\n public onCloseModalEvent(): void {\n this.logDetailsOpen$.next(false);\n\n setTimeout(() => {\n this.selectedLogEvent$.next(null);\n }, CARBON_CONSTANTS.modalAnimationMs);\n }\n\n public onPaginationClicked(page: number, logItems: CarbonListItem[]): void {\n const activePagination: Pagination = this.pagination$.getValue();\n const searchRequest: LoggingEventSearchRequest = this.searchRequest$.getValue();\n\n if (!searchRequest.beforeTimestamp && activePagination.page === 1)\n this.searchRequest$.next({...searchRequest, beforeTimestamp: logItems[0].timestamp});\n\n this.pagination$.next({...activePagination, page});\n }\n\n public onPaginationSet(size: number): void {\n const {collectionSize, page} = this.pagination$.getValue();\n const resetPage: boolean = Math.ceil(+collectionSize / size) <= +page && +collectionSize > 0;\n\n this.pagination$.next({...this.pagination$.getValue(), size, ...(resetPage && {page: 1})});\n }\n\n public onRowClickedEvent(\n rowClickEvent: LoggingEvent & {ctrlClick: boolean; tags: CarbonTag[]}\n ): void {\n const {ctrlClick: _1, tags: _2, ...logEvent} = rowClickEvent;\n this.logDetailsOpen$.next(true);\n this.selectedLogEvent$.next(logEvent);\n }\n\n public onSearchSubmitEvent(searchRequest: LoggingEventSearchRequest): void {\n this.searchRequest$.next(searchRequest);\n }\n\n public onClearFilter(): void {\n this.onSearchSubmitEvent({});\n }\n\n private base64ToObject(base64string: string): object {\n return JSON.parse(atob(base64string));\n }\n\n private objectToBase64(jsObject: object): string {\n return btoa(JSON.stringify(jsObject));\n }\n\n private openQueryParamsSubscription(): void {\n this._subscriptions.add(\n combineLatest([this.pagination$, this.searchRequest$]).subscribe(\n ([pagination, searchRequest]) => {\n const {size, page} = pagination;\n\n this.router.navigate(['/logging'], {\n queryParams: {\n size,\n page: page - 1,\n ...{\n ...searchRequest,\n ...(!!searchRequest.properties?.length && {\n properties: this.objectToBase64(searchRequest.properties),\n }),\n },\n },\n });\n }\n )\n );\n }\n\n private mapQueryParamsToSearchRequest(\n queryParams: LoggingEventQueryParams\n ): LoggingEventSearchRequest {\n return {\n ...(!!queryParams.likeFormattedMessage && {\n likeFormattedMessage: queryParams.likeFormattedMessage,\n }),\n ...(!!queryParams.level && {level: queryParams.level}),\n ...(!!queryParams.afterTimestamp && {afterTimestamp: queryParams.afterTimestamp}),\n ...(!!queryParams.beforeTimestamp && {beforeTimestamp: queryParams.beforeTimestamp}),\n ...(!!queryParams.properties && {\n properties: this.base64ToObject(queryParams.properties) as Array<LoggingEventProperty>,\n }),\n };\n }\n\n private setInitialParams(): void {\n this.activatedRoute.queryParamMap\n .pipe(\n take(1),\n map(queryParams => {\n const {size, page, ...searchRequest} = queryParams['params'];\n return {size, page, searchRequest};\n })\n )\n .subscribe(({size, page, searchRequest}) => {\n this.searchRequest$.next(this.mapQueryParamsToSearchRequest(searchRequest));\n this.pagination$.next({\n ...this.pagination$.getValue(),\n size: +size,\n page: +(page ?? 0) + 1,\n });\n\n this.openQueryParamsSubscription();\n });\n }\n}\n","<!--\n ~ Copyright 2015-2025 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<valtimo-carbon-list\n *ngIf=\"{logItems: logItems$ | async, isSearchActive: isSearchActive$ | async} as obs\"\n [items]=\"obs.logItems\"\n [fields]=\"FIELDS\"\n [loading]=\"loading$ | async\"\n [pagination]=\"pagination$ | async\"\n paginationIdentifier=\"logging\"\n (paginationClicked)=\"onPaginationClicked($event, obs.logItems)\"\n (paginationSet)=\"onPaginationSet($event)\"\n (rowClicked)=\"onRowClickedEvent($event)\"\n>\n <valtimo-no-results\n [action]=\"obs.isSearchActive ? clearSearchButton : null\"\n [description]=\"\n 'logging.noResults.' + (obs.isSearchActive ? 'searchDescription' : 'description') | translate\n \"\n [title]=\"'logging.noResults.title' | translate\"\n ></valtimo-no-results>\n\n <button\n carbonToolbarContent\n [cdsOverflowMenu]=\"logSearch\"\n [customPane]=\"true\"\n [iconOnly]=\"true\"\n [flip]=\"true\"\n [offset]=\"{x: 0, y: 47}\"\n cdsButton=\"ghost\"\n placement=\"bottom\"\n >\n <svg cdsIcon=\"filter\" size=\"16\"></svg>\n </button>\n</valtimo-carbon-list>\n\n<valtimo-log-details\n [open]=\"logDetailsOpen$ | async\"\n [logEvent]=\"selectedLogEvent$ | async\"\n (closeModalEvent)=\"onCloseModalEvent()\"\n></valtimo-log-details>\n\n<ng-template #logSearch>\n <valtimo-log-search\n [initSearchRequest]=\"searchRequest$ | async\"\n (searchSubmitEvent)=\"onSearchSubmitEvent($event)\"\n ></valtimo-log-search>\n</ng-template>\n\n<ng-template #clearSearchButton>\n <button cdsButton=\"primary\" (click)=\"onClearFilter()\">\n {{ 'interface.clear' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"trash-can\" size=\"16\"></svg>\n </button>\n</ng-template>\n","/*\n * Copyright 2015-2025 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {NgModule} from '@angular/core';\nimport {RouterModule, Routes} from '@angular/router';\nimport {ROLE_ADMIN} from '@valtimo/shared';\nimport {AuthGuardService} from '@valtimo/security';\nimport {LoggingListComponent} from './lib/components/logging-list/logging-list.component';\n\nconst routes: Routes = [\n {\n path: 'logging',\n component: LoggingListComponent,\n canActivate: [AuthGuardService],\n data: {title: 'Logging', roles: [ROLE_ADMIN]},\n },\n];\n\n@NgModule({\n imports: [RouterModule.forRoot(routes)],\n exports: [RouterModule],\n})\nexport class LoggingRoutingModule {}\n","/*\n * Copyright 2015-2025 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {CommonModule} from '@angular/common';\nimport {HttpClient} from '@angular/common/http';\nimport {NgModule} from '@angular/core';\nimport {TranslateLoader, TranslateModule} from '@ngx-translate/core';\nimport {HttpLoaderFactory} from '@valtimo/shared';\nimport {LoggingListComponent} from './lib/components/logging-list/logging-list.component';\nimport {LoggingRoutingModule} from './logging-routing.module';\n\n@NgModule({\n imports: [\n CommonModule,\n LoggingRoutingModule,\n TranslateModule.forRoot({\n loader: {\n provide: TranslateLoader,\n useFactory: HttpLoaderFactory,\n deps: [HttpClient],\n },\n }),\n LoggingListComponent,\n ],\n})\nexport class LoggingModule {}\n","/*\n * Copyright 2015-2025 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/*\n * Public API Surface of documenten-api\n */\n\nexport * from './logging.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i2","i1","i3.LoggingApiService","i6"],"mappings":"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"}
|