@solidxai/core 0.1.10-beta.21 → 0.1.10-beta.23
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/.claude/settings.local.json +15 -0
- package/CLAUDE.md +18 -0
- package/CURRENT_PROMPT +6 -0
- package/dist/commands/info.command.d.ts.map +1 -1
- package/dist/commands/info.command.js +0 -2
- package/dist/commands/info.command.js.map +1 -1
- package/dist/controllers/dashboard-user-layout.controller.d.ts +43 -0
- package/dist/controllers/dashboard-user-layout.controller.d.ts.map +1 -0
- package/dist/controllers/{dashboard-variable.controller.js → dashboard-user-layout.controller.js} +30 -30
- package/dist/controllers/dashboard-user-layout.controller.js.map +1 -0
- package/dist/controllers/dashboard.controller.d.ts +12 -42
- package/dist/controllers/dashboard.controller.d.ts.map +1 -1
- package/dist/controllers/dashboard.controller.js +71 -141
- package/dist/controllers/dashboard.controller.js.map +1 -1
- package/dist/decorators/dashboard-widget-data-provider.decorator.d.ts +3 -0
- package/dist/decorators/dashboard-widget-data-provider.decorator.d.ts.map +1 -0
- package/dist/decorators/dashboard-widget-data-provider.decorator.js +8 -0
- package/dist/decorators/dashboard-widget-data-provider.decorator.js.map +1 -0
- package/dist/dtos/create-dashboard-user-layout.dto.d.ts +10 -0
- package/dist/dtos/create-dashboard-user-layout.dto.d.ts.map +1 -0
- package/dist/dtos/create-dashboard-user-layout.dto.js +66 -0
- package/dist/dtos/create-dashboard-user-layout.dto.js.map +1 -0
- package/dist/dtos/dashboard-variable-options-query.dto.d.ts +7 -0
- package/dist/dtos/dashboard-variable-options-query.dto.d.ts.map +1 -0
- package/dist/dtos/dashboard-variable-options-query.dto.js +40 -0
- package/dist/dtos/dashboard-variable-options-query.dto.js.map +1 -0
- package/dist/dtos/dashboard-widget-data-request.dto.d.ts +12 -0
- package/dist/dtos/dashboard-widget-data-request.dto.d.ts.map +1 -0
- package/dist/dtos/dashboard-widget-data-request.dto.js +65 -0
- package/dist/dtos/dashboard-widget-data-request.dto.js.map +1 -0
- package/dist/dtos/update-dashboard-user-layout.dto.d.ts +11 -0
- package/dist/dtos/update-dashboard-user-layout.dto.d.ts.map +1 -0
- package/dist/dtos/{update-dashboard-layout.dto.js → update-dashboard-user-layout.dto.js} +34 -16
- package/dist/dtos/update-dashboard-user-layout.dto.js.map +1 -0
- package/dist/entities/dashboard-user-layout.entity.d.ts +11 -0
- package/dist/entities/dashboard-user-layout.entity.d.ts.map +1 -0
- package/dist/entities/dashboard-user-layout.entity.js +52 -0
- package/dist/entities/dashboard-user-layout.entity.js.map +1 -0
- package/dist/helpers/bootstrap.helper.js +1 -1
- package/dist/helpers/bootstrap.helper.js.map +1 -1
- package/dist/helpers/module-metadata-helper.service.d.ts.map +1 -1
- package/dist/helpers/module-metadata-helper.service.js +15 -4
- package/dist/helpers/module-metadata-helper.service.js.map +1 -1
- package/dist/helpers/solid-registry.d.ts +5 -9
- package/dist/helpers/solid-registry.d.ts.map +1 -1
- package/dist/helpers/solid-registry.js +13 -28
- package/dist/helpers/solid-registry.js.map +1 -1
- package/dist/index.d.ts +21 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +21 -5
- package/dist/index.js.map +1 -1
- package/dist/interfaces.d.ts +24 -13
- package/dist/interfaces.d.ts.map +1 -1
- package/dist/interfaces.js.map +1 -1
- package/dist/jobs/database/trigger-mcp-client-subscriber-database.service.d.ts +1 -3
- package/dist/jobs/database/trigger-mcp-client-subscriber-database.service.d.ts.map +1 -1
- package/dist/jobs/database/trigger-mcp-client-subscriber-database.service.js +2 -25
- package/dist/jobs/database/trigger-mcp-client-subscriber-database.service.js.map +1 -1
- package/dist/{repository/dashboard-layout.repository.d.ts → repositories/dashboard-user-layout.repository.d.ts} +5 -5
- package/dist/repositories/dashboard-user-layout.repository.d.ts.map +1 -0
- package/dist/{repository/dashboard-layout.repository.js → repositories/dashboard-user-layout.repository.js} +15 -10
- package/dist/repositories/dashboard-user-layout.repository.js.map +1 -0
- package/dist/seeders/module-metadata-seeder.service.d.ts +1 -6
- package/dist/seeders/module-metadata-seeder.service.d.ts.map +1 -1
- package/dist/seeders/module-metadata-seeder.service.js +1 -60
- package/dist/seeders/module-metadata-seeder.service.js.map +1 -1
- package/dist/seeders/seed-data/solid-core-metadata.json +6236 -6645
- package/dist/services/dashboard-providers/mq-dashboard-avg-elapsed-kpi-provider.service.d.ts +13 -0
- package/dist/services/dashboard-providers/mq-dashboard-avg-elapsed-kpi-provider.service.d.ts.map +1 -0
- package/dist/services/dashboard-providers/mq-dashboard-avg-elapsed-kpi-provider.service.js +55 -0
- package/dist/services/dashboard-providers/mq-dashboard-avg-elapsed-kpi-provider.service.js.map +1 -0
- package/dist/services/dashboard-providers/mq-dashboard-failed-messages-kpi-provider.service.d.ts +13 -0
- package/dist/services/dashboard-providers/mq-dashboard-failed-messages-kpi-provider.service.d.ts.map +1 -0
- package/dist/services/dashboard-providers/mq-dashboard-failed-messages-kpi-provider.service.js +52 -0
- package/dist/services/dashboard-providers/mq-dashboard-failed-messages-kpi-provider.service.js.map +1 -0
- package/dist/services/dashboard-providers/mq-dashboard-inflight-messages-kpi-provider.service.d.ts +13 -0
- package/dist/services/dashboard-providers/mq-dashboard-inflight-messages-kpi-provider.service.d.ts.map +1 -0
- package/dist/services/dashboard-providers/mq-dashboard-inflight-messages-kpi-provider.service.js +52 -0
- package/dist/services/dashboard-providers/mq-dashboard-inflight-messages-kpi-provider.service.js.map +1 -0
- package/dist/services/dashboard-providers/mq-dashboard-latency-trend-provider.service.d.ts +10 -0
- package/dist/services/dashboard-providers/mq-dashboard-latency-trend-provider.service.d.ts.map +1 -0
- package/dist/services/dashboard-providers/mq-dashboard-latency-trend-provider.service.js +62 -0
- package/dist/services/dashboard-providers/mq-dashboard-latency-trend-provider.service.js.map +1 -0
- package/dist/services/dashboard-providers/mq-dashboard-messages-over-time-provider.service.d.ts +10 -0
- package/dist/services/dashboard-providers/mq-dashboard-messages-over-time-provider.service.d.ts.map +1 -0
- package/dist/services/dashboard-providers/mq-dashboard-messages-over-time-provider.service.js +82 -0
- package/dist/services/dashboard-providers/mq-dashboard-messages-over-time-provider.service.js.map +1 -0
- package/dist/services/dashboard-providers/mq-dashboard-provider-utils.d.ts +17 -0
- package/dist/services/dashboard-providers/mq-dashboard-provider-utils.d.ts.map +1 -0
- package/dist/services/dashboard-providers/mq-dashboard-provider-utils.js +130 -0
- package/dist/services/dashboard-providers/mq-dashboard-provider-utils.js.map +1 -0
- package/dist/services/dashboard-providers/mq-dashboard-queue-sla-heatmap-provider.service.d.ts +37 -0
- package/dist/services/dashboard-providers/mq-dashboard-queue-sla-heatmap-provider.service.d.ts.map +1 -0
- package/dist/services/dashboard-providers/mq-dashboard-queue-sla-heatmap-provider.service.js +112 -0
- package/dist/services/dashboard-providers/mq-dashboard-queue-sla-heatmap-provider.service.js.map +1 -0
- package/dist/services/dashboard-providers/mq-dashboard-queue-wise-avg-elapsed-provider.service.d.ts +10 -0
- package/dist/services/dashboard-providers/mq-dashboard-queue-wise-avg-elapsed-provider.service.d.ts.map +1 -0
- package/dist/services/dashboard-providers/mq-dashboard-queue-wise-avg-elapsed-provider.service.js +57 -0
- package/dist/services/dashboard-providers/mq-dashboard-queue-wise-avg-elapsed-provider.service.js.map +1 -0
- package/dist/services/dashboard-providers/mq-dashboard-queue-wise-failures-provider.service.d.ts +10 -0
- package/dist/services/dashboard-providers/mq-dashboard-queue-wise-failures-provider.service.d.ts.map +1 -0
- package/dist/services/dashboard-providers/mq-dashboard-queue-wise-failures-provider.service.js +57 -0
- package/dist/services/dashboard-providers/mq-dashboard-queue-wise-failures-provider.service.js.map +1 -0
- package/dist/services/dashboard-providers/mq-dashboard-recent-failures-provider.service.d.ts +10 -0
- package/dist/services/dashboard-providers/mq-dashboard-recent-failures-provider.service.d.ts.map +1 -0
- package/dist/services/dashboard-providers/mq-dashboard-recent-failures-provider.service.js +100 -0
- package/dist/services/dashboard-providers/mq-dashboard-recent-failures-provider.service.js.map +1 -0
- package/dist/services/dashboard-providers/mq-dashboard-stage-distribution-provider.service.d.ts +10 -0
- package/dist/services/dashboard-providers/mq-dashboard-stage-distribution-provider.service.d.ts.map +1 -0
- package/dist/services/dashboard-providers/mq-dashboard-stage-distribution-provider.service.js +55 -0
- package/dist/services/dashboard-providers/mq-dashboard-stage-distribution-provider.service.js.map +1 -0
- package/dist/services/dashboard-providers/mq-dashboard-succeeded-messages-kpi-provider.service.d.ts +13 -0
- package/dist/services/dashboard-providers/mq-dashboard-succeeded-messages-kpi-provider.service.d.ts.map +1 -0
- package/dist/services/dashboard-providers/mq-dashboard-succeeded-messages-kpi-provider.service.js +52 -0
- package/dist/services/dashboard-providers/mq-dashboard-succeeded-messages-kpi-provider.service.js.map +1 -0
- package/dist/services/dashboard-providers/mq-dashboard-success-rate-kpi-provider.service.d.ts +15 -0
- package/dist/services/dashboard-providers/mq-dashboard-success-rate-kpi-provider.service.d.ts.map +1 -0
- package/dist/services/dashboard-providers/mq-dashboard-success-rate-kpi-provider.service.js +60 -0
- package/dist/services/dashboard-providers/mq-dashboard-success-rate-kpi-provider.service.js.map +1 -0
- package/dist/services/dashboard-providers/mq-dashboard-total-messages-kpi-provider.service.d.ts +13 -0
- package/dist/services/dashboard-providers/mq-dashboard-total-messages-kpi-provider.service.d.ts.map +1 -0
- package/dist/services/dashboard-providers/mq-dashboard-total-messages-kpi-provider.service.js +51 -0
- package/dist/services/dashboard-providers/mq-dashboard-total-messages-kpi-provider.service.js.map +1 -0
- package/dist/services/dashboard-runtime.service.d.ts +31 -0
- package/dist/services/dashboard-runtime.service.d.ts.map +1 -0
- package/dist/services/dashboard-runtime.service.js +408 -0
- package/dist/services/dashboard-runtime.service.js.map +1 -0
- package/dist/services/dashboard-user-layout.service.d.ts +12 -0
- package/dist/services/dashboard-user-layout.service.d.ts.map +1 -0
- package/dist/services/{dashboard-variable.service.js → dashboard-user-layout.service.js} +11 -12
- package/dist/services/dashboard-user-layout.service.js.map +1 -0
- package/dist/services/module-metadata.service.js +1 -1
- package/dist/services/module-metadata.service.js.map +1 -1
- package/dist/services/selection-providers/mq-dashboard-message-broker-variable-options-provider.service.d.ts +11 -0
- package/dist/services/selection-providers/mq-dashboard-message-broker-variable-options-provider.service.d.ts.map +1 -0
- package/dist/services/selection-providers/mq-dashboard-message-broker-variable-options-provider.service.js +59 -0
- package/dist/services/selection-providers/mq-dashboard-message-broker-variable-options-provider.service.js.map +1 -0
- package/dist/services/selection-providers/mq-dashboard-queue-name-variable-options-provider.service.d.ts +11 -0
- package/dist/services/selection-providers/mq-dashboard-queue-name-variable-options-provider.service.d.ts.map +1 -0
- package/dist/services/selection-providers/mq-dashboard-queue-name-variable-options-provider.service.js +60 -0
- package/dist/services/selection-providers/mq-dashboard-queue-name-variable-options-provider.service.js.map +1 -0
- package/dist/services/solid-introspect.service.d.ts +1 -2
- package/dist/services/solid-introspect.service.d.ts.map +1 -1
- package/dist/services/solid-introspect.service.js +12 -24
- package/dist/services/solid-introspect.service.js.map +1 -1
- package/dist/solid-core.module.d.ts.map +1 -1
- package/dist/solid-core.module.js +43 -66
- package/dist/solid-core.module.js.map +1 -1
- package/dist/testing/adapters/ui/playwright-adapter.d.ts +1 -0
- package/dist/testing/adapters/ui/playwright-adapter.d.ts.map +1 -1
- package/dist/testing/adapters/ui/playwright-adapter.js +3 -0
- package/dist/testing/adapters/ui/playwright-adapter.js.map +1 -1
- package/dist/testing/steps/ui/index.d.ts.map +1 -1
- package/dist/testing/steps/ui/index.js +2 -0
- package/dist/testing/steps/ui/index.js.map +1 -1
- package/dist/testing/steps/ui/manual.step.d.ts +3 -0
- package/dist/testing/steps/ui/manual.step.d.ts.map +1 -0
- package/dist/testing/steps/ui/manual.step.js +56 -0
- package/dist/testing/steps/ui/manual.step.js.map +1 -0
- package/package.json +1 -1
- package/src/commands/info.command.ts +0 -2
- package/src/controllers/{dashboard-variable.controller.ts → dashboard-user-layout.controller.ts} +10 -10
- package/src/controllers/dashboard.controller.ts +70 -89
- package/src/decorators/dashboard-widget-data-provider.decorator.ts +6 -0
- package/src/dtos/create-dashboard-user-layout.dto.ts +41 -0
- package/src/dtos/dashboard-variable-options-query.dto.ts +20 -0
- package/src/dtos/dashboard-widget-data-request.dto.ts +34 -0
- package/src/dtos/update-dashboard-user-layout.dto.ts +45 -0
- package/src/entities/dashboard-user-layout.entity.ts +27 -0
- package/src/helpers/bootstrap.helper.ts +1 -1
- package/src/helpers/field-crud-managers/field-quality-check-fixes.md +36 -6
- package/src/helpers/module-metadata-helper.service.ts +21 -6
- package/src/helpers/solid-registry.ts +15 -36
- package/src/index.ts +21 -5
- package/src/interfaces.ts +32 -19
- package/src/jobs/database/trigger-mcp-client-subscriber-database.service.ts +1 -34
- package/src/repositories/dashboard-user-layout.repository.ts +19 -0
- package/src/seeders/module-metadata-seeder.service.ts +0 -67
- package/src/seeders/seed-data/solid-core-metadata.json +6237 -6646
- package/src/services/1.js +6 -0
- package/src/services/dashboard-providers/README.md +603 -0
- package/src/services/dashboard-providers/mq-dashboard-avg-elapsed-kpi-provider.service.ts +49 -0
- package/src/services/dashboard-providers/mq-dashboard-failed-messages-kpi-provider.service.ts +45 -0
- package/src/services/dashboard-providers/mq-dashboard-inflight-messages-kpi-provider.service.ts +45 -0
- package/src/services/dashboard-providers/mq-dashboard-latency-trend-provider.service.ts +58 -0
- package/src/services/dashboard-providers/mq-dashboard-messages-over-time-provider.service.ts +79 -0
- package/src/services/dashboard-providers/mq-dashboard-provider-utils.ts +165 -0
- package/src/services/dashboard-providers/mq-dashboard-queue-sla-heatmap-provider.service.ts +155 -0
- package/src/services/dashboard-providers/mq-dashboard-queue-wise-avg-elapsed-provider.service.ts +51 -0
- package/src/services/dashboard-providers/mq-dashboard-queue-wise-failures-provider.service.ts +51 -0
- package/src/services/dashboard-providers/mq-dashboard-recent-failures-provider.service.ts +95 -0
- package/src/services/dashboard-providers/mq-dashboard-stage-distribution-provider.service.ts +49 -0
- package/src/services/dashboard-providers/mq-dashboard-succeeded-messages-kpi-provider.service.ts +45 -0
- package/src/services/dashboard-providers/mq-dashboard-success-rate-kpi-provider.service.ts +55 -0
- package/src/services/dashboard-providers/mq-dashboard-total-messages-kpi-provider.service.ts +44 -0
- package/src/services/dashboard-runtime.service.ts +488 -0
- package/src/services/dashboard-user-layout.service.ts +20 -0
- package/src/services/module-metadata.service.ts +1 -1
- package/src/services/selection-providers/mq-dashboard-message-broker-variable-options-provider.service.ts +52 -0
- package/src/services/selection-providers/mq-dashboard-queue-name-variable-options-provider.service.ts +51 -0
- package/src/services/solid-introspect.service.ts +19 -34
- package/src/solid-core.module.ts +43 -72
- package/src/testing/README.md +42 -4
- package/src/testing/adapters/ui/playwright-adapter.ts +4 -0
- package/src/testing/steps/ui/index.ts +2 -0
- package/src/testing/steps/ui/manual.step.ts +80 -0
- package/dist/controllers/dashboard-layout.controller.d.ts +0 -47
- package/dist/controllers/dashboard-layout.controller.d.ts.map +0 -1
- package/dist/controllers/dashboard-layout.controller.js +0 -204
- package/dist/controllers/dashboard-layout.controller.js.map +0 -1
- package/dist/controllers/dashboard-question-sql-dataset-config.controller.d.ts +0 -43
- package/dist/controllers/dashboard-question-sql-dataset-config.controller.d.ts.map +0 -1
- package/dist/controllers/dashboard-question-sql-dataset-config.controller.js +0 -179
- package/dist/controllers/dashboard-question-sql-dataset-config.controller.js.map +0 -1
- package/dist/controllers/dashboard-question.controller.d.ts +0 -45
- package/dist/controllers/dashboard-question.controller.d.ts.map +0 -1
- package/dist/controllers/dashboard-question.controller.js +0 -194
- package/dist/controllers/dashboard-question.controller.js.map +0 -1
- package/dist/controllers/dashboard-variable.controller.d.ts +0 -43
- package/dist/controllers/dashboard-variable.controller.d.ts.map +0 -1
- package/dist/controllers/dashboard-variable.controller.js.map +0 -1
- package/dist/decorators/dashboard-question-data-provider.decorator.d.ts +0 -3
- package/dist/decorators/dashboard-question-data-provider.decorator.d.ts.map +0 -1
- package/dist/decorators/dashboard-question-data-provider.decorator.js +0 -11
- package/dist/decorators/dashboard-question-data-provider.decorator.js.map +0 -1
- package/dist/decorators/dashboard-selection-provider.decorator.d.ts +0 -3
- package/dist/decorators/dashboard-selection-provider.decorator.d.ts.map +0 -1
- package/dist/decorators/dashboard-selection-provider.decorator.js +0 -11
- package/dist/decorators/dashboard-selection-provider.decorator.js.map +0 -1
- package/dist/dtos/create-dashboard-layout.dto.d.ts +0 -8
- package/dist/dtos/create-dashboard-layout.dto.d.ts.map +0 -1
- package/dist/dtos/create-dashboard-layout.dto.js +0 -53
- package/dist/dtos/create-dashboard-layout.dto.js.map +0 -1
- package/dist/dtos/create-dashboard-question-sql-dataset-config.dto.d.ts +0 -12
- package/dist/dtos/create-dashboard-question-sql-dataset-config.dto.d.ts.map +0 -1
- package/dist/dtos/create-dashboard-question-sql-dataset-config.dto.js +0 -77
- package/dist/dtos/create-dashboard-question-sql-dataset-config.dto.js.map +0 -1
- package/dist/dtos/create-dashboard-question.dto.d.ts +0 -17
- package/dist/dtos/create-dashboard-question.dto.d.ts.map +0 -1
- package/dist/dtos/create-dashboard-question.dto.js +0 -105
- package/dist/dtos/create-dashboard-question.dto.js.map +0 -1
- package/dist/dtos/create-dashboard-variable.dto.d.ts +0 -19
- package/dist/dtos/create-dashboard-variable.dto.d.ts.map +0 -1
- package/dist/dtos/create-dashboard-variable.dto.js +0 -103
- package/dist/dtos/create-dashboard-variable.dto.js.map +0 -1
- package/dist/dtos/create-dashboard.dto.d.ts +0 -17
- package/dist/dtos/create-dashboard.dto.d.ts.map +0 -1
- package/dist/dtos/create-dashboard.dto.js +0 -102
- package/dist/dtos/create-dashboard.dto.js.map +0 -1
- package/dist/dtos/dashboard-variable-selection-dynamic-query.dto.d.ts +0 -8
- package/dist/dtos/dashboard-variable-selection-dynamic-query.dto.d.ts.map +0 -1
- package/dist/dtos/dashboard-variable-selection-dynamic-query.dto.js +0 -52
- package/dist/dtos/dashboard-variable-selection-dynamic-query.dto.js.map +0 -1
- package/dist/dtos/update-dashboard-layout.dto.d.ts +0 -8
- package/dist/dtos/update-dashboard-layout.dto.d.ts.map +0 -1
- package/dist/dtos/update-dashboard-layout.dto.js.map +0 -1
- package/dist/dtos/update-dashboard-question-sql-dataset-config.dto.d.ts +0 -13
- package/dist/dtos/update-dashboard-question-sql-dataset-config.dto.d.ts.map +0 -1
- package/dist/dtos/update-dashboard-question-sql-dataset-config.dto.js +0 -86
- package/dist/dtos/update-dashboard-question-sql-dataset-config.dto.js.map +0 -1
- package/dist/dtos/update-dashboard-question.dto.d.ts +0 -18
- package/dist/dtos/update-dashboard-question.dto.d.ts.map +0 -1
- package/dist/dtos/update-dashboard-question.dto.js +0 -112
- package/dist/dtos/update-dashboard-question.dto.js.map +0 -1
- package/dist/dtos/update-dashboard-variable.dto.d.ts +0 -16
- package/dist/dtos/update-dashboard-variable.dto.d.ts.map +0 -1
- package/dist/dtos/update-dashboard-variable.dto.js +0 -101
- package/dist/dtos/update-dashboard-variable.dto.js.map +0 -1
- package/dist/dtos/update-dashboard.dto.d.ts +0 -18
- package/dist/dtos/update-dashboard.dto.d.ts.map +0 -1
- package/dist/dtos/update-dashboard.dto.js +0 -108
- package/dist/dtos/update-dashboard.dto.js.map +0 -1
- package/dist/entities/dashboard-layout.entity.d.ts +0 -9
- package/dist/entities/dashboard-layout.entity.d.ts.map +0 -1
- package/dist/entities/dashboard-layout.entity.js +0 -41
- package/dist/entities/dashboard-layout.entity.js.map +0 -1
- package/dist/entities/dashboard-question-sql-dataset-config.entity.d.ts +0 -14
- package/dist/entities/dashboard-question-sql-dataset-config.entity.d.ts.map +0 -1
- package/dist/entities/dashboard-question-sql-dataset-config.entity.js +0 -66
- package/dist/entities/dashboard-question-sql-dataset-config.entity.js.map +0 -1
- package/dist/entities/dashboard-question.entity.d.ts +0 -17
- package/dist/entities/dashboard-question.entity.d.ts.map +0 -1
- package/dist/entities/dashboard-question.entity.js +0 -77
- package/dist/entities/dashboard-question.entity.js.map +0 -1
- package/dist/entities/dashboard-variable.entity.d.ts +0 -16
- package/dist/entities/dashboard-variable.entity.d.ts.map +0 -1
- package/dist/entities/dashboard-variable.entity.js +0 -79
- package/dist/entities/dashboard-variable.entity.js.map +0 -1
- package/dist/entities/dashboard.entity.d.ts +0 -16
- package/dist/entities/dashboard.entity.d.ts.map +0 -1
- package/dist/entities/dashboard.entity.js +0 -64
- package/dist/entities/dashboard.entity.js.map +0 -1
- package/dist/mappers/dashboard-mapper.d.ts +0 -6
- package/dist/mappers/dashboard-mapper.d.ts.map +0 -1
- package/dist/mappers/dashboard-mapper.js +0 -62
- package/dist/mappers/dashboard-mapper.js.map +0 -1
- package/dist/repository/dashboard-layout.repository.d.ts.map +0 -1
- package/dist/repository/dashboard-layout.repository.js.map +0 -1
- package/dist/repository/dashboard-question-sql-dataset-config.repository.d.ts +0 -12
- package/dist/repository/dashboard-question-sql-dataset-config.repository.d.ts.map +0 -1
- package/dist/repository/dashboard-question-sql-dataset-config.repository.js +0 -34
- package/dist/repository/dashboard-question-sql-dataset-config.repository.js.map +0 -1
- package/dist/repository/dashboard-question.repository.d.ts +0 -12
- package/dist/repository/dashboard-question.repository.d.ts.map +0 -1
- package/dist/repository/dashboard-question.repository.js +0 -34
- package/dist/repository/dashboard-question.repository.js.map +0 -1
- package/dist/repository/dashboard-variable.repository.d.ts +0 -12
- package/dist/repository/dashboard-variable.repository.d.ts.map +0 -1
- package/dist/repository/dashboard-variable.repository.js +0 -34
- package/dist/repository/dashboard-variable.repository.js.map +0 -1
- package/dist/repository/dashboard.repository.d.ts +0 -13
- package/dist/repository/dashboard.repository.d.ts.map +0 -1
- package/dist/repository/dashboard.repository.js +0 -104
- package/dist/repository/dashboard.repository.js.map +0 -1
- package/dist/services/dashboard-layout.service.d.ts +0 -20
- package/dist/services/dashboard-layout.service.d.ts.map +0 -1
- package/dist/services/dashboard-layout.service.js +0 -120
- package/dist/services/dashboard-layout.service.js.map +0 -1
- package/dist/services/dashboard-question-sql-dataset-config.service.d.ts +0 -12
- package/dist/services/dashboard-question-sql-dataset-config.service.d.ts.map +0 -1
- package/dist/services/dashboard-question-sql-dataset-config.service.js +0 -38
- package/dist/services/dashboard-question-sql-dataset-config.service.js.map +0 -1
- package/dist/services/dashboard-question.service.d.ts +0 -23
- package/dist/services/dashboard-question.service.d.ts.map +0 -1
- package/dist/services/dashboard-question.service.js +0 -135
- package/dist/services/dashboard-question.service.js.map +0 -1
- package/dist/services/dashboard-selection-providers/dashboard-variable-sql-dynamic-provider.service.d.ts +0 -12
- package/dist/services/dashboard-selection-providers/dashboard-variable-sql-dynamic-provider.service.d.ts.map +0 -1
- package/dist/services/dashboard-selection-providers/dashboard-variable-sql-dynamic-provider.service.js +0 -55
- package/dist/services/dashboard-selection-providers/dashboard-variable-sql-dynamic-provider.service.js.map +0 -1
- package/dist/services/dashboard-selection-providers/dashboard-variable-test-dynamic-provider.service.d.ts +0 -11
- package/dist/services/dashboard-selection-providers/dashboard-variable-test-dynamic-provider.service.d.ts.map +0 -1
- package/dist/services/dashboard-selection-providers/dashboard-variable-test-dynamic-provider.service.js +0 -45
- package/dist/services/dashboard-selection-providers/dashboard-variable-test-dynamic-provider.service.js.map +0 -1
- package/dist/services/dashboard-variable.service.d.ts +0 -13
- package/dist/services/dashboard-variable.service.d.ts.map +0 -1
- package/dist/services/dashboard-variable.service.js.map +0 -1
- package/dist/services/dashboard.service.d.ts +0 -29
- package/dist/services/dashboard.service.d.ts.map +0 -1
- package/dist/services/dashboard.service.js +0 -171
- package/dist/services/dashboard.service.js.map +0 -1
- package/dist/services/genai/mcp-handlers/solid-add-question-to-dashboard-mcp-handler.service.d.ts +0 -12
- package/dist/services/genai/mcp-handlers/solid-add-question-to-dashboard-mcp-handler.service.d.ts.map +0 -1
- package/dist/services/genai/mcp-handlers/solid-add-question-to-dashboard-mcp-handler.service.js +0 -41
- package/dist/services/genai/mcp-handlers/solid-add-question-to-dashboard-mcp-handler.service.js.map +0 -1
- package/dist/services/genai/mcp-handlers/solid-add-variable-to-dashboard-mcp-handler.service.d.ts +0 -12
- package/dist/services/genai/mcp-handlers/solid-add-variable-to-dashboard-mcp-handler.service.d.ts.map +0 -1
- package/dist/services/genai/mcp-handlers/solid-add-variable-to-dashboard-mcp-handler.service.js +0 -42
- package/dist/services/genai/mcp-handlers/solid-add-variable-to-dashboard-mcp-handler.service.js.map +0 -1
- package/dist/services/genai/mcp-handlers/solid-create-dashboard-mcp-handler.service.d.ts +0 -25
- package/dist/services/genai/mcp-handlers/solid-create-dashboard-mcp-handler.service.d.ts.map +0 -1
- package/dist/services/genai/mcp-handlers/solid-create-dashboard-mcp-handler.service.js +0 -116
- package/dist/services/genai/mcp-handlers/solid-create-dashboard-mcp-handler.service.js.map +0 -1
- package/dist/services/genai/mcp-handlers/solid-create-dashboard-question-mcp-handler.service.d.ts +0 -12
- package/dist/services/genai/mcp-handlers/solid-create-dashboard-question-mcp-handler.service.d.ts.map +0 -1
- package/dist/services/genai/mcp-handlers/solid-create-dashboard-question-mcp-handler.service.js +0 -37
- package/dist/services/genai/mcp-handlers/solid-create-dashboard-question-mcp-handler.service.js.map +0 -1
- package/dist/services/genai/mcp-handlers/solid-create-dashboard-question-sql-dataset-config-mcp-handler.service.d.ts +0 -12
- package/dist/services/genai/mcp-handlers/solid-create-dashboard-question-sql-dataset-config-mcp-handler.service.d.ts.map +0 -1
- package/dist/services/genai/mcp-handlers/solid-create-dashboard-question-sql-dataset-config-mcp-handler.service.js +0 -38
- package/dist/services/genai/mcp-handlers/solid-create-dashboard-question-sql-dataset-config-mcp-handler.service.js.map +0 -1
- package/dist/services/genai/mcp-handlers/solid-create-dashboard-widget-mcp-handler.service.d.ts +0 -12
- package/dist/services/genai/mcp-handlers/solid-create-dashboard-widget-mcp-handler.service.d.ts.map +0 -1
- package/dist/services/genai/mcp-handlers/solid-create-dashboard-widget-mcp-handler.service.js +0 -38
- package/dist/services/genai/mcp-handlers/solid-create-dashboard-widget-mcp-handler.service.js.map +0 -1
- package/dist/services/question-data-providers/chartjs-sql-data-provider.service.d.ts +0 -34
- package/dist/services/question-data-providers/chartjs-sql-data-provider.service.d.ts.map +0 -1
- package/dist/services/question-data-providers/chartjs-sql-data-provider.service.js +0 -90
- package/dist/services/question-data-providers/chartjs-sql-data-provider.service.js.map +0 -1
- package/dist/services/question-data-providers/helpers.d.ts +0 -7
- package/dist/services/question-data-providers/helpers.d.ts.map +0 -1
- package/dist/services/question-data-providers/helpers.js +0 -25
- package/dist/services/question-data-providers/helpers.js.map +0 -1
- package/dist/services/question-data-providers/prime-react-datatable-sql-data-provider.service.d.ts +0 -14
- package/dist/services/question-data-providers/prime-react-datatable-sql-data-provider.service.d.ts.map +0 -1
- package/dist/services/question-data-providers/prime-react-datatable-sql-data-provider.service.js +0 -71
- package/dist/services/question-data-providers/prime-react-datatable-sql-data-provider.service.js.map +0 -1
- package/dist/services/question-data-providers/prime-react-meter-group-sql-data-provider.service.d.ts +0 -16
- package/dist/services/question-data-providers/prime-react-meter-group-sql-data-provider.service.d.ts.map +0 -1
- package/dist/services/question-data-providers/prime-react-meter-group-sql-data-provider.service.js +0 -93
- package/dist/services/question-data-providers/prime-react-meter-group-sql-data-provider.service.js.map +0 -1
- package/dist/services/selection-providers/list-of-dashboard-question-providers-selection-provider.service.d.ts +0 -11
- package/dist/services/selection-providers/list-of-dashboard-question-providers-selection-provider.service.d.ts.map +0 -1
- package/dist/services/selection-providers/list-of-dashboard-question-providers-selection-provider.service.js +0 -49
- package/dist/services/selection-providers/list-of-dashboard-question-providers-selection-provider.service.js.map +0 -1
- package/dist/services/selection-providers/list-of-dashboard-variable-providers-selection-provider.service.d.ts +0 -11
- package/dist/services/selection-providers/list-of-dashboard-variable-providers-selection-provider.service.d.ts.map +0 -1
- package/dist/services/selection-providers/list-of-dashboard-variable-providers-selection-provider.service.js +0 -47
- package/dist/services/selection-providers/list-of-dashboard-variable-providers-selection-provider.service.js.map +0 -1
- package/dist/services/sql-expression-resolver.service.d.ts +0 -12
- package/dist/services/sql-expression-resolver.service.d.ts.map +0 -1
- package/dist/services/sql-expression-resolver.service.js +0 -121
- package/dist/services/sql-expression-resolver.service.js.map +0 -1
- package/dist/subscribers/dashboard-question-sql-dataset-config.subscriber.d.ts +0 -16
- package/dist/subscribers/dashboard-question-sql-dataset-config.subscriber.d.ts.map +0 -1
- package/dist/subscribers/dashboard-question-sql-dataset-config.subscriber.js +0 -72
- package/dist/subscribers/dashboard-question-sql-dataset-config.subscriber.js.map +0 -1
- package/dist/subscribers/dashboard-question.subscriber.d.ts +0 -16
- package/dist/subscribers/dashboard-question.subscriber.d.ts.map +0 -1
- package/dist/subscribers/dashboard-question.subscriber.js +0 -72
- package/dist/subscribers/dashboard-question.subscriber.js.map +0 -1
- package/dist/subscribers/dashboard-variable.subscriber.d.ts +0 -16
- package/dist/subscribers/dashboard-variable.subscriber.d.ts.map +0 -1
- package/dist/subscribers/dashboard-variable.subscriber.js +0 -72
- package/dist/subscribers/dashboard-variable.subscriber.js.map +0 -1
- package/dist/subscribers/dashboard.subscriber.d.ts +0 -16
- package/dist/subscribers/dashboard.subscriber.d.ts.map +0 -1
- package/dist/subscribers/dashboard.subscriber.js +0 -71
- package/dist/subscribers/dashboard.subscriber.js.map +0 -1
- package/dist-tests/api/authenticate.spec.js +0 -119
- package/dist-tests/api/authenticate.spec.js.map +0 -1
- package/dist-tests/api/crud-service.findOne.cityMaster.spec.js +0 -97
- package/dist-tests/api/crud-service.findOne.cityMaster.spec.js.map +0 -1
- package/dist-tests/api/ping.spec.js +0 -21
- package/dist-tests/api/ping.spec.js.map +0 -1
- package/dist-tests/helpers/auth.js +0 -41
- package/dist-tests/helpers/auth.js.map +0 -1
- package/dist-tests/helpers/env.js +0 -11
- package/dist-tests/helpers/env.js.map +0 -1
- package/docs/grouping-enhancements.md +0 -89
- package/docs/java-spring/README.md +0 -3
- package/docs/java-spring/solid-core-module-deep-dive-report.md +0 -1317
- package/docs/seed-changes.md +0 -65
- package/docs/test-data-workflow.md +0 -200
- package/docs/type-declaration-import-issue.md +0 -24
- package/src/controllers/dashboard-layout.controller.ts +0 -106
- package/src/controllers/dashboard-question-sql-dataset-config.controller.ts +0 -93
- package/src/controllers/dashboard-question.controller.ts +0 -104
- package/src/decorators/dashboard-question-data-provider.decorator.ts +0 -7
- package/src/decorators/dashboard-selection-provider.decorator.ts +0 -7
- package/src/dtos/create-dashboard-layout.dto.ts +0 -31
- package/src/dtos/create-dashboard-question-sql-dataset-config.dto.ts +0 -42
- package/src/dtos/create-dashboard-question.dto.ts +0 -62
- package/src/dtos/create-dashboard-variable.dto.ts +0 -60
- package/src/dtos/create-dashboard.dto.ts +0 -61
- package/src/dtos/dashboard-variable-selection-dynamic-query.dto.ts +0 -29
- package/src/dtos/update-dashboard-layout.dto.ts +0 -30
- package/src/dtos/update-dashboard-question-sql-dataset-config.dto.ts +0 -49
- package/src/dtos/update-dashboard-question.dto.ts +0 -67
- package/src/dtos/update-dashboard-variable.dto.ts +0 -58
- package/src/dtos/update-dashboard.dto.ts +0 -65
- package/src/entities/dashboard-layout.entity.ts +0 -18
- package/src/entities/dashboard-question-sql-dataset-config.entity.ts +0 -37
- package/src/entities/dashboard-question.entity.ts +0 -46
- package/src/entities/dashboard-variable.entity.ts +0 -44
- package/src/entities/dashboard.entity.ts +0 -36
- package/src/mappers/dashboard-mapper.ts +0 -53
- package/src/repository/dashboard-layout.repository.ts +0 -17
- package/src/repository/dashboard-question-sql-dataset-config.repository.ts +0 -17
- package/src/repository/dashboard-question.repository.ts +0 -17
- package/src/repository/dashboard-variable.repository.ts +0 -17
- package/src/repository/dashboard.repository.ts +0 -101
- package/src/services/dashboard-layout.service.ts +0 -111
- package/src/services/dashboard-question-sql-dataset-config.service.ts +0 -25
- package/src/services/dashboard-question.service.ts +0 -150
- package/src/services/dashboard-selection-providers/dashboard-variable-sql-dynamic-provider.service.ts +0 -56
- package/src/services/dashboard-selection-providers/dashboard-variable-test-dynamic-provider.service.ts +0 -37
- package/src/services/dashboard-variable.service.ts +0 -27
- package/src/services/dashboard.service.ts +0 -148
- package/src/services/genai/mcp-handlers/solid-add-question-to-dashboard-mcp-handler.service.ts +0 -43
- package/src/services/genai/mcp-handlers/solid-add-variable-to-dashboard-mcp-handler.service.ts +0 -44
- package/src/services/genai/mcp-handlers/solid-create-dashboard-mcp-handler.service.ts +0 -114
- package/src/services/genai/mcp-handlers/solid-create-dashboard-question-mcp-handler.service.ts +0 -38
- package/src/services/genai/mcp-handlers/solid-create-dashboard-question-sql-dataset-config-mcp-handler.service.ts +0 -40
- package/src/services/genai/mcp-handlers/solid-create-dashboard-widget-mcp-handler.service.ts +0 -39
- package/src/services/question-data-providers/chartjs-sql-data-provider.service.ts +0 -121
- package/src/services/question-data-providers/helpers.ts +0 -30
- package/src/services/question-data-providers/prime-react-datatable-sql-data-provider.service.ts +0 -74
- package/src/services/question-data-providers/prime-react-meter-group-sql-data-provider.service.ts +0 -115
- package/src/services/selection-providers/list-of-dashboard-question-providers-selection-provider.service.ts +0 -44
- package/src/services/selection-providers/list-of-dashboard-variable-providers-selection-provider.service.ts +0 -41
- package/src/services/sql-expression-resolver.service.ts +0 -140
- package/src/subscribers/dashboard-question-sql-dataset-config.subscriber.ts +0 -61
- package/src/subscribers/dashboard-question.subscriber.ts +0 -62
- package/src/subscribers/dashboard-variable.subscriber.ts +0 -63
- package/src/subscribers/dashboard.subscriber.ts +0 -62
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
1. Do i need to create a storeStreams method for aws service too?
|
|
2
|
+
- Handle later
|
|
3
|
+
2. queues handling -> if queues is enabled by default, i.e triggerExport(exportTransactionEntity.id).
|
|
4
|
+
- startExport should either return the data or return the transaction id
|
|
5
|
+
3. How to handle scenarios wherein, nested related exist.(do i need to only get the userkey)
|
|
6
|
+
- show the userKey
|
|
@@ -0,0 +1,603 @@
|
|
|
1
|
+
# Dashboarding Architecture and Developer Guide
|
|
2
|
+
|
|
3
|
+
This document is the canonical guide for SolidX dashboarding in its new metadata-driven architecture.
|
|
4
|
+
|
|
5
|
+
It covers:
|
|
6
|
+
- end-to-end architecture (`solid-core-module` + `solid-core-ui`)
|
|
7
|
+
- metadata authoring model
|
|
8
|
+
- backend widget data providers
|
|
9
|
+
- frontend default/custom widget rendering
|
|
10
|
+
- layout persistence model
|
|
11
|
+
- extension points and troubleshooting
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## 1. Guiding Principles
|
|
16
|
+
|
|
17
|
+
- **Metadata-first**: dashboard definitions live in module metadata JSON under root-level `dashboards`.
|
|
18
|
+
- **Provider-driven backend**: every widget resolves data through a backend data provider.
|
|
19
|
+
- **Extension-driven frontend**: widgets render through extension registry components (`dashboardWidget` type).
|
|
20
|
+
- **User personalization**: only user layout overrides are persisted; dashboard definitions are not persisted.
|
|
21
|
+
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
## 2. Source of Truth (Important)
|
|
25
|
+
|
|
26
|
+
### 2.1 What is persisted vs what is not
|
|
27
|
+
|
|
28
|
+
Persisted:
|
|
29
|
+
- user-specific layout override (`ss_dashboard_user_layout`)
|
|
30
|
+
|
|
31
|
+
Not persisted:
|
|
32
|
+
- dashboard definitions (`dashboards` metadata)
|
|
33
|
+
- variables
|
|
34
|
+
- widgets
|
|
35
|
+
- default layout
|
|
36
|
+
|
|
37
|
+
### 2.2 Metadata location resolution
|
|
38
|
+
|
|
39
|
+
At runtime, metadata is read from file paths resolved by `ModuleMetadataHelperService`:
|
|
40
|
+
|
|
41
|
+
1. `module-metadata/<module-name>/<module-name>-metadata.json`
|
|
42
|
+
2. fallback (solid-core local run): `src/seeders/seed-data/solid-core-metadata.json`
|
|
43
|
+
3. fallback (consuming project): `node_modules/@solidxai/core/src/seeders/seed-data/solid-core-metadata.json`
|
|
44
|
+
|
|
45
|
+
This is the most common reason for “changes not taking effect”: the running service may be reading the installed package metadata, not local source metadata.
|
|
46
|
+
|
|
47
|
+
---
|
|
48
|
+
|
|
49
|
+
## 3. End-to-End Runtime Flow
|
|
50
|
+
|
|
51
|
+
1. UI route opens dashboard page:
|
|
52
|
+
- `/admin/core/:moduleName/dashboard/:dashboardName`
|
|
53
|
+
|
|
54
|
+
2. UI loads definition:
|
|
55
|
+
- `GET /dashboard/:module/:dashboardName/definition`
|
|
56
|
+
|
|
57
|
+
3. UI loads layout:
|
|
58
|
+
- `GET /dashboard/:module/:dashboardName/layout`
|
|
59
|
+
- backend returns `{ defaultLayout, userLayout, effectiveLayout }`
|
|
60
|
+
|
|
61
|
+
4. UI resolves filters and requests data:
|
|
62
|
+
- `POST /dashboard/:module/:dashboardName/data`
|
|
63
|
+
|
|
64
|
+
5. Backend runtime service:
|
|
65
|
+
- reads metadata dashboard definition
|
|
66
|
+
- resolves provider per widget from registry
|
|
67
|
+
- checks widget permissions for the active user
|
|
68
|
+
- executes providers with variables + provider context only for authorized widgets
|
|
69
|
+
- returns normalized provider envelopes
|
|
70
|
+
|
|
71
|
+
6. User drag/resize save:
|
|
72
|
+
- `PUT /dashboard/:module/:dashboardName/layout`
|
|
73
|
+
- persists user layout override
|
|
74
|
+
|
|
75
|
+
---
|
|
76
|
+
|
|
77
|
+
## 4. Backend Architecture (`solid-core-module`)
|
|
78
|
+
|
|
79
|
+
### 4.1 Core runtime controller
|
|
80
|
+
|
|
81
|
+
File:
|
|
82
|
+
- `src/controllers/dashboard.controller.ts`
|
|
83
|
+
|
|
84
|
+
Endpoints:
|
|
85
|
+
- `GET /dashboard/:moduleName/:dashboardName/definition`
|
|
86
|
+
- `POST /dashboard/:moduleName/:dashboardName/widgets/:widgetName/data`
|
|
87
|
+
- `POST /dashboard/:moduleName/:dashboardName/data`
|
|
88
|
+
- `GET /dashboard/:moduleName/:dashboardName/variable-options/:variableName`
|
|
89
|
+
- `GET /dashboard/:moduleName/:dashboardName/layout`
|
|
90
|
+
- `PUT /dashboard/:moduleName/:dashboardName/layout`
|
|
91
|
+
|
|
92
|
+
All runtime dashboard endpoints are JWT-protected (`@ApiBearerAuth('jwt')`).
|
|
93
|
+
|
|
94
|
+
### 4.2 Runtime service
|
|
95
|
+
|
|
96
|
+
File:
|
|
97
|
+
- `src/services/dashboard-runtime.service.ts`
|
|
98
|
+
|
|
99
|
+
Responsibilities:
|
|
100
|
+
- load dashboard definition from metadata
|
|
101
|
+
- resolve and invoke widget providers
|
|
102
|
+
- resolve static/dynamic variable options
|
|
103
|
+
- compute `effectiveLayout` via default+user merge
|
|
104
|
+
- save per-user layout
|
|
105
|
+
|
|
106
|
+
### 4.3 Provider contract
|
|
107
|
+
|
|
108
|
+
File:
|
|
109
|
+
- `src/interfaces.ts`
|
|
110
|
+
|
|
111
|
+
Interfaces:
|
|
112
|
+
- `IDashboardWidgetDataProviderContext`
|
|
113
|
+
- `IDashboardWidgetDataResponseEnvelope`
|
|
114
|
+
- `IDashboardWidgetDataProvider`
|
|
115
|
+
|
|
116
|
+
Provider contract:
|
|
117
|
+
- `name(): string`
|
|
118
|
+
- `help(): string`
|
|
119
|
+
- `getData(widgetDefinition, ctxt): Promise<Envelope | any>`
|
|
120
|
+
|
|
121
|
+
Envelope shape:
|
|
122
|
+
- `meta`: provider name, widget name, duration, generatedAt
|
|
123
|
+
- `data`: widget payload
|
|
124
|
+
- `uiHints` (optional)
|
|
125
|
+
|
|
126
|
+
### 4.4 Provider registration flow
|
|
127
|
+
|
|
128
|
+
Files:
|
|
129
|
+
- decorator: `src/decorators/dashboard-widget-data-provider.decorator.ts`
|
|
130
|
+
- introspection: `src/services/solid-introspect.service.ts`
|
|
131
|
+
- registry: `src/helpers/solid-registry.ts`
|
|
132
|
+
|
|
133
|
+
Pattern:
|
|
134
|
+
- annotate with `@DashboardWidgetDataProvider()`
|
|
135
|
+
- introspection discovers providers
|
|
136
|
+
- registry stores providers
|
|
137
|
+
- runtime resolves by `widget.dataProvider`
|
|
138
|
+
|
|
139
|
+
### 4.5 Variable options providers
|
|
140
|
+
|
|
141
|
+
Dynamic selection variables reuse existing selection provider infrastructure.
|
|
142
|
+
|
|
143
|
+
Reference providers:
|
|
144
|
+
- `src/services/selection-providers/mq-dashboard-queue-name-variable-options-provider.service.ts`
|
|
145
|
+
- `src/services/selection-providers/mq-dashboard-message-broker-variable-options-provider.service.ts`
|
|
146
|
+
|
|
147
|
+
Metadata variable uses:
|
|
148
|
+
- `type: "selectionDynamic"`
|
|
149
|
+
- `selectionConfig.providerName`
|
|
150
|
+
|
|
151
|
+
### 4.6 Queue-health reference providers
|
|
152
|
+
|
|
153
|
+
Folder:
|
|
154
|
+
- `src/services/dashboard-providers/`
|
|
155
|
+
|
|
156
|
+
Includes KPI + charts + table providers:
|
|
157
|
+
- `mq-dashboard-total-messages-kpi-provider.service.ts`
|
|
158
|
+
- `mq-dashboard-succeeded-messages-kpi-provider.service.ts`
|
|
159
|
+
- `mq-dashboard-failed-messages-kpi-provider.service.ts`
|
|
160
|
+
- `mq-dashboard-inflight-messages-kpi-provider.service.ts`
|
|
161
|
+
- `mq-dashboard-success-rate-kpi-provider.service.ts`
|
|
162
|
+
- `mq-dashboard-avg-elapsed-kpi-provider.service.ts`
|
|
163
|
+
- `mq-dashboard-messages-over-time-provider.service.ts`
|
|
164
|
+
- `mq-dashboard-stage-distribution-provider.service.ts`
|
|
165
|
+
- `mq-dashboard-queue-wise-failures-provider.service.ts`
|
|
166
|
+
- `mq-dashboard-queue-wise-avg-elapsed-provider.service.ts`
|
|
167
|
+
- `mq-dashboard-latency-trend-provider.service.ts`
|
|
168
|
+
- `mq-dashboard-recent-failures-provider.service.ts`
|
|
169
|
+
|
|
170
|
+
Shared filter utilities:
|
|
171
|
+
- `mq-dashboard-provider-utils.ts`
|
|
172
|
+
|
|
173
|
+
### 4.7 Layout persistence model
|
|
174
|
+
|
|
175
|
+
Generated model and assets:
|
|
176
|
+
- entity: `src/entities/dashboard-user-layout.entity.ts`
|
|
177
|
+
- repository: `src/repositories/dashboard-user-layout.repository.ts`
|
|
178
|
+
- service: `src/services/dashboard-user-layout.service.ts`
|
|
179
|
+
- controller: `src/controllers/dashboard-user-layout.controller.ts`
|
|
180
|
+
|
|
181
|
+
Table:
|
|
182
|
+
- `ss_dashboard_user_layout`
|
|
183
|
+
|
|
184
|
+
Uniqueness:
|
|
185
|
+
- `(user_id, module_id, dashboard_name)`
|
|
186
|
+
|
|
187
|
+
Stored payload:
|
|
188
|
+
- `layoutJson` with Gridstack-compatible `items`.
|
|
189
|
+
|
|
190
|
+
---
|
|
191
|
+
|
|
192
|
+
## 5. Metadata Contract (`dashboards`)
|
|
193
|
+
|
|
194
|
+
Metadata file (solid-core reference):
|
|
195
|
+
- `src/seeders/seed-data/solid-core-metadata.json`
|
|
196
|
+
|
|
197
|
+
`dashboards` is a root peer of `actions`, `menus`, `roles`, `users`, etc.
|
|
198
|
+
|
|
199
|
+
### 5.1 Dashboard definition shape
|
|
200
|
+
|
|
201
|
+
Typical fields:
|
|
202
|
+
- `dashboardSchemaVersion`
|
|
203
|
+
- `name`
|
|
204
|
+
- `displayName`
|
|
205
|
+
- `description`
|
|
206
|
+
- `moduleUserKey`
|
|
207
|
+
- `variables[]`
|
|
208
|
+
- `widgets[]`
|
|
209
|
+
- `defaultLayout`
|
|
210
|
+
|
|
211
|
+
### 5.2 Variable types in current implementation
|
|
212
|
+
|
|
213
|
+
- `date`
|
|
214
|
+
- `selectionStatic`
|
|
215
|
+
- `selectionDynamic`
|
|
216
|
+
- `isMultiSelect` supported for selection types
|
|
217
|
+
|
|
218
|
+
Date variable payload sent to backend:
|
|
219
|
+
- `{ from?: ISO, to?: ISO }`
|
|
220
|
+
- UI preset flow supports `today`, `last_24_hours`, `last_7_days`, `last_30_days`, `custom`
|
|
221
|
+
|
|
222
|
+
Static selection:
|
|
223
|
+
- `selectionStaticValues: ["value:Label", ...]`
|
|
224
|
+
|
|
225
|
+
Dynamic selection:
|
|
226
|
+
- `selectionConfig.providerName`
|
|
227
|
+
- optional `selectionConfig.providerContext`
|
|
228
|
+
|
|
229
|
+
### 5.3 Widget definition shape
|
|
230
|
+
|
|
231
|
+
Typical fields:
|
|
232
|
+
- `id`
|
|
233
|
+
- `name`
|
|
234
|
+
- `type` (`kpi`, `lineChart`, `barChart`, `pieChart`, `table`, `customChart`, ...)
|
|
235
|
+
- `dataProvider`
|
|
236
|
+
- `providerContext`
|
|
237
|
+
- optional UI override:
|
|
238
|
+
- `componentName` (or equivalent custom component key)
|
|
239
|
+
|
|
240
|
+
### 5.4 Default layout shape
|
|
241
|
+
|
|
242
|
+
`defaultLayout`:
|
|
243
|
+
- `engine: "gridstack"`
|
|
244
|
+
- `columns: number`
|
|
245
|
+
- `items[]` each with:
|
|
246
|
+
- `widgetId`, `x`, `y`, `w`, `h`, optional `minW`, `minH`
|
|
247
|
+
|
|
248
|
+
### 5.5 Explicit widget permissions
|
|
249
|
+
|
|
250
|
+
Dashboards use SolidX's existing explicit permission mechanism for widget-level authorization.
|
|
251
|
+
|
|
252
|
+
Permission format:
|
|
253
|
+
- `dashboard:<dashboard-name>:<widget-pattern>`
|
|
254
|
+
|
|
255
|
+
Rules:
|
|
256
|
+
- the first segment is always `dashboard`
|
|
257
|
+
- the dashboard name must match exactly
|
|
258
|
+
- the widget segment supports:
|
|
259
|
+
- exact widget names
|
|
260
|
+
- `*`
|
|
261
|
+
- regex-style patterns
|
|
262
|
+
|
|
263
|
+
Queue-health reference example:
|
|
264
|
+
- `dashboard:queue-health:kpi-.*`
|
|
265
|
+
- `dashboard:queue-health:chart-queue-.*`
|
|
266
|
+
- `dashboard:queue-health:chart-processing-latency-trend`
|
|
267
|
+
|
|
268
|
+
What this means:
|
|
269
|
+
- all KPI widgets are authorized by `kpi-.*`
|
|
270
|
+
- queue-oriented chart widgets such as `chart-queue-wise-failures`, `chart-queue-wise-avg-elapsed`, and `chart-queue-sla-heatmap` are authorized by `chart-queue-.*`
|
|
271
|
+
- `chart-processing-latency-trend` is authorized explicitly
|
|
272
|
+
- widgets like `chart-stage-distribution`, `chart-messages-over-time`, and `table-recent-failures` remain unauthorized unless extra permissions are granted
|
|
273
|
+
|
|
274
|
+
Important:
|
|
275
|
+
- dashboard developers must declare these permissions explicitly in module metadata
|
|
276
|
+
- they must then assign them to roles
|
|
277
|
+
- users receive them through standard SolidX RBAC
|
|
278
|
+
|
|
279
|
+
---
|
|
280
|
+
|
|
281
|
+
## 6. Frontend Architecture (`solid-core-ui`)
|
|
282
|
+
|
|
283
|
+
### 6.1 Route and page
|
|
284
|
+
|
|
285
|
+
Route registration:
|
|
286
|
+
- `src/routes/solidRoutes.tsx`
|
|
287
|
+
- path: `/admin/core/:moduleName/dashboard/:dashboardName`
|
|
288
|
+
|
|
289
|
+
Page:
|
|
290
|
+
- `src/routes/pages/admin/core/DashboardPage.tsx`
|
|
291
|
+
|
|
292
|
+
### 6.2 Dashboard API slice
|
|
293
|
+
|
|
294
|
+
File:
|
|
295
|
+
- `src/redux/api/dashboardRuntimeApi.ts`
|
|
296
|
+
|
|
297
|
+
Hooks:
|
|
298
|
+
- `useGetDashboardDefinitionQuery`
|
|
299
|
+
- `useGetDashboardLayoutQuery`
|
|
300
|
+
- `useSaveDashboardLayoutMutation`
|
|
301
|
+
- `useGetDashboardDataMutation`
|
|
302
|
+
- `useLazyGetDashboardVariableOptionsQuery`
|
|
303
|
+
|
|
304
|
+
### 6.3 Filter UX (current)
|
|
305
|
+
|
|
306
|
+
- Filters are rendered in a modal dialog (not inline panel)
|
|
307
|
+
- Header has icon CTAs: filter, refresh, save layout
|
|
308
|
+
- Filter icon shows applied-filter badge count
|
|
309
|
+
- Date variable UX:
|
|
310
|
+
- preset dropdown first
|
|
311
|
+
- selecting `custom` reveals start/end date pickers
|
|
312
|
+
- Dynamic selection uses Solid autocomplete primitives
|
|
313
|
+
- Static selection uses Solid primitives (single/multi behavior)
|
|
314
|
+
|
|
315
|
+
### 6.4 Layout engine
|
|
316
|
+
|
|
317
|
+
- Gridstack integration in `DashboardPage`
|
|
318
|
+
- layout source order:
|
|
319
|
+
- `effectiveLayout.items` from backend
|
|
320
|
+
- fallback computed layout from widget order
|
|
321
|
+
- save sends full layout snapshot for all widgets
|
|
322
|
+
|
|
323
|
+
### 6.5 Widget extension system
|
|
324
|
+
|
|
325
|
+
Types:
|
|
326
|
+
- `src/types/extension-registry.ts`
|
|
327
|
+
- includes `dashboardWidget`
|
|
328
|
+
|
|
329
|
+
Registry:
|
|
330
|
+
- `src/helpers/registry.ts`
|
|
331
|
+
|
|
332
|
+
Dashboard widget props:
|
|
333
|
+
- `src/types/dashboard.ts` (`DashboardWidgetComponentProps`)
|
|
334
|
+
|
|
335
|
+
Default registered dashboard widgets:
|
|
336
|
+
- `DefaultDashboardKpiWidget`
|
|
337
|
+
- `DefaultDashboardLineChartWidget`
|
|
338
|
+
- `DefaultDashboardBarChartWidget`
|
|
339
|
+
- `DefaultDashboardPieChartWidget`
|
|
340
|
+
- `DefaultDashboardTableWidget`
|
|
341
|
+
- `DefaultDashboardUnknownWidget`
|
|
342
|
+
|
|
343
|
+
### 6.6 Unauthorized widget rendering
|
|
344
|
+
|
|
345
|
+
Authorization is enforced on the backend first and reflected in the frontend second.
|
|
346
|
+
|
|
347
|
+
Current behavior:
|
|
348
|
+
- if the active user lacks widget permission, the backend does not invoke the widget provider at all
|
|
349
|
+
- the backend returns a normalized unauthorized envelope
|
|
350
|
+
- the frontend still renders the widget card in the dashboard grid
|
|
351
|
+
- the widget body shows a compact centered `Unauthorized` state
|
|
352
|
+
|
|
353
|
+
This preserves layout stability while ensuring protected widget data never leaves the server.
|
|
354
|
+
|
|
355
|
+
### 6.7 Chart abstraction
|
|
356
|
+
|
|
357
|
+
- baseline chart engine: Apache ECharts
|
|
358
|
+
- mapper lives under:
|
|
359
|
+
- `src/components/core/dashboard/mappers/echartsOptionMapper`
|
|
360
|
+
- default chart widgets convert provider payload -> ECharts options
|
|
361
|
+
|
|
362
|
+
---
|
|
363
|
+
|
|
364
|
+
## 7. Developer Workflows
|
|
365
|
+
|
|
366
|
+
## 7.1 Create a new dashboard (metadata-first)
|
|
367
|
+
|
|
368
|
+
1. Add dashboard block under root `dashboards[]`
|
|
369
|
+
2. Define variables
|
|
370
|
+
3. Define widgets with `dataProvider`
|
|
371
|
+
4. Define `defaultLayout`
|
|
372
|
+
5. Add action/menu entries for navigation
|
|
373
|
+
6. ensure route points to `/admin/core/<module>/dashboard/<dashboardName>`
|
|
374
|
+
|
|
375
|
+
## 7.2 Add a new backend widget provider
|
|
376
|
+
|
|
377
|
+
1. Create provider class under `src/services/dashboard-providers`
|
|
378
|
+
2. Implement `IDashboardWidgetDataProvider`
|
|
379
|
+
3. Annotate with `@DashboardWidgetDataProvider()` + `@Injectable()`
|
|
380
|
+
4. Inject repositories and use security-rule-aware query builders
|
|
381
|
+
5. Return envelope with `meta` and `data`
|
|
382
|
+
6. Reference provider name in metadata widget definition
|
|
383
|
+
|
|
384
|
+
Minimal skeleton:
|
|
385
|
+
|
|
386
|
+
```ts
|
|
387
|
+
@DashboardWidgetDataProvider()
|
|
388
|
+
@Injectable()
|
|
389
|
+
export class MyWidgetProvider implements IDashboardWidgetDataProvider {
|
|
390
|
+
name(): string {
|
|
391
|
+
return "MyWidgetProvider";
|
|
392
|
+
}
|
|
393
|
+
|
|
394
|
+
help(): string {
|
|
395
|
+
return "Returns data for My Widget.";
|
|
396
|
+
}
|
|
397
|
+
|
|
398
|
+
async getData(widgetDefinition: Record<string, any>, ctxt: IDashboardWidgetDataProviderContext) {
|
|
399
|
+
return {
|
|
400
|
+
meta: {
|
|
401
|
+
providerName: this.name(),
|
|
402
|
+
widgetName: ctxt.widgetName,
|
|
403
|
+
generatedAt: new Date().toISOString(),
|
|
404
|
+
durationMs: 0,
|
|
405
|
+
},
|
|
406
|
+
data: {
|
|
407
|
+
value: 123,
|
|
408
|
+
},
|
|
409
|
+
};
|
|
410
|
+
}
|
|
411
|
+
}
|
|
412
|
+
```
|
|
413
|
+
|
|
414
|
+
## 7.3 Add dynamic variable options provider
|
|
415
|
+
|
|
416
|
+
1. Create `ISelectionProvider` class
|
|
417
|
+
2. Decorate with `@SelectionProvider()`
|
|
418
|
+
3. Implement `value()` and `values()`
|
|
419
|
+
4. Reference provider in variable `selectionConfig.providerName`
|
|
420
|
+
|
|
421
|
+
## 7.4 Add a custom frontend widget (optional)
|
|
422
|
+
|
|
423
|
+
Custom rendering is optional.
|
|
424
|
+
|
|
425
|
+
Model:
|
|
426
|
+
- backend provider is mandatory for data
|
|
427
|
+
- custom widget component is optional override
|
|
428
|
+
|
|
429
|
+
Steps:
|
|
430
|
+
1. Create component in UI project
|
|
431
|
+
2. Register with `registerExtensionComponent(..., ExtensionComponentTypes.dashboardWidget)`
|
|
432
|
+
3. Reference component in widget metadata (`componentName`)
|
|
433
|
+
4. If no custom widget is provided, framework default widgets are used
|
|
434
|
+
|
|
435
|
+
---
|
|
436
|
+
|
|
437
|
+
## 8. Queue Health Reference Implementation
|
|
438
|
+
|
|
439
|
+
Reference dashboard:
|
|
440
|
+
- module: `solid-core`
|
|
441
|
+
- dashboard: `queue-health`
|
|
442
|
+
|
|
443
|
+
Variables:
|
|
444
|
+
- `date` (`type: date`)
|
|
445
|
+
- `queueName` (`selectionDynamic`)
|
|
446
|
+
- `stage` (`selectionStatic`, multi)
|
|
447
|
+
- `messageBroker` (`selectionDynamic`)
|
|
448
|
+
|
|
449
|
+
Widgets include:
|
|
450
|
+
- KPIs (total, succeeded, failed, in-flight, success rate, avg elapsed)
|
|
451
|
+
- Charts (time series, stage distribution, queue failures, queue avg elapsed, latency trend)
|
|
452
|
+
- Custom chart (Queue SLA Heatmap)
|
|
453
|
+
- Table (recent failures)
|
|
454
|
+
|
|
455
|
+
This RI is the baseline for future dashboards and for custom widget extension examples.
|
|
456
|
+
|
|
457
|
+
It also now includes the canonical 100% custom widget example:
|
|
458
|
+
- backend provider: `MqDashboardQueueSlaHeatmapProvider`
|
|
459
|
+
- frontend widget: `QueueSlaHeatmapWidget`
|
|
460
|
+
|
|
461
|
+
Heatmap provider response contract:
|
|
462
|
+
- `xCategories`
|
|
463
|
+
- `yCategories`
|
|
464
|
+
- `points` (`[xIndex, yIndex, metricValue]`)
|
|
465
|
+
- optional `tooltipFields`
|
|
466
|
+
- optional `pointDetails`
|
|
467
|
+
- optional `legendThresholds`
|
|
468
|
+
|
|
469
|
+
Queue-health permission example used for validating the authorization flow:
|
|
470
|
+
- `dashboard:queue-health:kpi-.*`
|
|
471
|
+
- `dashboard:queue-health:chart-queue-.*`
|
|
472
|
+
- `dashboard:queue-health:chart-processing-latency-trend`
|
|
473
|
+
|
|
474
|
+
---
|
|
475
|
+
|
|
476
|
+
## 9. Troubleshooting Guide
|
|
477
|
+
|
|
478
|
+
### 9.1 Metadata change not reflecting
|
|
479
|
+
|
|
480
|
+
Check which metadata file runtime reads (see Section 2.2 precedence).
|
|
481
|
+
|
|
482
|
+
In consuming projects, ensure latest package is linked/installed:
|
|
483
|
+
- `@solidxai/core`
|
|
484
|
+
- `@solidxai/core-ui`
|
|
485
|
+
|
|
486
|
+
Then restart backend and frontend dev servers.
|
|
487
|
+
|
|
488
|
+
### 9.2 Layout saves but refresh shows old layout
|
|
489
|
+
|
|
490
|
+
Checklist:
|
|
491
|
+
- verify `GET /dashboard/:module/:dashboard/layout` returns updated `userLayout` / `effectiveLayout`
|
|
492
|
+
- confirm UI bundle includes latest `DashboardPage` grid initialization logic
|
|
493
|
+
- clear Vite cache and hard refresh browser
|
|
494
|
+
|
|
495
|
+
### 9.3 Dynamic options not showing
|
|
496
|
+
|
|
497
|
+
Checklist:
|
|
498
|
+
- variable `type` is exactly `selectionDynamic`
|
|
499
|
+
- `selectionConfig.providerName` matches provider `name()`
|
|
500
|
+
- provider class has `@SelectionProvider()` and is registered via module wiring
|
|
501
|
+
|
|
502
|
+
### 9.4 Widget shows fallback/unknown renderer
|
|
503
|
+
|
|
504
|
+
Checklist:
|
|
505
|
+
- provider returns expected shape in `data`
|
|
506
|
+
- widget metadata `type` aligns with default mapper support
|
|
507
|
+
- if using custom renderer, ensure component is registered as `dashboardWidget`
|
|
508
|
+
|
|
509
|
+
### 9.5 Auth / permission issues
|
|
510
|
+
|
|
511
|
+
- Dashboard runtime endpoints require JWT
|
|
512
|
+
- verify the authenticated user can access the module and dashboard route in the consuming app
|
|
513
|
+
- verify explicit dashboard widget permissions are declared in metadata
|
|
514
|
+
- verify those permissions are assigned to the correct roles
|
|
515
|
+
- remember that unauthorized widgets still render their card, but the provider will not run and the body will show `Unauthorized`
|
|
516
|
+
|
|
517
|
+
---
|
|
518
|
+
|
|
519
|
+
## 10. Security and Guardrails (Current + Near-term)
|
|
520
|
+
|
|
521
|
+
Current:
|
|
522
|
+
- JWT-protected endpoints
|
|
523
|
+
- repository/security-rule-aware query builder usage in reference providers
|
|
524
|
+
|
|
525
|
+
Recommended next:
|
|
526
|
+
- strict provider allowlist enforcement in runtime layer
|
|
527
|
+
- query timeout and payload-size limits
|
|
528
|
+
- row limits for heavy chart/table providers
|
|
529
|
+
|
|
530
|
+
---
|
|
531
|
+
|
|
532
|
+
## 11. API Examples
|
|
533
|
+
|
|
534
|
+
### 11.1 Fetch definition
|
|
535
|
+
|
|
536
|
+
```bash
|
|
537
|
+
curl -H "Authorization: Bearer $TOKEN" \
|
|
538
|
+
"$BASE_URL/dashboard/solid-core/queue-health/definition"
|
|
539
|
+
```
|
|
540
|
+
|
|
541
|
+
### 11.2 Fetch full dashboard data
|
|
542
|
+
|
|
543
|
+
```bash
|
|
544
|
+
curl -X POST -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
|
|
545
|
+
"$BASE_URL/dashboard/solid-core/queue-health/data" \
|
|
546
|
+
-d '{
|
|
547
|
+
"variables": {
|
|
548
|
+
"date": { "from": "2026-05-01T00:00:00.000Z", "to": "2026-05-31T23:59:59.999Z" },
|
|
549
|
+
"queueName": "create_sandbox_dev_sandbox_provisioning_queue",
|
|
550
|
+
"stage": ["failed", "retrying"]
|
|
551
|
+
}
|
|
552
|
+
}'
|
|
553
|
+
```
|
|
554
|
+
|
|
555
|
+
### 11.3 Save layout
|
|
556
|
+
|
|
557
|
+
```bash
|
|
558
|
+
curl -X PUT -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
|
|
559
|
+
"$BASE_URL/dashboard/solid-core/queue-health/layout" \
|
|
560
|
+
-d '{
|
|
561
|
+
"layout": {
|
|
562
|
+
"engine": "gridstack",
|
|
563
|
+
"columns": 12,
|
|
564
|
+
"items": [
|
|
565
|
+
{ "widgetId": "kpi-total-messages", "x": 0, "y": 0, "w": 2, "h": 2 }
|
|
566
|
+
]
|
|
567
|
+
}
|
|
568
|
+
}'
|
|
569
|
+
```
|
|
570
|
+
|
|
571
|
+
---
|
|
572
|
+
|
|
573
|
+
## 12. What to Reuse vs What to Customize
|
|
574
|
+
|
|
575
|
+
Reuse defaults when:
|
|
576
|
+
- metric/table/chart fits existing renderer types
|
|
577
|
+
- ECharts mapper can render your shape
|
|
578
|
+
|
|
579
|
+
Create custom component when:
|
|
580
|
+
- interaction/visual behavior is domain-specific
|
|
581
|
+
- advanced chart behavior is needed beyond generic renderer
|
|
582
|
+
|
|
583
|
+
Always keep backend provider contract stable so UI remains pluggable.
|
|
584
|
+
|
|
585
|
+
---
|
|
586
|
+
|
|
587
|
+
## 13. Current Status Snapshot
|
|
588
|
+
|
|
589
|
+
Implemented:
|
|
590
|
+
- metadata-driven dashboard runtime
|
|
591
|
+
- backend provider contracts + registry wiring
|
|
592
|
+
- dashboard controller endpoints
|
|
593
|
+
- queue-health reference providers
|
|
594
|
+
- dynamic variable options providers
|
|
595
|
+
- frontend dashboard page, filter modal, Gridstack persistence
|
|
596
|
+
- ECharts-based default dashboard widgets
|
|
597
|
+
- `dashboardWidget` extension type and default registrations
|
|
598
|
+
- user layout persistence via generated model assets
|
|
599
|
+
|
|
600
|
+
Pending/next:
|
|
601
|
+
- stronger runtime schema validation and guardrails
|
|
602
|
+
- richer renderer pluggability contract (`chartRenderer` beyond v1)
|
|
603
|
+
- additional documentation templates and automated validation helpers
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { Injectable } from "@nestjs/common";
|
|
2
|
+
import { DashboardWidgetDataProvider } from "src/decorators/dashboard-widget-data-provider.decorator";
|
|
3
|
+
import { MqMessageRepository } from "src/repository/mq-message.repository";
|
|
4
|
+
import { IDashboardWidgetDataProvider, IDashboardWidgetDataProviderContext, IDashboardWidgetDataResponseEnvelope } from "src/interfaces";
|
|
5
|
+
import { applyMqDashboardFilters, toNumber } from "src/services/dashboard-providers/mq-dashboard-provider-utils";
|
|
6
|
+
|
|
7
|
+
@DashboardWidgetDataProvider()
|
|
8
|
+
@Injectable()
|
|
9
|
+
export class MqDashboardAvgElapsedKpiProvider implements IDashboardWidgetDataProvider {
|
|
10
|
+
constructor(
|
|
11
|
+
private readonly mqMessageRepository: MqMessageRepository,
|
|
12
|
+
) { }
|
|
13
|
+
|
|
14
|
+
name(): string {
|
|
15
|
+
return "MqDashboardAvgElapsedKpiProvider";
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
help(): string {
|
|
19
|
+
return "Returns average elapsed millis after applying dashboard variables.";
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
async getData(
|
|
23
|
+
widgetDefinition: Record<string, any>,
|
|
24
|
+
ctxt: IDashboardWidgetDataProviderContext,
|
|
25
|
+
): Promise<IDashboardWidgetDataResponseEnvelope<{ value: number; label: string }>> {
|
|
26
|
+
const qb = await this.mqMessageRepository.createSecurityRuleAwareQueryBuilder("mqMessage");
|
|
27
|
+
applyMqDashboardFilters(qb, ctxt.variables ?? {});
|
|
28
|
+
qb.andWhere("mqMessage.elapsedMillis IS NOT NULL");
|
|
29
|
+
|
|
30
|
+
const raw = await qb
|
|
31
|
+
.select("AVG(mqMessage.elapsedMillis)", "avgElapsed")
|
|
32
|
+
.getRawOne<{ avgElapsed?: string | number }>();
|
|
33
|
+
|
|
34
|
+
const value = Number(toNumber(raw?.avgElapsed, 0).toFixed(2));
|
|
35
|
+
return {
|
|
36
|
+
meta: {
|
|
37
|
+
providerName: this.name(),
|
|
38
|
+
generatedAt: new Date().toISOString(),
|
|
39
|
+
widgetName: ctxt.widgetName,
|
|
40
|
+
durationMs: 0,
|
|
41
|
+
},
|
|
42
|
+
data: {
|
|
43
|
+
value,
|
|
44
|
+
label: widgetDefinition?.name ?? "Avg Elapsed (ms)",
|
|
45
|
+
},
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { Injectable } from "@nestjs/common";
|
|
2
|
+
import { DashboardWidgetDataProvider } from "src/decorators/dashboard-widget-data-provider.decorator";
|
|
3
|
+
import { MqMessageRepository } from "src/repository/mq-message.repository";
|
|
4
|
+
import { IDashboardWidgetDataProvider, IDashboardWidgetDataProviderContext, IDashboardWidgetDataResponseEnvelope } from "src/interfaces";
|
|
5
|
+
import { applyMqDashboardFilters } from "src/services/dashboard-providers/mq-dashboard-provider-utils";
|
|
6
|
+
|
|
7
|
+
@DashboardWidgetDataProvider()
|
|
8
|
+
@Injectable()
|
|
9
|
+
export class MqDashboardFailedMessagesKpiProvider implements IDashboardWidgetDataProvider {
|
|
10
|
+
constructor(
|
|
11
|
+
private readonly mqMessageRepository: MqMessageRepository,
|
|
12
|
+
) { }
|
|
13
|
+
|
|
14
|
+
name(): string {
|
|
15
|
+
return "MqDashboardFailedMessagesKpiProvider";
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
help(): string {
|
|
19
|
+
return "Returns failed mq message count after applying dashboard variables.";
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
async getData(
|
|
23
|
+
widgetDefinition: Record<string, any>,
|
|
24
|
+
ctxt: IDashboardWidgetDataProviderContext,
|
|
25
|
+
): Promise<IDashboardWidgetDataResponseEnvelope<{ value: number; label: string }>> {
|
|
26
|
+
const qb = await this.mqMessageRepository.createSecurityRuleAwareQueryBuilder("mqMessage");
|
|
27
|
+
applyMqDashboardFilters(qb, ctxt.variables ?? {}, { ignoreStage: true });
|
|
28
|
+
qb.andWhere("mqMessage.stage = :stage", { stage: "failed" });
|
|
29
|
+
|
|
30
|
+
const value = await qb.getCount();
|
|
31
|
+
return {
|
|
32
|
+
meta: {
|
|
33
|
+
providerName: this.name(),
|
|
34
|
+
generatedAt: new Date().toISOString(),
|
|
35
|
+
widgetName: ctxt.widgetName,
|
|
36
|
+
durationMs: 0,
|
|
37
|
+
},
|
|
38
|
+
data: {
|
|
39
|
+
value,
|
|
40
|
+
label: widgetDefinition?.name ?? "Failed",
|
|
41
|
+
},
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
|