@c8y/ngx-components 1022.28.2 → 1022.33.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.
- package/asset-properties/asset-properties.model.d.ts +12 -3
- package/asset-properties/asset-properties.model.d.ts.map +1 -1
- package/asset-properties/asset-properties.service.d.ts +20 -2
- package/asset-properties/asset-properties.service.d.ts.map +1 -1
- package/asset-properties/asset-property-list/asset-property-icon-tooltip.pipe.d.ts +14 -0
- package/asset-properties/asset-property-list/asset-property-icon-tooltip.pipe.d.ts.map +1 -0
- package/asset-properties/asset-property-list/asset-property-icon.pipe.d.ts.map +1 -1
- package/asset-properties/asset-property-list/asset-property-list.component.d.ts +28 -18
- package/asset-properties/asset-property-list/asset-property-list.component.d.ts.map +1 -1
- package/asset-properties/asset-property-selector-drawer/asset-property-selector-drawer.component.d.ts +2 -2
- package/asset-properties/asset-property-selector-drawer/asset-property-selector-drawer.component.d.ts.map +1 -1
- package/asset-properties/custom-properties-drawer/custom-properties-drawer.component.d.ts +97 -0
- package/asset-properties/custom-properties-drawer/custom-properties-drawer.component.d.ts.map +1 -0
- package/asset-properties/custom-properties-drawer.service.d.ts +12 -0
- package/asset-properties/custom-properties-drawer.service.d.ts.map +1 -0
- package/asset-properties/index.d.ts +1 -0
- package/asset-properties/index.d.ts.map +1 -1
- package/context-dashboard/dashboard-detail.service.d.ts +2 -2
- package/context-dashboard/widget-config-hook/widget-config-hook.model.d.ts +2 -1
- package/context-dashboard/widget-config-hook/widget-config-hook.model.d.ts.map +1 -1
- package/context-dashboard/widget-config.component.d.ts +3 -1
- package/context-dashboard/widget-config.component.d.ts.map +1 -1
- package/context-dashboard/widget-config.service.d.ts +14 -8
- package/context-dashboard/widget-config.service.d.ts.map +1 -1
- package/core/dynamic-component/dynamic-component.model.d.ts +26 -0
- package/core/dynamic-component/dynamic-component.model.d.ts.map +1 -1
- package/core/i18n/pattern-messages.data.d.ts +7 -0
- package/core/i18n/pattern-messages.data.d.ts.map +1 -1
- package/core/index.d.ts +1 -0
- package/core/index.d.ts.map +1 -1
- package/core/query-param-handler/query-param-handler.service.d.ts +1 -1
- package/core/query-param-handler/query-param-handler.service.d.ts.map +1 -1
- package/core/query-param-handler/query-param-modal-handler.service.d.ts +16 -5
- package/core/query-param-handler/query-param-modal-handler.service.d.ts.map +1 -1
- package/core/resizable-grid/index.d.ts +2 -0
- package/core/resizable-grid/index.d.ts.map +1 -0
- package/core/resizable-grid/resizable-grid.component.d.ts +114 -0
- package/core/resizable-grid/resizable-grid.component.d.ts.map +1 -0
- package/dashboard-manager/devicemanagement/c8y-ngx-components-dashboard-manager-devicemanagement.d.ts.map +1 -0
- package/dashboard-manager/devicemanagement/index.d.ts +2 -0
- package/dashboard-manager/devicemanagement/index.d.ts.map +1 -0
- package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/data-fetching.service.d.ts.map +1 -1
- package/fesm2022/c8y-ngx-components-actility-device-registration.mjs +16 -16
- package/fesm2022/c8y-ngx-components-actility-device-registration.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-advanced-software-management.mjs +7 -7
- package/fesm2022/c8y-ngx-components-advanced-software-management.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-alarm-event-selector.mjs +34 -34
- package/fesm2022/c8y-ngx-components-alarm-event-selector.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-alarms-cockpit.mjs +4 -4
- package/fesm2022/c8y-ngx-components-alarms-cockpit.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-alarms-devicemanagement.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-alarms.mjs +73 -73
- package/fesm2022/c8y-ngx-components-alarms.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-api.mjs +7 -7
- package/fesm2022/c8y-ngx-components-api.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-app-logs.mjs +10 -10
- package/fesm2022/c8y-ngx-components-app-logs.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-asset-properties.mjs +427 -66
- package/fesm2022/c8y-ngx-components-asset-properties.mjs.map +1 -1
- package/fesm2022/{c8y-ngx-components-asset-property-grid.component-WUN1r4fC.mjs → c8y-ngx-components-asset-property-grid.component-CRnyUbyz.mjs} +13 -13
- package/fesm2022/{c8y-ngx-components-asset-property-grid.component-WUN1r4fC.mjs.map → c8y-ngx-components-asset-property-grid.component-CRnyUbyz.mjs.map} +1 -1
- package/fesm2022/c8y-ngx-components-assets-navigator.mjs +32 -32
- package/fesm2022/c8y-ngx-components-assets-navigator.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-auth-configuration.mjs +114 -114
- package/fesm2022/c8y-ngx-components-auth-configuration.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-binary-file-download.mjs +7 -7
- package/fesm2022/c8y-ngx-components-binary-file-download.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-bookmarks.mjs +13 -13
- package/fesm2022/c8y-ngx-components-bookmarks.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-branding-base-branding.mjs +4 -4
- package/fesm2022/c8y-ngx-components-branding-dark-theme.mjs +7 -7
- package/fesm2022/c8y-ngx-components-branding-dark-theme.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-branding-extra-css-branding-editor.mjs +7 -7
- package/fesm2022/c8y-ngx-components-branding-extra-css-branding-editor.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-branding-plain-branding-editor-lazy.mjs +3 -3
- package/fesm2022/c8y-ngx-components-branding-plain-branding-editor-lazy.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-branding-plain-branding-editor.mjs +7 -7
- package/fesm2022/c8y-ngx-components-branding-plain-branding-editor.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-branding-shared-data.mjs +15 -15
- package/fesm2022/c8y-ngx-components-branding-shared-data.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-branding-shared-lazy-add-branding-modal.mjs +6 -6
- package/fesm2022/c8y-ngx-components-branding-shared-lazy-add-branding-modal.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-branding-shared-lazy.mjs +33 -33
- package/fesm2022/c8y-ngx-components-branding-shared-lazy.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-branding-shared.mjs +10 -10
- package/fesm2022/c8y-ngx-components-branding-shared.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-child-devices.mjs +13 -13
- package/fesm2022/c8y-ngx-components-child-devices.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-cockpit-config.mjs +40 -40
- package/fesm2022/c8y-ngx-components-cockpit-config.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-connectivity.mjs +53 -53
- package/fesm2022/c8y-ngx-components-connectivity.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-context-dashboard-asset-add.mjs +10 -10
- package/fesm2022/c8y-ngx-components-context-dashboard-asset-add.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-context-dashboard-asset-view.mjs +7 -7
- package/fesm2022/c8y-ngx-components-context-dashboard-asset-view.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-context-dashboard-cockpit-home-dashboard.mjs +11 -11
- package/fesm2022/c8y-ngx-components-context-dashboard-cockpit-home-dashboard.mjs.map +1 -1
- package/fesm2022/{c8y-ngx-components-context-dashboard-dashboard-appearance-settings.component-C-JLbcn5.mjs → c8y-ngx-components-context-dashboard-dashboard-appearance-settings.component-BWyhab0H.mjs} +4 -4
- package/fesm2022/{c8y-ngx-components-context-dashboard-dashboard-appearance-settings.component-C-JLbcn5.mjs.map → c8y-ngx-components-context-dashboard-dashboard-appearance-settings.component-BWyhab0H.mjs.map} +1 -1
- package/fesm2022/{c8y-ngx-components-context-dashboard-dashboard-general-settings.component-RXvOcs04.mjs → c8y-ngx-components-context-dashboard-dashboard-general-settings.component-DjlpSztw.mjs} +10 -10
- package/fesm2022/{c8y-ngx-components-context-dashboard-dashboard-general-settings.component-RXvOcs04.mjs.map → c8y-ngx-components-context-dashboard-dashboard-general-settings.component-DjlpSztw.mjs.map} +1 -1
- package/fesm2022/{c8y-ngx-components-context-dashboard-dashboard-version-history.component-DmPIJGXO.mjs → c8y-ngx-components-context-dashboard-dashboard-version-history.component-B2zLhv0X.mjs} +4 -4
- package/fesm2022/{c8y-ngx-components-context-dashboard-dashboard-version-history.component-DmPIJGXO.mjs.map → c8y-ngx-components-context-dashboard-dashboard-version-history.component-B2zLhv0X.mjs.map} +1 -1
- package/fesm2022/c8y-ngx-components-context-dashboard-device-add.mjs +10 -10
- package/fesm2022/c8y-ngx-components-context-dashboard-device-add.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-context-dashboard-device-view.mjs +7 -7
- package/fesm2022/c8y-ngx-components-context-dashboard-device-view.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-context-dashboard.mjs +133 -116
- package/fesm2022/c8y-ngx-components-context-dashboard.mjs.map +1 -1
- package/fesm2022/{c8y-ngx-components-dashboard-details-advanced-tab-dashboard-details-advanced-tab.component-DtLAOoFx.mjs → c8y-ngx-components-dashboard-details-advanced-tab-dashboard-details-advanced-tab.component-CwfVxTSx.mjs} +16 -16
- package/fesm2022/{c8y-ngx-components-dashboard-details-advanced-tab-dashboard-details-advanced-tab.component-DtLAOoFx.mjs.map → c8y-ngx-components-dashboard-details-advanced-tab-dashboard-details-advanced-tab.component-CwfVxTSx.mjs.map} +1 -1
- package/fesm2022/c8y-ngx-components-dashboard-details-advanced-tab.mjs +12 -12
- package/fesm2022/c8y-ngx-components-dashboard-details-advanced-tab.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-dashboard-manager-devicemanagement.mjs +19 -0
- package/fesm2022/c8y-ngx-components-dashboard-manager-devicemanagement.mjs.map +1 -0
- package/fesm2022/c8y-ngx-components-dashboard-manager.mjs +22 -22
- package/fesm2022/c8y-ngx-components-dashboard-manager.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-data-broker.mjs +7 -7
- package/fesm2022/c8y-ngx-components-data-broker.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-data-grid-columns-asset-type.mjs +3 -3
- package/fesm2022/c8y-ngx-components-data-grid-columns-asset-type.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-data-grid-columns.mjs +3 -3
- package/fesm2022/c8y-ngx-components-data-grid-columns.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-datapoint-explorer-devicemanagement.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-datapoint-explorer-view.mjs +24 -24
- package/fesm2022/c8y-ngx-components-datapoint-explorer-view.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-datapoint-explorer.mjs +7 -7
- package/fesm2022/c8y-ngx-components-datapoint-explorer.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-datapoint-library-details.mjs +3 -3
- package/fesm2022/c8y-ngx-components-datapoint-library-details.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-datapoint-library-list.mjs +3 -3
- package/fesm2022/c8y-ngx-components-datapoint-library-list.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-datapoint-library-services.mjs +3 -3
- package/fesm2022/c8y-ngx-components-datapoint-library-services.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-datapoint-library.mjs +4 -4
- package/fesm2022/c8y-ngx-components-datapoint-library.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-datapoint-selector.mjs +40 -40
- package/fesm2022/c8y-ngx-components-datapoint-selector.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-datapoints-export-selector.mjs +41 -40
- package/fesm2022/c8y-ngx-components-datapoints-export-selector.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-default-subscriptions.mjs +16 -16
- package/fesm2022/c8y-ngx-components-default-subscriptions.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-device-grid.mjs +43 -43
- package/fesm2022/c8y-ngx-components-device-grid.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-device-list.mjs +22 -22
- package/fesm2022/c8y-ngx-components-device-list.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-device-map.mjs +12 -12
- package/fesm2022/c8y-ngx-components-device-map.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-device-profile.mjs +34 -34
- package/fesm2022/c8y-ngx-components-device-profile.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-device-protocol-object-mappings.mjs +3 -3
- package/fesm2022/c8y-ngx-components-device-protocol-object-mappings.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-device-protocols.mjs +16 -16
- package/fesm2022/c8y-ngx-components-device-protocols.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-device-provisioned-certificates.mjs +13 -13
- package/fesm2022/c8y-ngx-components-device-provisioned-certificates.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-device-shell.mjs +31 -31
- package/fesm2022/c8y-ngx-components-device-shell.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-diagnostics.mjs +13 -13
- package/fesm2022/c8y-ngx-components-diagnostics.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-echart-models.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-echart.mjs +27 -27
- package/fesm2022/c8y-ngx-components-echart.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-ecosystem-application-plugins.mjs +43 -43
- package/fesm2022/c8y-ngx-components-ecosystem-application-plugins.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-ecosystem-archived-confirm.mjs +7 -7
- package/fesm2022/c8y-ngx-components-ecosystem-archived-confirm.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-ecosystem-license-confirm.mjs +10 -10
- package/fesm2022/c8y-ngx-components-ecosystem-license-confirm.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-ecosystem-plugin-setup-stepper.mjs +7 -7
- package/fesm2022/c8y-ngx-components-ecosystem-plugin-setup-stepper.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-ecosystem-shared.mjs +46 -46
- package/fesm2022/c8y-ngx-components-ecosystem-shared.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-ecosystem.mjs +82 -82
- package/fesm2022/c8y-ngx-components-ecosystem.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-editor.mjs +6 -6
- package/fesm2022/c8y-ngx-components-editor.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-events-events-timeline.mjs +3 -3
- package/fesm2022/c8y-ngx-components-events-events-timeline.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-events.mjs +3 -3
- package/fesm2022/c8y-ngx-components-events.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-exports-list.mjs +6 -6
- package/fesm2022/c8y-ngx-components-exports-list.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-exports.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-file-preview.mjs +7 -7
- package/fesm2022/c8y-ngx-components-file-preview.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-files-repository.mjs +19 -19
- package/fesm2022/c8y-ngx-components-files-repository.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-icon-selector-icons-arrows.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-icon-selector-icons-city.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-icon-selector-icons-data.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-icon-selector-icons-dateAndTime.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-icon-selector-icons-devicesAndSensors.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-icon-selector-icons-ecommerce.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-icon-selector-icons-editing.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-icon-selector-icons-filesAndFolders.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-icon-selector-icons-finance.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-icon-selector-icons-hands.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-icon-selector-icons-location.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-icon-selector-icons-messaging.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-icon-selector-icons-multimedia.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-icon-selector-icons-network.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-icon-selector-icons-office.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-icon-selector-icons-people.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-icon-selector-icons-platform.mjs +1 -0
- package/fesm2022/c8y-ngx-components-icon-selector-icons-platform.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-icon-selector-icons-programming.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-icon-selector-icons-security.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-icon-selector-icons-transport.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-icon-selector-icons-userInterface.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-icon-selector-icons-weather.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-icon-selector-icons.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-icon-selector-model.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-icon-selector.mjs +19 -19
- package/fesm2022/c8y-ngx-components-icon-selector.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-interval-picker.mjs +3 -3
- package/fesm2022/c8y-ngx-components-interval-picker.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-location.mjs +28 -28
- package/fesm2022/c8y-ngx-components-location.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-loriot-device-registration.mjs +16 -16
- package/fesm2022/c8y-ngx-components-loriot-device-registration.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-map.mjs +19 -19
- package/fesm2022/c8y-ngx-components-map.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-messaging-management.mjs +55 -55
- package/fesm2022/c8y-ngx-components-messaging-management.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-operations-bulk-operation-from-single.mjs +7 -7
- package/fesm2022/c8y-ngx-components-operations-bulk-operation-from-single.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-operations-bulk-operation-list-item.mjs +19 -19
- package/fesm2022/c8y-ngx-components-operations-bulk-operation-list-item.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-operations-bulk-operation-scheduler.mjs +7 -7
- package/fesm2022/c8y-ngx-components-operations-bulk-operation-scheduler.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-operations-bulk-operation-stepper.mjs +13 -13
- package/fesm2022/c8y-ngx-components-operations-bulk-operation-stepper.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-operations-bulk-operations-list.mjs +13 -13
- package/fesm2022/c8y-ngx-components-operations-bulk-operations-list.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-operations-bulk-operations-service.mjs +7 -7
- package/fesm2022/c8y-ngx-components-operations-bulk-operations-service.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-operations-bulk-operations-stepper-container.mjs +7 -7
- package/fesm2022/c8y-ngx-components-operations-bulk-operations-stepper-container.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-operations-bulk-single-operations-list.mjs +10 -10
- package/fesm2022/c8y-ngx-components-operations-bulk-single-operations-list.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-operations-create-bulk-operation-details.mjs +7 -7
- package/fesm2022/c8y-ngx-components-operations-create-bulk-operation-details.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-operations-device-selector.mjs +7 -7
- package/fesm2022/c8y-ngx-components-operations-device-selector.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-operations-grid-columns.mjs +12 -12
- package/fesm2022/c8y-ngx-components-operations-grid-columns.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-operations-operation-details.mjs +13 -13
- package/fesm2022/c8y-ngx-components-operations-operation-details.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-operations-operation-summary.mjs +7 -7
- package/fesm2022/c8y-ngx-components-operations-operation-summary.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-operations-operations-list-item-details.mjs +10 -10
- package/fesm2022/c8y-ngx-components-operations-operations-list-item-details.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-operations-operations-list.mjs +12 -12
- package/fesm2022/c8y-ngx-components-operations-operations-list.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-operations-operations-timeline.mjs +7 -7
- package/fesm2022/c8y-ngx-components-operations-operations-timeline.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-operations-product-experience.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-operations-shared.mjs +10 -10
- package/fesm2022/c8y-ngx-components-operations-shared.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-operations-status-filter.mjs +7 -7
- package/fesm2022/c8y-ngx-components-operations-status-filter.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-configuration.mjs +7 -7
- package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-configuration.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-device-profile.mjs +13 -13
- package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-device-profile.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-firmware.mjs +13 -13
- package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-firmware.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-software.mjs +13 -13
- package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-software.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-operations-stepper-frames.mjs +13 -13
- package/fesm2022/c8y-ngx-components-operations-stepper-frames.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-operations.mjs +7 -7
- package/fesm2022/c8y-ngx-components-operations.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-pending-mo-request.mjs +7 -7
- package/fesm2022/c8y-ngx-components-pending-mo-request.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-platform-configuration.mjs +10 -10
- package/fesm2022/c8y-ngx-components-platform-configuration.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-protocol-lpwan.mjs +38 -38
- package/fesm2022/c8y-ngx-components-protocol-lpwan.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-protocol-opcua-mappings.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-protocol-opcua.mjs +58 -58
- package/fesm2022/c8y-ngx-components-protocol-opcua.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-register-device.mjs +58 -58
- package/fesm2022/c8y-ngx-components-register-device.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-remote-access-configurations.mjs +9 -9
- package/fesm2022/c8y-ngx-components-remote-access-configurations.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-remote-access-data.mjs +3 -3
- package/fesm2022/c8y-ngx-components-remote-access-data.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-remote-access-passthrough.mjs +3 -3
- package/fesm2022/c8y-ngx-components-remote-access-passthrough.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-remote-access-shared.mjs +6 -6
- package/fesm2022/c8y-ngx-components-remote-access-shared.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-remote-access-ssh-remote-access-ssh-endpoint-modal.mjs +3 -3
- package/fesm2022/c8y-ngx-components-remote-access-ssh-remote-access-ssh-endpoint-modal.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-remote-access-ssh.mjs +3 -3
- package/fesm2022/c8y-ngx-components-remote-access-ssh.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-remote-access-telnet.mjs +3 -3
- package/fesm2022/c8y-ngx-components-remote-access-telnet.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-remote-access-terminal-viewer.mjs +3 -3
- package/fesm2022/c8y-ngx-components-remote-access-terminal-viewer.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-remote-access-vnc-remote-access-vnc-endpoint-modal.mjs +3 -3
- package/fesm2022/c8y-ngx-components-remote-access-vnc-remote-access-vnc-endpoint-modal.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-remote-access-vnc-vnc-viewer.mjs +6 -6
- package/fesm2022/c8y-ngx-components-remote-access-vnc-vnc-viewer.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-remote-access-vnc.mjs +3 -3
- package/fesm2022/c8y-ngx-components-remote-access-vnc.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-replace-device-replace-device-wizard.mjs +6 -6
- package/fesm2022/c8y-ngx-components-replace-device-replace-device-wizard.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-replace-device.mjs +13 -29
- package/fesm2022/c8y-ngx-components-replace-device.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-report-dashboard.mjs +16 -16
- package/fesm2022/c8y-ngx-components-report-dashboard.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-reports.mjs +19 -19
- package/fesm2022/c8y-ngx-components-reports.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-repository-configuration.mjs +48 -48
- package/fesm2022/c8y-ngx-components-repository-configuration.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-repository-firmware.mjs +33 -33
- package/fesm2022/c8y-ngx-components-repository-firmware.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-repository-shared.mjs +34 -34
- package/fesm2022/c8y-ngx-components-repository-shared.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-repository-software.mjs +42 -42
- package/fesm2022/c8y-ngx-components-repository-software.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-repository.mjs +4 -4
- package/fesm2022/c8y-ngx-components-repository.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-search.mjs +19 -19
- package/fesm2022/c8y-ngx-components-search.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-sensor-phone-sensor-phone-modal.mjs +33 -27
- package/fesm2022/c8y-ngx-components-sensor-phone-sensor-phone-modal.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-sensor-phone.mjs +17 -320
- package/fesm2022/c8y-ngx-components-sensor-phone.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-services-service-command-tab.mjs +3 -3
- package/fesm2022/c8y-ngx-components-services-service-command-tab.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-services-shared.mjs +3 -3
- package/fesm2022/c8y-ngx-components-services-shared.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-services.mjs +29 -29
- package/fesm2022/c8y-ngx-components-services.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-sigfox-device-registration.mjs +16 -16
- package/fesm2022/c8y-ngx-components-sigfox-device-registration.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-sms-gateway.mjs +7 -7
- package/fesm2022/c8y-ngx-components-sms-gateway.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-static-assets-data.mjs +3 -3
- package/fesm2022/c8y-ngx-components-static-assets-data.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-static-assets-modal.mjs +3 -3
- package/fesm2022/c8y-ngx-components-static-assets-modal.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-static-assets.mjs +6 -6
- package/fesm2022/c8y-ngx-components-static-assets.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-sub-assets.mjs +60 -60
- package/fesm2022/c8y-ngx-components-sub-assets.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-tenants.mjs +40 -40
- package/fesm2022/c8y-ngx-components-tenants.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-time-context.mjs +6 -6
- package/fesm2022/c8y-ngx-components-time-context.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-tracking.mjs +12 -12
- package/fesm2022/c8y-ngx-components-tracking.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-translation-editor-data.mjs +3 -3
- package/fesm2022/c8y-ngx-components-translation-editor-data.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-translation-editor-lazy.mjs +12 -12
- package/fesm2022/c8y-ngx-components-translation-editor-lazy.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-translation-editor.mjs +6 -6
- package/fesm2022/c8y-ngx-components-translation-editor.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-trusted-certificates.mjs +33 -33
- package/fesm2022/c8y-ngx-components-trusted-certificates.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-upgrade-upgraded-services.mjs +4 -4
- package/fesm2022/c8y-ngx-components-upgrade-upgraded-services.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-upgrade.mjs +41 -41
- package/fesm2022/c8y-ngx-components-upgrade.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-user-roles.mjs +10 -10
- package/fesm2022/c8y-ngx-components-user-roles.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-cockpit-exports.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-cockpit.mjs +4 -4
- package/fesm2022/c8y-ngx-components-widgets-cockpit.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-definitions-alarms-alarm-list.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-definitions-alarms-all-critical-alarms.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-definitions-alarms-recent-alarms.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-definitions-applications.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-definitions-asset-notes.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-definitions-cockpit-legacy-welcome.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-definitions-cockpit-welcome.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-definitions-datapoints-graph.mjs +3 -3
- package/fesm2022/c8y-ngx-components-widgets-definitions-datapoints-graph.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-definitions-datapoints-table.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-definitions-device-control-message.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-definitions-device-management-welcome.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-definitions-help-and-service.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-definitions-html-widget.mjs +18 -14
- package/fesm2022/c8y-ngx-components-widgets-definitions-html-widget.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-definitions-image.mjs +4 -2
- package/fesm2022/c8y-ngx-components-widgets-definitions-image.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-definitions-info-gauge.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-definitions-kpi.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-definitions-linear-gauge.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-definitions-map.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-definitions-markdown.mjs +4 -2
- package/fesm2022/c8y-ngx-components-widgets-definitions-markdown.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-definitions-quick-links.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-definitions-radial-gauge.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-definitions-silo.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-definitions-three-d-rotation.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-definitions.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-device-management.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-alarms.mjs +22 -22
- package/fesm2022/c8y-ngx-components-widgets-implementations-alarms.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-asset-notes.mjs +3 -3
- package/fesm2022/c8y-ngx-components-widgets-implementations-asset-notes.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-cockpit-legacy-welcome.mjs +3 -3
- package/fesm2022/c8y-ngx-components-widgets-implementations-cockpit-legacy-welcome.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-cockpit-welcome.mjs +3 -3
- package/fesm2022/c8y-ngx-components-widgets-implementations-cockpit-welcome.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-graph.mjs +6 -6
- package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-graph.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-table.mjs +50 -36
- package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-table.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-device-control-message.mjs +3 -3
- package/fesm2022/c8y-ngx-components-widgets-implementations-device-control-message.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-device-management-welcome.mjs +7 -7
- package/fesm2022/c8y-ngx-components-widgets-implementations-device-management-welcome.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-help-and-service-widget.mjs +3 -3
- package/fesm2022/c8y-ngx-components-widgets-implementations-help-and-service-widget.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-html-widget.mjs +22 -22
- package/fesm2022/c8y-ngx-components-widgets-implementations-html-widget.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-image.mjs +9 -9
- package/fesm2022/c8y-ngx-components-widgets-implementations-image.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-info-gauge.mjs +18 -18
- package/fesm2022/c8y-ngx-components-widgets-implementations-info-gauge.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-kpi.mjs +6 -6
- package/fesm2022/c8y-ngx-components-widgets-implementations-kpi.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-linear-gauge.mjs +6 -6
- package/fesm2022/c8y-ngx-components-widgets-implementations-linear-gauge.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-map.mjs +9 -9
- package/fesm2022/c8y-ngx-components-widgets-implementations-map.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-markdown.mjs +9 -9
- package/fesm2022/c8y-ngx-components-widgets-implementations-markdown.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-quick-links.mjs +18 -18
- package/fesm2022/c8y-ngx-components-widgets-implementations-quick-links.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-three-d-rotation.mjs +9 -9
- package/fesm2022/c8y-ngx-components-widgets-implementations-three-d-rotation.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-import-export-config.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets.mjs +4 -4
- package/fesm2022/c8y-ngx-components-widgets.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components.mjs +1658 -1315
- package/fesm2022/c8y-ngx-components.mjs.map +1 -1
- package/icon-selector/icons/index.d.ts +1 -1
- package/icon-selector/icons/platform/index.d.ts +2 -2
- package/icon-selector/icons/platform/index.d.ts.map +1 -1
- package/locales/de.po +26 -3
- package/locales/es.po +26 -3
- package/locales/fr.po +26 -3
- package/locales/ja_JP.po +25 -3
- package/locales/ko.po +26 -3
- package/locales/locales.pot +25 -2
- package/locales/nl.po +26 -3
- package/locales/pl.po +26 -3
- package/locales/pt_BR.po +26 -3
- package/locales/zh_CN.po +26 -3
- package/locales/zh_TW.po +26 -3
- package/package.json +1 -1
- package/replace-device/replace-device.module.d.ts.map +1 -1
- package/sensor-phone/sensor-phone-modal/sensor-phone-modal.component.d.ts +6 -6
- package/sensor-phone/sensor-phone-modal/sensor-phone-modal.component.d.ts.map +1 -1
- package/sensor-phone/sensor-phone-modal/sensor-phone.model.d.ts +0 -1
- package/sensor-phone/sensor-phone-modal/sensor-phone.model.d.ts.map +1 -1
- package/sensor-phone/sensor-phone.module.d.ts +2 -3
- package/sensor-phone/sensor-phone.module.d.ts.map +1 -1
- package/widgets/definitions/datapoints-table/index.d.ts +1 -2
- package/widgets/definitions/datapoints-table/index.d.ts.map +1 -1
- package/widgets/definitions/html-widget/html-widget-config.factory.d.ts +1 -1
- package/widgets/definitions/html-widget/html-widget-config.factory.d.ts.map +1 -1
- package/widgets/definitions/image/index.d.ts +1 -1
- package/widgets/definitions/image/index.d.ts.map +1 -1
- package/widgets/definitions/markdown/index.d.ts +1 -1
- package/widgets/definitions/markdown/index.d.ts.map +1 -1
- package/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-table-view.component.d.ts.map +1 -1
- package/widgets/implementations/three-d-rotation/three-d-rotation-widget-view/three-d-rotation-widget-view.component.d.ts.map +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"c8y-ngx-components-messaging-management.mjs","sources":["../../messaging-management/utils/namespace-props.ts","../../messaging-management/api/services/messaging-namespaces.service.ts","../../messaging-management/constants.ts","../../messaging-management/messaging-management.guard.ts","../../messaging-management/navigator/messaging-navigator-factory.ts","../../messaging-management/utils/backlog-quota-limit.pipe.ts","../../messaging-management/messaging/shared/usage/usage.component.ts","../../messaging-management/messaging/shared/usage/usage.component.html","../../messaging-management/messaging/namespace-list/namespace-item/namespace-item-card/namespace-item-card.component.ts","../../messaging-management/messaging/namespace-list/namespace-item/namespace-item-card/namespace-item-card.component.html","../../messaging-management/messaging/namespace-list/namespace-item/namespace-item.component.ts","../../messaging-management/messaging/namespace-list/namespace-item/namespace-item.component.html","../../messaging-management/messaging/namespace-list/namespace-list.component.ts","../../messaging-management/messaging/namespace-list/namespace-list.component.html","../../messaging-management/utils/time-to-live.pipe.ts","../../messaging-management/api/services/messaging-topics.service.ts","../../messaging-management/messaging/topic/topics-data-grid.service.ts","../../messaging-management/messaging/topic/topic-list-view.component.ts","../../messaging-management/messaging/topic/topic-list-view.component.html","../../messaging-management/api/model/topicType.ts","../../messaging-management/api/services/messaging-subscribers.service.ts","../../messaging-management/messaging/topic/topic-subscribers-view/topic-subscribers-data-grid.service.ts","../../messaging-management/messaging/topic/topic-subscribers-view/topic-subscribers-view.component.ts","../../messaging-management/messaging/topic/topic-subscribers-view/topic-subscribers-view.component.html","../../messaging-management/navigator/topic-details-tab.factory.ts","../../messaging-management/messaging-management-preview.factory.ts","../../messaging-management/messaging-management.module.ts","../../messaging-management/c8y-ngx-components-messaging-management.ts"],"sourcesContent":["import { gettext } from '@c8y/ngx-components';\n\ntype NamespaceProps = {\n icon: string;\n label: string;\n};\n\n/**\n * Currently known namespaces and their properties.\n */\nexport const NAMESPACE_PROPS: Record<string, NamespaceProps> = {\n mqtt: {\n icon: 'c8y-device-protocols',\n label: gettext('MQTT Service')\n },\n 'data-broker-fwd': {\n icon: 'c8y-data-broker',\n label: gettext('Data Broker')\n },\n relnotif: {\n icon: 'c8y-notification',\n label: gettext('Notifications 2.0')\n },\n 'streaming-analytics': {\n icon: 'c8y-streaming-analytics',\n label: gettext('Streaming Analytics')\n }\n};\n","import { inject, Injectable } from '@angular/core';\nimport { MessagingNamespaceList } from '../model/namespaceList';\nimport { MessagingNamespacePolicies } from '../model/namespacePolicies';\nimport { MessagingNamespace } from '../model/namespace';\nimport { FetchClient, Service } from '@c8y/client';\nimport { MessagingNamespaceDetails } from '../model/namespaceDetails';\nimport { AlertService } from '@c8y/ngx-components';\n\n@Injectable({ providedIn: 'root' })\nexport class MessagingNamespacesService extends Service<any> {\n protected baseUrl = '/service/messaging-management';\n protected listUrl = 'tenants';\n\n private alertService = inject(AlertService);\n\n constructor(client: FetchClient) {\n super(client);\n }\n\n /**\n * Get namespace list for a tenant\n *\n * @param tenant Tenant id\n * @return Namespaces list\n */\n async getNamespaces(tenant: string): Promise<MessagingNamespaceList> {\n const namespacesUrl = `/${this.listUrl}/${tenant}/namespaces`;\n return this.fetch(namespacesUrl).then(res => res.json());\n }\n\n /**\n * Get namespace.\n *\n * @param tenant Tenant ID.\n * @param namespace Name of namespace.\n * @return Namespace.\n */\n async getNamespace(tenant: string, namespace: string): Promise<MessagingNamespace> {\n const namespaceUrl = `/${this.listUrl}/${tenant}/namespaces/${namespace}`;\n return this.fetch(namespaceUrl).then(res => res.json());\n }\n\n /**\n * Get namespace policies\n *\n * @param tenant Tenant id\n * @param namespace Name of namespace\n * @return Namespaces policies\n */\n async getNamespacePolicies(\n tenant: string,\n namespace: string\n ): Promise<MessagingNamespacePolicies> {\n const policiesUrl = `/${this.listUrl}/${tenant}/namespaces/${namespace}/policies`;\n return this.fetch(policiesUrl).then(res => res.json());\n }\n\n /**\n * Get single namespace details\n * @param tenant Tenant ID\n * @param namespaceName Namespace name\n * @return Namespace with details\n */\n async getNamespaceDetails(\n tenant: string,\n namespaceName: string\n ): Promise<MessagingNamespaceDetails> {\n const namespace = await this.getNamespace(tenant, namespaceName);\n const policies = await this.getNamespacePolicies(tenant, namespaceName);\n return {\n id: namespaceName,\n namespace,\n policies\n };\n }\n\n /**\n * Get namespaces with details\n *\n * @param tenant Tenant ID\n * @return Namespaces with details\n */\n async getNamespacesDetails(tenant: string): Promise<MessagingNamespaceDetails[]> {\n try {\n const { namespaces } = await this.getNamespaces(tenant);\n return Promise.all(\n namespaces.map(async namespace => this.getNamespaceDetails(tenant, namespace.name))\n );\n } catch (error) {\n this.alertService.addServerFailure(error);\n return [];\n }\n }\n}\n","export const basePath = 'monitoring/messaging-service';\nexport const MESSAGING_MANAGEMENT_FEATURE_KEY = 'messaging-management.api';\nexport const MESSAGING_MANAGEMENT_MICROSERVICE_NAME = 'messaging-management';\n","import { inject, Injectable } from '@angular/core';\nimport { CanActivate } from '@angular/router';\nimport { Permissions } from '@c8y/ngx-components';\nimport { ApplicationService, FeatureService, UserService } from '@c8y/client';\nimport {\n MESSAGING_MANAGEMENT_FEATURE_KEY,\n MESSAGING_MANAGEMENT_MICROSERVICE_NAME\n} from './constants';\n\n@Injectable({ providedIn: 'root' })\nexport class MessagingManagementGuard implements CanActivate {\n private userService = inject(UserService);\n private featureService = inject(FeatureService);\n private applicationService = inject(ApplicationService);\n\n private cachedResult: boolean | null = null;\n\n async canActivate(): Promise<boolean> {\n if (this.cachedResult !== null) {\n return this.cachedResult;\n }\n\n const currentUser = (await this.userService.current()).data;\n const hasRequiredRoles = this.userService.hasAnyRole(currentUser, [\n Permissions.ROLE_TENANT_STATISTICS_READ,\n Permissions.ROLE_TENANT_MANAGEMENT_ADMIN\n ]);\n\n const featureEnabled = await this.featureService\n .detail(MESSAGING_MANAGEMENT_FEATURE_KEY)\n .then(({ data }) => data.active)\n .catch(() => false);\n\n const microserviceSubscribed = await this.applicationService\n .isAvailable(MESSAGING_MANAGEMENT_MICROSERVICE_NAME)\n .then(({ data: subscribed }) => subscribed)\n .catch(() => false);\n\n this.cachedResult = hasRequiredRoles && featureEnabled && microserviceSubscribed;\n\n return this.cachedResult;\n }\n}\n","import { inject, Injectable } from '@angular/core';\nimport {\n AppStateService,\n ExtensionFactory,\n gettext,\n NavigatorNode,\n NavigatorService\n} from '@c8y/ngx-components';\nimport { NAMESPACE_PROPS } from '../utils/namespace-props';\nimport { MessagingNamespacesService } from '../api/services/messaging-namespaces.service';\nimport { catchError, filter, map, shareReplay, switchMap, take } from 'rxjs/operators';\nimport { from, Observable } from 'rxjs';\nimport { MessagingManagementGuard } from '../messaging-management.guard';\n\nconst baseNode = new NavigatorNode({\n label: gettext('Messaging service'),\n icon: 'arrows-dotted-left-right',\n path: 'monitoring/messaging-service',\n priority: 100,\n parent: {\n label: gettext('Monitoring'),\n icon: 'monitoring'\n }\n});\n\n@Injectable({ providedIn: 'root' })\nexport class MessagingNavigatorNodeFactory implements ExtensionFactory<NavigatorNode> {\n appState = inject(AppStateService);\n navigatorService = inject(NavigatorService);\n namespacesService = inject(MessagingNamespacesService);\n guard = inject(MessagingManagementGuard);\n\n currentTenantId = this.appState.currentTenant.pipe(\n filter(currentTenant => !!currentTenant),\n map(currentTenant => currentTenant.name),\n take(1)\n );\n\n navigatorNode$: Observable<NavigatorNode | NavigatorNode[]>;\n\n constructor() {\n this.navigatorNode$ = from(this.guard.canActivate()).pipe(\n filter(allowed => allowed),\n switchMap(() => this.currentTenantId),\n switchMap(currentTenantId => this.namespacesService.getNamespaces(currentTenantId)),\n map(({ namespaces }) => {\n if (!namespaces?.length) {\n return [];\n }\n namespaces.forEach(namespace => {\n const label = NAMESPACE_PROPS[namespace.name]?.label || namespace.name;\n const childNode = new NavigatorNode({\n label,\n path: `monitoring/messaging-service/namespace/${namespace.name}`,\n icon: NAMESPACE_PROPS[namespace.name]?.icon,\n routerLinkExact: false\n });\n baseNode.add(childNode);\n });\n return baseNode;\n }),\n catchError(() => {\n return [];\n }),\n shareReplay(1)\n );\n }\n\n get(): Observable<NavigatorNode | NavigatorNode[]> {\n return this.navigatorNode$;\n }\n}\n","import { formatNumber } from '@angular/common';\nimport { inject, LOCALE_ID, Pipe, PipeTransform } from '@angular/core';\nimport { gettext } from '@c8y/ngx-components';\nimport { TranslateService } from '@ngx-translate/core';\n\n/**\n * In case of limits in Messaging management, value of '-1' means that there is no limit.\n */\n@Pipe({ name: 'backlogQuotaLimit', standalone: true })\nexport class BacklogQuotaLimitPipe implements PipeTransform {\n private translateService = inject(TranslateService);\n private locale = inject(LOCALE_ID);\n\n transform(value: number): number | string {\n if (value == null || isNaN(value)) {\n return '-';\n } else if (value === -1) {\n return this.translateService.instant(gettext('Unlimited` backlog quota`'));\n } else {\n return formatNumber(value, this.locale);\n }\n }\n}\n","import { Component, computed, input } from '@angular/core';\nimport { C8yTranslatePipe, gettext, IconDirective } from '@c8y/ngx-components';\nimport { NgClass, NgIf, PercentPipe } from '@angular/common';\n\n/**\n * Usage component displays usage information in a form of e.g. \"51% used\".\n * It can be used in two ways:\n * 1. By providing `count` and `limit` inputs, it will calculate the usage percentage.\n * 2. By providing `percentage` input, it will use the provided percentage value.\n * Note: `percentage` input takes precedence over `count` and `limit` inputs.\n */\n@Component({\n selector: 'app-usage',\n standalone: true,\n imports: [IconDirective, NgIf, NgClass, IconDirective, C8yTranslatePipe, PercentPipe],\n templateUrl: './usage.component.html',\n host: { class: 'd-contents' }\n})\nexport class UsageComponent {\n count = input<number | null>(null);\n limit = input<number | null>(null);\n /**\n * Percentage of usage. Value range is from 0 to 100 (or more).\n * For example, if 10% is used, this value should be provided as 10 (not 0.1).\n */\n percentage = input<number | null>(null);\n\n /**\n * Usage as a fraction (e.g. if 50% is used, usage value will be 0.5)\n */\n usage = computed(() =>\n this.percentage() != null ? this.percentage() / 100 : this.getUsage(this.count(), this.limit())\n );\n status = computed(() => this.getStatus(this.usage()));\n usageToDisplay = gettext('{{ percentageOfQuota }} used');\n\n statusMap = {\n danger: ['tag--danger'],\n warning: ['tag--warning'],\n success: ['tag--success']\n };\n\n /**\n * Get usage as fraction of count and limit.\n * E.g. if count is 5 and limit is 10, returned usage will be 0.5\n * @param count Usage count\n * @param limit Usage limit\n * @returns Count divided by limit or null if count or limit is null or limit is -1 (indicates no limit)\n */\n private getUsage(count: number, limit: number): number | null {\n if (count == null || limit == null || limit === -1) {\n return null;\n }\n return count / limit;\n }\n\n private getStatus(usage: number | null) {\n if (usage == null) {\n return null;\n }\n const percentage = usage * 100;\n\n if (percentage >= 80) {\n return 'danger';\n } else if (percentage >= 50) {\n return 'warning';\n } else {\n return 'success';\n }\n }\n}\n","<div\n class=\"tag no-pointer\"\n [ngClass]=\"statusMap[status()]\"\n *ngIf=\"usage() !== null\"\n>\n <i\n class=\"text-danger m-r-4 text-12\"\n c8yIcon=\"exclamation-circle\"\n *ngIf=\"status() === 'danger'\"\n ></i>\n <span>\n {{ usageToDisplay | translate: { percentageOfQuota: (usage() | percent: '1.0-2') } }}\n </span>\n</div>\n","import { Component, Input } from '@angular/core';\nimport { C8yTranslateModule, gettext, IconDirective } from '@c8y/ngx-components';\nimport { CommonModule } from '@angular/common';\nimport { BacklogQuotaLimitPipe } from '../../../../utils/backlog-quota-limit.pipe';\nimport { UsageComponent } from '../../../shared/usage/usage.component';\n\nconst DataType = {\n publishers: 'publishers',\n subscribers: 'subscribers',\n topics: 'topics'\n} as const;\n\n@Component({\n selector: 'app-namespace-item-card',\n standalone: true,\n imports: [IconDirective, C8yTranslateModule, CommonModule, BacklogQuotaLimitPipe, UsageComponent],\n templateUrl: './namespace-item-card.component.html',\n host: { class: 'card m-b-0 fit-w' }\n})\nexport class NamespaceItemCardComponent {\n readonly DATA_TYPE = DataType;\n readonly ITEM_DETAILS: Record<keyof typeof DataType, { icon: string; title: string }> = {\n publishers: { icon: 'output', title: gettext('Publishers') },\n subscribers: { icon: 'input', title: gettext('Subscribers') },\n topics: { icon: 'day-view', title: gettext('Topics') }\n } as const;\n topicsLimitLabel = gettext('Limit: {{ backlogQuotaLimit }}');\n\n /**\n * The label of the service (already translated).\n */\n @Input() serviceLabel = '';\n @Input() limit?: number;\n @Input() dataType: keyof typeof DataType;\n @Input() value: number | undefined;\n}\n","<div class=\"card-block text-default visible-xs text-center p-b-0\">\n <span class=\"text-12 text-uppercase text-muted\">\n {{ serviceLabel | translate }}\n </span>\n</div>\n<div\n class=\"card-block text-default p-t-sm-48\"\n [ngClass]=\"{\n 'p-b-sm-48': limit === 0\n }\"\n>\n <div class=\"d-flex fit-w a-i-center gap-8 j-c-center\">\n <i\n class=\"icon-32 c8y-icon-duocolor\"\n [c8yIcon]=\"ITEM_DETAILS[dataType].icon\"\n ></i>\n <span class=\"h1\">\n {{ value | number }}\n </span>\n <span\n class=\"a-s-baseline text-14 text-medium text-truncate\"\n title=\"{{ ITEM_DETAILS[dataType].title | translate }}\"\n >\n {{ ITEM_DETAILS[dataType].title | translate }}\n </span>\n </div>\n</div>\n<div\n class=\"card-footer d-flex gap-16 j-c-center a-i-center\"\n *ngIf=\"dataType === DATA_TYPE.topics && limit !== 0\"\n>\n <span\n class=\"tag tag--default no-pointer\"\n data-cy=\"card-limit\"\n >\n {{ topicsLimitLabel | translate: { backlogQuotaLimit: limit | backlogQuotaLimit } }}\n </span>\n <app-usage\n [count]=\"value\"\n [limit]=\"limit\"\n ></app-usage>\n</div>\n","import { Component, inject, Input } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { C8yTranslatePipe, IconDirective } from '@c8y/ngx-components';\nimport { NamespaceItemCardComponent } from './namespace-item-card/namespace-item-card.component';\nimport { NAMESPACE_PROPS } from '../../../utils/namespace-props';\nimport { MessagingNamespace } from '../../../api/model/namespace';\nimport { MessagingNamespacePolicies } from '../../../api/model/namespacePolicies';\nimport { TranslateService } from '@ngx-translate/core';\n\n@Component({\n selector: 'app-namespace-item',\n standalone: true,\n imports: [CommonModule, IconDirective, NamespaceItemCardComponent, C8yTranslatePipe],\n templateUrl: './namespace-item.component.html'\n})\nexport class NamespaceItemComponent {\n private translateService = inject(TranslateService);\n\n @Input('namespaceName')\n set _namespaceName(name: string) {\n this.namespaceName = name;\n this.icon = NAMESPACE_PROPS[name]?.icon;\n this.namespaceLabel = this.translateService.instant(NAMESPACE_PROPS[name]?.label) || name;\n }\n namespaceName = '';\n namespaceLabel = '';\n icon = '';\n\n @Input() namespace: MessagingNamespace = {};\n @Input() policies: MessagingNamespacePolicies = {};\n}\n","<div class=\"d-flex-sm d-col-xs p-t-24 p-l-16 p-r-16 m-0 bg-level-1\">\n <div\n class=\"col-sm-3 m-b-24 col-xs-12 d-flex gap-16 text-default a-i-center j-c-center a-s-stretch\"\n >\n <div class=\"text-center d-col\">\n <i\n class=\"m-b-8 icon-40 c8y-icon-duocolor\"\n [c8yIcon]=\"icon\"\n ></i>\n <span class=\"tag tag--info\">{{ 'Service' | translate }}</span>\n </div>\n <span class=\"h4\">{{ namespaceLabel }}</span>\n </div>\n <div class=\"col-sm-3 m-b-24 col-xs-12 a-i-stretch d-flex\">\n <app-namespace-item-card\n [serviceLabel]=\"namespaceLabel\"\n [dataType]=\"'topics'\"\n [limit]=\"namespace?.topics?.limit\"\n [value]=\"namespace?.topics?.count\"\n ></app-namespace-item-card>\n </div>\n <div class=\"col-sm-3 m-b-24 col-xs-12 a-i-stretch d-flex\">\n <app-namespace-item-card\n [serviceLabel]=\"namespaceLabel\"\n [dataType]=\"'publishers'\"\n [value]=\"namespace?.publishers?.count\"\n ></app-namespace-item-card>\n </div>\n <div class=\"col-sm-3 m-b-24 col-xs-12 a-i-stretch d-flex\">\n <app-namespace-item-card\n [serviceLabel]=\"namespaceLabel\"\n [dataType]=\"'subscribers'\"\n [value]=\"namespace?.subscribers?.count\"\n ></app-namespace-item-card>\n </div>\n</div>\n","import { Component, inject, OnInit } from '@angular/core';\nimport {\n ActionBarItemComponent,\n AlertService,\n AppStateService,\n BreadcrumbModule,\n C8yTranslateModule,\n HeaderModule,\n HelpModule,\n IconDirective,\n LoadingComponent\n} from '@c8y/ngx-components';\nimport { CommonModule } from '@angular/common';\nimport { RouterLink } from '@angular/router';\nimport { NamespaceItemComponent } from './namespace-item/namespace-item.component';\nimport { MessagingNamespacesService } from '../../api/services/messaging-namespaces.service';\nimport { MessagingNamespaceDetails } from '../../api/model/namespaceDetails';\n\n@Component({\n selector: 'app-namespace-list',\n templateUrl: './namespace-list.component.html',\n imports: [\n CommonModule,\n HeaderModule,\n HelpModule,\n C8yTranslateModule,\n NamespaceItemComponent,\n RouterLink,\n BreadcrumbModule,\n ActionBarItemComponent,\n IconDirective,\n LoadingComponent\n ],\n standalone: true\n})\nexport class NamespaceListComponent implements OnInit {\n alertService = inject(AlertService);\n appState = inject(AppStateService);\n namespacesService = inject(MessagingNamespacesService);\n\n namespacesDetails: MessagingNamespaceDetails[];\n loading = true;\n\n async ngOnInit() {\n await this.reload();\n }\n\n async reload() {\n this.loading = true;\n try {\n const currentTenantId = this.appState.currentTenant.value.name;\n this.namespacesDetails = await this.namespacesService.getNamespacesDetails(currentTenantId);\n } catch (e) {\n this.alertService.addServerFailure(e);\n } finally {\n this.loading = false;\n }\n }\n}\n","<c8y-title>{{ 'Messaging service' | translate }}</c8y-title>\n\n<c8y-breadcrumb>\n <c8y-breadcrumb-item\n [icon]=\"'monitoring'\"\n [label]=\"'Monitoring' | translate\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item [label]=\"'Messaging service' | translate\"></c8y-breadcrumb-item>\n</c8y-breadcrumb>\n\n<c8y-action-bar-item [placement]=\"'right'\">\n <li>\n <a\n class=\"btn btn-link\"\n title=\"{{ 'Reload' | translate }}\"\n (click)=\"reload()\"\n >\n <i\n c8yIcon=\"refresh\"\n [ngClass]=\"{ 'icon-spin': loading }\"\n ></i>\n {{ 'Reload' | translate }}\n </a>\n </li>\n</c8y-action-bar-item>\n\n<c8y-help src=\"/docs/standard-tenant/monitoring/#messaging-service\"></c8y-help>\n\n<div\n class=\"interact-grid\"\n *ngIf=\"!loading; else loadingTemplate\"\n>\n <a\n class=\"card\"\n *ngFor=\"let namespace of namespacesDetails\"\n [routerLink]=\"['namespace', namespace.id]\"\n >\n <app-namespace-item\n [namespaceName]=\"namespace.id\"\n [namespace]=\"namespace.namespace\"\n ></app-namespace-item>\n </a>\n</div>\n\n<ng-template #loadingTemplate>\n <c8y-loading></c8y-loading>\n</ng-template>\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { gettext } from '@c8y/ngx-components';\nimport { TranslateService } from '@ngx-translate/core';\n\n@Pipe({\n name: 'timeToLive',\n standalone: true\n})\nexport class TimeToLivePipe implements PipeTransform {\n constructor(private translateService: TranslateService) {}\n\n /**\n * Transform time in seconds to human readable format.\n * @param seconds time in seconds\n * @returns human readable time period\n */\n transform(seconds: number | null): string {\n if (seconds == null || isNaN(seconds)) {\n return '-';\n }\n if (seconds === -1) {\n return this.translateService.instant(gettext('Unlimited` time-to-live period`'));\n }\n const minutes = Math.floor(seconds / 60);\n const hours = Math.floor(minutes / 60);\n const days = Math.floor(hours / 24);\n\n if (days >= 1) {\n const remainingHours = hours % 24;\n if (days === 1) {\n if (remainingHours === 0) {\n return this.translateService.instant(gettext('1 day'));\n }\n if (remainingHours === 1) {\n return this.translateService.instant(gettext('1 day 1 hour'));\n }\n return this.translateService.instant(gettext('1 day {{hours}} hours'), {\n hours: remainingHours\n });\n } else {\n if (remainingHours === 0) {\n return this.translateService.instant(gettext('{{days}} days'), { days });\n }\n if (remainingHours === 1) {\n return this.translateService.instant(gettext('{{days}} days 1 hour'), { days });\n }\n return this.translateService.instant(gettext('{{days}} days {{hours}} hours'), {\n days,\n hours: remainingHours\n });\n }\n }\n\n if (hours > 0) {\n const remainingMinutes = minutes % 60;\n if (hours === 1) {\n if (remainingMinutes === 0) {\n return this.translateService.instant(gettext('1 hour'));\n }\n if (remainingMinutes === 1) {\n return this.translateService.instant(gettext('1 hour 1 minute'));\n }\n return this.translateService.instant(gettext('1 hour {{minutes}} minutes'), {\n minutes: remainingMinutes\n });\n } else {\n if (remainingMinutes === 0) {\n return this.translateService.instant(gettext('{{hours}} hours'), { hours });\n }\n if (remainingMinutes === 1) {\n return this.translateService.instant(gettext('{{hours}} hours 1 minute'), { hours });\n }\n return this.translateService.instant(gettext('{{hours}} hours {{minutes}} minutes'), {\n hours,\n minutes: remainingMinutes\n });\n }\n }\n\n if (minutes > 0) {\n const remainingSeconds = seconds % 60;\n if (minutes === 1) {\n if (remainingSeconds === 0) {\n return this.translateService.instant(gettext('1 minute'));\n }\n if (remainingSeconds === 1) {\n return this.translateService.instant(gettext('1 minute 1 second'));\n }\n return this.translateService.instant(gettext('1 minute {{seconds}} seconds'), {\n seconds: remainingSeconds\n });\n } else {\n if (remainingSeconds === 0) {\n return this.translateService.instant(gettext('{{minutes}} minutes'), { minutes });\n }\n if (remainingSeconds === 1) {\n return this.translateService.instant(gettext('{{minutes}} minutes 1 second'), {\n minutes\n });\n }\n return this.translateService.instant(gettext('{{minutes}} minutes {{seconds}} seconds'), {\n minutes,\n seconds: remainingSeconds\n });\n }\n }\n\n if (seconds === 1) {\n return this.translateService.instant(gettext('1 second'));\n } else {\n return this.translateService.instant(gettext('{{seconds}} seconds'), { seconds });\n }\n }\n}\n","import { Injectable } from '@angular/core';\nimport { FetchClient, IResult, Paging, Service } from '@c8y/client';\nimport { MessagingTopicList } from '../model/topicList';\nimport { MessagingTopicListFilters } from '../model/topicListFilters';\nimport { MessagingTopic } from '../model/topic';\nimport { MessagingTopicDetailFilters } from '../model/topicDetailFilters';\n\n@Injectable({ providedIn: 'root' })\nexport class MessagingTopicsService extends Service<MessagingTopic> {\n protected baseUrl = '/service/messaging-management';\n protected listUrl = 'tenants';\n\n constructor(client: FetchClient) {\n super(client);\n }\n\n async list(filter: MessagingTopicListFilters) {\n const headers = { accept: 'application/json' };\n const { tenant, namespace, ...params } = filter;\n const url = `/${this.listUrl}/${tenant}/namespaces/${namespace}/topics`;\n const res = await this.fetch(url, this.changeFetchOptions({ headers, params }, url));\n const topicList = (await res.json()) as MessagingTopicList;\n const data = topicList.topics;\n const paging = this.getPaging(topicList, filter);\n return { res, data, paging };\n }\n\n async detail(filter: MessagingTopicDetailFilters): Promise<IResult<MessagingTopic>> {\n const headers = { accept: 'application/json' };\n const { tenant, namespace, topic, type } = filter;\n const url = `/${this.listUrl}/${tenant}/namespaces/${namespace}/topics/${topic}/types/${type}`;\n const res = await this.fetch(url, this.changeFetchOptions({ headers }, url));\n const data = await res.json();\n return { res, data };\n }\n\n protected getPaging(\n topicList: MessagingTopicList,\n filter: MessagingTopicListFilters\n ): Paging<MessagingTopic> {\n if (topicList.pageStatistics) {\n const { currentPage, totalPages } = topicList.pageStatistics;\n const statistics = {\n ...topicList.pageStatistics,\n nextPage: currentPage < totalPages ? currentPage + 1 : null,\n prevPage: currentPage > 1 ? currentPage - 1 : null\n };\n return new Paging<MessagingTopic>(this, statistics, filter);\n }\n return null;\n }\n}\n","import { inject, Injectable } from '@angular/core';\nimport {\n BaseColumn,\n Column,\n DataSourceModifier,\n gettext,\n ServerSideDataResult\n} from '@c8y/ngx-components';\nimport { MessagingTopicListFilters } from '../../api/model/topicListFilters';\nimport { MessagingTopicsService } from '../../api/services/messaging-topics.service';\n\n@Injectable({ providedIn: 'root' })\nexport class TopicsDataGridService {\n protected topicsService = inject(MessagingTopicsService);\n\n getColumns(): Column[] {\n return [\n this.createColumn({\n name: 'name',\n header: gettext('Name'),\n path: 'name',\n filterable: true,\n filteringConfig: {\n fields: [\n {\n key: 'name',\n type: 'input',\n props: {\n label: gettext('Filter topics by partial name'),\n placeholder: 'myTopic',\n required: true\n }\n }\n ],\n getFilter(model: { name: string }): string {\n return model.name;\n }\n }\n }),\n this.createColumn({\n name: 'msgRateIn',\n header: gettext('Message rate in (msg/s)'),\n path: 'msgRateIn'\n }),\n this.createColumn({\n name: 'msgRateOut',\n header: gettext('Message rate out (msg/s)'),\n path: 'msgRateOut'\n }),\n this.createColumn({\n name: 'subscribers',\n header: gettext('Subscribers'),\n path: 'subscribers'\n }),\n this.createColumn({\n name: 'backlogSize',\n header: gettext('Message backlog'),\n path: 'backlogSize'\n }),\n this.createColumn({\n name: 'backlogUsagePercentage',\n header: gettext('Used backlog'),\n path: 'backlogUsagePercentage',\n sortOrder: 'desc'\n })\n ];\n }\n\n async getServerSideData(\n tenantId: string,\n namespaceId: string,\n dataSourceModifier: DataSourceModifier\n ): Promise<ServerSideDataResult> {\n const topicFilters = this.getTopicFilters(tenantId, namespaceId, dataSourceModifier);\n const { res, data, paging } = await this.topicsService.list(topicFilters);\n const filteredSize = paging.totalElements;\n const size = (\n await this.topicsService.list({\n ...topicFilters,\n currentPage: 1,\n pageSize: 1\n })\n ).paging.totalPages;\n\n return {\n res,\n data,\n paging,\n size,\n filteredSize\n };\n }\n\n private createColumn(columnProps: Partial<BaseColumn>): BaseColumn {\n const column = new BaseColumn();\n Object.assign(column, columnProps);\n return column;\n }\n\n private getTopicFilters(\n tenantId: string,\n namespaceId: string,\n dataSourceModifier: DataSourceModifier\n ): MessagingTopicListFilters {\n const topicFilters: MessagingTopicListFilters = {\n tenant: tenantId,\n namespace: namespaceId,\n currentPage: dataSourceModifier.pagination.currentPage,\n pageSize: dataSourceModifier.pagination.pageSize\n };\n\n return dataSourceModifier.columns.reduce((topicFilters, column) => {\n if (column.filterable) {\n if (column.filterPredicate) {\n topicFilters[column.path] = column.filterPredicate;\n }\n\n if (column.externalFilterQuery) {\n topicFilters[column.path] = column.filteringConfig.getFilter(column.externalFilterQuery);\n }\n }\n\n if (column.sortable && column.sortOrder) {\n const sortPath = column.sortingConfig?.pathSortingConfigs?.[0]?.path || column.path;\n topicFilters.sort = `${sortPath},${column.sortOrder}`;\n }\n\n return topicFilters;\n }, topicFilters);\n }\n}\n","import { AfterViewInit, Component, DestroyRef, EventEmitter, inject } from '@angular/core';\nimport { ActivatedRoute, RouterLink } from '@angular/router';\nimport {\n ActionBarItemComponent,\n AppStateService,\n BreadcrumbModule,\n BytesPipe,\n C8yTranslatePipe,\n Column,\n DataGridModule,\n DataSourceModifier,\n EmptyStateComponent,\n EmptyStateContextDirective,\n gettext,\n HeaderModule,\n IconDirective,\n LoadingComponent,\n Pagination,\n ServerSideDataCallback,\n ServerSideDataResult\n} from '@c8y/ngx-components';\nimport { AsyncPipe, DecimalPipe, NgClass, NgIf, PercentPipe } from '@angular/common';\nimport { MessagingNamespacesService } from '../../api/services/messaging-namespaces.service';\nimport { BacklogQuotaLimitPipe } from '../../utils/backlog-quota-limit.pipe';\nimport { UsageComponent } from '../shared/usage/usage.component';\nimport { TimeToLivePipe } from '../../utils/time-to-live.pipe';\nimport { NAMESPACE_PROPS } from '../../utils/namespace-props';\nimport { TranslateService } from '@ngx-translate/core';\nimport { TopicsDataGridService } from './topics-data-grid.service';\nimport { map, shareReplay, switchMap, tap } from 'rxjs/operators';\nimport { BehaviorSubject, combineLatest, firstValueFrom } from 'rxjs';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\n@Component({\n imports: [\n RouterLink,\n HeaderModule,\n DataGridModule,\n DecimalPipe,\n C8yTranslatePipe,\n BacklogQuotaLimitPipe,\n UsageComponent,\n BytesPipe,\n TimeToLivePipe,\n BreadcrumbModule,\n LoadingComponent,\n NgIf,\n ActionBarItemComponent,\n NgClass,\n IconDirective,\n PercentPipe,\n EmptyStateComponent,\n EmptyStateContextDirective,\n AsyncPipe\n ],\n selector: 'app-topic-list-view',\n standalone: true,\n templateUrl: './topic-list-view.component.html'\n})\nexport class TopicListViewComponent implements AfterViewInit {\n route = inject(ActivatedRoute);\n appState = inject(AppStateService);\n namespacesService = inject(MessagingNamespacesService);\n topicsDataGridService = inject(TopicsDataGridService);\n translateService = inject(TranslateService);\n destroyRef = inject(DestroyRef);\n\n loading$ = new BehaviorSubject<boolean>(false);\n refresh = new EventEmitter<void>();\n\n tenantId$ = this.appState.currentTenant.pipe(map(tenant => tenant.name));\n namespaceId$ = this.route.params.pipe(map(params => params['namespace'] as string));\n namespaceLabel$ = this.namespaceId$.pipe(\n map(namespaceId => this.translateService.instant(NAMESPACE_PROPS[namespaceId].label))\n );\n icon$ = this.namespaceId$.pipe(map(namespaceId => NAMESPACE_PROPS[namespaceId].icon));\n\n namespaceDetails$ = combineLatest([this.tenantId$, this.namespaceId$, this.refresh]).pipe(\n tap(() => this.loading$.next(true)),\n switchMap(([tenantId, namespaceId]) =>\n this.namespacesService.getNamespaceDetails(tenantId, namespaceId)\n ),\n tap(() => this.loading$.next(false)),\n shareReplay(1)\n );\n\n tableTitle = gettext('Topics');\n loadingItemsLabel = gettext('Loading topics...');\n loadMoreItemsLabel = gettext('Load more topics');\n noResultsMessage = gettext('No matching topics found.');\n noResultsSubtitle = gettext('Refine your search terms or check your spelling.');\n noDataMessage = gettext('No topics to display.');\n noDataSubtitle = gettext('Create new topics to monitor them here.');\n\n columns: Column[] = this.topicsDataGridService.getColumns();\n pagination: Pagination = {\n pageSize: 20,\n currentPage: 1\n };\n\n serverSideDataCallback: ServerSideDataCallback = this.onDataSourceModifier.bind(this);\n async onDataSourceModifier(\n dataSourceModifier: DataSourceModifier\n ): Promise<ServerSideDataResult> {\n return firstValueFrom(\n combineLatest([this.tenantId$, this.namespaceId$]).pipe(\n switchMap(([tenantId, namespaceId]) =>\n this.topicsDataGridService.getServerSideData(tenantId, namespaceId, dataSourceModifier)\n )\n )\n );\n }\n\n ngAfterViewInit() {\n this.route.params\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => this.refresh.emit());\n }\n}\n","<c8y-title>{{ namespaceLabel$ | async }}</c8y-title>\n\n<c8y-breadcrumb>\n <c8y-breadcrumb-item\n [icon]=\"'monitoring'\"\n [label]=\"'Monitoring' | translate\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n [label]=\"'Messaging service' | translate\"\n [path]=\"'/monitoring/messaging-service'\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item [label]=\"namespaceLabel$ | async\"></c8y-breadcrumb-item>\n</c8y-breadcrumb>\n\n<c8y-action-bar-item [placement]=\"'right'\">\n <a\n class=\"btn btn-link\"\n title=\"{{ 'Reload' | translate }}\"\n (click)=\"refresh.emit()\"\n >\n <i\n c8yIcon=\"refresh\"\n [ngClass]=\"{ 'icon-spin': loading$ | async }\"\n ></i>\n {{ 'Reload' | translate }}\n </a>\n</c8y-action-bar-item>\n\n<div class=\"card content-fullpage d-flex d-col\">\n <div class=\"bg-level-1 separator-bottom flex-no-shrink\">\n <div\n class=\"card-block\"\n style=\"min-height: 172px\"\n >\n <div\n class=\"col-md-4 m-b-24 col-xs-12 d-flex p-t-24 gap-16 text-default a-i-center a-s-stretch\"\n >\n <div class=\"text-center d-col\">\n <i\n class=\"m-b-8 icon-40 c8y-icon-duocolor\"\n [c8yIcon]=\"icon$ | async\"\n ></i>\n <span class=\"tag tag--info\">{{ 'Service' | translate }}</span>\n </div>\n <span class=\"h4 text-break-all\">{{ namespaceLabel$ | async }}</span>\n </div>\n <div class=\"col-md-4\">\n <fieldset class=\"c8y-fieldset c8y-fieldset--lg\">\n <legend>\n {{ 'Service usage/limits' | translate }}\n </legend>\n\n <ng-container *ngIf=\"loading$ | async; else serviceUsageLimits\">\n <c8y-loading></c8y-loading>\n </ng-container>\n\n <ng-template #serviceUsageLimits>\n <ng-container *ngIf=\"(namespaceDetails$ | async)?.namespace as namespace\">\n <ul class=\"list-unstyled small animated fadeIn\">\n <li class=\"p-t-4 p-b-4 d-flex separator-bottom text-nowrap\">\n <label class=\"small m-b-0 m-r-auto\">{{ 'Topics' | translate }}</label>\n <ng-container *ngIf=\"namespace?.topics?.limit !== 0\">\n <app-usage\n [count]=\"namespace?.topics?.count\"\n [limit]=\"namespace?.topics?.limit\"\n ></app-usage>\n <span class=\"m-l-16\">\n {{ namespace?.topics?.count | number }} /\n {{ namespace?.topics?.limit | backlogQuotaLimit }}\n </span>\n </ng-container>\n <ng-container *ngIf=\"namespace?.topics?.limit === 0\">\n <span class=\"m-l-16\">{{ namespace?.topics?.count | number }}</span>\n </ng-container>\n </li>\n\n <li class=\"p-t-4 p-b-4 d-flex separator-bottom text-nowrap\">\n <label class=\"small m-b-0 m-r-auto\">{{ 'Subscribers' | translate }}</label>\n <span class=\"m-l-16\">\n {{ namespace?.subscribers?.count | number }}\n </span>\n </li>\n\n <li class=\"p-t-4 p-b-4 d-flex text-nowrap\">\n <label class=\"small m-b-0 m-r-auto\">{{ 'Publishers' | translate }}</label>\n <span class=\"m-l-16\">\n {{ namespace?.publishers?.count | number }}\n </span>\n </li>\n </ul>\n </ng-container>\n </ng-template>\n </fieldset>\n </div>\n <div class=\"col-md-4\">\n <fieldset class=\"c8y-fieldset c8y-fieldset--lg\">\n <legend>{{ 'Service message backlog limits' | translate }}</legend>\n\n <ng-container *ngIf=\"loading$ | async; else serviceMessageBacklogLimits\">\n <c8y-loading></c8y-loading>\n </ng-container>\n\n <ng-template #serviceMessageBacklogLimits>\n <ng-container *ngIf=\"(namespaceDetails$ | async)?.policies as policies\">\n <ul class=\"list-unstyled small animated fadeIn\">\n <li class=\"p-t-4 p-b-4 d-flex separator-bottom text-nowrap\">\n <label class=\"small m-b-0 m-r-auto\">\n {{ 'Backlog quota (per topic)' | translate }}\n </label>\n <span\n title=\"{{\n policies?.backlogQuota?.limit > 0\n ? (policies.backlogQuota.limit | bytes: 0 : true)\n : '-'\n }}\"\n >\n {{\n policies?.backlogQuota?.limit > 0\n ? (policies.backlogQuota.limit | bytes: 0)\n : '-'\n }}\n </span>\n </li>\n\n <li class=\"p-t-4 p-b-4 d-flex text-nowrap\">\n <label class=\"small m-b-0 m-r-auto\">\n {{ 'Backlog time to live (TTL)' | translate }}\n </label>\n <span>{{ policies?.messageTTL | timeToLive }}</span>\n </li>\n </ul>\n </ng-container>\n </ng-template>\n </fieldset>\n </div>\n </div>\n </div>\n\n <c8y-data-grid\n class=\"d-contents\"\n [title]=\"tableTitle | translate\"\n [loadingItemsLabel]=\"loadingItemsLabel | translate\"\n [loadMoreItemsLabel]=\"loadMoreItemsLabel | translate\"\n [columns]=\"columns\"\n [pagination]=\"pagination\"\n [serverSideDataCallback]=\"serverSideDataCallback\"\n [refresh]=\"refresh\"\n [hideReload]=\"true\"\n >\n <c8y-ui-empty-state\n [icon]=\"stats?.size > 0 ? 'search' : 'day-view'\"\n [title]=\"stats?.size > 0 ? (noResultsMessage | translate) : (noDataMessage | translate)\"\n [subtitle]=\"stats?.size > 0 ? (noResultsSubtitle | translate) : (noDataSubtitle | translate)\"\n *emptyStateContext=\"let stats\"\n [horizontal]=\"stats?.size > 0\"\n ></c8y-ui-empty-state>\n\n <c8y-column name=\"name\">\n <ng-container *c8yCellRendererDef=\"let context\">\n <a\n title=\"{{ context.value }}\"\n [routerLink]=\"['topic', context.item.id]\"\n >\n {{ context.value }}\n </a>\n </ng-container>\n </c8y-column>\n\n <c8y-column name=\"msgRateIn\">\n <ng-container *c8yCellRendererDef=\"let context\">\n <span title=\"{{ context.value | number }}\">\n {{ context.value | number }}\n </span>\n </ng-container>\n </c8y-column>\n\n <c8y-column name=\"msgRateOut\">\n <ng-container *c8yCellRendererDef=\"let context\">\n <span title=\"{{ context.value | number }}\">\n {{ context.value | number }}\n </span>\n </ng-container>\n </c8y-column>\n\n <c8y-column name=\"subscribers\">\n <ng-container *c8yCellRendererDef=\"let context\">\n <a\n title=\"{{ context.value | number }}\"\n [routerLink]=\"['topic', context.item.id, 'subscribers']\"\n >\n {{ context.value | number }}\n </a>\n </ng-container>\n </c8y-column>\n\n <c8y-column name=\"backlogSize\">\n <ng-container *c8yCellRendererDef=\"let context\">\n <span title=\"{{ context.value | bytes: 2 : true }}\">\n {{ context.value | bytes: 2 }}\n </span>\n </ng-container>\n </c8y-column>\n\n <c8y-column name=\"backlogUsagePercentage\">\n <ng-container *c8yCellRendererDef=\"let context\">\n <span title=\"{{ context.value / 100 | percent: '1.0-2' }}\">\n {{ context.value / 100 | percent: '1.0-2' }}\n </span>\n </ng-container>\n </c8y-column>\n </c8y-data-grid>\n</div>\n","/**\n * If the topic is persistent or not. If false, the topic is not saved and will be deleted if there are no clients.\n */\nexport enum MessagingTopicType {\n Persistent = 'persistent',\n NonPersistent = 'non-persistent'\n}\n","import { Injectable } from '@angular/core';\nimport { FetchClient, Paging, Service } from '@c8y/client';\nimport { MessagingSubscriberList } from '../model/subscriberList';\nimport { MessagingSubscriber } from '../model/subscriber';\nimport { MessagingTopic } from '../model/topic';\nimport { MessagingSubscriberFilters } from '../model/subscriberFilters';\nimport { MessagingSubscriberToDelete } from '../model/subscriberToDelete';\nimport { MessagingTopicType } from '../model/topicType';\nimport { omit } from 'lodash-es';\n\n@Injectable({ providedIn: 'root' })\nexport class MessagingSubscribersService extends Service<MessagingSubscriber> {\n protected baseUrl = '/service/messaging-management';\n protected listUrl = 'tenants';\n\n constructor(client: FetchClient) {\n super(client);\n }\n\n /**\n * Get the list of subscribers for a topic.\n *\n * @param filter Subscriber filters.\n */\n async list(filter: MessagingSubscriberFilters) {\n const headers = { accept: 'application/json' };\n const params = omit(filter, ['tenant', 'namespace', 'topic', 'type']);\n const url = this.getBaseUrl(filter);\n const res = await this.fetch(url, this.changeFetchOptions({ headers, params }, url));\n const subscriberList = (await res.json()) as MessagingSubscriberList;\n const data = subscriberList.subscribers;\n const paging = this.getPaging(subscriberList, filter);\n return { res, data, paging };\n }\n\n async delete(subscriberToDelete: MessagingSubscriberToDelete) {\n const method = 'DELETE';\n const url = this.getBaseUrl(subscriberToDelete) + `/${subscriberToDelete.name}`;\n const res = await this.fetch(url, this.changeFetchOptions({ method }, url));\n return { res, data: null };\n }\n\n protected getPaging(json: MessagingSubscriberList, filter: object): Paging<MessagingSubscriber> {\n if (json.pageStatistics) {\n const { currentPage, totalPages } = json.pageStatistics;\n const statistics = {\n ...json.pageStatistics,\n nextPage: currentPage < totalPages ? currentPage + 1 : null,\n prevPage: currentPage > 1 ? currentPage - 1 : null\n };\n return new Paging<MessagingTopic>(this, statistics, filter);\n }\n return null;\n }\n\n private getBaseUrl({\n tenant,\n namespace,\n topic,\n type\n }: {\n tenant: string;\n namespace: string;\n topic: string;\n type: MessagingTopicType;\n }) {\n return `/${this.listUrl}/${tenant}/namespaces/${namespace}/topics/${topic}/types/${type}/subscribers`;\n }\n}\n","import { inject, Injectable } from '@angular/core';\nimport {\n AlertService,\n BaseColumn,\n Column,\n DataSourceModifier,\n gettext,\n ModalService,\n ServerSideDataResult,\n Status\n} from '@c8y/ngx-components';\nimport { MessagingSubscribersService } from '../../../api/services/messaging-subscribers.service';\nimport { MessagingTopicType } from '../../../api/model/topicType';\nimport { MessagingSubscriberFilters } from '../../../api/model/subscriberFilters';\nimport { MessagingSubscriber } from '../../../api/model/subscriber';\nimport { TranslateService } from '@ngx-translate/core';\nimport { MessagingSubscriberToDelete } from '../../../api/model/subscriberToDelete';\n\n@Injectable({ providedIn: 'root' })\nexport class TopicSubscribersDataGridService {\n protected subscribersService = inject(MessagingSubscribersService);\n private alertService = inject(AlertService);\n private modalService = inject(ModalService);\n private translateService = inject(TranslateService);\n\n getColumns(): Column[] {\n return [\n this.createColumn({\n name: 'name',\n header: gettext('Name'),\n path: 'name',\n filterable: true,\n filteringConfig: {\n fields: [\n {\n key: 'name',\n type: 'input',\n props: {\n label: gettext('Filter subscribers by partial name'),\n placeholder: 'mySubscriber',\n required: true\n }\n }\n ],\n getFilter(model: { name: string }): string {\n return model.name;\n }\n }\n }),\n this.createColumn({\n name: 'activeClients',\n header: gettext('Connected clients'),\n path: 'activeClients'\n }),\n this.createColumn({\n name: 'messageAckRate',\n header: gettext('Acknowledgment rate (msg/s)'),\n path: 'messageAckRate'\n }),\n this.createColumn({\n name: 'lastAcknowledgeDate',\n header: gettext('Last acknowledged'),\n path: 'lastAcknowledgeDate',\n sortingConfig: {\n pathSortingConfigs: [\n {\n path: 'lastAcknowledgeTimestamp'\n }\n ]\n }\n }),\n this.createColumn({\n name: 'unackMsgBacklog',\n header: gettext('Unacknowledged messages'),\n path: 'unackMsgBacklog'\n }),\n this.createColumn({\n name: 'backlogUsagePercentage',\n header: gettext('Used backlog'),\n path: 'backlogUsagePercentage',\n sortOrder: 'desc'\n })\n ];\n }\n\n async getServerSideData(\n tenantId: string,\n namespaceId: string,\n topicId: string,\n topicType: MessagingTopicType,\n dataSourceModifier: DataSourceModifier\n ): Promise<ServerSideDataResult> {\n const subscriberFilters = this.getSubscriberFilters(\n tenantId,\n namespaceId,\n topicId,\n topicType,\n dataSourceModifier\n );\n const { res, data, paging } = await this.subscribersService.list(subscriberFilters);\n const filteredSize = paging.totalElements;\n const size = (\n await this.subscribersService.list({\n ...subscriberFilters,\n currentPage: 1,\n pageSize: 1\n })\n ).paging.totalPages;\n\n return {\n res,\n data: data.map(subscriber => ({\n ...subscriber,\n lastAcknowledgeDate: this.getLastAcknowledgeDate(subscriber),\n id: subscriber.name\n })),\n paging,\n size,\n filteredSize\n };\n }\n\n async unsubscribeSubscriber(\n subscriber: MessagingSubscriberToDelete,\n refreshCallback: () => void\n ): Promise<void> {\n const confirmationTitle = gettext('Unsubscribe \"{{ subscriberName }}\"?');\n const confirmationMessage =\n subscriber.activeClients > 0\n ? gettext(\n 'You are about to unsubscribe \"{{ subscriberName }}\" which has active clients. Do you want to proceed?'\n )\n : gettext('You are about to unsubscribe \"{{ subscriberName }}\". Do you want to proceed?');\n try {\n const subscriberName = subscriber.name;\n await this.modalService.confirm(\n this.translateService.instant(confirmationTitle, {\n subscriberName\n }),\n this.translateService.instant(confirmationMessage, {\n subscriberName\n }),\n Status.DANGER,\n {\n ok: gettext('Unsubscribe')\n }\n );\n } catch (e) {\n // cancel\n return;\n }\n\n try {\n await this.subscribersService.delete(subscriber);\n this.alertService.success(\n this.translateService.instant(gettext('Subscriber \"{{ subscriberName }}\" unsubscribed.'), {\n subscriberName: subscriber.name\n })\n );\n } catch (error) {\n this.alertService.addServerFailure(error);\n }\n refreshCallback();\n }\n\n async bulkUnsubscribeSubscribers(\n subscribers: MessagingSubscriberToDelete[],\n refreshCallback: () => void\n ): Promise<void> {\n const anySubscriberHasActiveClients = subscribers.some(\n subscriber => subscriber.activeClients > 0\n );\n\n const confirmationTitle = gettext('Unsubscribe {{ numberOfSubscribers }} subscribers?');\n const confirmationMessage = anySubscriberHasActiveClients\n ? gettext(\n 'You are about to unsubscribe {{ numberOfSubscribers }} subscribers. Some of them have active clients. Do you want to proceed?'\n )\n : gettext(\n 'You are about to unsubscribe {{ numberOfSubscribers }} subscribers. Do you want to proceed?'\n );\n\n try {\n const numberOfSubscribers = subscribers.length;\n await this.modalService.confirm(\n this.translateService.instant(confirmationTitle, {\n numberOfSubscribers\n }),\n this.translateService.instant(confirmationMessage, {\n numberOfSubscribers\n }),\n Status.DANGER,\n {\n ok: gettext('Unsubscribe')\n }\n );\n } catch (e) {\n // cancel\n return;\n }\n\n const results = await Promise.allSettled(\n subscribers.map(sub =>\n this.subscribersService\n .delete(sub)\n .then(() => ({\n success: true,\n name: sub.name\n }))\n .catch(error => ({\n success: false,\n name: sub.name,\n error\n }))\n )\n );\n\n const failed = results\n .filter(result => result.status === 'fulfilled' && result.value.success === false)\n .map(result => (result as PromiseFulfilledResult<any>).value);\n\n const succeeded = results\n .filter(result => result.status === 'fulfilled' && result.value.success === true)\n .map(result => (result as PromiseFulfilledResult<any>).value);\n\n if (failed.length === 0) {\n this.alertService.success(\n this.translateService.instant(\n gettext('{{ numberOfSubscribers }} subscribers unsubscribed.'),\n { numberOfSubscribers: succeeded.length }\n )\n );\n } else if (succeeded.length === 0) {\n const errorMessage = this.translateService.instant(\n gettext('Failed to unsubscribe {{ numberOfSubscribers }} subscribers.'),\n {\n numberOfSubscribers: failed.length\n }\n );\n const details = `${failed.map(f => `'${f.name}': ${f.error.data.message}`).join('\\n')}`;\n this.alertService.danger(errorMessage, details);\n } else {\n // Some succeeded, some failed\n const nonUnsubscribedSubscribers = failed.map(s => s.name).join(', ');\n const message = this.translateService.instant(\n gettext(\n `Successfully unsubscribed {{ count }} subscribers.<br/>Failed to unsubscribe: {{ nonUnsubscribedSubscribers }}.`\n ),\n { count: succeeded.length, nonUnsubscribedSubscribers }\n );\n const details = `${failed.map(f => `'${f.name}': ${f.error.data.message}`).join('\\n')}`;\n this.alertService.warning(message, details);\n }\n\n refreshCallback();\n }\n\n private createColumn(columnProps: Partial<BaseColumn>): BaseColumn {\n const column = new BaseColumn();\n Object.assign(column, columnProps);\n return column;\n }\n\n private getSubscriberFilters(\n tenantId: string,\n namespaceId: string,\n topicId: string,\n topicType: MessagingTopicType,\n dataSourceModifier: DataSourceModifier\n ): MessagingSubscriberFilters {\n const subscriberFilters: MessagingSubscriberFilters = {\n tenant: tenantId,\n namespace: namespaceId,\n topic: topicId,\n type: topicType,\n currentPage: dataSourceModifier.pagination.currentPage,\n pageSize: dataSourceModifier.pagination.pageSize\n };\n\n return dataSourceModifier.columns.reduce((subscriberFilters, column) => {\n if (column.filterable) {\n if (column.filterPredicate) {\n subscriberFilters[column.path] = column.filterPredicate;\n }\n\n if (column.externalFilterQuery) {\n subscriberFilters[column.path] = column.filteringConfig.getFilter(\n column.externalFilterQuery\n );\n }\n }\n\n if (column.sortable && column.sortOrder) {\n const sortPath = column.sortingConfig?.pathSortingConfigs?.[0]?.path || column.path;\n subscriberFilters.sort = `${sortPath},${column.sortOrder}`;\n }\n\n return subscriberFilters;\n }, subscriberFilters);\n }\n\n private getLastAcknowledgeDate(subscriber: MessagingSubscriber): Date {\n const lastAcknowledgeDate = new Date(subscriber.lastAcknowledgeTimestamp);\n return lastAcknowledgeDate.getTime() > 0 ? lastAcknowledgeDate : null;\n }\n}\n","import {\n AfterViewInit,\n Component,\n DestroyRef,\n EventEmitter,\n inject,\n ViewChild\n} from '@angular/core';\nimport {\n ActionBarItemComponent,\n ActionControl,\n AppStateService,\n BreadcrumbModule,\n BulkActionControl,\n BytesPipe,\n C8yTranslateDirective,\n C8yTranslatePipe,\n Column,\n DataGridComponent,\n DataGridModule,\n DataSourceModifier,\n EmptyStateComponent,\n EmptyStateContextDirective,\n gettext,\n HeaderModule,\n IconDirective,\n LoadingComponent,\n Pagination,\n Permissions,\n RelativeTimePipe,\n ServerSideDataCallback,\n ServerSideDataResult\n} from '@c8y/ngx-components';\nimport { ActivatedRoute } from '@angular/router';\nimport { CommonModule, DecimalPipe } from '@angular/common';\nimport { MessagingTopicType } from '../../../api/model/topicType';\nimport { MessagingTopicsService } from '../../../api/services/messaging-topics.service';\nimport { MessagingNamespacesService } from '../../../api/services/messaging-namespaces.service';\nimport { NAMESPACE_PROPS } from '../../../utils/namespace-props';\nimport { TranslateService } from '@ngx-translate/core';\nimport { TopicSubscribersDataGridService } from './topic-subscribers-data-grid.service';\nimport { BehaviorSubject, combineLatest, firstValueFrom } from 'rxjs';\nimport { map, shareReplay, switchMap, tap } from 'rxjs/operators';\nimport { UsageComponent } from '../../shared/usage/usage.component';\nimport { MessagingSubscriber } from '../../../api/model/subscriber';\nimport { MessagingSubscriberToDelete } from '../../../api/model/subscriberToDelete';\n\n@Component({\n selector: 'app-topic-subscribers-view',\n standalone: true,\n imports: [\n DataGridModule,\n DecimalPipe,\n HeaderModule,\n C8yTranslateDirective,\n RelativeTimePipe,\n C8yTranslatePipe,\n CommonModule,\n BytesPipe,\n BreadcrumbModule,\n UsageComponent,\n ActionBarItemComponent,\n IconDirective,\n EmptyStateComponent,\n EmptyStateContextDirective,\n LoadingComponent\n ],\n templateUrl: './topic-subscribers-view.component.html'\n})\nexport class TopicSubscribersViewComponent implements AfterViewInit {\n route = inject(ActivatedRoute);\n appState = inject(AppStateService);\n namespacesService = inject(MessagingNamespacesService);\n topicsService = inject(MessagingTopicsService);\n topicSubscribersDataGridService = inject(TopicSubscribersDataGridService);\n translateService = inject(TranslateService);\n permissions = inject(Permissions);\n destroyRef = inject(DestroyRef);\n\n loading$ = new BehaviorSubject<boolean>(false);\n refresh = new EventEmitter<void>();\n\n tenantId$ = this.appState.currentTenant.pipe(map(tenant => tenant.name));\n namespaceId$ = this.route.params.pipe(map(params => params['namespace'] as string));\n namespaceLabel$ = this.namespaceId$.pipe(\n map(namespaceId => this.translateService.instant(NAMESPACE_PROPS[namespaceId].label))\n );\n topicId$ = this.route.params.pipe(map(params => params['topic'] as string));\n overview$ = combineLatest([this.tenantId$, this.namespaceId$, this.topicId$, this.refresh]).pipe(\n tap(() => this.loading$.next(true)),\n switchMap(async ([tenantId, namespaceId, topicId]) => ({\n topic: (\n await this.topicsService.detail({\n tenant: tenantId,\n namespace: namespaceId,\n topic: topicId,\n type: MessagingTopicType.Persistent\n })\n ).data,\n policies: await this.namespacesService.getNamespacePolicies(tenantId, namespaceId)\n })),\n tap(() => this.loading$.next(false)),\n shareReplay(1)\n );\n topicName$ = this.overview$.pipe(map(overview => overview.topic.name));\n\n tableTitle = gettext('Subscribers');\n loadingItemsLabel = gettext('Loading subscribers...');\n loadMoreItemsLabel = gettext('Load more subscribers');\n noResultsMessage = gettext('No matching subscribers found.');\n noResultsSubtitle = gettext('Refine your search terms or check your spelling.');\n noDataMessage = gettext('No subscribers to display.');\n noDataSubtitle = gettext('Create new subscribers to monitor them here.');\n\n columns: Column[] = this.topicSubscribersDataGridService.getColumns();\n pagination: Pagination = {\n pageSize: 20,\n currentPage: 1\n };\n\n selectable = true;\n actionControls: ActionControl[] = [\n {\n type: 'unsubscribeSubscriber',\n icon: 'unsubscribe',\n text: gettext('Unsubscribe'),\n callback: (subscriber: MessagingSubscriber) => this.unsubscribeSubscriber(subscriber),\n showIf: () => this.permissions.hasRole(Permissions.ROLE_TENANT_MANAGEMENT_ADMIN)\n }\n ];\n bulkActionControls: BulkActionControl[] = [\n {\n type: 'unsubscribeSubscriber',\n icon: 'unsubscribe',\n text: gettext('Unsubscribe'),\n callback: (subscribersNames: string[]) => this.bulkUnsubscribeSubscribers(subscribersNames),\n showIf: () => this.permissions.hasRole(Permissions.ROLE_TENANT_MANAGEMENT_ADMIN)\n }\n ];\n @ViewChild(DataGridComponent, { static: true }) dataGrid: DataGridComponent;\n\n serverSideDataCallback: ServerSideDataCallback = this.onDataSourceModifier.bind(this);\n async onDataSourceModifier(\n dataSourceModifier: DataSourceModifier\n ): Promise<ServerSideDataResult> {\n return firstValueFrom(\n combineLatest([this.tenantId$, this.namespaceId$, this.topicId$]).pipe(\n switchMap(([tenantId, namespaceId, topicId]) =>\n this.topicSubscribersDataGridService.getServerSideData(\n tenantId,\n namespaceId,\n topicId,\n MessagingTopicType.Persistent,\n dataSourceModifier\n )\n )\n )\n );\n }\n\n ngAfterViewInit() {\n this.refresh.emit();\n }\n\n async unsubscribeSubscriber(subscriber: MessagingSubscriber) {\n const tenant = await firstValueFrom(this.tenantId$);\n const namespace = await firstValueFrom(this.namespaceId$);\n const topic = await firstValueFrom(this.topicId$);\n this.topicSubscribersDataGridService.unsubscribeSubscriber(\n {\n ...subscriber,\n tenant,\n namespace,\n topic,\n type: MessagingTopicType.Persistent\n },\n () => this.refresh.emit()\n );\n }\n\n async bulkUnsubscribeSubscribers(subscribersNames: string[]): Promise<void> {\n const tenant = await firstValueFrom(this.tenantId$);\n const namespace = await firstValueFrom(this.namespaceId$);\n const topic = await firstValueFrom(this.topicId$);\n const allSubscribers: MessagingSubscriber[] = await firstValueFrom(\n this.dataGrid.dataSource.data$\n );\n\n const subscribers: MessagingSubscriberToDelete[] = subscribersNames.map(subscriberName => {\n const subscriber = allSubscribers.find(subscriber => subscriber.name === subscriberName);\n return {\n ...subscriber,\n tenant,\n namespace,\n topic,\n type: MessagingTopicType.Persistent\n };\n });\n\n this.topicSubscribersDataGridService.bulkUnsubscribeSubscribers(subscribers, () =>\n this.refresh.emit()\n );\n }\n}\n","<c8y-title>{{ topicName$ | async }}</c8y-title>\n\n<c8y-breadcrumb>\n <c8y-breadcrumb-item\n [icon]=\"'monitoring'\"\n [label]=\"'Monitoring' | translate\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n [label]=\"'Messaging service' | translate\"\n [path]=\"'/monitoring/messaging-service'\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n [label]=\"namespaceLabel$ | async\"\n [path]=\"'/monitoring/messaging-service/namespace/' + (namespaceId$ | async)\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item [label]=\"topicName$ | async\"></c8y-breadcrumb-item>\n</c8y-breadcrumb>\n\n<c8y-action-bar-item [placement]=\"'right'\">\n <a\n class=\"btn btn-link\"\n title=\"{{ 'Reload' | translate }}\"\n (click)=\"refresh.emit()\"\n >\n <i\n c8yIcon=\"refresh\"\n [ngClass]=\"{ 'icon-spin': loading$ | async }\"\n ></i>\n {{ 'Reload' | translate }}\n </a>\n</c8y-action-bar-item>\n\n<div class=\"card content-fullpage d-flex d-col\">\n <div class=\"bg-level-1 separator-bottom flex-no-shrink\">\n <div class=\"card-block\">\n <div\n class=\"col-md-4 m-b-24 col-xs-12 d-flex p-t-24 gap-16 text-default a-i-center a-s-stretch\"\n >\n <div class=\"text-center d-col\">\n <i\n class=\"m-b-8 icon-40 c8y-icon-duocolor\"\n [c8yIcon]=\"'day-view'\"\n ></i>\n <span class=\"tag tag--default\">{{ 'Topic' | translate }}</span>\n </div>\n <span class=\"h4\">{{ topicName$ | async }}</span>\n </div>\n <div class=\"col-md-4\">\n <fieldset class=\"c8y-fieldset c8y-fieldset--lg\">\n <legend translate>Topic usage</legend>\n\n <ng-container *ngIf=\"loading$ | async; else topicSummary\">\n <c8y-loading></c8y-loading>\n </ng-container>\n\n <ng-template #topicSummary>\n <ng-container *ngIf=\"overview$ | async as overview\">\n <ul class=\"list-unstyled small animated fadeIn\">\n <li class=\"p-t-4 p-b-4 d-flex separator-bottom text-nowrap\">\n <label class=\"small m-b-0 m-r-auto\">{{ 'Active subscribers' | translate }}</label>\n <span class=\"m-l-16\">{{ overview.topic.activeSubscribers | number }}</span>\n </li>\n\n <li class=\"p-t-4 p-b-4 d-flex separator-bottom text-nowrap\">\n <label class=\"small m-b-0 m-r-auto\">{{ 'Total subscribers' | translate }}</label>\n <span class=\"m-l-16\">{{ overview.topic.subscribers | number }}</span>\n </li>\n\n <li class=\"p-t-4 p-b-4 d-flex separator-bottom text-nowrap\">\n <label class=\"small m-b-0 m-r-auto\">\n {{ 'Total unacknowledged messages' | translate }}\n </label>\n <span class=\"m-l-16\">{{ overview.topic.unackMsgBacklog | number }}</span>\n </li>\n\n <li class=\"p-t-4 p-b-4 d-flex separator-bottom text-nowrap\">\n <label class=\"small m-b-0 m-r-auto\">\n {{ 'Message rate in' | translate }}\n </label>\n <span\n class=\"m-l-16\"\n ngNonBindable\n translate\n [translateParams]=\"{\n messagesPerSecond: overview.topic.msgRateIn | number\n }\"\n >\n {{ messagesPerSecond }} msg/s\n </span>\n </li>\n\n <li class=\"p-t-4 p-b-4 d-flex text-nowrap\">\n <label class=\"small m-b-0 m-r-auto\">\n {{ 'Message rate out' | translate }}\n </label>\n <span\n class=\"m-l-16\"\n ngNonBindable\n translate\n [translateParams]=\"{\n messagesPerSecond: overview.topic.msgRateOut | number\n }\"\n >\n {{ messagesPerSecond }} msg/s\n </span>\n </li>\n </ul>\n </ng-container>\n </ng-template>\n </fieldset>\n </div>\n\n <div class=\"col-md-4\">\n <fieldset class=\"c8y-fieldset c8y-fieldset--lg\">\n <legend translate>Topic message backlog</legend>\n\n <ng-container *ngIf=\"loading$ | async; else topicBacklog\">\n <c8y-loading></c8y-loading>\n </ng-container>\n\n <ng-template #topicBacklog>\n <ng-container *ngIf=\"overview$ | async as overview\">\n <ul class=\"list-unstyled small animated fadeIn\">\n <li class=\"p-t-4 p-b-4 d-flex separator-bottom text-nowrap\">\n <label\n class=\"small m-b-0 m-r-auto\"\n translate\n >\n Backlog usage\n </label>\n <app-usage [percentage]=\"overview.topic.backlogUsagePercentage\"></app-usage>\n <span class=\"m-l-16\">{{ overview.topic.backlogSize | bytes }}</span>\n </li>\n\n <li class=\"p-t-4 p-b-4 d-flex text-nowrap\">\n <label\n class=\"small m-b-0 m-r-auto\"\n translate\n >\n Backlog quota\n </label>\n <span class=\"m-l-16\">\n {{\n overview.policies.backlogQuota?.limit > 0\n ? (overview.policies.backlogQuota?.limit | bytes)\n : '-'\n }}\n </span>\n </li>\n </ul>\n </ng-container>\n </ng-template>\n </fieldset>\n </div>\n </div>\n </div>\n <c8y-data-grid\n class=\"content-fullpage d-flex d-col border-top border-bottom\"\n [title]=\"tableTitle | translate\"\n [loadingItemsLabel]=\"loadingItemsLabel | translate\"\n [loadMoreItemsLabel]=\"loadMoreItemsLabel | translate\"\n [columns]=\"columns\"\n [pagination]=\"pagination\"\n [serverSideDataCallback]=\"serverSideDataCallback\"\n [refresh]=\"refresh\"\n [hideReload]=\"true\"\n [selectable]=\"selectable\"\n [actionControls]=\"actionControls\"\n [bulkActionControls]=\"bulkActionControls\"\n >\n <c8y-ui-empty-state\n [icon]=\"stats?.size > 0 ? 'search' : 'input'\"\n [title]=\"stats?.size > 0 ? (noResultsMessage | translate) : (noDataMessage | translate)\"\n [subtitle]=\"stats?.size > 0 ? (noResultsSubtitle | translate) : (noDataSubtitle | translate)\"\n *emptyStateContext=\"let stats\"\n [horizontal]=\"stats?.size > 0\"\n ></c8y-ui-empty-state>\n\n <c8y-column name=\"name\">\n <ng-container *c8yCellRendererDef=\"let context\">\n <span title=\"{{ context.value }}\">\n {{ context.value }}\n </span>\n </ng-container>\n </c8y-column>\n\n <c8y-column name=\"activeClients\">\n <ng-container *c8yCellRendererDef=\"let context\">\n <span title=\"{{ context.value | number }}\">\n {{ context.value | number }}\n </span>\n </ng-container>\n </c8y-column>\n\n <c8y-column name=\"messageAckRate\">\n <ng-container *c8yCellRendererDef=\"let context\">\n <span title=\"{{ context.value | number }}\">\n {{ context.value | number }}\n </span>\n </ng-container>\n </c8y-column>\n\n <c8y-column name=\"lastAcknowledgeDate\">\n <ng-container *c8yCellRendererDef=\"let context\">\n <span\n title=\"{{ context.value }}\"\n *ngIf=\"context.value; else noLastAcknwoldegeDate\"\n >\n {{ context.value | relativeTime }}\n </span>\n <ng-template #noLastAcknwoldegeDate>–</ng-template>\n </ng-container>\n </c8y-column>\n\n <c8y-column name=\"unackMsgBacklog\">\n <ng-container *c8yCellRendererDef=\"let context\">\n <span title=\"{{ context.value | number }}\">\n {{ context.value | number }}\n </span>\n </ng-container>\n </c8y-column>\n\n <c8y-column name=\"backlogUsagePercentage\">\n <ng-container *c8yCellRendererDef=\"let context\">\n <span title=\"{{ context.value / 100 | percent: '1.0-2' }}\">\n {{ context.value / 100 | percent: '1.0-2' }}\n </span>\n </ng-container>\n </c8y-column>\n </c8y-data-grid>\n</div>\n","import { Injectable } from '@angular/core';\nimport { gettext, TabFactory } from '@c8y/ngx-components';\nimport { Router } from '@angular/router';\nimport { basePath } from '../constants';\n\n@Injectable()\nexport class TopicDetailsTabFactory implements TabFactory {\n constructor(public router: Router) {}\n\n get() {\n const pattern = /\\/namespace\\/(.+)\\/topic\\/(.+)\\/subscribers$/;\n const matches = this.router.url.match(pattern);\n\n if (matches) {\n const namespace = matches[1];\n const topic = matches[2];\n return [\n {\n path: basePath + `/namespace/${namespace}/topic/${topic}/subscribers`,\n priority: 500,\n label: gettext('Subscribers')\n }\n ];\n }\n return [];\n }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { ExtensionFactory, PreviewFeature } from '@c8y/ngx-components';\nimport { ApplicationService } from '@c8y/client';\nimport {\n MESSAGING_MANAGEMENT_FEATURE_KEY,\n MESSAGING_MANAGEMENT_MICROSERVICE_NAME\n} from './constants';\n\n@Injectable({ providedIn: 'root' })\nexport class MessagingManagementPreviewFactory implements ExtensionFactory<PreviewFeature> {\n private readonly applicationService = inject(ApplicationService);\n\n async get() {\n const microserviceSubscribed = await this.applicationService\n .isAvailable(MESSAGING_MANAGEMENT_MICROSERVICE_NAME)\n .then(({ data: subscribed }) => subscribed)\n .catch(() => false);\n\n if (!microserviceSubscribed) {\n return null;\n }\n\n return {\n key: MESSAGING_MANAGEMENT_FEATURE_KEY,\n label: 'Messaging service - monitoring & management',\n description: () =>\n import('@c8y/style/markdown-files/messaging-management-preview.md').then(m => m.default),\n settings: {\n reload: true\n }\n };\n }\n}\n","import { NgModule } from '@angular/core';\nimport { hookNavigator, hookPreview, hookRoute, hookTab } from '@c8y/ngx-components';\nimport { MessagingNavigatorNodeFactory } from './navigator/messaging-navigator-factory';\nimport { NamespaceListComponent } from './messaging/namespace-list/namespace-list.component';\nimport { TopicListViewComponent } from './messaging/topic/topic-list-view.component';\nimport { TopicSubscribersViewComponent } from './messaging/topic/topic-subscribers-view/topic-subscribers-view.component';\nimport { TopicDetailsTabFactory } from './navigator/topic-details-tab.factory';\nimport { basePath } from './constants';\nimport { MessagingManagementGuard } from './messaging-management.guard';\nimport { MessagingManagementPreviewFactory } from './messaging-management-preview.factory';\n\n@NgModule({\n providers: [\n hookRoute([\n {\n path: basePath,\n component: NamespaceListComponent,\n canActivate: [MessagingManagementGuard]\n },\n {\n path: basePath + '/namespace/:namespace',\n component: TopicListViewComponent,\n canActivate: [MessagingManagementGuard]\n },\n {\n path: basePath + '/namespace/:namespace/topic/:topic',\n redirectTo: basePath + '/namespace/:namespace/topic/:topic/subscribers',\n pathMatch: 'full'\n },\n {\n path: basePath + '/namespace/:namespace/topic/:topic/subscribers',\n component: TopicSubscribersViewComponent,\n canActivate: [MessagingManagementGuard]\n }\n ]),\n hookTab(TopicDetailsTabFactory),\n hookNavigator(MessagingNavigatorNodeFactory),\n hookPreview(MessagingManagementPreviewFactory)\n ]\n})\nexport class MessagingManagementModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i2"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"c8y-ngx-components-messaging-management.mjs","sources":["../../messaging-management/utils/namespace-props.ts","../../messaging-management/api/services/messaging-namespaces.service.ts","../../messaging-management/constants.ts","../../messaging-management/messaging-management.guard.ts","../../messaging-management/navigator/messaging-navigator-factory.ts","../../messaging-management/utils/backlog-quota-limit.pipe.ts","../../messaging-management/messaging/shared/usage/usage.component.ts","../../messaging-management/messaging/shared/usage/usage.component.html","../../messaging-management/messaging/namespace-list/namespace-item/namespace-item-card/namespace-item-card.component.ts","../../messaging-management/messaging/namespace-list/namespace-item/namespace-item-card/namespace-item-card.component.html","../../messaging-management/messaging/namespace-list/namespace-item/namespace-item.component.ts","../../messaging-management/messaging/namespace-list/namespace-item/namespace-item.component.html","../../messaging-management/messaging/namespace-list/namespace-list.component.ts","../../messaging-management/messaging/namespace-list/namespace-list.component.html","../../messaging-management/utils/time-to-live.pipe.ts","../../messaging-management/api/services/messaging-topics.service.ts","../../messaging-management/messaging/topic/topics-data-grid.service.ts","../../messaging-management/messaging/topic/topic-list-view.component.ts","../../messaging-management/messaging/topic/topic-list-view.component.html","../../messaging-management/api/model/topicType.ts","../../messaging-management/api/services/messaging-subscribers.service.ts","../../messaging-management/messaging/topic/topic-subscribers-view/topic-subscribers-data-grid.service.ts","../../messaging-management/messaging/topic/topic-subscribers-view/topic-subscribers-view.component.ts","../../messaging-management/messaging/topic/topic-subscribers-view/topic-subscribers-view.component.html","../../messaging-management/navigator/topic-details-tab.factory.ts","../../messaging-management/messaging-management-preview.factory.ts","../../messaging-management/messaging-management.module.ts","../../messaging-management/c8y-ngx-components-messaging-management.ts"],"sourcesContent":["import { gettext } from '@c8y/ngx-components';\n\ntype NamespaceProps = {\n icon: string;\n label: string;\n};\n\n/**\n * Currently known namespaces and their properties.\n */\nexport const NAMESPACE_PROPS: Record<string, NamespaceProps> = {\n mqtt: {\n icon: 'c8y-device-protocols',\n label: gettext('MQTT Service')\n },\n 'data-broker-fwd': {\n icon: 'c8y-data-broker',\n label: gettext('Data Broker')\n },\n relnotif: {\n icon: 'c8y-notification',\n label: gettext('Notifications 2.0')\n },\n 'streaming-analytics': {\n icon: 'c8y-streaming-analytics',\n label: gettext('Streaming Analytics')\n }\n};\n","import { inject, Injectable } from '@angular/core';\nimport { MessagingNamespaceList } from '../model/namespaceList';\nimport { MessagingNamespacePolicies } from '../model/namespacePolicies';\nimport { MessagingNamespace } from '../model/namespace';\nimport { FetchClient, Service } from '@c8y/client';\nimport { MessagingNamespaceDetails } from '../model/namespaceDetails';\nimport { AlertService } from '@c8y/ngx-components';\n\n@Injectable({ providedIn: 'root' })\nexport class MessagingNamespacesService extends Service<any> {\n protected baseUrl = '/service/messaging-management';\n protected listUrl = 'tenants';\n\n private alertService = inject(AlertService);\n\n constructor(client: FetchClient) {\n super(client);\n }\n\n /**\n * Get namespace list for a tenant\n *\n * @param tenant Tenant id\n * @return Namespaces list\n */\n async getNamespaces(tenant: string): Promise<MessagingNamespaceList> {\n const namespacesUrl = `/${this.listUrl}/${tenant}/namespaces`;\n return this.fetch(namespacesUrl).then(res => res.json());\n }\n\n /**\n * Get namespace.\n *\n * @param tenant Tenant ID.\n * @param namespace Name of namespace.\n * @return Namespace.\n */\n async getNamespace(tenant: string, namespace: string): Promise<MessagingNamespace> {\n const namespaceUrl = `/${this.listUrl}/${tenant}/namespaces/${namespace}`;\n return this.fetch(namespaceUrl).then(res => res.json());\n }\n\n /**\n * Get namespace policies\n *\n * @param tenant Tenant id\n * @param namespace Name of namespace\n * @return Namespaces policies\n */\n async getNamespacePolicies(\n tenant: string,\n namespace: string\n ): Promise<MessagingNamespacePolicies> {\n const policiesUrl = `/${this.listUrl}/${tenant}/namespaces/${namespace}/policies`;\n return this.fetch(policiesUrl).then(res => res.json());\n }\n\n /**\n * Get single namespace details\n * @param tenant Tenant ID\n * @param namespaceName Namespace name\n * @return Namespace with details\n */\n async getNamespaceDetails(\n tenant: string,\n namespaceName: string\n ): Promise<MessagingNamespaceDetails> {\n const namespace = await this.getNamespace(tenant, namespaceName);\n const policies = await this.getNamespacePolicies(tenant, namespaceName);\n return {\n id: namespaceName,\n namespace,\n policies\n };\n }\n\n /**\n * Get namespaces with details\n *\n * @param tenant Tenant ID\n * @return Namespaces with details\n */\n async getNamespacesDetails(tenant: string): Promise<MessagingNamespaceDetails[]> {\n try {\n const { namespaces } = await this.getNamespaces(tenant);\n return Promise.all(\n namespaces.map(async namespace => this.getNamespaceDetails(tenant, namespace.name))\n );\n } catch (error) {\n this.alertService.addServerFailure(error);\n return [];\n }\n }\n}\n","export const basePath = 'monitoring/messaging-service';\nexport const MESSAGING_MANAGEMENT_FEATURE_KEY = 'messaging-management.api';\nexport const MESSAGING_MANAGEMENT_MICROSERVICE_NAME = 'messaging-management';\n","import { inject, Injectable } from '@angular/core';\nimport { CanActivate } from '@angular/router';\nimport { Permissions } from '@c8y/ngx-components';\nimport { ApplicationService, FeatureService, UserService } from '@c8y/client';\nimport {\n MESSAGING_MANAGEMENT_FEATURE_KEY,\n MESSAGING_MANAGEMENT_MICROSERVICE_NAME\n} from './constants';\n\n@Injectable({ providedIn: 'root' })\nexport class MessagingManagementGuard implements CanActivate {\n private userService = inject(UserService);\n private featureService = inject(FeatureService);\n private applicationService = inject(ApplicationService);\n\n private cachedResult: boolean | null = null;\n\n async canActivate(): Promise<boolean> {\n if (this.cachedResult !== null) {\n return this.cachedResult;\n }\n\n const currentUser = (await this.userService.current()).data;\n const hasRequiredRoles = this.userService.hasAnyRole(currentUser, [\n Permissions.ROLE_TENANT_STATISTICS_READ,\n Permissions.ROLE_TENANT_MANAGEMENT_ADMIN\n ]);\n\n const featureEnabled = await this.featureService\n .detail(MESSAGING_MANAGEMENT_FEATURE_KEY)\n .then(({ data }) => data.active)\n .catch(() => false);\n\n const microserviceSubscribed = await this.applicationService\n .isAvailable(MESSAGING_MANAGEMENT_MICROSERVICE_NAME)\n .then(({ data: subscribed }) => subscribed)\n .catch(() => false);\n\n this.cachedResult = hasRequiredRoles && featureEnabled && microserviceSubscribed;\n\n return this.cachedResult;\n }\n}\n","import { inject, Injectable } from '@angular/core';\nimport {\n AppStateService,\n ExtensionFactory,\n gettext,\n NavigatorNode,\n NavigatorService\n} from '@c8y/ngx-components';\nimport { NAMESPACE_PROPS } from '../utils/namespace-props';\nimport { MessagingNamespacesService } from '../api/services/messaging-namespaces.service';\nimport { catchError, filter, map, shareReplay, switchMap, take } from 'rxjs/operators';\nimport { from, Observable } from 'rxjs';\nimport { MessagingManagementGuard } from '../messaging-management.guard';\n\nconst baseNode = new NavigatorNode({\n label: gettext('Messaging service'),\n icon: 'arrows-dotted-left-right',\n path: 'monitoring/messaging-service',\n priority: 100,\n parent: {\n label: gettext('Monitoring'),\n icon: 'monitoring'\n }\n});\n\n@Injectable({ providedIn: 'root' })\nexport class MessagingNavigatorNodeFactory implements ExtensionFactory<NavigatorNode> {\n appState = inject(AppStateService);\n navigatorService = inject(NavigatorService);\n namespacesService = inject(MessagingNamespacesService);\n guard = inject(MessagingManagementGuard);\n\n currentTenantId = this.appState.currentTenant.pipe(\n filter(currentTenant => !!currentTenant),\n map(currentTenant => currentTenant.name),\n take(1)\n );\n\n navigatorNode$: Observable<NavigatorNode | NavigatorNode[]>;\n\n constructor() {\n this.navigatorNode$ = from(this.guard.canActivate()).pipe(\n filter(allowed => allowed),\n switchMap(() => this.currentTenantId),\n switchMap(currentTenantId => this.namespacesService.getNamespaces(currentTenantId)),\n map(({ namespaces }) => {\n if (!namespaces?.length) {\n return [];\n }\n namespaces.forEach(namespace => {\n const label = NAMESPACE_PROPS[namespace.name]?.label || namespace.name;\n const childNode = new NavigatorNode({\n label,\n path: `monitoring/messaging-service/namespace/${namespace.name}`,\n icon: NAMESPACE_PROPS[namespace.name]?.icon,\n routerLinkExact: false\n });\n baseNode.add(childNode);\n });\n return baseNode;\n }),\n catchError(() => {\n return [];\n }),\n shareReplay(1)\n );\n }\n\n get(): Observable<NavigatorNode | NavigatorNode[]> {\n return this.navigatorNode$;\n }\n}\n","import { formatNumber } from '@angular/common';\nimport { inject, LOCALE_ID, Pipe, PipeTransform } from '@angular/core';\nimport { gettext } from '@c8y/ngx-components';\nimport { TranslateService } from '@ngx-translate/core';\n\n/**\n * In case of limits in Messaging management, value of '-1' means that there is no limit.\n */\n@Pipe({ name: 'backlogQuotaLimit', standalone: true })\nexport class BacklogQuotaLimitPipe implements PipeTransform {\n private translateService = inject(TranslateService);\n private locale = inject(LOCALE_ID);\n\n transform(value: number): number | string {\n if (value == null || isNaN(value)) {\n return '-';\n } else if (value === -1) {\n return this.translateService.instant(gettext('Unlimited` backlog quota`'));\n } else {\n return formatNumber(value, this.locale);\n }\n }\n}\n","import { Component, computed, input } from '@angular/core';\nimport { C8yTranslatePipe, gettext, IconDirective } from '@c8y/ngx-components';\nimport { NgClass, NgIf, PercentPipe } from '@angular/common';\n\n/**\n * Usage component displays usage information in a form of e.g. \"51% used\".\n * It can be used in two ways:\n * 1. By providing `count` and `limit` inputs, it will calculate the usage percentage.\n * 2. By providing `percentage` input, it will use the provided percentage value.\n * Note: `percentage` input takes precedence over `count` and `limit` inputs.\n */\n@Component({\n selector: 'app-usage',\n standalone: true,\n imports: [IconDirective, NgIf, NgClass, IconDirective, C8yTranslatePipe, PercentPipe],\n templateUrl: './usage.component.html',\n host: { class: 'd-contents' }\n})\nexport class UsageComponent {\n count = input<number | null>(null);\n limit = input<number | null>(null);\n /**\n * Percentage of usage. Value range is from 0 to 100 (or more).\n * For example, if 10% is used, this value should be provided as 10 (not 0.1).\n */\n percentage = input<number | null>(null);\n\n /**\n * Usage as a fraction (e.g. if 50% is used, usage value will be 0.5)\n */\n usage = computed(() =>\n this.percentage() != null ? this.percentage() / 100 : this.getUsage(this.count(), this.limit())\n );\n status = computed(() => this.getStatus(this.usage()));\n usageToDisplay = gettext('{{ percentageOfQuota }} used');\n\n statusMap = {\n danger: ['tag--danger'],\n warning: ['tag--warning'],\n success: ['tag--success']\n };\n\n /**\n * Get usage as fraction of count and limit.\n * E.g. if count is 5 and limit is 10, returned usage will be 0.5\n * @param count Usage count\n * @param limit Usage limit\n * @returns Count divided by limit or null if count or limit is null or limit is -1 (indicates no limit)\n */\n private getUsage(count: number, limit: number): number | null {\n if (count == null || limit == null || limit === -1) {\n return null;\n }\n return count / limit;\n }\n\n private getStatus(usage: number | null) {\n if (usage == null) {\n return null;\n }\n const percentage = usage * 100;\n\n if (percentage >= 80) {\n return 'danger';\n } else if (percentage >= 50) {\n return 'warning';\n } else {\n return 'success';\n }\n }\n}\n","<div\n class=\"tag no-pointer\"\n [ngClass]=\"statusMap[status()]\"\n *ngIf=\"usage() !== null\"\n>\n <i\n class=\"text-danger m-r-4 text-12\"\n c8yIcon=\"exclamation-circle\"\n *ngIf=\"status() === 'danger'\"\n ></i>\n <span>\n {{ usageToDisplay | translate: { percentageOfQuota: (usage() | percent: '1.0-2') } }}\n </span>\n</div>\n","import { Component, Input } from '@angular/core';\nimport { C8yTranslateModule, gettext, IconDirective } from '@c8y/ngx-components';\nimport { CommonModule } from '@angular/common';\nimport { BacklogQuotaLimitPipe } from '../../../../utils/backlog-quota-limit.pipe';\nimport { UsageComponent } from '../../../shared/usage/usage.component';\n\nconst DataType = {\n publishers: 'publishers',\n subscribers: 'subscribers',\n topics: 'topics'\n} as const;\n\n@Component({\n selector: 'app-namespace-item-card',\n standalone: true,\n imports: [IconDirective, C8yTranslateModule, CommonModule, BacklogQuotaLimitPipe, UsageComponent],\n templateUrl: './namespace-item-card.component.html',\n host: { class: 'card m-b-0 fit-w' }\n})\nexport class NamespaceItemCardComponent {\n readonly DATA_TYPE = DataType;\n readonly ITEM_DETAILS: Record<keyof typeof DataType, { icon: string; title: string }> = {\n publishers: { icon: 'output', title: gettext('Publishers') },\n subscribers: { icon: 'input', title: gettext('Subscribers') },\n topics: { icon: 'day-view', title: gettext('Topics') }\n } as const;\n topicsLimitLabel = gettext('Limit: {{ backlogQuotaLimit }}');\n\n /**\n * The label of the service (already translated).\n */\n @Input() serviceLabel = '';\n @Input() limit?: number;\n @Input() dataType: keyof typeof DataType;\n @Input() value: number | undefined;\n}\n","<div class=\"card-block text-default visible-xs text-center p-b-0\">\n <span class=\"text-12 text-uppercase text-muted\">\n {{ serviceLabel | translate }}\n </span>\n</div>\n<div\n class=\"card-block text-default p-t-sm-48\"\n [ngClass]=\"{\n 'p-b-sm-48': limit === 0\n }\"\n>\n <div class=\"d-flex fit-w a-i-center gap-8 j-c-center\">\n <i\n class=\"icon-32 c8y-icon-duocolor\"\n [c8yIcon]=\"ITEM_DETAILS[dataType].icon\"\n ></i>\n <span class=\"h1\">\n {{ value | number }}\n </span>\n <span\n class=\"a-s-baseline text-14 text-medium text-truncate\"\n title=\"{{ ITEM_DETAILS[dataType].title | translate }}\"\n >\n {{ ITEM_DETAILS[dataType].title | translate }}\n </span>\n </div>\n</div>\n<div\n class=\"card-footer d-flex gap-16 j-c-center a-i-center\"\n *ngIf=\"dataType === DATA_TYPE.topics && limit !== 0\"\n>\n <span\n class=\"tag tag--default no-pointer\"\n data-cy=\"card-limit\"\n >\n {{ topicsLimitLabel | translate: { backlogQuotaLimit: limit | backlogQuotaLimit } }}\n </span>\n <app-usage\n [count]=\"value\"\n [limit]=\"limit\"\n ></app-usage>\n</div>\n","import { Component, inject, Input } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { C8yTranslatePipe, IconDirective } from '@c8y/ngx-components';\nimport { NamespaceItemCardComponent } from './namespace-item-card/namespace-item-card.component';\nimport { NAMESPACE_PROPS } from '../../../utils/namespace-props';\nimport { MessagingNamespace } from '../../../api/model/namespace';\nimport { MessagingNamespacePolicies } from '../../../api/model/namespacePolicies';\nimport { TranslateService } from '@ngx-translate/core';\n\n@Component({\n selector: 'app-namespace-item',\n standalone: true,\n imports: [CommonModule, IconDirective, NamespaceItemCardComponent, C8yTranslatePipe],\n templateUrl: './namespace-item.component.html'\n})\nexport class NamespaceItemComponent {\n private translateService = inject(TranslateService);\n\n @Input('namespaceName')\n set _namespaceName(name: string) {\n this.namespaceName = name;\n this.icon = NAMESPACE_PROPS[name]?.icon;\n this.namespaceLabel = this.translateService.instant(NAMESPACE_PROPS[name]?.label) || name;\n }\n namespaceName = '';\n namespaceLabel = '';\n icon = '';\n\n @Input() namespace: MessagingNamespace = {};\n @Input() policies: MessagingNamespacePolicies = {};\n}\n","<div class=\"d-flex-sm d-col-xs p-t-24 p-l-16 p-r-16 m-0 bg-level-1\">\n <div\n class=\"col-sm-3 m-b-24 col-xs-12 d-flex gap-16 text-default a-i-center j-c-center a-s-stretch\"\n >\n <div class=\"text-center d-col\">\n <i\n class=\"m-b-8 icon-40 c8y-icon-duocolor\"\n [c8yIcon]=\"icon\"\n ></i>\n <span class=\"tag tag--info\">{{ 'Service' | translate }}</span>\n </div>\n <span class=\"h4\">{{ namespaceLabel }}</span>\n </div>\n <div class=\"col-sm-3 m-b-24 col-xs-12 a-i-stretch d-flex\">\n <app-namespace-item-card\n [serviceLabel]=\"namespaceLabel\"\n [dataType]=\"'topics'\"\n [limit]=\"namespace?.topics?.limit\"\n [value]=\"namespace?.topics?.count\"\n ></app-namespace-item-card>\n </div>\n <div class=\"col-sm-3 m-b-24 col-xs-12 a-i-stretch d-flex\">\n <app-namespace-item-card\n [serviceLabel]=\"namespaceLabel\"\n [dataType]=\"'publishers'\"\n [value]=\"namespace?.publishers?.count\"\n ></app-namespace-item-card>\n </div>\n <div class=\"col-sm-3 m-b-24 col-xs-12 a-i-stretch d-flex\">\n <app-namespace-item-card\n [serviceLabel]=\"namespaceLabel\"\n [dataType]=\"'subscribers'\"\n [value]=\"namespace?.subscribers?.count\"\n ></app-namespace-item-card>\n </div>\n</div>\n","import { Component, inject, OnInit } from '@angular/core';\nimport {\n ActionBarItemComponent,\n AlertService,\n AppStateService,\n BreadcrumbModule,\n C8yTranslateModule,\n HeaderModule,\n HelpModule,\n IconDirective,\n LoadingComponent\n} from '@c8y/ngx-components';\nimport { CommonModule } from '@angular/common';\nimport { RouterLink } from '@angular/router';\nimport { NamespaceItemComponent } from './namespace-item/namespace-item.component';\nimport { MessagingNamespacesService } from '../../api/services/messaging-namespaces.service';\nimport { MessagingNamespaceDetails } from '../../api/model/namespaceDetails';\n\n@Component({\n selector: 'app-namespace-list',\n templateUrl: './namespace-list.component.html',\n imports: [\n CommonModule,\n HeaderModule,\n HelpModule,\n C8yTranslateModule,\n NamespaceItemComponent,\n RouterLink,\n BreadcrumbModule,\n ActionBarItemComponent,\n IconDirective,\n LoadingComponent\n ],\n standalone: true\n})\nexport class NamespaceListComponent implements OnInit {\n alertService = inject(AlertService);\n appState = inject(AppStateService);\n namespacesService = inject(MessagingNamespacesService);\n\n namespacesDetails: MessagingNamespaceDetails[];\n loading = true;\n\n async ngOnInit() {\n await this.reload();\n }\n\n async reload() {\n this.loading = true;\n try {\n const currentTenantId = this.appState.currentTenant.value.name;\n this.namespacesDetails = await this.namespacesService.getNamespacesDetails(currentTenantId);\n } catch (e) {\n this.alertService.addServerFailure(e);\n } finally {\n this.loading = false;\n }\n }\n}\n","<c8y-title>{{ 'Messaging service' | translate }}</c8y-title>\n\n<c8y-breadcrumb>\n <c8y-breadcrumb-item\n [icon]=\"'monitoring'\"\n [label]=\"'Monitoring' | translate\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item [label]=\"'Messaging service' | translate\"></c8y-breadcrumb-item>\n</c8y-breadcrumb>\n\n<c8y-action-bar-item [placement]=\"'right'\">\n <li>\n <a\n class=\"btn btn-link\"\n title=\"{{ 'Reload' | translate }}\"\n (click)=\"reload()\"\n >\n <i\n c8yIcon=\"refresh\"\n [ngClass]=\"{ 'icon-spin': loading }\"\n ></i>\n {{ 'Reload' | translate }}\n </a>\n </li>\n</c8y-action-bar-item>\n\n<c8y-help src=\"/docs/standard-tenant/monitoring/#messaging-service\"></c8y-help>\n\n<div\n class=\"interact-grid\"\n *ngIf=\"!loading; else loadingTemplate\"\n>\n <a\n class=\"card\"\n *ngFor=\"let namespace of namespacesDetails\"\n [routerLink]=\"['namespace', namespace.id]\"\n >\n <app-namespace-item\n [namespaceName]=\"namespace.id\"\n [namespace]=\"namespace.namespace\"\n ></app-namespace-item>\n </a>\n</div>\n\n<ng-template #loadingTemplate>\n <c8y-loading></c8y-loading>\n</ng-template>\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { gettext } from '@c8y/ngx-components';\nimport { TranslateService } from '@ngx-translate/core';\n\n@Pipe({\n name: 'timeToLive',\n standalone: true\n})\nexport class TimeToLivePipe implements PipeTransform {\n constructor(private translateService: TranslateService) {}\n\n /**\n * Transform time in seconds to human readable format.\n * @param seconds time in seconds\n * @returns human readable time period\n */\n transform(seconds: number | null): string {\n if (seconds == null || isNaN(seconds)) {\n return '-';\n }\n if (seconds === -1) {\n return this.translateService.instant(gettext('Unlimited` time-to-live period`'));\n }\n const minutes = Math.floor(seconds / 60);\n const hours = Math.floor(minutes / 60);\n const days = Math.floor(hours / 24);\n\n if (days >= 1) {\n const remainingHours = hours % 24;\n if (days === 1) {\n if (remainingHours === 0) {\n return this.translateService.instant(gettext('1 day'));\n }\n if (remainingHours === 1) {\n return this.translateService.instant(gettext('1 day 1 hour'));\n }\n return this.translateService.instant(gettext('1 day {{hours}} hours'), {\n hours: remainingHours\n });\n } else {\n if (remainingHours === 0) {\n return this.translateService.instant(gettext('{{days}} days'), { days });\n }\n if (remainingHours === 1) {\n return this.translateService.instant(gettext('{{days}} days 1 hour'), { days });\n }\n return this.translateService.instant(gettext('{{days}} days {{hours}} hours'), {\n days,\n hours: remainingHours\n });\n }\n }\n\n if (hours > 0) {\n const remainingMinutes = minutes % 60;\n if (hours === 1) {\n if (remainingMinutes === 0) {\n return this.translateService.instant(gettext('1 hour'));\n }\n if (remainingMinutes === 1) {\n return this.translateService.instant(gettext('1 hour 1 minute'));\n }\n return this.translateService.instant(gettext('1 hour {{minutes}} minutes'), {\n minutes: remainingMinutes\n });\n } else {\n if (remainingMinutes === 0) {\n return this.translateService.instant(gettext('{{hours}} hours'), { hours });\n }\n if (remainingMinutes === 1) {\n return this.translateService.instant(gettext('{{hours}} hours 1 minute'), { hours });\n }\n return this.translateService.instant(gettext('{{hours}} hours {{minutes}} minutes'), {\n hours,\n minutes: remainingMinutes\n });\n }\n }\n\n if (minutes > 0) {\n const remainingSeconds = seconds % 60;\n if (minutes === 1) {\n if (remainingSeconds === 0) {\n return this.translateService.instant(gettext('1 minute'));\n }\n if (remainingSeconds === 1) {\n return this.translateService.instant(gettext('1 minute 1 second'));\n }\n return this.translateService.instant(gettext('1 minute {{seconds}} seconds'), {\n seconds: remainingSeconds\n });\n } else {\n if (remainingSeconds === 0) {\n return this.translateService.instant(gettext('{{minutes}} minutes'), { minutes });\n }\n if (remainingSeconds === 1) {\n return this.translateService.instant(gettext('{{minutes}} minutes 1 second'), {\n minutes\n });\n }\n return this.translateService.instant(gettext('{{minutes}} minutes {{seconds}} seconds'), {\n minutes,\n seconds: remainingSeconds\n });\n }\n }\n\n if (seconds === 1) {\n return this.translateService.instant(gettext('1 second'));\n } else {\n return this.translateService.instant(gettext('{{seconds}} seconds'), { seconds });\n }\n }\n}\n","import { Injectable } from '@angular/core';\nimport { FetchClient, IResult, Paging, Service } from '@c8y/client';\nimport { MessagingTopicList } from '../model/topicList';\nimport { MessagingTopicListFilters } from '../model/topicListFilters';\nimport { MessagingTopic } from '../model/topic';\nimport { MessagingTopicDetailFilters } from '../model/topicDetailFilters';\n\n@Injectable({ providedIn: 'root' })\nexport class MessagingTopicsService extends Service<MessagingTopic> {\n protected baseUrl = '/service/messaging-management';\n protected listUrl = 'tenants';\n\n constructor(client: FetchClient) {\n super(client);\n }\n\n async list(filter: MessagingTopicListFilters) {\n const headers = { accept: 'application/json' };\n const { tenant, namespace, ...params } = filter;\n const url = `/${this.listUrl}/${tenant}/namespaces/${namespace}/topics`;\n const res = await this.fetch(url, this.changeFetchOptions({ headers, params }, url));\n const topicList = (await res.json()) as MessagingTopicList;\n const data = topicList.topics;\n const paging = this.getPaging(topicList, filter);\n return { res, data, paging };\n }\n\n async detail(filter: MessagingTopicDetailFilters): Promise<IResult<MessagingTopic>> {\n const headers = { accept: 'application/json' };\n const { tenant, namespace, topic, type } = filter;\n const url = `/${this.listUrl}/${tenant}/namespaces/${namespace}/topics/${topic}/types/${type}`;\n const res = await this.fetch(url, this.changeFetchOptions({ headers }, url));\n const data = await res.json();\n return { res, data };\n }\n\n protected getPaging(\n topicList: MessagingTopicList,\n filter: MessagingTopicListFilters\n ): Paging<MessagingTopic> {\n if (topicList.pageStatistics) {\n const { currentPage, totalPages } = topicList.pageStatistics;\n const statistics = {\n ...topicList.pageStatistics,\n nextPage: currentPage < totalPages ? currentPage + 1 : null,\n prevPage: currentPage > 1 ? currentPage - 1 : null\n };\n return new Paging<MessagingTopic>(this, statistics, filter);\n }\n return null;\n }\n}\n","import { inject, Injectable } from '@angular/core';\nimport {\n BaseColumn,\n Column,\n DataSourceModifier,\n gettext,\n ServerSideDataResult\n} from '@c8y/ngx-components';\nimport { MessagingTopicListFilters } from '../../api/model/topicListFilters';\nimport { MessagingTopicsService } from '../../api/services/messaging-topics.service';\n\n@Injectable({ providedIn: 'root' })\nexport class TopicsDataGridService {\n protected topicsService = inject(MessagingTopicsService);\n\n getColumns(): Column[] {\n return [\n this.createColumn({\n name: 'name',\n header: gettext('Name'),\n path: 'name',\n filterable: true,\n filteringConfig: {\n fields: [\n {\n key: 'name',\n type: 'input',\n props: {\n label: gettext('Filter topics by partial name'),\n placeholder: 'myTopic',\n required: true\n }\n }\n ],\n getFilter(model: { name: string }): string {\n return model.name;\n }\n }\n }),\n this.createColumn({\n name: 'msgRateIn',\n header: gettext('Message rate in (msg/s)'),\n path: 'msgRateIn'\n }),\n this.createColumn({\n name: 'msgRateOut',\n header: gettext('Message rate out (msg/s)'),\n path: 'msgRateOut'\n }),\n this.createColumn({\n name: 'subscribers',\n header: gettext('Subscribers'),\n path: 'subscribers'\n }),\n this.createColumn({\n name: 'backlogSize',\n header: gettext('Message backlog'),\n path: 'backlogSize'\n }),\n this.createColumn({\n name: 'backlogUsagePercentage',\n header: gettext('Used backlog'),\n path: 'backlogUsagePercentage',\n sortOrder: 'desc'\n })\n ];\n }\n\n async getServerSideData(\n tenantId: string,\n namespaceId: string,\n dataSourceModifier: DataSourceModifier\n ): Promise<ServerSideDataResult> {\n const topicFilters = this.getTopicFilters(tenantId, namespaceId, dataSourceModifier);\n const { res, data, paging } = await this.topicsService.list(topicFilters);\n const filteredSize = paging.totalElements;\n const size = (\n await this.topicsService.list({\n ...topicFilters,\n currentPage: 1,\n pageSize: 1\n })\n ).paging.totalPages;\n\n return {\n res,\n data,\n paging,\n size,\n filteredSize\n };\n }\n\n private createColumn(columnProps: Partial<BaseColumn>): BaseColumn {\n const column = new BaseColumn();\n Object.assign(column, columnProps);\n return column;\n }\n\n private getTopicFilters(\n tenantId: string,\n namespaceId: string,\n dataSourceModifier: DataSourceModifier\n ): MessagingTopicListFilters {\n const topicFilters: MessagingTopicListFilters = {\n tenant: tenantId,\n namespace: namespaceId,\n currentPage: dataSourceModifier.pagination.currentPage,\n pageSize: dataSourceModifier.pagination.pageSize\n };\n\n return dataSourceModifier.columns.reduce((topicFilters, column) => {\n if (column.filterable) {\n if (column.filterPredicate) {\n topicFilters[column.path] = column.filterPredicate;\n }\n\n if (column.externalFilterQuery) {\n topicFilters[column.path] = column.filteringConfig.getFilter(column.externalFilterQuery);\n }\n }\n\n if (column.sortable && column.sortOrder) {\n const sortPath = column.sortingConfig?.pathSortingConfigs?.[0]?.path || column.path;\n topicFilters.sort = `${sortPath},${column.sortOrder}`;\n }\n\n return topicFilters;\n }, topicFilters);\n }\n}\n","import { AfterViewInit, Component, DestroyRef, EventEmitter, inject } from '@angular/core';\nimport { ActivatedRoute, RouterLink } from '@angular/router';\nimport {\n ActionBarItemComponent,\n AppStateService,\n BreadcrumbModule,\n BytesPipe,\n C8yTranslatePipe,\n Column,\n DataGridModule,\n DataSourceModifier,\n EmptyStateComponent,\n EmptyStateContextDirective,\n gettext,\n HeaderModule,\n IconDirective,\n LoadingComponent,\n Pagination,\n ServerSideDataCallback,\n ServerSideDataResult\n} from '@c8y/ngx-components';\nimport { AsyncPipe, DecimalPipe, NgClass, NgIf, PercentPipe } from '@angular/common';\nimport { MessagingNamespacesService } from '../../api/services/messaging-namespaces.service';\nimport { BacklogQuotaLimitPipe } from '../../utils/backlog-quota-limit.pipe';\nimport { UsageComponent } from '../shared/usage/usage.component';\nimport { TimeToLivePipe } from '../../utils/time-to-live.pipe';\nimport { NAMESPACE_PROPS } from '../../utils/namespace-props';\nimport { TranslateService } from '@ngx-translate/core';\nimport { TopicsDataGridService } from './topics-data-grid.service';\nimport { map, shareReplay, switchMap, tap } from 'rxjs/operators';\nimport { BehaviorSubject, combineLatest, firstValueFrom } from 'rxjs';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\n@Component({\n imports: [\n RouterLink,\n HeaderModule,\n DataGridModule,\n DecimalPipe,\n C8yTranslatePipe,\n BacklogQuotaLimitPipe,\n UsageComponent,\n BytesPipe,\n TimeToLivePipe,\n BreadcrumbModule,\n LoadingComponent,\n NgIf,\n ActionBarItemComponent,\n NgClass,\n IconDirective,\n PercentPipe,\n EmptyStateComponent,\n EmptyStateContextDirective,\n AsyncPipe\n ],\n selector: 'app-topic-list-view',\n standalone: true,\n templateUrl: './topic-list-view.component.html'\n})\nexport class TopicListViewComponent implements AfterViewInit {\n route = inject(ActivatedRoute);\n appState = inject(AppStateService);\n namespacesService = inject(MessagingNamespacesService);\n topicsDataGridService = inject(TopicsDataGridService);\n translateService = inject(TranslateService);\n destroyRef = inject(DestroyRef);\n\n loading$ = new BehaviorSubject<boolean>(false);\n refresh = new EventEmitter<void>();\n\n tenantId$ = this.appState.currentTenant.pipe(map(tenant => tenant.name));\n namespaceId$ = this.route.params.pipe(map(params => params['namespace'] as string));\n namespaceLabel$ = this.namespaceId$.pipe(\n map(namespaceId => this.translateService.instant(NAMESPACE_PROPS[namespaceId].label))\n );\n icon$ = this.namespaceId$.pipe(map(namespaceId => NAMESPACE_PROPS[namespaceId].icon));\n\n namespaceDetails$ = combineLatest([this.tenantId$, this.namespaceId$, this.refresh]).pipe(\n tap(() => this.loading$.next(true)),\n switchMap(([tenantId, namespaceId]) =>\n this.namespacesService.getNamespaceDetails(tenantId, namespaceId)\n ),\n tap(() => this.loading$.next(false)),\n shareReplay(1)\n );\n\n tableTitle = gettext('Topics');\n loadingItemsLabel = gettext('Loading topics...');\n loadMoreItemsLabel = gettext('Load more topics');\n noResultsMessage = gettext('No matching topics found.');\n noResultsSubtitle = gettext('Refine your search terms or check your spelling.');\n noDataMessage = gettext('No topics to display.');\n noDataSubtitle = gettext('Create new topics to monitor them here.');\n\n columns: Column[] = this.topicsDataGridService.getColumns();\n pagination: Pagination = {\n pageSize: 20,\n currentPage: 1\n };\n\n serverSideDataCallback: ServerSideDataCallback = this.onDataSourceModifier.bind(this);\n async onDataSourceModifier(\n dataSourceModifier: DataSourceModifier\n ): Promise<ServerSideDataResult> {\n return firstValueFrom(\n combineLatest([this.tenantId$, this.namespaceId$]).pipe(\n switchMap(([tenantId, namespaceId]) =>\n this.topicsDataGridService.getServerSideData(tenantId, namespaceId, dataSourceModifier)\n )\n )\n );\n }\n\n ngAfterViewInit() {\n this.route.params\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => this.refresh.emit());\n }\n}\n","<c8y-title>{{ namespaceLabel$ | async }}</c8y-title>\n\n<c8y-breadcrumb>\n <c8y-breadcrumb-item\n [icon]=\"'monitoring'\"\n [label]=\"'Monitoring' | translate\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n [label]=\"'Messaging service' | translate\"\n [path]=\"'/monitoring/messaging-service'\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item [label]=\"namespaceLabel$ | async\"></c8y-breadcrumb-item>\n</c8y-breadcrumb>\n\n<c8y-action-bar-item [placement]=\"'right'\">\n <a\n class=\"btn btn-link\"\n title=\"{{ 'Reload' | translate }}\"\n (click)=\"refresh.emit()\"\n >\n <i\n c8yIcon=\"refresh\"\n [ngClass]=\"{ 'icon-spin': loading$ | async }\"\n ></i>\n {{ 'Reload' | translate }}\n </a>\n</c8y-action-bar-item>\n\n<div class=\"card content-fullpage d-flex d-col\">\n <div class=\"bg-level-1 separator-bottom flex-no-shrink\">\n <div\n class=\"card-block\"\n style=\"min-height: 172px\"\n >\n <div\n class=\"col-md-4 m-b-24 col-xs-12 d-flex p-t-24 gap-16 text-default a-i-center a-s-stretch\"\n >\n <div class=\"text-center d-col\">\n <i\n class=\"m-b-8 icon-40 c8y-icon-duocolor\"\n [c8yIcon]=\"icon$ | async\"\n ></i>\n <span class=\"tag tag--info\">{{ 'Service' | translate }}</span>\n </div>\n <span class=\"h4 text-break-all\">{{ namespaceLabel$ | async }}</span>\n </div>\n <div class=\"col-md-4\">\n <fieldset class=\"c8y-fieldset c8y-fieldset--lg\">\n <legend>\n {{ 'Service usage/limits' | translate }}\n </legend>\n\n <ng-container *ngIf=\"loading$ | async; else serviceUsageLimits\">\n <c8y-loading></c8y-loading>\n </ng-container>\n\n <ng-template #serviceUsageLimits>\n <ng-container *ngIf=\"(namespaceDetails$ | async)?.namespace as namespace\">\n <ul class=\"list-unstyled small animated fadeIn\">\n <li class=\"p-t-4 p-b-4 d-flex separator-bottom text-nowrap\">\n <label class=\"small m-b-0 m-r-auto\">{{ 'Topics' | translate }}</label>\n <ng-container *ngIf=\"namespace?.topics?.limit !== 0\">\n <app-usage\n [count]=\"namespace?.topics?.count\"\n [limit]=\"namespace?.topics?.limit\"\n ></app-usage>\n <span class=\"m-l-16\">\n {{ namespace?.topics?.count | number }} /\n {{ namespace?.topics?.limit | backlogQuotaLimit }}\n </span>\n </ng-container>\n <ng-container *ngIf=\"namespace?.topics?.limit === 0\">\n <span class=\"m-l-16\">{{ namespace?.topics?.count | number }}</span>\n </ng-container>\n </li>\n\n <li class=\"p-t-4 p-b-4 d-flex separator-bottom text-nowrap\">\n <label class=\"small m-b-0 m-r-auto\">{{ 'Subscribers' | translate }}</label>\n <span class=\"m-l-16\">\n {{ namespace?.subscribers?.count | number }}\n </span>\n </li>\n\n <li class=\"p-t-4 p-b-4 d-flex text-nowrap\">\n <label class=\"small m-b-0 m-r-auto\">{{ 'Publishers' | translate }}</label>\n <span class=\"m-l-16\">\n {{ namespace?.publishers?.count | number }}\n </span>\n </li>\n </ul>\n </ng-container>\n </ng-template>\n </fieldset>\n </div>\n <div class=\"col-md-4\">\n <fieldset class=\"c8y-fieldset c8y-fieldset--lg\">\n <legend>{{ 'Service message backlog limits' | translate }}</legend>\n\n <ng-container *ngIf=\"loading$ | async; else serviceMessageBacklogLimits\">\n <c8y-loading></c8y-loading>\n </ng-container>\n\n <ng-template #serviceMessageBacklogLimits>\n <ng-container *ngIf=\"(namespaceDetails$ | async)?.policies as policies\">\n <ul class=\"list-unstyled small animated fadeIn\">\n <li class=\"p-t-4 p-b-4 d-flex separator-bottom text-nowrap\">\n <label class=\"small m-b-0 m-r-auto\">\n {{ 'Backlog quota (per topic)' | translate }}\n </label>\n <span\n title=\"{{\n policies?.backlogQuota?.limit > 0\n ? (policies.backlogQuota.limit | bytes: 0 : true)\n : '-'\n }}\"\n >\n {{\n policies?.backlogQuota?.limit > 0\n ? (policies.backlogQuota.limit | bytes: 0)\n : '-'\n }}\n </span>\n </li>\n\n <li class=\"p-t-4 p-b-4 d-flex text-nowrap\">\n <label class=\"small m-b-0 m-r-auto\">\n {{ 'Backlog time to live (TTL)' | translate }}\n </label>\n <span>{{ policies?.messageTTL | timeToLive }}</span>\n </li>\n </ul>\n </ng-container>\n </ng-template>\n </fieldset>\n </div>\n </div>\n </div>\n\n <c8y-data-grid\n class=\"d-contents\"\n [title]=\"tableTitle | translate\"\n [loadingItemsLabel]=\"loadingItemsLabel | translate\"\n [loadMoreItemsLabel]=\"loadMoreItemsLabel | translate\"\n [columns]=\"columns\"\n [pagination]=\"pagination\"\n [serverSideDataCallback]=\"serverSideDataCallback\"\n [refresh]=\"refresh\"\n [hideReload]=\"true\"\n >\n <c8y-ui-empty-state\n [icon]=\"stats?.size > 0 ? 'search' : 'day-view'\"\n [title]=\"stats?.size > 0 ? (noResultsMessage | translate) : (noDataMessage | translate)\"\n [subtitle]=\"stats?.size > 0 ? (noResultsSubtitle | translate) : (noDataSubtitle | translate)\"\n *emptyStateContext=\"let stats\"\n [horizontal]=\"stats?.size > 0\"\n ></c8y-ui-empty-state>\n\n <c8y-column name=\"name\">\n <ng-container *c8yCellRendererDef=\"let context\">\n <a\n title=\"{{ context.value }}\"\n [routerLink]=\"['topic', context.item.id]\"\n >\n {{ context.value }}\n </a>\n </ng-container>\n </c8y-column>\n\n <c8y-column name=\"msgRateIn\">\n <ng-container *c8yCellRendererDef=\"let context\">\n <span title=\"{{ context.value | number }}\">\n {{ context.value | number }}\n </span>\n </ng-container>\n </c8y-column>\n\n <c8y-column name=\"msgRateOut\">\n <ng-container *c8yCellRendererDef=\"let context\">\n <span title=\"{{ context.value | number }}\">\n {{ context.value | number }}\n </span>\n </ng-container>\n </c8y-column>\n\n <c8y-column name=\"subscribers\">\n <ng-container *c8yCellRendererDef=\"let context\">\n <a\n title=\"{{ context.value | number }}\"\n [routerLink]=\"['topic', context.item.id, 'subscribers']\"\n >\n {{ context.value | number }}\n </a>\n </ng-container>\n </c8y-column>\n\n <c8y-column name=\"backlogSize\">\n <ng-container *c8yCellRendererDef=\"let context\">\n <span title=\"{{ context.value | bytes: 2 : true }}\">\n {{ context.value | bytes: 2 }}\n </span>\n </ng-container>\n </c8y-column>\n\n <c8y-column name=\"backlogUsagePercentage\">\n <ng-container *c8yCellRendererDef=\"let context\">\n <span title=\"{{ context.value / 100 | percent: '1.0-2' }}\">\n {{ context.value / 100 | percent: '1.0-2' }}\n </span>\n </ng-container>\n </c8y-column>\n </c8y-data-grid>\n</div>\n","/**\n * If the topic is persistent or not. If false, the topic is not saved and will be deleted if there are no clients.\n */\nexport enum MessagingTopicType {\n Persistent = 'persistent',\n NonPersistent = 'non-persistent'\n}\n","import { Injectable } from '@angular/core';\nimport { FetchClient, Paging, Service } from '@c8y/client';\nimport { MessagingSubscriberList } from '../model/subscriberList';\nimport { MessagingSubscriber } from '../model/subscriber';\nimport { MessagingTopic } from '../model/topic';\nimport { MessagingSubscriberFilters } from '../model/subscriberFilters';\nimport { MessagingSubscriberToDelete } from '../model/subscriberToDelete';\nimport { MessagingTopicType } from '../model/topicType';\nimport { omit } from 'lodash-es';\n\n@Injectable({ providedIn: 'root' })\nexport class MessagingSubscribersService extends Service<MessagingSubscriber> {\n protected baseUrl = '/service/messaging-management';\n protected listUrl = 'tenants';\n\n constructor(client: FetchClient) {\n super(client);\n }\n\n /**\n * Get the list of subscribers for a topic.\n *\n * @param filter Subscriber filters.\n */\n async list(filter: MessagingSubscriberFilters) {\n const headers = { accept: 'application/json' };\n const params = omit(filter, ['tenant', 'namespace', 'topic', 'type']);\n const url = this.getBaseUrl(filter);\n const res = await this.fetch(url, this.changeFetchOptions({ headers, params }, url));\n const subscriberList = (await res.json()) as MessagingSubscriberList;\n const data = subscriberList.subscribers;\n const paging = this.getPaging(subscriberList, filter);\n return { res, data, paging };\n }\n\n async delete(subscriberToDelete: MessagingSubscriberToDelete) {\n const method = 'DELETE';\n const url = this.getBaseUrl(subscriberToDelete) + `/${subscriberToDelete.name}`;\n const res = await this.fetch(url, this.changeFetchOptions({ method }, url));\n return { res, data: null };\n }\n\n protected getPaging(json: MessagingSubscriberList, filter: object): Paging<MessagingSubscriber> {\n if (json.pageStatistics) {\n const { currentPage, totalPages } = json.pageStatistics;\n const statistics = {\n ...json.pageStatistics,\n nextPage: currentPage < totalPages ? currentPage + 1 : null,\n prevPage: currentPage > 1 ? currentPage - 1 : null\n };\n return new Paging<MessagingTopic>(this, statistics, filter);\n }\n return null;\n }\n\n private getBaseUrl({\n tenant,\n namespace,\n topic,\n type\n }: {\n tenant: string;\n namespace: string;\n topic: string;\n type: MessagingTopicType;\n }) {\n return `/${this.listUrl}/${tenant}/namespaces/${namespace}/topics/${topic}/types/${type}/subscribers`;\n }\n}\n","import { inject, Injectable } from '@angular/core';\nimport {\n AlertService,\n BaseColumn,\n Column,\n DataSourceModifier,\n gettext,\n ModalService,\n ServerSideDataResult,\n Status\n} from '@c8y/ngx-components';\nimport { MessagingSubscribersService } from '../../../api/services/messaging-subscribers.service';\nimport { MessagingTopicType } from '../../../api/model/topicType';\nimport { MessagingSubscriberFilters } from '../../../api/model/subscriberFilters';\nimport { MessagingSubscriber } from '../../../api/model/subscriber';\nimport { TranslateService } from '@ngx-translate/core';\nimport { MessagingSubscriberToDelete } from '../../../api/model/subscriberToDelete';\n\n@Injectable({ providedIn: 'root' })\nexport class TopicSubscribersDataGridService {\n protected subscribersService = inject(MessagingSubscribersService);\n private alertService = inject(AlertService);\n private modalService = inject(ModalService);\n private translateService = inject(TranslateService);\n\n getColumns(): Column[] {\n return [\n this.createColumn({\n name: 'name',\n header: gettext('Name'),\n path: 'name',\n filterable: true,\n filteringConfig: {\n fields: [\n {\n key: 'name',\n type: 'input',\n props: {\n label: gettext('Filter subscribers by partial name'),\n placeholder: 'mySubscriber',\n required: true\n }\n }\n ],\n getFilter(model: { name: string }): string {\n return model.name;\n }\n }\n }),\n this.createColumn({\n name: 'activeClients',\n header: gettext('Connected clients'),\n path: 'activeClients'\n }),\n this.createColumn({\n name: 'messageAckRate',\n header: gettext('Acknowledgment rate (msg/s)'),\n path: 'messageAckRate'\n }),\n this.createColumn({\n name: 'lastAcknowledgeDate',\n header: gettext('Last acknowledged'),\n path: 'lastAcknowledgeDate',\n sortingConfig: {\n pathSortingConfigs: [\n {\n path: 'lastAcknowledgeTimestamp'\n }\n ]\n }\n }),\n this.createColumn({\n name: 'unackMsgBacklog',\n header: gettext('Unacknowledged messages'),\n path: 'unackMsgBacklog'\n }),\n this.createColumn({\n name: 'backlogUsagePercentage',\n header: gettext('Used backlog'),\n path: 'backlogUsagePercentage',\n sortOrder: 'desc'\n })\n ];\n }\n\n async getServerSideData(\n tenantId: string,\n namespaceId: string,\n topicId: string,\n topicType: MessagingTopicType,\n dataSourceModifier: DataSourceModifier\n ): Promise<ServerSideDataResult> {\n const subscriberFilters = this.getSubscriberFilters(\n tenantId,\n namespaceId,\n topicId,\n topicType,\n dataSourceModifier\n );\n const { res, data, paging } = await this.subscribersService.list(subscriberFilters);\n const filteredSize = paging.totalElements;\n const size = (\n await this.subscribersService.list({\n ...subscriberFilters,\n currentPage: 1,\n pageSize: 1\n })\n ).paging.totalPages;\n\n return {\n res,\n data: data.map(subscriber => ({\n ...subscriber,\n lastAcknowledgeDate: this.getLastAcknowledgeDate(subscriber),\n id: subscriber.name\n })),\n paging,\n size,\n filteredSize\n };\n }\n\n async unsubscribeSubscriber(\n subscriber: MessagingSubscriberToDelete,\n refreshCallback: () => void\n ): Promise<void> {\n const confirmationTitle = gettext('Unsubscribe \"{{ subscriberName }}\"?');\n const confirmationMessage =\n subscriber.activeClients > 0\n ? gettext(\n 'You are about to unsubscribe \"{{ subscriberName }}\" which has active clients. Do you want to proceed?'\n )\n : gettext('You are about to unsubscribe \"{{ subscriberName }}\". Do you want to proceed?');\n try {\n const subscriberName = subscriber.name;\n await this.modalService.confirm(\n this.translateService.instant(confirmationTitle, {\n subscriberName\n }),\n this.translateService.instant(confirmationMessage, {\n subscriberName\n }),\n Status.DANGER,\n {\n ok: gettext('Unsubscribe')\n }\n );\n } catch (e) {\n // cancel\n return;\n }\n\n try {\n await this.subscribersService.delete(subscriber);\n this.alertService.success(\n this.translateService.instant(gettext('Subscriber \"{{ subscriberName }}\" unsubscribed.'), {\n subscriberName: subscriber.name\n })\n );\n } catch (error) {\n this.alertService.addServerFailure(error);\n }\n refreshCallback();\n }\n\n async bulkUnsubscribeSubscribers(\n subscribers: MessagingSubscriberToDelete[],\n refreshCallback: () => void\n ): Promise<void> {\n const anySubscriberHasActiveClients = subscribers.some(\n subscriber => subscriber.activeClients > 0\n );\n\n const confirmationTitle = gettext('Unsubscribe {{ numberOfSubscribers }} subscribers?');\n const confirmationMessage = anySubscriberHasActiveClients\n ? gettext(\n 'You are about to unsubscribe {{ numberOfSubscribers }} subscribers. Some of them have active clients. Do you want to proceed?'\n )\n : gettext(\n 'You are about to unsubscribe {{ numberOfSubscribers }} subscribers. Do you want to proceed?'\n );\n\n try {\n const numberOfSubscribers = subscribers.length;\n await this.modalService.confirm(\n this.translateService.instant(confirmationTitle, {\n numberOfSubscribers\n }),\n this.translateService.instant(confirmationMessage, {\n numberOfSubscribers\n }),\n Status.DANGER,\n {\n ok: gettext('Unsubscribe')\n }\n );\n } catch (e) {\n // cancel\n return;\n }\n\n const results = await Promise.allSettled(\n subscribers.map(sub =>\n this.subscribersService\n .delete(sub)\n .then(() => ({\n success: true,\n name: sub.name\n }))\n .catch(error => ({\n success: false,\n name: sub.name,\n error\n }))\n )\n );\n\n const failed = results\n .filter(result => result.status === 'fulfilled' && result.value.success === false)\n .map(result => (result as PromiseFulfilledResult<any>).value);\n\n const succeeded = results\n .filter(result => result.status === 'fulfilled' && result.value.success === true)\n .map(result => (result as PromiseFulfilledResult<any>).value);\n\n if (failed.length === 0) {\n this.alertService.success(\n this.translateService.instant(\n gettext('{{ numberOfSubscribers }} subscribers unsubscribed.'),\n { numberOfSubscribers: succeeded.length }\n )\n );\n } else if (succeeded.length === 0) {\n const errorMessage = this.translateService.instant(\n gettext('Failed to unsubscribe {{ numberOfSubscribers }} subscribers.'),\n {\n numberOfSubscribers: failed.length\n }\n );\n const details = `${failed.map(f => `'${f.name}': ${f.error.data.message}`).join('\\n')}`;\n this.alertService.danger(errorMessage, details);\n } else {\n // Some succeeded, some failed\n const nonUnsubscribedSubscribers = failed.map(s => s.name).join(', ');\n const message = this.translateService.instant(\n gettext(\n `Successfully unsubscribed {{ count }} subscribers.<br/>Failed to unsubscribe: {{ nonUnsubscribedSubscribers }}.`\n ),\n { count: succeeded.length, nonUnsubscribedSubscribers }\n );\n const details = `${failed.map(f => `'${f.name}': ${f.error.data.message}`).join('\\n')}`;\n this.alertService.warning(message, details);\n }\n\n refreshCallback();\n }\n\n private createColumn(columnProps: Partial<BaseColumn>): BaseColumn {\n const column = new BaseColumn();\n Object.assign(column, columnProps);\n return column;\n }\n\n private getSubscriberFilters(\n tenantId: string,\n namespaceId: string,\n topicId: string,\n topicType: MessagingTopicType,\n dataSourceModifier: DataSourceModifier\n ): MessagingSubscriberFilters {\n const subscriberFilters: MessagingSubscriberFilters = {\n tenant: tenantId,\n namespace: namespaceId,\n topic: topicId,\n type: topicType,\n currentPage: dataSourceModifier.pagination.currentPage,\n pageSize: dataSourceModifier.pagination.pageSize\n };\n\n return dataSourceModifier.columns.reduce((subscriberFilters, column) => {\n if (column.filterable) {\n if (column.filterPredicate) {\n subscriberFilters[column.path] = column.filterPredicate;\n }\n\n if (column.externalFilterQuery) {\n subscriberFilters[column.path] = column.filteringConfig.getFilter(\n column.externalFilterQuery\n );\n }\n }\n\n if (column.sortable && column.sortOrder) {\n const sortPath = column.sortingConfig?.pathSortingConfigs?.[0]?.path || column.path;\n subscriberFilters.sort = `${sortPath},${column.sortOrder}`;\n }\n\n return subscriberFilters;\n }, subscriberFilters);\n }\n\n private getLastAcknowledgeDate(subscriber: MessagingSubscriber): Date {\n const lastAcknowledgeDate = new Date(subscriber.lastAcknowledgeTimestamp);\n return lastAcknowledgeDate.getTime() > 0 ? lastAcknowledgeDate : null;\n }\n}\n","import {\n AfterViewInit,\n Component,\n DestroyRef,\n EventEmitter,\n inject,\n ViewChild\n} from '@angular/core';\nimport {\n ActionBarItemComponent,\n ActionControl,\n AppStateService,\n BreadcrumbModule,\n BulkActionControl,\n BytesPipe,\n C8yTranslateDirective,\n C8yTranslatePipe,\n Column,\n DataGridComponent,\n DataGridModule,\n DataSourceModifier,\n EmptyStateComponent,\n EmptyStateContextDirective,\n gettext,\n HeaderModule,\n IconDirective,\n LoadingComponent,\n Pagination,\n Permissions,\n RelativeTimePipe,\n ServerSideDataCallback,\n ServerSideDataResult\n} from '@c8y/ngx-components';\nimport { ActivatedRoute } from '@angular/router';\nimport { CommonModule, DecimalPipe } from '@angular/common';\nimport { MessagingTopicType } from '../../../api/model/topicType';\nimport { MessagingTopicsService } from '../../../api/services/messaging-topics.service';\nimport { MessagingNamespacesService } from '../../../api/services/messaging-namespaces.service';\nimport { NAMESPACE_PROPS } from '../../../utils/namespace-props';\nimport { TranslateService } from '@ngx-translate/core';\nimport { TopicSubscribersDataGridService } from './topic-subscribers-data-grid.service';\nimport { BehaviorSubject, combineLatest, firstValueFrom } from 'rxjs';\nimport { map, shareReplay, switchMap, tap } from 'rxjs/operators';\nimport { UsageComponent } from '../../shared/usage/usage.component';\nimport { MessagingSubscriber } from '../../../api/model/subscriber';\nimport { MessagingSubscriberToDelete } from '../../../api/model/subscriberToDelete';\n\n@Component({\n selector: 'app-topic-subscribers-view',\n standalone: true,\n imports: [\n DataGridModule,\n DecimalPipe,\n HeaderModule,\n C8yTranslateDirective,\n RelativeTimePipe,\n C8yTranslatePipe,\n CommonModule,\n BytesPipe,\n BreadcrumbModule,\n UsageComponent,\n ActionBarItemComponent,\n IconDirective,\n EmptyStateComponent,\n EmptyStateContextDirective,\n LoadingComponent\n ],\n templateUrl: './topic-subscribers-view.component.html'\n})\nexport class TopicSubscribersViewComponent implements AfterViewInit {\n route = inject(ActivatedRoute);\n appState = inject(AppStateService);\n namespacesService = inject(MessagingNamespacesService);\n topicsService = inject(MessagingTopicsService);\n topicSubscribersDataGridService = inject(TopicSubscribersDataGridService);\n translateService = inject(TranslateService);\n permissions = inject(Permissions);\n destroyRef = inject(DestroyRef);\n\n loading$ = new BehaviorSubject<boolean>(false);\n refresh = new EventEmitter<void>();\n\n tenantId$ = this.appState.currentTenant.pipe(map(tenant => tenant.name));\n namespaceId$ = this.route.params.pipe(map(params => params['namespace'] as string));\n namespaceLabel$ = this.namespaceId$.pipe(\n map(namespaceId => this.translateService.instant(NAMESPACE_PROPS[namespaceId].label))\n );\n topicId$ = this.route.params.pipe(map(params => params['topic'] as string));\n overview$ = combineLatest([this.tenantId$, this.namespaceId$, this.topicId$, this.refresh]).pipe(\n tap(() => this.loading$.next(true)),\n switchMap(async ([tenantId, namespaceId, topicId]) => ({\n topic: (\n await this.topicsService.detail({\n tenant: tenantId,\n namespace: namespaceId,\n topic: topicId,\n type: MessagingTopicType.Persistent\n })\n ).data,\n policies: await this.namespacesService.getNamespacePolicies(tenantId, namespaceId)\n })),\n tap(() => this.loading$.next(false)),\n shareReplay(1)\n );\n topicName$ = this.overview$.pipe(map(overview => overview.topic.name));\n\n tableTitle = gettext('Subscribers');\n loadingItemsLabel = gettext('Loading subscribers...');\n loadMoreItemsLabel = gettext('Load more subscribers');\n noResultsMessage = gettext('No matching subscribers found.');\n noResultsSubtitle = gettext('Refine your search terms or check your spelling.');\n noDataMessage = gettext('No subscribers to display.');\n noDataSubtitle = gettext('Create new subscribers to monitor them here.');\n\n columns: Column[] = this.topicSubscribersDataGridService.getColumns();\n pagination: Pagination = {\n pageSize: 20,\n currentPage: 1\n };\n\n selectable = true;\n actionControls: ActionControl[] = [\n {\n type: 'unsubscribeSubscriber',\n icon: 'unsubscribe',\n text: gettext('Unsubscribe'),\n callback: (subscriber: MessagingSubscriber) => this.unsubscribeSubscriber(subscriber),\n showIf: () => this.permissions.hasRole(Permissions.ROLE_TENANT_MANAGEMENT_ADMIN)\n }\n ];\n bulkActionControls: BulkActionControl[] = [\n {\n type: 'unsubscribeSubscriber',\n icon: 'unsubscribe',\n text: gettext('Unsubscribe'),\n callback: (subscribersNames: string[]) => this.bulkUnsubscribeSubscribers(subscribersNames),\n showIf: () => this.permissions.hasRole(Permissions.ROLE_TENANT_MANAGEMENT_ADMIN)\n }\n ];\n @ViewChild(DataGridComponent, { static: true }) dataGrid: DataGridComponent;\n\n serverSideDataCallback: ServerSideDataCallback = this.onDataSourceModifier.bind(this);\n async onDataSourceModifier(\n dataSourceModifier: DataSourceModifier\n ): Promise<ServerSideDataResult> {\n return firstValueFrom(\n combineLatest([this.tenantId$, this.namespaceId$, this.topicId$]).pipe(\n switchMap(([tenantId, namespaceId, topicId]) =>\n this.topicSubscribersDataGridService.getServerSideData(\n tenantId,\n namespaceId,\n topicId,\n MessagingTopicType.Persistent,\n dataSourceModifier\n )\n )\n )\n );\n }\n\n ngAfterViewInit() {\n this.refresh.emit();\n }\n\n async unsubscribeSubscriber(subscriber: MessagingSubscriber) {\n const tenant = await firstValueFrom(this.tenantId$);\n const namespace = await firstValueFrom(this.namespaceId$);\n const topic = await firstValueFrom(this.topicId$);\n this.topicSubscribersDataGridService.unsubscribeSubscriber(\n {\n ...subscriber,\n tenant,\n namespace,\n topic,\n type: MessagingTopicType.Persistent\n },\n () => this.refresh.emit()\n );\n }\n\n async bulkUnsubscribeSubscribers(subscribersNames: string[]): Promise<void> {\n const tenant = await firstValueFrom(this.tenantId$);\n const namespace = await firstValueFrom(this.namespaceId$);\n const topic = await firstValueFrom(this.topicId$);\n const allSubscribers: MessagingSubscriber[] = await firstValueFrom(\n this.dataGrid.dataSource.data$\n );\n\n const subscribers: MessagingSubscriberToDelete[] = subscribersNames.map(subscriberName => {\n const subscriber = allSubscribers.find(subscriber => subscriber.name === subscriberName);\n return {\n ...subscriber,\n tenant,\n namespace,\n topic,\n type: MessagingTopicType.Persistent\n };\n });\n\n this.topicSubscribersDataGridService.bulkUnsubscribeSubscribers(subscribers, () =>\n this.refresh.emit()\n );\n }\n}\n","<c8y-title>{{ topicName$ | async }}</c8y-title>\n\n<c8y-breadcrumb>\n <c8y-breadcrumb-item\n [icon]=\"'monitoring'\"\n [label]=\"'Monitoring' | translate\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n [label]=\"'Messaging service' | translate\"\n [path]=\"'/monitoring/messaging-service'\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n [label]=\"namespaceLabel$ | async\"\n [path]=\"'/monitoring/messaging-service/namespace/' + (namespaceId$ | async)\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item [label]=\"topicName$ | async\"></c8y-breadcrumb-item>\n</c8y-breadcrumb>\n\n<c8y-action-bar-item [placement]=\"'right'\">\n <a\n class=\"btn btn-link\"\n title=\"{{ 'Reload' | translate }}\"\n (click)=\"refresh.emit()\"\n >\n <i\n c8yIcon=\"refresh\"\n [ngClass]=\"{ 'icon-spin': loading$ | async }\"\n ></i>\n {{ 'Reload' | translate }}\n </a>\n</c8y-action-bar-item>\n\n<div class=\"card content-fullpage d-flex d-col\">\n <div class=\"bg-level-1 separator-bottom flex-no-shrink\">\n <div class=\"card-block\">\n <div\n class=\"col-md-4 m-b-24 col-xs-12 d-flex p-t-24 gap-16 text-default a-i-center a-s-stretch\"\n >\n <div class=\"text-center d-col\">\n <i\n class=\"m-b-8 icon-40 c8y-icon-duocolor\"\n [c8yIcon]=\"'day-view'\"\n ></i>\n <span class=\"tag tag--default\">{{ 'Topic' | translate }}</span>\n </div>\n <span class=\"h4\">{{ topicName$ | async }}</span>\n </div>\n <div class=\"col-md-4\">\n <fieldset class=\"c8y-fieldset c8y-fieldset--lg\">\n <legend translate>Topic usage</legend>\n\n <ng-container *ngIf=\"loading$ | async; else topicSummary\">\n <c8y-loading></c8y-loading>\n </ng-container>\n\n <ng-template #topicSummary>\n <ng-container *ngIf=\"overview$ | async as overview\">\n <ul class=\"list-unstyled small animated fadeIn\">\n <li class=\"p-t-4 p-b-4 d-flex separator-bottom text-nowrap\">\n <label class=\"small m-b-0 m-r-auto\">{{ 'Active subscribers' | translate }}</label>\n <span class=\"m-l-16\">{{ overview.topic.activeSubscribers | number }}</span>\n </li>\n\n <li class=\"p-t-4 p-b-4 d-flex separator-bottom text-nowrap\">\n <label class=\"small m-b-0 m-r-auto\">{{ 'Total subscribers' | translate }}</label>\n <span class=\"m-l-16\">{{ overview.topic.subscribers | number }}</span>\n </li>\n\n <li class=\"p-t-4 p-b-4 d-flex separator-bottom text-nowrap\">\n <label class=\"small m-b-0 m-r-auto\">\n {{ 'Total unacknowledged messages' | translate }}\n </label>\n <span class=\"m-l-16\">{{ overview.topic.unackMsgBacklog | number }}</span>\n </li>\n\n <li class=\"p-t-4 p-b-4 d-flex separator-bottom text-nowrap\">\n <label class=\"small m-b-0 m-r-auto\">\n {{ 'Message rate in' | translate }}\n </label>\n <span\n class=\"m-l-16\"\n ngNonBindable\n translate\n [translateParams]=\"{\n messagesPerSecond: overview.topic.msgRateIn | number\n }\"\n >\n {{ messagesPerSecond }} msg/s\n </span>\n </li>\n\n <li class=\"p-t-4 p-b-4 d-flex text-nowrap\">\n <label class=\"small m-b-0 m-r-auto\">\n {{ 'Message rate out' | translate }}\n </label>\n <span\n class=\"m-l-16\"\n ngNonBindable\n translate\n [translateParams]=\"{\n messagesPerSecond: overview.topic.msgRateOut | number\n }\"\n >\n {{ messagesPerSecond }} msg/s\n </span>\n </li>\n </ul>\n </ng-container>\n </ng-template>\n </fieldset>\n </div>\n\n <div class=\"col-md-4\">\n <fieldset class=\"c8y-fieldset c8y-fieldset--lg\">\n <legend translate>Topic message backlog</legend>\n\n <ng-container *ngIf=\"loading$ | async; else topicBacklog\">\n <c8y-loading></c8y-loading>\n </ng-container>\n\n <ng-template #topicBacklog>\n <ng-container *ngIf=\"overview$ | async as overview\">\n <ul class=\"list-unstyled small animated fadeIn\">\n <li class=\"p-t-4 p-b-4 d-flex separator-bottom text-nowrap\">\n <label\n class=\"small m-b-0 m-r-auto\"\n translate\n >\n Backlog usage\n </label>\n <app-usage [percentage]=\"overview.topic.backlogUsagePercentage\"></app-usage>\n <span class=\"m-l-16\">{{ overview.topic.backlogSize | bytes }}</span>\n </li>\n\n <li class=\"p-t-4 p-b-4 d-flex text-nowrap\">\n <label\n class=\"small m-b-0 m-r-auto\"\n translate\n >\n Backlog quota\n </label>\n <span class=\"m-l-16\">\n {{\n overview.policies.backlogQuota?.limit > 0\n ? (overview.policies.backlogQuota?.limit | bytes)\n : '-'\n }}\n </span>\n </li>\n </ul>\n </ng-container>\n </ng-template>\n </fieldset>\n </div>\n </div>\n </div>\n <c8y-data-grid\n class=\"content-fullpage d-flex d-col border-top border-bottom\"\n [title]=\"tableTitle | translate\"\n [loadingItemsLabel]=\"loadingItemsLabel | translate\"\n [loadMoreItemsLabel]=\"loadMoreItemsLabel | translate\"\n [columns]=\"columns\"\n [pagination]=\"pagination\"\n [serverSideDataCallback]=\"serverSideDataCallback\"\n [refresh]=\"refresh\"\n [hideReload]=\"true\"\n [selectable]=\"selectable\"\n [actionControls]=\"actionControls\"\n [bulkActionControls]=\"bulkActionControls\"\n >\n <c8y-ui-empty-state\n [icon]=\"stats?.size > 0 ? 'search' : 'input'\"\n [title]=\"stats?.size > 0 ? (noResultsMessage | translate) : (noDataMessage | translate)\"\n [subtitle]=\"stats?.size > 0 ? (noResultsSubtitle | translate) : (noDataSubtitle | translate)\"\n *emptyStateContext=\"let stats\"\n [horizontal]=\"stats?.size > 0\"\n ></c8y-ui-empty-state>\n\n <c8y-column name=\"name\">\n <ng-container *c8yCellRendererDef=\"let context\">\n <span title=\"{{ context.value }}\">\n {{ context.value }}\n </span>\n </ng-container>\n </c8y-column>\n\n <c8y-column name=\"activeClients\">\n <ng-container *c8yCellRendererDef=\"let context\">\n <span title=\"{{ context.value | number }}\">\n {{ context.value | number }}\n </span>\n </ng-container>\n </c8y-column>\n\n <c8y-column name=\"messageAckRate\">\n <ng-container *c8yCellRendererDef=\"let context\">\n <span title=\"{{ context.value | number }}\">\n {{ context.value | number }}\n </span>\n </ng-container>\n </c8y-column>\n\n <c8y-column name=\"lastAcknowledgeDate\">\n <ng-container *c8yCellRendererDef=\"let context\">\n <span\n title=\"{{ context.value }}\"\n *ngIf=\"context.value; else noLastAcknwoldegeDate\"\n >\n {{ context.value | relativeTime }}\n </span>\n <ng-template #noLastAcknwoldegeDate>–</ng-template>\n </ng-container>\n </c8y-column>\n\n <c8y-column name=\"unackMsgBacklog\">\n <ng-container *c8yCellRendererDef=\"let context\">\n <span title=\"{{ context.value | number }}\">\n {{ context.value | number }}\n </span>\n </ng-container>\n </c8y-column>\n\n <c8y-column name=\"backlogUsagePercentage\">\n <ng-container *c8yCellRendererDef=\"let context\">\n <span title=\"{{ context.value / 100 | percent: '1.0-2' }}\">\n {{ context.value / 100 | percent: '1.0-2' }}\n </span>\n </ng-container>\n </c8y-column>\n </c8y-data-grid>\n</div>\n","import { Injectable } from '@angular/core';\nimport { gettext, TabFactory } from '@c8y/ngx-components';\nimport { Router } from '@angular/router';\nimport { basePath } from '../constants';\n\n@Injectable()\nexport class TopicDetailsTabFactory implements TabFactory {\n constructor(public router: Router) {}\n\n get() {\n const pattern = /\\/namespace\\/(.+)\\/topic\\/(.+)\\/subscribers$/;\n const matches = this.router.url.match(pattern);\n\n if (matches) {\n const namespace = matches[1];\n const topic = matches[2];\n return [\n {\n path: basePath + `/namespace/${namespace}/topic/${topic}/subscribers`,\n priority: 500,\n label: gettext('Subscribers')\n }\n ];\n }\n return [];\n }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { ExtensionFactory, PreviewFeature } from '@c8y/ngx-components';\nimport { ApplicationService } from '@c8y/client';\nimport {\n MESSAGING_MANAGEMENT_FEATURE_KEY,\n MESSAGING_MANAGEMENT_MICROSERVICE_NAME\n} from './constants';\n\n@Injectable({ providedIn: 'root' })\nexport class MessagingManagementPreviewFactory implements ExtensionFactory<PreviewFeature> {\n private readonly applicationService = inject(ApplicationService);\n\n async get() {\n const microserviceSubscribed = await this.applicationService\n .isAvailable(MESSAGING_MANAGEMENT_MICROSERVICE_NAME)\n .then(({ data: subscribed }) => subscribed)\n .catch(() => false);\n\n if (!microserviceSubscribed) {\n return null;\n }\n\n return {\n key: MESSAGING_MANAGEMENT_FEATURE_KEY,\n label: 'Messaging service - monitoring & management',\n description: () =>\n import('@c8y/style/markdown-files/messaging-management-preview.md').then(m => m.default),\n settings: {\n reload: true\n }\n };\n }\n}\n","import { NgModule } from '@angular/core';\nimport { hookNavigator, hookPreview, hookRoute, hookTab } from '@c8y/ngx-components';\nimport { MessagingNavigatorNodeFactory } from './navigator/messaging-navigator-factory';\nimport { NamespaceListComponent } from './messaging/namespace-list/namespace-list.component';\nimport { TopicListViewComponent } from './messaging/topic/topic-list-view.component';\nimport { TopicSubscribersViewComponent } from './messaging/topic/topic-subscribers-view/topic-subscribers-view.component';\nimport { TopicDetailsTabFactory } from './navigator/topic-details-tab.factory';\nimport { basePath } from './constants';\nimport { MessagingManagementGuard } from './messaging-management.guard';\nimport { MessagingManagementPreviewFactory } from './messaging-management-preview.factory';\n\n@NgModule({\n providers: [\n hookRoute([\n {\n path: basePath,\n component: NamespaceListComponent,\n canActivate: [MessagingManagementGuard]\n },\n {\n path: basePath + '/namespace/:namespace',\n component: TopicListViewComponent,\n canActivate: [MessagingManagementGuard]\n },\n {\n path: basePath + '/namespace/:namespace/topic/:topic',\n redirectTo: basePath + '/namespace/:namespace/topic/:topic/subscribers',\n pathMatch: 'full'\n },\n {\n path: basePath + '/namespace/:namespace/topic/:topic/subscribers',\n component: TopicSubscribersViewComponent,\n canActivate: [MessagingManagementGuard]\n }\n ]),\n hookTab(TopicDetailsTabFactory),\n hookNavigator(MessagingNavigatorNodeFactory),\n hookPreview(MessagingManagementPreviewFactory)\n ]\n})\nexport class MessagingManagementModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i2"],"mappings":"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"}
|