@memberjunction/ng-dashboards 5.38.0 → 5.40.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/README.md +14 -7
- package/dist/AI/components/agents/agent-configuration.component.js +199 -198
- package/dist/AI/components/agents/agent-configuration.component.js.map +1 -1
- package/dist/AI/components/analytics/ai-analytics-resource.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/ai-analytics-resource.component.js +20 -17
- package/dist/AI/components/analytics/ai-analytics-resource.component.js.map +1 -1
- package/dist/AI/components/analytics/cost-budget/cost-budget.component.d.ts +15 -0
- package/dist/AI/components/analytics/cost-budget/cost-budget.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/cost-budget/cost-budget.component.js +166 -58
- package/dist/AI/components/analytics/cost-budget/cost-budget.component.js.map +1 -1
- package/dist/AI/components/analytics/executive-summary/executive-summary.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/executive-summary/executive-summary.component.js +2 -1
- package/dist/AI/components/analytics/executive-summary/executive-summary.component.js.map +1 -1
- package/dist/AI/components/analytics/model-performance/model-performance.component.d.ts +1 -0
- package/dist/AI/components/analytics/model-performance/model-performance.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/model-performance/model-performance.component.js +55 -36
- package/dist/AI/components/analytics/model-performance/model-performance.component.js.map +1 -1
- package/dist/AI/components/analytics/prompt-runs/prompt-run-analysis.component.d.ts +9 -1
- package/dist/AI/components/analytics/prompt-runs/prompt-run-analysis.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/prompt-runs/prompt-run-analysis.component.js +158 -117
- package/dist/AI/components/analytics/prompt-runs/prompt-run-analysis.component.js.map +1 -1
- package/dist/AI/components/analytics/usage-patterns/usage-patterns.component.d.ts +1 -0
- package/dist/AI/components/analytics/usage-patterns/usage-patterns.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/usage-patterns/usage-patterns.component.js +22 -8
- package/dist/AI/components/analytics/usage-patterns/usage-patterns.component.js.map +1 -1
- package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.d.ts +217 -860
- package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.d.ts.map +1 -1
- package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js +1717 -7802
- package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js.map +1 -1
- package/dist/AI/components/autotagging/components/classify-item-drilldown.component.d.ts +56 -0
- package/dist/AI/components/autotagging/components/classify-item-drilldown.component.d.ts.map +1 -0
- package/dist/AI/components/autotagging/components/classify-item-drilldown.component.js +423 -0
- package/dist/AI/components/autotagging/components/classify-item-drilldown.component.js.map +1 -0
- package/dist/AI/components/autotagging/components/classify-item-grid.component.d.ts +70 -0
- package/dist/AI/components/autotagging/components/classify-item-grid.component.d.ts.map +1 -0
- package/dist/AI/components/autotagging/components/classify-item-grid.component.js +308 -0
- package/dist/AI/components/autotagging/components/classify-item-grid.component.js.map +1 -0
- package/dist/AI/components/autotagging/components/classify-org-context-editor.component.d.ts +29 -0
- package/dist/AI/components/autotagging/components/classify-org-context-editor.component.d.ts.map +1 -0
- package/dist/AI/components/autotagging/components/classify-org-context-editor.component.js +186 -0
- package/dist/AI/components/autotagging/components/classify-org-context-editor.component.js.map +1 -0
- package/dist/AI/components/autotagging/components/classify-overview-analytics.component.d.ts +69 -0
- package/dist/AI/components/autotagging/components/classify-overview-analytics.component.d.ts.map +1 -0
- package/dist/AI/components/autotagging/components/classify-overview-analytics.component.js +278 -0
- package/dist/AI/components/autotagging/components/classify-overview-analytics.component.js.map +1 -0
- package/dist/AI/components/autotagging/components/classify-seed-taxonomy.component.d.ts +73 -0
- package/dist/AI/components/autotagging/components/classify-seed-taxonomy.component.d.ts.map +1 -0
- package/dist/AI/components/autotagging/components/classify-seed-taxonomy.component.js +393 -0
- package/dist/AI/components/autotagging/components/classify-seed-taxonomy.component.js.map +1 -0
- package/dist/AI/components/autotagging/dialogs/classify-setup-wizard.component.d.ts +122 -0
- package/dist/AI/components/autotagging/dialogs/classify-setup-wizard.component.d.ts.map +1 -0
- package/dist/AI/components/autotagging/dialogs/classify-setup-wizard.component.js +908 -0
- package/dist/AI/components/autotagging/dialogs/classify-setup-wizard.component.js.map +1 -0
- package/dist/AI/components/autotagging/dialogs/dry-run-preview.dialog.component.d.ts +87 -0
- package/dist/AI/components/autotagging/dialogs/dry-run-preview.dialog.component.d.ts.map +1 -0
- package/dist/AI/components/autotagging/dialogs/dry-run-preview.dialog.component.js +475 -0
- package/dist/AI/components/autotagging/dialogs/dry-run-preview.dialog.component.js.map +1 -0
- package/dist/AI/components/autotagging/dialogs/item-detail.dialog.component.d.ts +29 -0
- package/dist/AI/components/autotagging/dialogs/item-detail.dialog.component.d.ts.map +1 -0
- package/dist/AI/components/autotagging/dialogs/item-detail.dialog.component.js +208 -0
- package/dist/AI/components/autotagging/dialogs/item-detail.dialog.component.js.map +1 -0
- package/dist/AI/components/autotagging/dialogs/no-content-type-warning.dialog.component.d.ts +21 -0
- package/dist/AI/components/autotagging/dialogs/no-content-type-warning.dialog.component.d.ts.map +1 -0
- package/dist/AI/components/autotagging/dialogs/no-content-type-warning.dialog.component.js +70 -0
- package/dist/AI/components/autotagging/dialogs/no-content-type-warning.dialog.component.js.map +1 -0
- package/dist/AI/components/autotagging/dialogs/source-type-form.dialog.component.d.ts +333 -0
- package/dist/AI/components/autotagging/dialogs/source-type-form.dialog.component.d.ts.map +1 -0
- package/dist/AI/components/autotagging/dialogs/source-type-form.dialog.component.js +2125 -0
- package/dist/AI/components/autotagging/dialogs/source-type-form.dialog.component.js.map +1 -0
- package/dist/AI/components/autotagging/shared/classify.dryrun.d.ts +61 -0
- package/dist/AI/components/autotagging/shared/classify.dryrun.d.ts.map +1 -0
- package/dist/AI/components/autotagging/shared/classify.dryrun.js +78 -0
- package/dist/AI/components/autotagging/shared/classify.dryrun.js.map +1 -0
- package/dist/AI/components/autotagging/shared/classify.format.d.ts +58 -0
- package/dist/AI/components/autotagging/shared/classify.format.d.ts.map +1 -0
- package/dist/AI/components/autotagging/shared/classify.format.js +260 -0
- package/dist/AI/components/autotagging/shared/classify.format.js.map +1 -0
- package/dist/AI/components/autotagging/shared/classify.types.d.ts +319 -0
- package/dist/AI/components/autotagging/shared/classify.types.d.ts.map +1 -0
- package/dist/AI/components/autotagging/shared/classify.types.js +6 -0
- package/dist/AI/components/autotagging/shared/classify.types.js.map +1 -0
- package/dist/AI/components/autotagging/tabs/health-tab.component.d.ts +103 -0
- package/dist/AI/components/autotagging/tabs/health-tab.component.d.ts.map +1 -0
- package/dist/AI/components/autotagging/tabs/health-tab.component.js +571 -0
- package/dist/AI/components/autotagging/tabs/health-tab.component.js.map +1 -0
- package/dist/AI/components/autotagging/tabs/history-tab.component.d.ts +77 -0
- package/dist/AI/components/autotagging/tabs/history-tab.component.d.ts.map +1 -0
- package/dist/AI/components/autotagging/tabs/history-tab.component.js +519 -0
- package/dist/AI/components/autotagging/tabs/history-tab.component.js.map +1 -0
- package/dist/AI/components/autotagging/tabs/inbox-tab.component.d.ts +107 -0
- package/dist/AI/components/autotagging/tabs/inbox-tab.component.d.ts.map +1 -0
- package/dist/AI/components/autotagging/tabs/inbox-tab.component.js +719 -0
- package/dist/AI/components/autotagging/tabs/inbox-tab.component.js.map +1 -0
- package/dist/AI/components/autotagging/tabs/pipeline-tab.component.d.ts +131 -0
- package/dist/AI/components/autotagging/tabs/pipeline-tab.component.d.ts.map +1 -0
- package/dist/AI/components/autotagging/tabs/pipeline-tab.component.js +813 -0
- package/dist/AI/components/autotagging/tabs/pipeline-tab.component.js.map +1 -0
- package/dist/AI/components/autotagging/tabs/sources-tab.component.d.ts +177 -0
- package/dist/AI/components/autotagging/tabs/sources-tab.component.d.ts.map +1 -0
- package/dist/AI/components/autotagging/tabs/sources-tab.component.js +1465 -0
- package/dist/AI/components/autotagging/tabs/sources-tab.component.js.map +1 -0
- package/dist/AI/components/autotagging/tabs/tags-tab.component.d.ts +78 -0
- package/dist/AI/components/autotagging/tabs/tags-tab.component.d.ts.map +1 -0
- package/dist/AI/components/autotagging/tabs/tags-tab.component.js +492 -0
- package/dist/AI/components/autotagging/tabs/tags-tab.component.js.map +1 -0
- package/dist/AI/components/autotagging/tabs/taxonomy-tab.component.d.ts +397 -0
- package/dist/AI/components/autotagging/tabs/taxonomy-tab.component.d.ts.map +1 -0
- package/dist/AI/components/autotagging/tabs/taxonomy-tab.component.js +3490 -0
- package/dist/AI/components/autotagging/tabs/taxonomy-tab.component.js.map +1 -0
- package/dist/AI/components/autotagging/tabs/types-tab.component.d.ts +56 -0
- package/dist/AI/components/autotagging/tabs/types-tab.component.d.ts.map +1 -0
- package/dist/AI/components/autotagging/tabs/types-tab.component.js +271 -0
- package/dist/AI/components/autotagging/tabs/types-tab.component.js.map +1 -0
- package/dist/AI/components/duplicates/duplicate-detection-resource.component.d.ts +3 -0
- package/dist/AI/components/duplicates/duplicate-detection-resource.component.d.ts.map +1 -1
- package/dist/AI/components/duplicates/duplicate-detection-resource.component.js +306 -290
- package/dist/AI/components/duplicates/duplicate-detection-resource.component.js.map +1 -1
- package/dist/AI/components/execution-monitoring.component.js +1 -1
- package/dist/AI/components/execution-monitoring.component.js.map +1 -1
- package/dist/AI/components/models/model-management.component.js +209 -208
- package/dist/AI/components/models/model-management.component.js.map +1 -1
- package/dist/AI/components/prompts/prompt-management.component.js +130 -128
- package/dist/AI/components/prompts/prompt-management.component.js.map +1 -1
- package/dist/AI/components/requests/agent-requests-resource.component.js +61 -61
- package/dist/AI/components/requests/agent-requests-resource.component.js.map +1 -1
- package/dist/AI/components/system/system-configuration.component.js +17 -17
- package/dist/AI/components/system/system-configuration.component.js.map +1 -1
- package/dist/AI/components/tags/tags-resource.component.d.ts +1 -0
- package/dist/AI/components/tags/tags-resource.component.d.ts.map +1 -1
- package/dist/AI/components/tags/tags-resource.component.js +578 -538
- package/dist/AI/components/tags/tags-resource.component.js.map +1 -1
- package/dist/AI/components/vectors/vector-management-resource.component.d.ts +3 -0
- package/dist/AI/components/vectors/vector-management-resource.component.d.ts.map +1 -1
- package/dist/AI/components/vectors/vector-management-resource.component.js +331 -303
- package/dist/AI/components/vectors/vector-management-resource.component.js.map +1 -1
- package/dist/AI/services/ai-instrumentation.service.d.ts +5 -0
- package/dist/AI/services/ai-instrumentation.service.d.ts.map +1 -1
- package/dist/AI/services/ai-instrumentation.service.js +14 -2
- package/dist/AI/services/ai-instrumentation.service.js.map +1 -1
- package/dist/AI/services/cache-metrics.d.ts +50 -0
- package/dist/AI/services/cache-metrics.d.ts.map +1 -0
- package/dist/AI/services/cache-metrics.js +43 -0
- package/dist/AI/services/cache-metrics.js.map +1 -0
- package/dist/APIKeys/api-applications-panel.component.js +2 -2
- package/dist/APIKeys/api-key-create-dialog.component.js +2 -2
- package/dist/APIKeys/api-key-edit-panel.component.js +2 -2
- package/dist/APIKeys/api-keys-resource.component.js +132 -131
- package/dist/APIKeys/api-keys-resource.component.js.map +1 -1
- package/dist/Actions/components/actions-overview.component.js +141 -141
- package/dist/Actions/components/actions-overview.component.js.map +1 -1
- package/dist/Actions/components/execution-monitoring.component.js +15 -15
- package/dist/Actions/components/execution-monitoring.component.js.map +1 -1
- package/dist/Actions/components/explorer/action-explorer.component.d.ts +0 -5
- package/dist/Actions/components/explorer/action-explorer.component.d.ts.map +1 -1
- package/dist/Actions/components/explorer/action-explorer.component.js +139 -212
- package/dist/Actions/components/explorer/action-explorer.component.js.map +1 -1
- package/dist/Admin/admin-data-schema.component.js +2 -2
- package/dist/Admin/admin-data-schema.component.js.map +1 -1
- package/dist/Admin/admin-dev-tools-resource.component.js +2 -2
- package/dist/Admin/admin-dev-tools-resource.component.js.map +1 -1
- package/dist/Admin/admin-identity-access.component.js +2 -2
- package/dist/Admin/admin-identity-access.component.js.map +1 -1
- package/dist/Admin/admin-monitoring.component.js +2 -2
- package/dist/Admin/admin-monitoring.component.js.map +1 -1
- package/dist/ApplicationRoles/application-roles-resource.component.js +54 -49
- package/dist/ApplicationRoles/application-roles-resource.component.js.map +1 -1
- package/dist/Communication/communication-logs-resource.component.d.ts +6 -0
- package/dist/Communication/communication-logs-resource.component.d.ts.map +1 -1
- package/dist/Communication/communication-logs-resource.component.js +72 -50
- package/dist/Communication/communication-logs-resource.component.js.map +1 -1
- package/dist/Communication/communication-monitor-resource.component.js +103 -102
- package/dist/Communication/communication-monitor-resource.component.js.map +1 -1
- package/dist/Communication/communication-providers-resource.component.js +52 -51
- package/dist/Communication/communication-providers-resource.component.js.map +1 -1
- package/dist/Communication/communication-runs-resource.component.js +39 -38
- package/dist/Communication/communication-runs-resource.component.js.map +1 -1
- package/dist/Communication/communication-templates-resource.component.d.ts +6 -0
- package/dist/Communication/communication-templates-resource.component.d.ts.map +1 -1
- package/dist/Communication/communication-templates-resource.component.js +92 -89
- package/dist/Communication/communication-templates-resource.component.js.map +1 -1
- package/dist/Credentials/components/credentials-audit-resource.component.js +136 -135
- package/dist/Credentials/components/credentials-audit-resource.component.js.map +1 -1
- package/dist/Credentials/components/credentials-categories-resource.component.js +155 -152
- package/dist/Credentials/components/credentials-categories-resource.component.js.map +1 -1
- package/dist/Credentials/components/credentials-list-resource.component.js +119 -118
- package/dist/Credentials/components/credentials-list-resource.component.js.map +1 -1
- package/dist/Credentials/components/credentials-overview-resource.component.js +129 -128
- package/dist/Credentials/components/credentials-overview-resource.component.js.map +1 -1
- package/dist/Credentials/components/credentials-types-resource.component.js +107 -106
- package/dist/Credentials/components/credentials-types-resource.component.js.map +1 -1
- package/dist/DataExplorer/data-explorer-dashboard.component.d.ts +31 -340
- package/dist/DataExplorer/data-explorer-dashboard.component.d.ts.map +1 -1
- package/dist/DataExplorer/data-explorer-dashboard.component.js +468 -1958
- package/dist/DataExplorer/data-explorer-dashboard.component.js.map +1 -1
- package/dist/DataExplorer/data-explorer-resource.component.d.ts.map +1 -1
- package/dist/DataExplorer/data-explorer-resource.component.js +10 -0
- package/dist/DataExplorer/data-explorer-resource.component.js.map +1 -1
- package/dist/DatabaseDesigner/components/database-designer-dashboard.component.js +1 -1
- package/dist/DatabaseDesigner/components/entity-list.component.js +115 -114
- package/dist/DatabaseDesigner/components/entity-list.component.js.map +1 -1
- package/dist/DatabaseDesigner/database-designer-dashboards.module.d.ts +5 -6
- package/dist/DatabaseDesigner/database-designer-dashboards.module.d.ts.map +1 -1
- package/dist/DatabaseDesigner/database-designer-dashboards.module.js +4 -5
- package/dist/DatabaseDesigner/database-designer-dashboards.module.js.map +1 -1
- package/dist/DevTools/app-state-inspector.component.js +18 -17
- package/dist/DevTools/app-state-inspector.component.js.map +1 -1
- package/dist/DevTools/class-registry.component.js +88 -85
- package/dist/DevTools/class-registry.component.js.map +1 -1
- package/dist/DevTools/event-monitor.component.js +155 -150
- package/dist/DevTools/event-monitor.component.js.map +1 -1
- package/dist/DevTools/graphql-console.component.js +245 -243
- package/dist/DevTools/graphql-console.component.js.map +1 -1
- package/dist/DevTools/layout-inspector.component.js +18 -17
- package/dist/DevTools/layout-inspector.component.js.map +1 -1
- package/dist/EntityAdmin/entity-admin-dashboard.component.js +20 -19
- package/dist/EntityAdmin/entity-admin-dashboard.component.js.map +1 -1
- package/dist/Home/home-dashboard.component.js +2 -2
- package/dist/Integration/components/activity/activity.component.d.ts.map +1 -1
- package/dist/Integration/components/activity/activity.component.js +236 -229
- package/dist/Integration/components/activity/activity.component.js.map +1 -1
- package/dist/Integration/components/connections/connections.component.js +390 -389
- package/dist/Integration/components/connections/connections.component.js.map +1 -1
- package/dist/Integration/components/overview/overview.component.js +2 -2
- package/dist/KnowledgeHub/components/analytics/analytics-resource.component.d.ts.map +1 -1
- package/dist/KnowledgeHub/components/analytics/analytics-resource.component.js +14 -11
- package/dist/KnowledgeHub/components/analytics/analytics-resource.component.js.map +1 -1
- package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.d.ts +27 -2
- package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.d.ts.map +1 -1
- package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.js +244 -119
- package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.js.map +1 -1
- package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js +293 -291
- package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js.map +1 -1
- package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.js +62 -61
- package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.js.map +1 -1
- package/dist/KnowledgeHub/components/visualize/record-drilldown/record-drilldown.component.d.ts +65 -0
- package/dist/KnowledgeHub/components/visualize/record-drilldown/record-drilldown.component.d.ts.map +1 -0
- package/dist/KnowledgeHub/components/visualize/record-drilldown/record-drilldown.component.js +176 -0
- package/dist/KnowledgeHub/components/visualize/record-drilldown/record-drilldown.component.js.map +1 -0
- package/dist/KnowledgeHub/components/visualize/tag-cloud/tag-cloud.component.d.ts +81 -0
- package/dist/KnowledgeHub/components/visualize/tag-cloud/tag-cloud.component.d.ts.map +1 -0
- package/dist/KnowledgeHub/components/visualize/tag-cloud/tag-cloud.component.js +308 -0
- package/dist/KnowledgeHub/components/visualize/tag-cloud/tag-cloud.component.js.map +1 -0
- package/dist/KnowledgeHub/components/visualize/visualize-resource.component.d.ts +85 -0
- package/dist/KnowledgeHub/components/visualize/visualize-resource.component.d.ts.map +1 -0
- package/dist/KnowledgeHub/components/visualize/visualize-resource.component.js +362 -0
- package/dist/KnowledgeHub/components/visualize/visualize-resource.component.js.map +1 -0
- package/dist/KnowledgeHub/index.d.ts +3 -0
- package/dist/KnowledgeHub/index.d.ts.map +1 -1
- package/dist/KnowledgeHub/index.js +3 -0
- package/dist/KnowledgeHub/index.js.map +1 -1
- package/dist/Lists/components/lists-browse-resource.component.d.ts +6 -2
- package/dist/Lists/components/lists-browse-resource.component.d.ts.map +1 -1
- package/dist/Lists/components/lists-browse-resource.component.js +525 -566
- package/dist/Lists/components/lists-browse-resource.component.js.map +1 -1
- package/dist/Lists/components/lists-categories-resource.component.js +135 -134
- package/dist/Lists/components/lists-categories-resource.component.js.map +1 -1
- package/dist/Lists/components/lists-my-lists-resource.component.js +199 -198
- package/dist/Lists/components/lists-my-lists-resource.component.js.map +1 -1
- package/dist/MCP/components/mcp-server-dialog.component.js +2 -2
- package/dist/MCP/mcp-dashboard.component.js +443 -438
- package/dist/MCP/mcp-dashboard.component.js.map +1 -1
- package/dist/QueryBrowser/query-browser-resource.component.js +1 -1
- package/dist/QueryBrowser/query-browser-resource.component.js.map +1 -1
- package/dist/Scheduling/components/scheduling-activity.component.d.ts.map +1 -1
- package/dist/Scheduling/components/scheduling-activity.component.js +146 -147
- package/dist/Scheduling/components/scheduling-activity.component.js.map +1 -1
- package/dist/Scheduling/components/scheduling-jobs.component.js +76 -75
- package/dist/Scheduling/components/scheduling-jobs.component.js.map +1 -1
- package/dist/Scheduling/components/scheduling-overview.component.js +97 -96
- package/dist/Scheduling/components/scheduling-overview.component.js.map +1 -1
- package/dist/Scheduling/scheduling-dashboard.component.js +24 -22
- package/dist/Scheduling/scheduling-dashboard.component.js.map +1 -1
- package/dist/Scheduling/services/scheduling-instrumentation.service.d.ts +2 -0
- package/dist/Scheduling/services/scheduling-instrumentation.service.d.ts.map +1 -1
- package/dist/Scheduling/services/scheduling-instrumentation.service.js +1 -0
- package/dist/Scheduling/services/scheduling-instrumentation.service.js.map +1 -1
- package/dist/Testing/components/testing-dashboard-tab-resource.component.js +1 -1
- package/dist/Testing/components/testing-explorer.component.d.ts +14 -4
- package/dist/Testing/components/testing-explorer.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-explorer.component.js +436 -427
- package/dist/Testing/components/testing-explorer.component.js.map +1 -1
- package/dist/Testing/components/testing-runs-resource.component.js +1 -1
- package/dist/Testing/components/testing-runs.component.js +116 -115
- package/dist/Testing/components/testing-runs.component.js.map +1 -1
- package/dist/Testing/testing-dashboard.component.js +6 -7
- package/dist/Testing/testing-dashboard.component.js.map +1 -1
- package/dist/VersionHistory/components/labels-resource.component.js +173 -172
- package/dist/VersionHistory/components/labels-resource.component.js.map +1 -1
- package/dist/VersionHistory/components/restore-resource.component.d.ts +6 -0
- package/dist/VersionHistory/components/restore-resource.component.d.ts.map +1 -1
- package/dist/VersionHistory/components/restore-resource.component.js +116 -92
- package/dist/VersionHistory/components/restore-resource.component.js.map +1 -1
- package/dist/ai-dashboards.module.d.ts +57 -35
- package/dist/ai-dashboards.module.d.ts.map +1 -1
- package/dist/ai-dashboards.module.js +80 -1
- package/dist/ai-dashboards.module.js.map +1 -1
- package/dist/communication-dashboards.module.d.ts +1 -1
- package/dist/communication-dashboards.module.d.ts.map +1 -1
- package/dist/communication-dashboards.module.js +7 -1
- package/dist/communication-dashboards.module.js.map +1 -1
- package/dist/data-explorer-dashboards.module.d.ts +12 -14
- package/dist/data-explorer-dashboards.module.d.ts.map +1 -1
- package/dist/data-explorer-dashboards.module.js +5 -14
- package/dist/data-explorer-dashboards.module.js.map +1 -1
- package/dist/public-api.d.ts +3 -0
- package/dist/public-api.d.ts.map +1 -1
- package/dist/public-api.js +3 -0
- package/dist/public-api.js.map +1 -1
- package/dist/testing-dashboards.module.d.ts +4 -5
- package/dist/testing-dashboards.module.d.ts.map +1 -1
- package/dist/testing-dashboards.module.js +7 -5
- package/dist/testing-dashboards.module.js.map +1 -1
- package/package.json +57 -54
- package/dist/DataExplorer/components/filter-dialog/filter-dialog.component.d.ts +0 -79
- package/dist/DataExplorer/components/filter-dialog/filter-dialog.component.d.ts.map +0 -1
- package/dist/DataExplorer/components/filter-dialog/filter-dialog.component.js +0 -195
- package/dist/DataExplorer/components/filter-dialog/filter-dialog.component.js.map +0 -1
- package/dist/DataExplorer/components/view-selector/view-selector.component.d.ts +0 -226
- package/dist/DataExplorer/components/view-selector/view-selector.component.d.ts.map +0 -1
- package/dist/DataExplorer/components/view-selector/view-selector.component.js +0 -861
- package/dist/DataExplorer/components/view-selector/view-selector.component.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scheduling-overview.component.js","sourceRoot":"","sources":["../../../src/Scheduling/components/scheduling-overview.component.ts","../../../src/Scheduling/components/scheduling-overview.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, Input, Output, EventEmitter, OnInit, OnDestroy, ChangeDetectorRef, ChangeDetectionStrategy } from '@angular/core';\nimport { Subscription, interval } from 'rxjs';\nimport {\n SchedulingInstrumentationService,\n SchedulingKPIs,\n JobExecution,\n UpcomingExecution,\n LockInfo,\n AlertCondition\n} from '../services/scheduling-instrumentation.service';\n\n@Component({\n standalone: false,\n selector: 'app-scheduling-overview',\n templateUrl: './scheduling-overview.component.html',\n styleUrls: ['./scheduling-overview.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class SchedulingOverviewComponent implements OnInit, OnDestroy {\n @Input() initialState: Record<string, unknown> = {};\n /** When true, the inner toolbar is hidden — the parent shell is rendering it in `<mj-page-header>` instead. */\n @Input() HideToolbar = false;\n @Output() stateChange = new EventEmitter<Record<string, unknown>>();\n\n public Kpis: SchedulingKPIs | null = null;\n public LiveExecutions: JobExecution[] = [];\n public UpcomingExecutions: UpcomingExecution[] = [];\n public Locks: LockInfo[] = [];\n public Alerts: AlertCondition[] = [];\n public IsLoading = true;\n public AutoRefreshEnabled = true;\n\n private subscriptions: Subscription[] = [];\n private autoRefreshSub: Subscription | undefined;\n\n constructor(\n private schedulingService: SchedulingInstrumentationService,\n private cdr: ChangeDetectorRef\n ) {}\n\n ngOnInit(): void {\n if (this.initialState) {\n if (this.initialState['autoRefreshEnabled'] != null) {\n this.AutoRefreshEnabled = this.initialState['autoRefreshEnabled'] as boolean;\n }\n }\n\n this.subscriptions.push(\n this.schedulingService.kpis$.subscribe(kpis => {\n this.Kpis = kpis;\n this.IsLoading = false;\n this.cdr.markForCheck();\n }),\n this.schedulingService.liveExecutions$.subscribe(execs => {\n this.LiveExecutions = execs;\n this.cdr.markForCheck();\n }),\n this.schedulingService.upcomingExecutions$.subscribe(upcoming => {\n this.UpcomingExecutions = upcoming;\n this.cdr.markForCheck();\n }),\n this.schedulingService.lockInfo$.subscribe(locks => {\n this.Locks = locks;\n this.cdr.markForCheck();\n }),\n this.schedulingService.alerts$.subscribe(alerts => {\n this.Alerts = alerts;\n this.cdr.markForCheck();\n })\n );\n\n if (this.AutoRefreshEnabled) {\n this.startAutoRefresh();\n }\n }\n\n ngOnDestroy(): void {\n this.subscriptions.forEach(s => s.unsubscribe());\n this.stopAutoRefresh();\n }\n\n public Refresh(): void {\n this.schedulingService.refresh();\n }\n\n public ToggleAutoRefresh(): void {\n this.AutoRefreshEnabled = !this.AutoRefreshEnabled;\n if (this.AutoRefreshEnabled) {\n this.startAutoRefresh();\n } else {\n this.stopAutoRefresh();\n }\n this.emitState();\n }\n\n public async ReleaseLock(jobId: string): Promise<void> {\n await this.schedulingService.releaseLock(jobId);\n }\n\n public GetStatusIcon(status: string): string {\n switch (status) {\n case 'Running': return 'fa-solid fa-spinner fa-spin';\n case 'Completed': return 'fa-solid fa-circle-check';\n case 'Failed': return 'fa-solid fa-circle-xmark';\n case 'Cancelled': return 'fa-solid fa-ban';\n case 'Timeout': return 'fa-solid fa-clock';\n default: return 'fa-solid fa-circle-question';\n }\n }\n\n public GetStatusClass(status: string): string {\n switch (status) {\n case 'Running': return 'status-running';\n case 'Completed': return 'status-success';\n case 'Failed': return 'status-error';\n case 'Cancelled': return 'status-warning';\n case 'Timeout': return 'status-warning';\n default: return '';\n }\n }\n\n public GetAlertIcon(severity: string): string {\n return severity === 'error' ? 'fa-solid fa-circle-xmark' : 'fa-solid fa-triangle-exclamation';\n }\n\n public FormatDuration(ms: number | undefined): string {\n if (ms == null) return '-';\n const seconds = Math.floor(ms / 1000);\n if (seconds < 60) return `${seconds}s`;\n const minutes = Math.floor(seconds / 60);\n const remainingSeconds = seconds % 60;\n if (minutes < 60) return `${minutes}m ${remainingSeconds}s`;\n const hours = Math.floor(minutes / 60);\n const remainingMinutes = minutes % 60;\n return `${hours}h ${remainingMinutes}m`;\n }\n\n public FormatTimeAgo(date: Date): string {\n const now = new Date();\n const diffMs = now.getTime() - date.getTime();\n const diffSec = Math.floor(diffMs / 1000);\n if (diffSec < 60) return `${diffSec}s ago`;\n const diffMin = Math.floor(diffSec / 60);\n if (diffMin < 60) return `${diffMin}m ago`;\n const diffHr = Math.floor(diffMin / 60);\n if (diffHr < 24) return `${diffHr}h ago`;\n return date.toLocaleDateString();\n }\n\n public FormatTimeUntil(date: Date): string {\n const now = new Date();\n const diffMs = date.getTime() - now.getTime();\n if (diffMs <= 0) return 'Now';\n const diffMin = Math.floor(diffMs / 60000);\n if (diffMin < 60) return `${diffMin}m`;\n const diffHr = Math.floor(diffMin / 60);\n const remainingMin = diffMin % 60;\n return `${diffHr}h ${remainingMin}m`;\n }\n\n public FormatCost(cost: number): string {\n if (cost < 0.01) return `$${cost.toFixed(4)}`;\n if (cost < 1) return `$${cost.toFixed(3)}`;\n return `$${cost.toFixed(2)}`;\n }\n\n public FormatPercentage(value: number): string {\n return `${(value * 100).toFixed(1)}%`;\n }\n\n public FormatDateTime(date: Date): string {\n return date.toLocaleString(undefined, {\n month: 'numeric',\n day: 'numeric',\n year: '2-digit',\n hour: 'numeric',\n minute: '2-digit',\n hour12: true\n });\n }\n\n public GetSuccessRateColor(rate: number): string {\n if (rate >= 0.9) return '#10b981';\n if (rate >= 0.7) return '#f59e0b';\n return '#ef4444';\n }\n\n public GetHealthScore(): number {\n if (!this.Kpis) return 100;\n let score = 100;\n score -= this.Kpis.totalFailures7d * 2;\n score -= this.Kpis.lockedJobs * 10;\n score -= this.Alerts.filter(a => a.severity === 'error').length * 15;\n score -= this.Alerts.filter(a => a.severity === 'warning').length * 5;\n return Math.max(0, Math.min(100, score));\n }\n\n public GetHealthColor(): string {\n const score = this.GetHealthScore();\n if (score >= 80) return '#10b981';\n if (score >= 50) return '#f59e0b';\n return '#ef4444';\n }\n\n public GetHealthStrokeDasharray(): string {\n const score = this.GetHealthScore();\n const circumference = 2 * Math.PI * 36;\n const filled = (score / 100) * circumference;\n return `${filled} ${circumference - filled}`;\n }\n\n private startAutoRefresh(): void {\n this.stopAutoRefresh();\n this.autoRefreshSub = interval(30000).subscribe(() => {\n this.schedulingService.refresh();\n });\n }\n\n private stopAutoRefresh(): void {\n if (this.autoRefreshSub) {\n this.autoRefreshSub.unsubscribe();\n this.autoRefreshSub = undefined;\n }\n }\n\n private emitState(): void {\n this.stateChange.emit({\n autoRefreshEnabled: this.AutoRefreshEnabled\n });\n }\n}\n","@if (HideToolbar) {\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\n} @else {\n <mj-page-layout>\n <mj-page-header\n Title=\"Scheduling Dashboard\"\n Icon=\"fa-solid fa-gauge-high\"\n Subtitle=\"System health, KPIs, and alerts\">\n <div actions>\n <mj-refresh-button (Clicked)=\"Refresh()\"></mj-refresh-button>\n <button mjButton\n [variant]=\"AutoRefreshEnabled ? 'primary' : 'secondary'\"\n size=\"sm\"\n (click)=\"ToggleAutoRefresh()\"\n title=\"Toggle auto-refresh\">\n <i class=\"fa-solid fa-rotate\"></i>\n Auto: {{AutoRefreshEnabled ? 'ON' : 'OFF'}}\n </button>\n </div>\n </mj-page-header>\n <mj-page-body>\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\n </mj-page-body>\n </mj-page-layout>\n}\n\n<ng-template #content>\n<div class=\"overview-container\">\n\n @if (IsLoading) {\n <div class=\"loading-container\">\n <mj-loading text=\"Loading dashboard...\" size=\"medium\"></mj-loading>\n </div>\n }\n\n @if (!IsLoading && Kpis) {\n <div class=\"overview-content\">\n <!-- Health Banner -->\n <div class=\"health-banner\" [style.border-color]=\"GetHealthColor()\">\n <div class=\"health-ring\">\n <svg viewBox=\"0 0 80 80\" class=\"health-svg\">\n <circle cx=\"40\" cy=\"40\" r=\"36\" fill=\"none\" class=\"health-ring-track\" stroke-width=\"6\"/>\n <circle cx=\"40\" cy=\"40\" r=\"36\" fill=\"none\"\n [attr.stroke]=\"GetHealthColor()\"\n stroke-width=\"6\"\n stroke-linecap=\"round\"\n [attr.stroke-dasharray]=\"GetHealthStrokeDasharray()\"\n transform=\"rotate(-90 40 40)\"/>\n </svg>\n <div class=\"health-score\" [style.color]=\"GetHealthColor()\">{{GetHealthScore()}}</div>\n </div>\n <div class=\"health-details\">\n <div class=\"health-title\">System Health</div>\n <div class=\"health-stats\">\n <span><i class=\"fa-solid fa-check-circle status-success\"></i> {{Kpis.totalActiveJobs}} active</span>\n <span><i class=\"fa-solid fa-lock status-warning\"></i> {{Kpis.lockedJobs}} locked</span>\n <span><i class=\"fa-solid fa-xmark-circle status-error\"></i> {{Kpis.totalFailures7d}} failures (7d)</span>\n </div>\n </div>\n </div>\n <!-- KPI Cards -->\n <div class=\"kpi-grid\">\n <div class=\"kpi-card\">\n <div class=\"kpi-icon blue\">\n <i class=\"fa-solid fa-calendar-check\"></i>\n </div>\n <div class=\"kpi-content\">\n <div class=\"kpi-value\">{{Kpis.totalActiveJobs}}</div>\n <div class=\"kpi-label\">Active Jobs</div>\n </div>\n </div>\n <div class=\"kpi-card\">\n <div class=\"kpi-icon amber\">\n <i class=\"fa-solid fa-clock\"></i>\n </div>\n <div class=\"kpi-content\">\n <div class=\"kpi-value\">{{Kpis.jobsDueInNextHour}}</div>\n <div class=\"kpi-label\">Due Next Hour</div>\n </div>\n </div>\n <div class=\"kpi-card\">\n <div class=\"kpi-icon purple\">\n <i class=\"fa-solid fa-chart-bar\"></i>\n </div>\n <div class=\"kpi-content\">\n <div class=\"kpi-value\">{{Kpis.recentExecutions24h}}</div>\n <div class=\"kpi-label\">Runs (24h)</div>\n <div class=\"kpi-sub\" [style.color]=\"GetSuccessRateColor(Kpis.successRate24h)\">\n {{FormatPercentage(Kpis.successRate24h)}} success\n </div>\n </div>\n </div>\n <div class=\"kpi-card\">\n <div class=\"kpi-icon green\">\n <i class=\"fa-solid fa-play\"></i>\n </div>\n <div class=\"kpi-content\">\n <div class=\"kpi-value\">{{Kpis.currentlyRunning}}</div>\n <div class=\"kpi-label\">Running Now</div>\n </div>\n </div>\n </div>\n <!-- Two-Column Layout: Live Executions + Alerts/Upcoming -->\n <div class=\"panels-grid\">\n <!-- Live Executions -->\n <div class=\"panel\">\n <div class=\"panel-header\">\n <div class=\"panel-title\">\n <i class=\"fa-solid fa-bolt\"></i> Live Executions\n </div>\n <span class=\"panel-badge\">{{LiveExecutions.length}}</span>\n </div>\n <div class=\"panel-body\">\n @if (LiveExecutions.length === 0) {\n <div class=\"empty-state-small\">\n <i class=\"fa-solid fa-inbox\"></i>\n <span>No recent executions</span>\n </div>\n }\n @for (exec of LiveExecutions; track exec) {\n <div class=\"execution-item\">\n <div class=\"exec-status\">\n <i [class]=\"GetStatusIcon(exec.status)\" [ngClass]=\"GetStatusClass(exec.status)\"></i>\n </div>\n <div class=\"exec-details\">\n <div class=\"exec-name\">{{exec.jobName}}</div>\n <div class=\"exec-meta\">{{FormatTimeAgo(exec.startedAt)}} · {{FormatDuration(exec.duration)}}</div>\n </div>\n <div class=\"exec-status-badge\" [ngClass]=\"GetStatusClass(exec.status)\">\n {{exec.status}}\n </div>\n </div>\n }\n </div>\n </div>\n <!-- Right Column: Alerts + Upcoming -->\n <div class=\"right-column\">\n <!-- Alerts -->\n <div class=\"panel\">\n <div class=\"panel-header\" [ngClass]=\"Alerts.length > 0 ? 'alert-header' : 'clear-header'\">\n <div class=\"panel-title\">\n <i [class]=\"Alerts.length > 0 ? 'fa-solid fa-triangle-exclamation' : 'fa-solid fa-shield-check'\"></i>\n {{Alerts.length > 0 ? 'Alerts' : 'All Clear'}}\n </div>\n @if (Alerts.length > 0) {\n <span class=\"panel-badge error\">{{Alerts.length}}</span>\n }\n @if (Alerts.length === 0) {\n <span class=\"panel-badge clear\">0</span>\n }\n </div>\n <div class=\"panel-body\">\n @if (Alerts.length === 0) {\n <div class=\"empty-state-small all-clear\">\n <i class=\"fa-solid fa-circle-check\"></i>\n <span>No active alerts</span>\n </div>\n }\n @for (alert of Alerts; track alert) {\n <div class=\"alert-item\" [ngClass]=\"'alert-' + alert.severity\">\n <i [class]=\"GetAlertIcon(alert.severity)\" class=\"alert-icon\"></i>\n <div class=\"alert-content\">\n <div class=\"alert-title\">{{alert.title}}</div>\n <div class=\"alert-message\">{{alert.message}}</div>\n </div>\n @if (alert.type === 'stale-lock' && alert.jobId) {\n <button\n class=\"alert-action-btn\"\n (click)=\"ReleaseLock(alert.jobId!)\">\n Release\n </button>\n }\n </div>\n }\n </div>\n </div>\n <!-- Upcoming -->\n <div class=\"panel\">\n <div class=\"panel-header\">\n <div class=\"panel-title\">\n <i class=\"fa-solid fa-calendar-day\"></i> Upcoming (24h)\n </div>\n <span class=\"panel-badge\">{{UpcomingExecutions.length}}</span>\n </div>\n <div class=\"panel-body\">\n @if (UpcomingExecutions.length === 0) {\n <div class=\"empty-state-small\">\n <i class=\"fa-solid fa-calendar-xmark\"></i>\n <span>No upcoming executions</span>\n </div>\n }\n @for (upcoming of UpcomingExecutions; track upcoming) {\n <div class=\"upcoming-item\">\n <div class=\"upcoming-info\">\n <div class=\"upcoming-name\">{{upcoming.jobName}}</div>\n <div class=\"upcoming-meta\">\n {{FormatDateTime(upcoming.nextRunAt)}}\n <span class=\"upcoming-type\">{{upcoming.jobType}}</span>\n </div>\n </div>\n <div class=\"upcoming-countdown\" [class.soon]=\"FormatTimeUntil(upcoming.nextRunAt).includes('m') && !FormatTimeUntil(upcoming.nextRunAt).includes('h')\">\n {{FormatTimeUntil(upcoming.nextRunAt)}}\n </div>\n </div>\n }\n </div>\n </div>\n </div>\n </div>\n <!-- Locks Section -->\n @if (Locks.length > 0) {\n <div class=\"panel\" style=\"margin-top: 20px;\">\n <div class=\"panel-header\">\n <div class=\"panel-title\">\n <i class=\"fa-solid fa-lock\"></i> Active Locks\n </div>\n <span class=\"panel-badge\">{{Locks.length}}</span>\n </div>\n <div class=\"panel-body\">\n <table class=\"data-table\">\n <thead>\n <tr>\n <th>Job</th>\n <th>Locked By</th>\n <th>Locked At</th>\n <th>Expected Completion</th>\n <th>Status</th>\n <th></th>\n </tr>\n </thead>\n <tbody>\n @for (lock of Locks; track lock) {\n <tr [class.stale-row]=\"lock.isStale\">\n <td class=\"cell-name\">{{lock.jobName}}</td>\n <td class=\"cell-meta\">{{lock.lockedBy}}</td>\n <td class=\"cell-meta\">{{FormatTimeAgo(lock.lockedAt)}}</td>\n <td class=\"cell-meta\">{{FormatDateTime(lock.expectedCompletion)}}</td>\n <td>\n <span class=\"lock-status-badge\" [class.stale]=\"lock.isStale\">\n {{lock.isStale ? 'Stale' : 'Active'}}\n </span>\n </td>\n <td>\n @if (lock.isStale) {\n <button class=\"release-btn\" (click)=\"ReleaseLock(lock.jobId)\">\n <i class=\"fa-solid fa-lock-open\"></i> Release\n </button>\n }\n </td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n </div>\n }\n </div>\n }\n</div>\n</ng-template>\n"]}
|
|
1
|
+
{"version":3,"file":"scheduling-overview.component.js","sourceRoot":"","sources":["../../../src/Scheduling/components/scheduling-overview.component.ts","../../../src/Scheduling/components/scheduling-overview.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, Input, Output, EventEmitter, OnInit, OnDestroy, ChangeDetectorRef, ChangeDetectionStrategy } from '@angular/core';\nimport { Subscription, interval } from 'rxjs';\nimport {\n SchedulingInstrumentationService,\n SchedulingKPIs,\n JobExecution,\n UpcomingExecution,\n LockInfo,\n AlertCondition\n} from '../services/scheduling-instrumentation.service';\n\n@Component({\n standalone: false,\n selector: 'app-scheduling-overview',\n templateUrl: './scheduling-overview.component.html',\n styleUrls: ['./scheduling-overview.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class SchedulingOverviewComponent implements OnInit, OnDestroy {\n @Input() initialState: Record<string, unknown> = {};\n /** When true, the inner toolbar is hidden — the parent shell is rendering it in `<mj-page-header>` instead. */\n @Input() HideToolbar = false;\n @Output() stateChange = new EventEmitter<Record<string, unknown>>();\n\n public Kpis: SchedulingKPIs | null = null;\n public LiveExecutions: JobExecution[] = [];\n public UpcomingExecutions: UpcomingExecution[] = [];\n public Locks: LockInfo[] = [];\n public Alerts: AlertCondition[] = [];\n public IsLoading = true;\n public AutoRefreshEnabled = true;\n\n private subscriptions: Subscription[] = [];\n private autoRefreshSub: Subscription | undefined;\n\n constructor(\n private schedulingService: SchedulingInstrumentationService,\n private cdr: ChangeDetectorRef\n ) {}\n\n ngOnInit(): void {\n if (this.initialState) {\n if (this.initialState['autoRefreshEnabled'] != null) {\n this.AutoRefreshEnabled = this.initialState['autoRefreshEnabled'] as boolean;\n }\n }\n\n this.subscriptions.push(\n this.schedulingService.kpis$.subscribe(kpis => {\n this.Kpis = kpis;\n this.IsLoading = false;\n this.cdr.markForCheck();\n }),\n this.schedulingService.liveExecutions$.subscribe(execs => {\n this.LiveExecutions = execs;\n this.cdr.markForCheck();\n }),\n this.schedulingService.upcomingExecutions$.subscribe(upcoming => {\n this.UpcomingExecutions = upcoming;\n this.cdr.markForCheck();\n }),\n this.schedulingService.lockInfo$.subscribe(locks => {\n this.Locks = locks;\n this.cdr.markForCheck();\n }),\n this.schedulingService.alerts$.subscribe(alerts => {\n this.Alerts = alerts;\n this.cdr.markForCheck();\n })\n );\n\n if (this.AutoRefreshEnabled) {\n this.startAutoRefresh();\n }\n }\n\n ngOnDestroy(): void {\n this.subscriptions.forEach(s => s.unsubscribe());\n this.stopAutoRefresh();\n }\n\n public Refresh(): void {\n this.schedulingService.refresh();\n }\n\n public ToggleAutoRefresh(): void {\n this.AutoRefreshEnabled = !this.AutoRefreshEnabled;\n if (this.AutoRefreshEnabled) {\n this.startAutoRefresh();\n } else {\n this.stopAutoRefresh();\n }\n this.emitState();\n }\n\n public async ReleaseLock(jobId: string): Promise<void> {\n await this.schedulingService.releaseLock(jobId);\n }\n\n public GetStatusIcon(status: string): string {\n switch (status) {\n case 'Running': return 'fa-solid fa-spinner fa-spin';\n case 'Completed': return 'fa-solid fa-circle-check';\n case 'Failed': return 'fa-solid fa-circle-xmark';\n case 'Cancelled': return 'fa-solid fa-ban';\n case 'Timeout': return 'fa-solid fa-clock';\n default: return 'fa-solid fa-circle-question';\n }\n }\n\n public GetStatusClass(status: string): string {\n switch (status) {\n case 'Running': return 'status-running';\n case 'Completed': return 'status-success';\n case 'Failed': return 'status-error';\n case 'Cancelled': return 'status-warning';\n case 'Timeout': return 'status-warning';\n default: return '';\n }\n }\n\n public GetAlertIcon(severity: string): string {\n return severity === 'error' ? 'fa-solid fa-circle-xmark' : 'fa-solid fa-triangle-exclamation';\n }\n\n public FormatDuration(ms: number | undefined): string {\n if (ms == null) return '-';\n const seconds = Math.floor(ms / 1000);\n if (seconds < 60) return `${seconds}s`;\n const minutes = Math.floor(seconds / 60);\n const remainingSeconds = seconds % 60;\n if (minutes < 60) return `${minutes}m ${remainingSeconds}s`;\n const hours = Math.floor(minutes / 60);\n const remainingMinutes = minutes % 60;\n return `${hours}h ${remainingMinutes}m`;\n }\n\n public FormatTimeAgo(date: Date): string {\n const now = new Date();\n const diffMs = now.getTime() - date.getTime();\n const diffSec = Math.floor(diffMs / 1000);\n if (diffSec < 60) return `${diffSec}s ago`;\n const diffMin = Math.floor(diffSec / 60);\n if (diffMin < 60) return `${diffMin}m ago`;\n const diffHr = Math.floor(diffMin / 60);\n if (diffHr < 24) return `${diffHr}h ago`;\n return date.toLocaleDateString();\n }\n\n public FormatTimeUntil(date: Date): string {\n const now = new Date();\n const diffMs = date.getTime() - now.getTime();\n if (diffMs <= 0) return 'Now';\n const diffMin = Math.floor(diffMs / 60000);\n if (diffMin < 60) return `${diffMin}m`;\n const diffHr = Math.floor(diffMin / 60);\n const remainingMin = diffMin % 60;\n return `${diffHr}h ${remainingMin}m`;\n }\n\n public FormatCost(cost: number): string {\n if (cost < 0.01) return `$${cost.toFixed(4)}`;\n if (cost < 1) return `$${cost.toFixed(3)}`;\n return `$${cost.toFixed(2)}`;\n }\n\n public FormatPercentage(value: number): string {\n return `${(value * 100).toFixed(1)}%`;\n }\n\n public FormatDateTime(date: Date): string {\n return date.toLocaleString(undefined, {\n month: 'numeric',\n day: 'numeric',\n year: '2-digit',\n hour: 'numeric',\n minute: '2-digit',\n hour12: true\n });\n }\n\n public GetSuccessRateColor(rate: number): string {\n if (rate >= 0.9) return '#10b981';\n if (rate >= 0.7) return '#f59e0b';\n return '#ef4444';\n }\n\n public GetHealthScore(): number {\n if (!this.Kpis) return 100;\n let score = 100;\n score -= this.Kpis.totalFailures7d * 2;\n score -= this.Kpis.lockedJobs * 10;\n score -= this.Alerts.filter(a => a.severity === 'error').length * 15;\n score -= this.Alerts.filter(a => a.severity === 'warning').length * 5;\n return Math.max(0, Math.min(100, score));\n }\n\n public GetHealthColor(): string {\n const score = this.GetHealthScore();\n if (score >= 80) return '#10b981';\n if (score >= 50) return '#f59e0b';\n return '#ef4444';\n }\n\n public GetHealthStrokeDasharray(): string {\n const score = this.GetHealthScore();\n const circumference = 2 * Math.PI * 36;\n const filled = (score / 100) * circumference;\n return `${filled} ${circumference - filled}`;\n }\n\n private startAutoRefresh(): void {\n this.stopAutoRefresh();\n this.autoRefreshSub = interval(30000).subscribe(() => {\n this.schedulingService.refresh();\n });\n }\n\n private stopAutoRefresh(): void {\n if (this.autoRefreshSub) {\n this.autoRefreshSub.unsubscribe();\n this.autoRefreshSub = undefined;\n }\n }\n\n private emitState(): void {\n this.stateChange.emit({\n autoRefreshEnabled: this.AutoRefreshEnabled\n });\n }\n}\n","@if (HideToolbar) {\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\n} @else {\n <mj-page-layout>\n <mj-page-header\n Title=\"Scheduling Dashboard\"\n Icon=\"fa-solid fa-gauge-high\"\n Subtitle=\"System health, KPIs, and alerts\">\n <div actions>\n <mj-refresh-button (Clicked)=\"Refresh()\"></mj-refresh-button>\n <button mjButton\n [variant]=\"AutoRefreshEnabled ? 'primary' : 'secondary'\"\n size=\"sm\"\n (click)=\"ToggleAutoRefresh()\"\n title=\"Toggle auto-refresh\">\n <i class=\"fa-solid fa-rotate\"></i>\n <span class=\"action-btn-label\">Auto: {{AutoRefreshEnabled ? 'ON' : 'OFF'}}</span>\n </button>\n </div>\n </mj-page-header>\n <mj-page-body>\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\n </mj-page-body>\n </mj-page-layout>\n}\n\n<ng-template #content>\n<div class=\"overview-container\">\n\n @if (IsLoading) {\n <div class=\"loading-container\">\n <mj-loading text=\"Loading dashboard...\" size=\"medium\"></mj-loading>\n </div>\n }\n\n @if (!IsLoading && Kpis) {\n <div class=\"overview-content\">\n <!-- Health Banner -->\n <div class=\"health-banner\" [style.border-color]=\"GetHealthColor()\">\n <div class=\"health-ring\">\n <svg viewBox=\"0 0 80 80\" class=\"health-svg\">\n <circle cx=\"40\" cy=\"40\" r=\"36\" fill=\"none\" class=\"health-ring-track\" stroke-width=\"6\"/>\n <circle cx=\"40\" cy=\"40\" r=\"36\" fill=\"none\"\n [attr.stroke]=\"GetHealthColor()\"\n stroke-width=\"6\"\n stroke-linecap=\"round\"\n [attr.stroke-dasharray]=\"GetHealthStrokeDasharray()\"\n transform=\"rotate(-90 40 40)\"/>\n </svg>\n <div class=\"health-score\" [style.color]=\"GetHealthColor()\">{{GetHealthScore()}}</div>\n </div>\n <div class=\"health-details\">\n <div class=\"health-title\">System Health</div>\n <div class=\"health-stats\">\n <span><i class=\"fa-solid fa-check-circle status-success\"></i> {{Kpis.totalActiveJobs}} active</span>\n <span><i class=\"fa-solid fa-lock status-warning\"></i> {{Kpis.lockedJobs}} locked</span>\n <span><i class=\"fa-solid fa-xmark-circle status-error\"></i> {{Kpis.totalFailures7d}} failures (7d)</span>\n </div>\n </div>\n </div>\n <!-- KPI Cards -->\n <div class=\"kpi-grid\">\n <div class=\"kpi-card\">\n <div class=\"kpi-icon blue\">\n <i class=\"fa-solid fa-calendar-check\"></i>\n </div>\n <div class=\"kpi-content\">\n <div class=\"kpi-value\">{{Kpis.totalActiveJobs}}</div>\n <div class=\"kpi-label\">Active Jobs</div>\n </div>\n </div>\n <div class=\"kpi-card\">\n <div class=\"kpi-icon amber\">\n <i class=\"fa-solid fa-clock\"></i>\n </div>\n <div class=\"kpi-content\">\n <div class=\"kpi-value\">{{Kpis.jobsDueInNextHour}}</div>\n <div class=\"kpi-label\">Due Next Hour</div>\n </div>\n </div>\n <div class=\"kpi-card\">\n <div class=\"kpi-icon purple\">\n <i class=\"fa-solid fa-chart-bar\"></i>\n </div>\n <div class=\"kpi-content\">\n <div class=\"kpi-value\">{{Kpis.recentExecutions24h}}</div>\n <div class=\"kpi-label\">Runs (24h)</div>\n <div class=\"kpi-sub\" [style.color]=\"GetSuccessRateColor(Kpis.successRate24h)\">\n {{FormatPercentage(Kpis.successRate24h)}} success\n </div>\n </div>\n </div>\n <div class=\"kpi-card\">\n <div class=\"kpi-icon green\">\n <i class=\"fa-solid fa-play\"></i>\n </div>\n <div class=\"kpi-content\">\n <div class=\"kpi-value\">{{Kpis.currentlyRunning}}</div>\n <div class=\"kpi-label\">Running Now</div>\n </div>\n </div>\n </div>\n <!-- Two-Column Layout: Live Executions + Alerts/Upcoming -->\n <div class=\"panels-grid\">\n <!-- Live Executions -->\n <div class=\"panel\">\n <div class=\"panel-header\">\n <div class=\"panel-title\">\n <i class=\"fa-solid fa-bolt\"></i> Live Executions\n </div>\n <span class=\"panel-badge\">{{LiveExecutions.length}}</span>\n </div>\n <div class=\"panel-body\">\n @if (LiveExecutions.length === 0) {\n <div class=\"empty-state-small\">\n <i class=\"fa-solid fa-inbox\"></i>\n <span>No recent executions</span>\n </div>\n }\n @for (exec of LiveExecutions; track exec) {\n <div class=\"execution-item\">\n <div class=\"exec-status\">\n <i [class]=\"GetStatusIcon(exec.status)\" [ngClass]=\"GetStatusClass(exec.status)\"></i>\n </div>\n <div class=\"exec-details\">\n <div class=\"exec-name\">{{exec.jobName}}</div>\n <div class=\"exec-meta\">{{FormatTimeAgo(exec.startedAt)}} · {{FormatDuration(exec.duration)}}</div>\n </div>\n <div class=\"exec-status-badge\" [ngClass]=\"GetStatusClass(exec.status)\">\n {{exec.status}}\n </div>\n </div>\n }\n </div>\n </div>\n <!-- Right Column: Alerts + Upcoming -->\n <div class=\"right-column\">\n <!-- Alerts -->\n <div class=\"panel\">\n <div class=\"panel-header\" [ngClass]=\"Alerts.length > 0 ? 'alert-header' : 'clear-header'\">\n <div class=\"panel-title\">\n <i [class]=\"Alerts.length > 0 ? 'fa-solid fa-triangle-exclamation' : 'fa-solid fa-shield-check'\"></i>\n {{Alerts.length > 0 ? 'Alerts' : 'All Clear'}}\n </div>\n @if (Alerts.length > 0) {\n <span class=\"panel-badge error\">{{Alerts.length}}</span>\n }\n @if (Alerts.length === 0) {\n <span class=\"panel-badge clear\">0</span>\n }\n </div>\n <div class=\"panel-body\">\n @if (Alerts.length === 0) {\n <div class=\"empty-state-small all-clear\">\n <i class=\"fa-solid fa-circle-check\"></i>\n <span>No active alerts</span>\n </div>\n }\n @for (alert of Alerts; track alert) {\n <div class=\"alert-item\" [ngClass]=\"'alert-' + alert.severity\">\n <i [class]=\"GetAlertIcon(alert.severity)\" class=\"alert-icon\"></i>\n <div class=\"alert-content\">\n <div class=\"alert-title\">{{alert.title}}</div>\n <div class=\"alert-message\">{{alert.message}}</div>\n </div>\n @if (alert.type === 'stale-lock' && alert.jobId) {\n <button\n class=\"alert-action-btn\"\n (click)=\"ReleaseLock(alert.jobId!)\">\n Release\n </button>\n }\n </div>\n }\n </div>\n </div>\n <!-- Upcoming -->\n <div class=\"panel\">\n <div class=\"panel-header\">\n <div class=\"panel-title\">\n <i class=\"fa-solid fa-calendar-day\"></i> Upcoming (24h)\n </div>\n <span class=\"panel-badge\">{{UpcomingExecutions.length}}</span>\n </div>\n <div class=\"panel-body\">\n @if (UpcomingExecutions.length === 0) {\n <div class=\"empty-state-small\">\n <i class=\"fa-solid fa-calendar-xmark\"></i>\n <span>No upcoming executions</span>\n </div>\n }\n @for (upcoming of UpcomingExecutions; track upcoming) {\n <div class=\"upcoming-item\">\n <div class=\"upcoming-info\">\n <div class=\"upcoming-name\">{{upcoming.jobName}}</div>\n <div class=\"upcoming-meta\">\n {{FormatDateTime(upcoming.nextRunAt)}}\n <span class=\"upcoming-type\">{{upcoming.jobType}}</span>\n </div>\n </div>\n <div class=\"upcoming-countdown\" [class.soon]=\"FormatTimeUntil(upcoming.nextRunAt).includes('m') && !FormatTimeUntil(upcoming.nextRunAt).includes('h')\">\n {{FormatTimeUntil(upcoming.nextRunAt)}}\n </div>\n </div>\n }\n </div>\n </div>\n </div>\n </div>\n <!-- Locks Section -->\n @if (Locks.length > 0) {\n <div class=\"panel\" style=\"margin-top: 20px;\">\n <div class=\"panel-header\">\n <div class=\"panel-title\">\n <i class=\"fa-solid fa-lock\"></i> Active Locks\n </div>\n <span class=\"panel-badge\">{{Locks.length}}</span>\n </div>\n <div class=\"panel-body\">\n <table class=\"data-table\">\n <thead>\n <tr>\n <th>Job</th>\n <th>Locked By</th>\n <th>Locked At</th>\n <th>Expected Completion</th>\n <th>Status</th>\n <th></th>\n </tr>\n </thead>\n <tbody>\n @for (lock of Locks; track lock) {\n <tr [class.stale-row]=\"lock.isStale\">\n <td class=\"cell-name\">{{lock.jobName}}</td>\n <td class=\"cell-meta\">{{lock.lockedBy}}</td>\n <td class=\"cell-meta\">{{FormatTimeAgo(lock.lockedAt)}}</td>\n <td class=\"cell-meta\">{{FormatDateTime(lock.expectedCompletion)}}</td>\n <td>\n <span class=\"lock-status-badge\" [class.stale]=\"lock.isStale\">\n {{lock.isStale ? 'Stale' : 'Active'}}\n </span>\n </td>\n <td>\n @if (lock.isStale) {\n <button class=\"release-btn\" (click)=\"ReleaseLock(lock.jobId)\">\n <i class=\"fa-solid fa-lock-open\"></i> Release\n </button>\n }\n </td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n </div>\n }\n </div>\n }\n</div>\n</ng-template>\n"]}
|
|
@@ -43,30 +43,32 @@ function SchedulingDashboardComponent_Case_7_Template(rf, ctx) { if (rf & 1) {
|
|
|
43
43
|
i0.ɵɵelementStart(1, "button", 14);
|
|
44
44
|
i0.ɵɵlistener("click", function SchedulingDashboardComponent_Case_7_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r2); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.overviewCmp == null ? null : ctx_r0.overviewCmp.ToggleAutoRefresh()); });
|
|
45
45
|
i0.ɵɵelement(2, "i", 15);
|
|
46
|
-
i0.ɵɵ
|
|
47
|
-
i0.ɵɵ
|
|
46
|
+
i0.ɵɵelementStart(3, "span", 16);
|
|
47
|
+
i0.ɵɵtext(4);
|
|
48
|
+
i0.ɵɵelementEnd()();
|
|
48
49
|
} if (rf & 2) {
|
|
49
50
|
const ctx_r0 = i0.ɵɵnextContext();
|
|
50
51
|
i0.ɵɵadvance();
|
|
51
52
|
i0.ɵɵproperty("variant", (ctx_r0.overviewCmp == null ? null : ctx_r0.overviewCmp.AutoRefreshEnabled) ? "primary" : "secondary");
|
|
52
|
-
i0.ɵɵadvance(
|
|
53
|
-
i0.ɵɵtextInterpolate1("
|
|
53
|
+
i0.ɵɵadvance(3);
|
|
54
|
+
i0.ɵɵtextInterpolate1("Auto: ", (ctx_r0.overviewCmp == null ? null : ctx_r0.overviewCmp.AutoRefreshEnabled) ? "ON" : "OFF");
|
|
54
55
|
} }
|
|
55
56
|
function SchedulingDashboardComponent_Case_8_Template(rf, ctx) { if (rf & 1) {
|
|
56
57
|
const _r3 = i0.ɵɵgetCurrentView();
|
|
57
|
-
i0.ɵɵelementStart(0, "mj-filter-popover",
|
|
58
|
+
i0.ɵɵelementStart(0, "mj-filter-popover", 17);
|
|
58
59
|
i0.ɵɵlistener("ClearAllRequested", function SchedulingDashboardComponent_Case_8_Template_mj_filter_popover_ClearAllRequested_0_listener() { i0.ɵɵrestoreView(_r3); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.resetJobsFilters()); });
|
|
59
|
-
i0.ɵɵelementStart(1, "mj-filter-panel",
|
|
60
|
+
i0.ɵɵelementStart(1, "mj-filter-panel", 18);
|
|
60
61
|
i0.ɵɵlistener("ValuesChange", function SchedulingDashboardComponent_Case_8_Template_mj_filter_panel_ValuesChange_1_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.onJobsFilterValuesChange($event)); })("Reset", function SchedulingDashboardComponent_Case_8_Template_mj_filter_panel_Reset_1_listener() { i0.ɵɵrestoreView(_r3); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.resetJobsFilters()); });
|
|
61
62
|
i0.ɵɵelementEnd()();
|
|
62
63
|
i0.ɵɵelementStart(2, "mj-refresh-button", 13);
|
|
63
64
|
i0.ɵɵlistener("Clicked", function SchedulingDashboardComponent_Case_8_Template_mj_refresh_button_Clicked_2_listener() { i0.ɵɵrestoreView(_r3); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.jobsCmp == null ? null : ctx_r0.jobsCmp.Refresh()); });
|
|
64
65
|
i0.ɵɵelementEnd();
|
|
65
|
-
i0.ɵɵelementStart(3, "button",
|
|
66
|
+
i0.ɵɵelementStart(3, "button", 19);
|
|
66
67
|
i0.ɵɵlistener("click", function SchedulingDashboardComponent_Case_8_Template_button_click_3_listener() { i0.ɵɵrestoreView(_r3); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.jobsCmp == null ? null : ctx_r0.jobsCmp.OpenCreateSlideout()); });
|
|
67
|
-
i0.ɵɵelement(4, "i",
|
|
68
|
-
i0.ɵɵ
|
|
69
|
-
i0.ɵɵ
|
|
68
|
+
i0.ɵɵelement(4, "i", 20);
|
|
69
|
+
i0.ɵɵelementStart(5, "span", 16);
|
|
70
|
+
i0.ɵɵtext(6, "New Job");
|
|
71
|
+
i0.ɵɵelementEnd()();
|
|
70
72
|
} if (rf & 2) {
|
|
71
73
|
const ctx_r0 = i0.ɵɵnextContext();
|
|
72
74
|
i0.ɵɵproperty("ActiveCount", ctx_r0.JobsActiveFilterCount)("ShowClearAll", ctx_r0.JobsActiveFilterCount > 0);
|
|
@@ -75,9 +77,9 @@ function SchedulingDashboardComponent_Case_8_Template(rf, ctx) { if (rf & 1) {
|
|
|
75
77
|
} }
|
|
76
78
|
function SchedulingDashboardComponent_Case_9_Template(rf, ctx) { if (rf & 1) {
|
|
77
79
|
const _r4 = i0.ɵɵgetCurrentView();
|
|
78
|
-
i0.ɵɵelementStart(0, "mj-filter-popover",
|
|
80
|
+
i0.ɵɵelementStart(0, "mj-filter-popover", 17);
|
|
79
81
|
i0.ɵɵlistener("ClearAllRequested", function SchedulingDashboardComponent_Case_9_Template_mj_filter_popover_ClearAllRequested_0_listener() { i0.ɵɵrestoreView(_r4); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.resetActivityFilters()); });
|
|
80
|
-
i0.ɵɵelementStart(1, "mj-filter-panel",
|
|
82
|
+
i0.ɵɵelementStart(1, "mj-filter-panel", 18);
|
|
81
83
|
i0.ɵɵlistener("ValuesChange", function SchedulingDashboardComponent_Case_9_Template_mj_filter_panel_ValuesChange_1_listener($event) { i0.ɵɵrestoreView(_r4); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.onActivityFilterValuesChange($event)); })("Reset", function SchedulingDashboardComponent_Case_9_Template_mj_filter_panel_Reset_1_listener() { i0.ɵɵrestoreView(_r4); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.resetActivityFilters()); });
|
|
82
84
|
i0.ɵɵelementEnd()();
|
|
83
85
|
i0.ɵɵelementStart(2, "mj-refresh-button", 13);
|
|
@@ -91,7 +93,7 @@ function SchedulingDashboardComponent_Case_9_Template(rf, ctx) { if (rf & 1) {
|
|
|
91
93
|
} }
|
|
92
94
|
function SchedulingDashboardComponent_Case_12_Template(rf, ctx) { if (rf & 1) {
|
|
93
95
|
const _r5 = i0.ɵɵgetCurrentView();
|
|
94
|
-
i0.ɵɵelementStart(0, "mj-page-search",
|
|
96
|
+
i0.ɵɵelementStart(0, "mj-page-search", 21);
|
|
95
97
|
i0.ɵɵlistener("ValueChange", function SchedulingDashboardComponent_Case_12_Template_mj_page_search_ValueChange_0_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.jobsCmp == null ? null : ctx_r0.jobsCmp.OnSearchChange($event)); });
|
|
96
98
|
i0.ɵɵelementEnd();
|
|
97
99
|
} if (rf & 2) {
|
|
@@ -100,7 +102,7 @@ function SchedulingDashboardComponent_Case_12_Template(rf, ctx) { if (rf & 1) {
|
|
|
100
102
|
} }
|
|
101
103
|
function SchedulingDashboardComponent_Case_13_For_2_Template(rf, ctx) { if (rf & 1) {
|
|
102
104
|
const _r7 = i0.ɵɵgetCurrentView();
|
|
103
|
-
i0.ɵɵelementStart(0, "mj-filter-chip",
|
|
105
|
+
i0.ɵɵelementStart(0, "mj-filter-chip", 24);
|
|
104
106
|
i0.ɵɵlistener("Clicked", function SchedulingDashboardComponent_Case_13_For_2_Template_mj_filter_chip_Clicked_0_listener() { const range_r8 = i0.ɵɵrestoreView(_r7).$implicit; const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.activityCmp == null ? null : ctx_r0.activityCmp.OnTimeRangeChange(range_r8.value)); });
|
|
105
107
|
i0.ɵɵelementEnd();
|
|
106
108
|
} if (rf & 2) {
|
|
@@ -110,10 +112,10 @@ function SchedulingDashboardComponent_Case_13_For_2_Template(rf, ctx) { if (rf &
|
|
|
110
112
|
} }
|
|
111
113
|
function SchedulingDashboardComponent_Case_13_Template(rf, ctx) { if (rf & 1) {
|
|
112
114
|
const _r6 = i0.ɵɵgetCurrentView();
|
|
113
|
-
i0.ɵɵelementStart(0, "mj-page-search",
|
|
115
|
+
i0.ɵɵelementStart(0, "mj-page-search", 22);
|
|
114
116
|
i0.ɵɵlistener("ValueChange", function SchedulingDashboardComponent_Case_13_Template_mj_page_search_ValueChange_0_listener($event) { i0.ɵɵrestoreView(_r6); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.activityCmp == null ? null : ctx_r0.activityCmp.OnSearchChange($event)); });
|
|
115
117
|
i0.ɵɵelementEnd();
|
|
116
|
-
i0.ɵɵrepeaterCreate(1, SchedulingDashboardComponent_Case_13_For_2_Template, 1, 2, "mj-filter-chip",
|
|
118
|
+
i0.ɵɵrepeaterCreate(1, SchedulingDashboardComponent_Case_13_For_2_Template, 1, 2, "mj-filter-chip", 23, _forTrack0);
|
|
117
119
|
} if (rf & 2) {
|
|
118
120
|
const ctx_r0 = i0.ɵɵnextContext();
|
|
119
121
|
i0.ɵɵproperty("Value", (ctx_r0.activityCmp == null ? null : ctx_r0.activityCmp.SearchTerm) ?? "");
|
|
@@ -122,7 +124,7 @@ function SchedulingDashboardComponent_Case_13_Template(rf, ctx) { if (rf & 1) {
|
|
|
122
124
|
} }
|
|
123
125
|
function SchedulingDashboardComponent_Case_15_Template(rf, ctx) { if (rf & 1) {
|
|
124
126
|
const _r9 = i0.ɵɵgetCurrentView();
|
|
125
|
-
i0.ɵɵelementStart(0, "app-scheduling-overview",
|
|
127
|
+
i0.ɵɵelementStart(0, "app-scheduling-overview", 25, 0);
|
|
126
128
|
i0.ɵɵlistener("stateChange", function SchedulingDashboardComponent_Case_15_Template_app_scheduling_overview_stateChange_0_listener($event) { i0.ɵɵrestoreView(_r9); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.OnDashboardStateChange($event)); });
|
|
127
129
|
i0.ɵɵelementEnd();
|
|
128
130
|
} if (rf & 2) {
|
|
@@ -131,7 +133,7 @@ function SchedulingDashboardComponent_Case_15_Template(rf, ctx) { if (rf & 1) {
|
|
|
131
133
|
} }
|
|
132
134
|
function SchedulingDashboardComponent_Case_16_Template(rf, ctx) { if (rf & 1) {
|
|
133
135
|
const _r10 = i0.ɵɵgetCurrentView();
|
|
134
|
-
i0.ɵɵelementStart(0, "app-scheduling-jobs",
|
|
136
|
+
i0.ɵɵelementStart(0, "app-scheduling-jobs", 25, 1);
|
|
135
137
|
i0.ɵɵlistener("stateChange", function SchedulingDashboardComponent_Case_16_Template_app_scheduling_jobs_stateChange_0_listener($event) { i0.ɵɵrestoreView(_r10); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.OnJobsStateChange($event)); });
|
|
136
138
|
i0.ɵɵelementEnd();
|
|
137
139
|
} if (rf & 2) {
|
|
@@ -140,7 +142,7 @@ function SchedulingDashboardComponent_Case_16_Template(rf, ctx) { if (rf & 1) {
|
|
|
140
142
|
} }
|
|
141
143
|
function SchedulingDashboardComponent_Case_17_Template(rf, ctx) { if (rf & 1) {
|
|
142
144
|
const _r11 = i0.ɵɵgetCurrentView();
|
|
143
|
-
i0.ɵɵelementStart(0, "app-scheduling-activity",
|
|
145
|
+
i0.ɵɵelementStart(0, "app-scheduling-activity", 25, 2);
|
|
144
146
|
i0.ɵɵlistener("stateChange", function SchedulingDashboardComponent_Case_17_Template_app_scheduling_activity_stateChange_0_listener($event) { i0.ɵɵrestoreView(_r11); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.OnActivityStateChange($event)); });
|
|
145
147
|
i0.ɵɵelementEnd();
|
|
146
148
|
} if (rf & 2) {
|
|
@@ -360,13 +362,13 @@ let SchedulingDashboardComponent = class SchedulingDashboardComponent extends Ba
|
|
|
360
362
|
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.overviewCmp = _t.first);
|
|
361
363
|
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.jobsCmp = _t.first);
|
|
362
364
|
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.activityCmp = _t.first);
|
|
363
|
-
} }, standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 18, vars: 7, consts: [["overviewCmp", ""], ["jobsCmp", ""], ["activityCmp", ""], ["Title", "Scheduling", "Icon", "fa-solid fa-calendar-check", "Subtitle", "Background jobs, executions, and system health"], ["meta", ""], ["Icon", "fa-solid fa-triangle-exclamation", "Variant", "error", 3, "Count", "Label"], ["Icon", "fa-solid fa-circle-check", "Label", "Healthy", "Variant", "success"], ["Label", "jobs", 3, "Count", "Total"], ["actions", ""], ["toolbar", "", 1, "scheduling-toolbar"], [3, "TabChange", "Tabs", "ActiveKey"], ["Placeholder", "Search jobs...", 3, "Value"], [3, "initialState", "HideToolbar"], [3, "Clicked"], ["mjButton", "", "size", "sm", "title", "Toggle auto-refresh", 3, "click", "variant"], [1, "fa-solid", "fa-rotate"], [3, "ClearAllRequested", "ActiveCount", "ShowClearAll"], [3, "ValuesChange", "Reset", "Fields", "Values"], ["mjButton", "", "variant", "primary", "size", "sm", 3, "click"], [1, "fa-solid", "fa-plus"], ["Placeholder", "Search jobs...", 3, "ValueChange", "Value"], ["Placeholder", "Search executions...", 3, "ValueChange", "Value"], [3, "Label", "Active"], [3, "Clicked", "Label", "Active"], [3, "stateChange", "initialState", "HideToolbar"]], template: function SchedulingDashboardComponent_Template(rf, ctx) { if (rf & 1) {
|
|
365
|
+
} }, standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 18, vars: 7, consts: [["overviewCmp", ""], ["jobsCmp", ""], ["activityCmp", ""], ["Title", "Scheduling", "Icon", "fa-solid fa-calendar-check", "Subtitle", "Background jobs, executions, and system health"], ["meta", ""], ["Icon", "fa-solid fa-triangle-exclamation", "Variant", "error", 3, "Count", "Label"], ["Icon", "fa-solid fa-circle-check", "Label", "Healthy", "Variant", "success"], ["Label", "jobs", 3, "Count", "Total"], ["actions", ""], ["toolbar", "", 1, "scheduling-toolbar"], [3, "TabChange", "Tabs", "ActiveKey"], ["Placeholder", "Search jobs...", 3, "Value"], [3, "initialState", "HideToolbar"], [3, "Clicked"], ["mjButton", "", "size", "sm", "title", "Toggle auto-refresh", 3, "click", "variant"], [1, "fa-solid", "fa-rotate"], [1, "action-btn-label"], [3, "ClearAllRequested", "ActiveCount", "ShowClearAll"], [3, "ValuesChange", "Reset", "Fields", "Values"], ["mjButton", "", "variant", "primary", "size", "sm", 3, "click"], [1, "fa-solid", "fa-plus"], ["Placeholder", "Search jobs...", 3, "ValueChange", "Value"], ["Placeholder", "Search executions...", 3, "ValueChange", "Value"], [3, "Label", "Active"], [3, "Clicked", "Label", "Active"], [3, "stateChange", "initialState", "HideToolbar"]], template: function SchedulingDashboardComponent_Template(rf, ctx) { if (rf & 1) {
|
|
364
366
|
i0.ɵɵelementStart(0, "mj-page-layout")(1, "mj-page-header", 3)(2, "div", 4);
|
|
365
367
|
i0.ɵɵconditionalCreate(3, SchedulingDashboardComponent_Conditional_3_Template, 1, 2, "mj-stat-badge", 5)(4, SchedulingDashboardComponent_Conditional_4_Template, 1, 0, "mj-stat-badge", 6);
|
|
366
368
|
i0.ɵɵconditionalCreate(5, SchedulingDashboardComponent_Conditional_5_Template, 1, 2, "mj-stat-badge", 7);
|
|
367
369
|
i0.ɵɵelementEnd();
|
|
368
370
|
i0.ɵɵelementStart(6, "div", 8);
|
|
369
|
-
i0.ɵɵconditionalCreate(7, SchedulingDashboardComponent_Case_7_Template,
|
|
371
|
+
i0.ɵɵconditionalCreate(7, SchedulingDashboardComponent_Case_7_Template, 5, 2)(8, SchedulingDashboardComponent_Case_8_Template, 7, 4)(9, SchedulingDashboardComponent_Case_9_Template, 3, 4);
|
|
370
372
|
i0.ɵɵelementEnd();
|
|
371
373
|
i0.ɵɵelementStart(10, "div", 9)(11, "mj-tab-nav", 10);
|
|
372
374
|
i0.ɵɵlistener("TabChange", function SchedulingDashboardComponent_Template_mj_tab_nav_TabChange_11_listener($event) { return ctx.OnTabChange($event); });
|
|
@@ -400,7 +402,7 @@ SchedulingDashboardComponent = __decorate([
|
|
|
400
402
|
export { SchedulingDashboardComponent };
|
|
401
403
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(SchedulingDashboardComponent, [{
|
|
402
404
|
type: Component,
|
|
403
|
-
args: [{ standalone: false, selector: 'mj-scheduling-dashboard', changeDetection: ChangeDetectionStrategy.OnPush, template: "<mj-page-layout>\n <mj-page-header\n Title=\"Scheduling\"\n Icon=\"fa-solid fa-calendar-check\"\n Subtitle=\"Background jobs, executions, and system health\">\n <div meta>\n @if (AlertCount > 0) {\n <mj-stat-badge\n Icon=\"fa-solid fa-triangle-exclamation\"\n [Count]=\"AlertCount\"\n [Label]=\"AlertCount === 1 ? 'Alert' : 'Alerts'\"\n Variant=\"error\">\n </mj-stat-badge>\n } @else {\n <mj-stat-badge\n Icon=\"fa-solid fa-circle-check\"\n Label=\"Healthy\"\n Variant=\"success\">\n </mj-stat-badge>\n }\n @if (ActiveTab === 'jobs') {\n <mj-stat-badge\n [Count]=\"jobsCmp?.FilteredJobs?.length ?? 0\"\n [Total]=\"jobsCmp?.Jobs?.length ?? 0\"\n Label=\"jobs\">\n </mj-stat-badge>\n }\n </div>\n <div actions>\n @switch (ActiveTab) {\n @case ('dashboard') {\n <mj-refresh-button (Clicked)=\"overviewCmp?.Refresh()\"></mj-refresh-button>\n <button mjButton\n [variant]=\"overviewCmp?.AutoRefreshEnabled ? 'primary' : 'secondary'\"\n size=\"sm\"\n (click)=\"overviewCmp?.ToggleAutoRefresh()\"\n title=\"Toggle auto-refresh\">\n <i class=\"fa-solid fa-rotate\"></i>\n Auto: {{overviewCmp?.AutoRefreshEnabled ? 'ON' : 'OFF'}}
|
|
405
|
+
args: [{ standalone: false, selector: 'mj-scheduling-dashboard', changeDetection: ChangeDetectionStrategy.OnPush, template: "<mj-page-layout>\n <mj-page-header\n Title=\"Scheduling\"\n Icon=\"fa-solid fa-calendar-check\"\n Subtitle=\"Background jobs, executions, and system health\">\n <div meta>\n @if (AlertCount > 0) {\n <mj-stat-badge\n Icon=\"fa-solid fa-triangle-exclamation\"\n [Count]=\"AlertCount\"\n [Label]=\"AlertCount === 1 ? 'Alert' : 'Alerts'\"\n Variant=\"error\">\n </mj-stat-badge>\n } @else {\n <mj-stat-badge\n Icon=\"fa-solid fa-circle-check\"\n Label=\"Healthy\"\n Variant=\"success\">\n </mj-stat-badge>\n }\n @if (ActiveTab === 'jobs') {\n <mj-stat-badge\n [Count]=\"jobsCmp?.FilteredJobs?.length ?? 0\"\n [Total]=\"jobsCmp?.Jobs?.length ?? 0\"\n Label=\"jobs\">\n </mj-stat-badge>\n }\n </div>\n <div actions>\n @switch (ActiveTab) {\n @case ('dashboard') {\n <mj-refresh-button (Clicked)=\"overviewCmp?.Refresh()\"></mj-refresh-button>\n <button mjButton\n [variant]=\"overviewCmp?.AutoRefreshEnabled ? 'primary' : 'secondary'\"\n size=\"sm\"\n (click)=\"overviewCmp?.ToggleAutoRefresh()\"\n title=\"Toggle auto-refresh\">\n <i class=\"fa-solid fa-rotate\"></i>\n <span class=\"action-btn-label\">Auto: {{overviewCmp?.AutoRefreshEnabled ? 'ON' : 'OFF'}}</span>\n </button>\n }\n @case ('jobs') {\n <mj-filter-popover\n [ActiveCount]=\"JobsActiveFilterCount\"\n [ShowClearAll]=\"JobsActiveFilterCount > 0\"\n (ClearAllRequested)=\"resetJobsFilters()\">\n <mj-filter-panel\n [Fields]=\"JobsFilterFields\"\n [Values]=\"JobsFilterValues\"\n (ValuesChange)=\"onJobsFilterValuesChange($event)\"\n (Reset)=\"resetJobsFilters()\">\n </mj-filter-panel>\n </mj-filter-popover>\n <mj-refresh-button (Clicked)=\"jobsCmp?.Refresh()\"></mj-refresh-button>\n <button mjButton variant=\"primary\" size=\"sm\" (click)=\"jobsCmp?.OpenCreateSlideout()\">\n <i class=\"fa-solid fa-plus\"></i> <span class=\"action-btn-label\">New Job</span>\n </button>\n }\n @case ('activity') {\n <mj-filter-popover\n [ActiveCount]=\"ActivityActiveFilterCount\"\n [ShowClearAll]=\"ActivityActiveFilterCount > 0\"\n (ClearAllRequested)=\"resetActivityFilters()\">\n <mj-filter-panel\n [Fields]=\"ActivityFilterFields\"\n [Values]=\"ActivityFilterValues\"\n (ValuesChange)=\"onActivityFilterValuesChange($event)\"\n (Reset)=\"resetActivityFilters()\">\n </mj-filter-panel>\n </mj-filter-popover>\n <mj-refresh-button (Clicked)=\"activityCmp?.Refresh()\"></mj-refresh-button>\n }\n }\n </div>\n\n <div toolbar class=\"scheduling-toolbar\">\n <mj-tab-nav\n [Tabs]=\"Tabs\"\n [ActiveKey]=\"ActiveTab\"\n (TabChange)=\"OnTabChange($any($event))\">\n </mj-tab-nav>\n @switch (ActiveTab) {\n @case ('jobs') {\n <mj-page-search\n Placeholder=\"Search jobs...\"\n [Value]=\"jobsCmp?.SearchTerm ?? ''\"\n (ValueChange)=\"jobsCmp?.OnSearchChange($event)\">\n </mj-page-search>\n }\n @case ('activity') {\n <mj-page-search\n Placeholder=\"Search executions...\"\n [Value]=\"activityCmp?.SearchTerm ?? ''\"\n (ValueChange)=\"activityCmp?.OnSearchChange($event)\">\n </mj-page-search>\n @for (range of activityCmp?.TimeRanges; track range.value) {\n <mj-filter-chip\n [Label]=\"range.label\"\n [Active]=\"activityCmp?.SelectedTimeRange === range.value\"\n (Clicked)=\"activityCmp?.OnTimeRangeChange(range.value)\">\n </mj-filter-chip>\n }\n }\n }\n </div>\n </mj-page-header>\n\n <mj-page-body>\n @switch (ActiveTab) {\n @case ('dashboard') {\n <app-scheduling-overview\n #overviewCmp\n [initialState]=\"DashboardState\"\n [HideToolbar]=\"true\"\n (stateChange)=\"OnDashboardStateChange($event)\">\n </app-scheduling-overview>\n }\n @case ('jobs') {\n <app-scheduling-jobs\n #jobsCmp\n [initialState]=\"JobsState\"\n [HideToolbar]=\"true\"\n (stateChange)=\"OnJobsStateChange($event)\">\n </app-scheduling-jobs>\n }\n @case ('activity') {\n <app-scheduling-activity\n #activityCmp\n [initialState]=\"ActivityState\"\n [HideToolbar]=\"true\"\n (stateChange)=\"OnActivityStateChange($event)\">\n </app-scheduling-activity>\n }\n }\n </mj-page-body>\n</mj-page-layout>\n", styles: ["/* Per-tab toolbar rendered in the [toolbar] slot of <mj-page-header>. */\n.scheduling-toolbar {\n display: flex;\n align-items: center;\n gap: 8px;\n flex-wrap: wrap;\n}\n"] }]
|
|
404
406
|
}], () => [{ type: i0.ChangeDetectorRef }, { type: i1.SchedulingInstrumentationService }], { overviewCmp: [{
|
|
405
407
|
type: ViewChild,
|
|
406
408
|
args: ['overviewCmp']
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scheduling-dashboard.component.js","sourceRoot":"","sources":["../../src/Scheduling/scheduling-dashboard.component.ts","../../src/Scheduling/scheduling-dashboard.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, AfterViewInit, OnDestroy, ChangeDetectorRef, ChangeDetectionStrategy, ViewChild } from '@angular/core';\nimport { BaseDashboard } from '@memberjunction/ng-shared';\nimport { RegisterClass } from '@memberjunction/global';\nimport { Subject, Subscription } from 'rxjs';\nimport { debounceTime } from 'rxjs/operators';\nimport { SharedService } from '@memberjunction/ng-shared';\nimport { ResourceData } from '@memberjunction/core-entities';\nimport { TabConfig, FilterFieldConfig } from '@memberjunction/ng-ui-components';\nimport { SchedulingInstrumentationService } from './services/scheduling-instrumentation.service';\nimport { SchedulingOverviewComponent } from './components/scheduling-overview.component';\nimport { SchedulingJobsComponent } from './components/scheduling-jobs.component';\nimport { SchedulingActivityComponent } from './components/scheduling-activity.component';\n\ninterface SchedulingDashboardState {\n activeTab: string;\n dashboardState: Record<string, unknown>;\n jobsState: Record<string, unknown>;\n activityState: Record<string, unknown>;\n}\n\n@Component({\n standalone: false,\n selector: 'mj-scheduling-dashboard',\n templateUrl: './scheduling-dashboard.component.html',\n styleUrls: ['./scheduling-dashboard.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\n@RegisterClass(BaseDashboard, 'SchedulingDashboard')\nexport class SchedulingDashboardComponent extends BaseDashboard implements AfterViewInit, OnDestroy {\n public IsLoading = false;\n public ActiveTab = 'dashboard';\n\n public DashboardState: Record<string, unknown> = {};\n public JobsState: Record<string, unknown> = {};\n public ActivityState: Record<string, unknown> = {};\n\n private visitedTabs = new Set<string>();\n private stateChangeSubject = new Subject<SchedulingDashboardState>();\n\n public ActiveJobCount = 0;\n public AlertCount = 0;\n\n /** ViewChild references to the active inner tab component — drive the toolbar UI rendered in <mj-page-header>. */\n @ViewChild('overviewCmp') overviewCmp?: SchedulingOverviewComponent;\n @ViewChild('jobsCmp') jobsCmp?: SchedulingJobsComponent;\n @ViewChild('activityCmp') activityCmp?: SchedulingActivityComponent;\n\n private kpiSub: Subscription | undefined;\n private alertSub: Subscription | undefined;\n\n public get Tabs(): TabConfig[] {\n return [\n { key: 'dashboard', label: 'Dashboard', icon: 'fa-solid fa-gauge-high' },\n {\n key: 'jobs',\n label: 'Jobs',\n icon: 'fa-solid fa-calendar-check',\n badge: this.ActiveJobCount > 0 ? this.ActiveJobCount : null\n },\n { key: 'activity', label: 'Activity', icon: 'fa-solid fa-clock-rotate-left' }\n ];\n }\n\n constructor(\n private cdr: ChangeDetectorRef,\n private schedulingService: SchedulingInstrumentationService\n ) {\n super();\n this.setupStateManagement();\n }\n\n async GetResourceDisplayName(data: ResourceData): Promise<string> {\n return 'Scheduling';\n }\n\n ngAfterViewInit(): void {\n this.visitedTabs.add(this.ActiveTab);\n this.loadSidebarCounts();\n this.cdr.detectChanges();\n }\n\n ngOnDestroy(): void {\n super.ngOnDestroy();\n this.stateChangeSubject.complete();\n if (this.kpiSub) this.kpiSub.unsubscribe();\n if (this.alertSub) this.alertSub.unsubscribe();\n }\n\n private loadSidebarCounts(): void {\n this.kpiSub = this.schedulingService.kpis$.subscribe(kpis => {\n this.ActiveJobCount = kpis.totalActiveJobs;\n this.cdr.markForCheck();\n });\n\n this.alertSub = this.schedulingService.alerts$.subscribe(alerts => {\n this.AlertCount = alerts.length;\n this.cdr.markForCheck();\n });\n }\n\n public OnTabChange(tabId: string): void {\n this.ActiveTab = tabId;\n this.visitedTabs.add(tabId);\n\n setTimeout(() => {\n SharedService.Instance.InvokeManualResize();\n }, 100);\n\n this.emitStateChange();\n this.cdr.markForCheck();\n }\n\n public HasVisited(tabId: string): boolean {\n return this.visitedTabs.has(tabId);\n }\n\n // ───── Filter-popover plumbing for the [actions]/[toolbar] slots ─────\n\n public get JobsFilterFields(): FilterFieldConfig[] {\n const statusOptions = (this.jobsCmp?.StatusOptions ?? ['']).map(s => ({\n text: s === '' ? 'All Statuses' : s,\n value: s\n }));\n const typeOptions = (this.jobsCmp?.TypeOptions ?? ['']).map(t => ({\n text: t === '' ? 'All Types' : t,\n value: t\n }));\n return [\n { key: 'statusFilter', type: 'dropdown', label: 'Status', icon: 'fa-solid fa-circle-info', placeholder: 'All Statuses', options: statusOptions },\n { key: 'typeFilter', type: 'dropdown', label: 'Type', icon: 'fa-solid fa-shapes', placeholder: 'All Types', options: typeOptions }\n ];\n }\n public get JobsFilterValues(): Record<string, unknown> {\n return {\n statusFilter: this.jobsCmp?.StatusFilter ?? '',\n typeFilter: this.jobsCmp?.TypeFilter ?? ''\n };\n }\n public get JobsActiveFilterCount(): number {\n let n = 0;\n if (this.jobsCmp?.StatusFilter) n++;\n if (this.jobsCmp?.TypeFilter) n++;\n return n;\n }\n public onJobsFilterValuesChange(v: Record<string, unknown>): void {\n if (!this.jobsCmp) return;\n const next = (v ?? {}) as { statusFilter?: string; typeFilter?: string };\n if ((next.statusFilter ?? '') !== this.jobsCmp.StatusFilter) this.jobsCmp.OnStatusFilterChange(next.statusFilter ?? '');\n if ((next.typeFilter ?? '') !== this.jobsCmp.TypeFilter) this.jobsCmp.OnTypeFilterChange(next.typeFilter ?? '');\n }\n public resetJobsFilters(): void {\n if (this.jobsCmp?.StatusFilter) this.jobsCmp.OnStatusFilterChange('');\n if (this.jobsCmp?.TypeFilter) this.jobsCmp.OnTypeFilterChange('');\n }\n\n public get ActivityFilterFields(): FilterFieldConfig[] {\n const statusOptions = (this.activityCmp?.StatusOptions ?? ['']).map(s => ({\n text: s === '' ? 'All Statuses' : s,\n value: s\n }));\n const jobNames = this.activityCmp?.UniqueJobNames ?? [];\n const jobOptions = [{ text: 'All Jobs', value: '' }, ...jobNames.map(n => ({ text: n, value: n }))];\n return [\n { key: 'statusFilter', type: 'dropdown', label: 'Status', icon: 'fa-solid fa-circle-info', placeholder: 'All Statuses', options: statusOptions },\n { key: 'jobNameFilter', type: 'dropdown', label: 'Job', icon: 'fa-solid fa-tag', placeholder: 'All Jobs', filterable: true, options: jobOptions }\n ];\n }\n public get ActivityFilterValues(): Record<string, unknown> {\n return {\n statusFilter: this.activityCmp?.StatusFilter ?? '',\n jobNameFilter: this.activityCmp?.JobNameFilter ?? ''\n };\n }\n public get ActivityActiveFilterCount(): number {\n let n = 0;\n if (this.activityCmp?.StatusFilter) n++;\n if (this.activityCmp?.JobNameFilter) n++;\n return n;\n }\n public onActivityFilterValuesChange(v: Record<string, unknown>): void {\n if (!this.activityCmp) return;\n const next = (v ?? {}) as { statusFilter?: string; jobNameFilter?: string };\n if ((next.statusFilter ?? '') !== this.activityCmp.StatusFilter) this.activityCmp.OnStatusFilterChange(next.statusFilter ?? '');\n if ((next.jobNameFilter ?? '') !== this.activityCmp.JobNameFilter) this.activityCmp.OnJobNameFilterChange(next.jobNameFilter ?? '');\n }\n public resetActivityFilters(): void {\n if (this.activityCmp?.StatusFilter) this.activityCmp.OnStatusFilterChange('');\n if (this.activityCmp?.JobNameFilter) this.activityCmp.OnJobNameFilterChange('');\n }\n\n private setupStateManagement(): void {\n this.stateChangeSubject.pipe(\n debounceTime(50)\n ).subscribe(state => {\n this.UserStateChanged.emit(state);\n });\n }\n\n private emitStateChange(): void {\n this.stateChangeSubject.next({\n activeTab: this.ActiveTab,\n dashboardState: this.DashboardState,\n jobsState: this.JobsState,\n activityState: this.ActivityState\n });\n }\n\n public OnDashboardStateChange(state: Record<string, unknown>): void {\n this.DashboardState = state;\n this.emitStateChange();\n }\n\n public OnJobsStateChange(state: Record<string, unknown>): void {\n this.JobsState = state;\n this.emitStateChange();\n }\n\n public OnActivityStateChange(state: Record<string, unknown>): void {\n this.ActivityState = state;\n this.emitStateChange();\n }\n\n initDashboard(): void {\n this.schedulingService.Provider = this.ProviderToUse;\n this.IsLoading = false;\n }\n\n loadData(): void {\n if (this.Config?.userState) {\n const state = this.Config.userState as Partial<SchedulingDashboardState>;\n if (state.activeTab) {\n this.ActiveTab = state.activeTab;\n this.visitedTabs.add(state.activeTab);\n }\n if (state.dashboardState) this.DashboardState = state.dashboardState;\n if (state.jobsState) this.JobsState = state.jobsState;\n if (state.activityState) this.ActivityState = state.activityState;\n this.cdr.markForCheck();\n }\n this.NotifyLoadComplete();\n }\n}\n","<mj-page-layout>\n <mj-page-header\n Title=\"Scheduling\"\n Icon=\"fa-solid fa-calendar-check\"\n Subtitle=\"Background jobs, executions, and system health\">\n <div meta>\n @if (AlertCount > 0) {\n <mj-stat-badge\n Icon=\"fa-solid fa-triangle-exclamation\"\n [Count]=\"AlertCount\"\n [Label]=\"AlertCount === 1 ? 'Alert' : 'Alerts'\"\n Variant=\"error\">\n </mj-stat-badge>\n } @else {\n <mj-stat-badge\n Icon=\"fa-solid fa-circle-check\"\n Label=\"Healthy\"\n Variant=\"success\">\n </mj-stat-badge>\n }\n @if (ActiveTab === 'jobs') {\n <mj-stat-badge\n [Count]=\"jobsCmp?.FilteredJobs?.length ?? 0\"\n [Total]=\"jobsCmp?.Jobs?.length ?? 0\"\n Label=\"jobs\">\n </mj-stat-badge>\n }\n </div>\n <div actions>\n @switch (ActiveTab) {\n @case ('dashboard') {\n <mj-refresh-button (Clicked)=\"overviewCmp?.Refresh()\"></mj-refresh-button>\n <button mjButton\n [variant]=\"overviewCmp?.AutoRefreshEnabled ? 'primary' : 'secondary'\"\n size=\"sm\"\n (click)=\"overviewCmp?.ToggleAutoRefresh()\"\n title=\"Toggle auto-refresh\">\n <i class=\"fa-solid fa-rotate\"></i>\n Auto: {{overviewCmp?.AutoRefreshEnabled ? 'ON' : 'OFF'}}\n </button>\n }\n @case ('jobs') {\n <mj-filter-popover\n [ActiveCount]=\"JobsActiveFilterCount\"\n [ShowClearAll]=\"JobsActiveFilterCount > 0\"\n (ClearAllRequested)=\"resetJobsFilters()\">\n <mj-filter-panel\n [Fields]=\"JobsFilterFields\"\n [Values]=\"JobsFilterValues\"\n (ValuesChange)=\"onJobsFilterValuesChange($event)\"\n (Reset)=\"resetJobsFilters()\">\n </mj-filter-panel>\n </mj-filter-popover>\n <mj-refresh-button (Clicked)=\"jobsCmp?.Refresh()\"></mj-refresh-button>\n <button mjButton variant=\"primary\" size=\"sm\" (click)=\"jobsCmp?.OpenCreateSlideout()\">\n <i class=\"fa-solid fa-plus\"></i> New Job\n </button>\n }\n @case ('activity') {\n <mj-filter-popover\n [ActiveCount]=\"ActivityActiveFilterCount\"\n [ShowClearAll]=\"ActivityActiveFilterCount > 0\"\n (ClearAllRequested)=\"resetActivityFilters()\">\n <mj-filter-panel\n [Fields]=\"ActivityFilterFields\"\n [Values]=\"ActivityFilterValues\"\n (ValuesChange)=\"onActivityFilterValuesChange($event)\"\n (Reset)=\"resetActivityFilters()\">\n </mj-filter-panel>\n </mj-filter-popover>\n <mj-refresh-button (Clicked)=\"activityCmp?.Refresh()\"></mj-refresh-button>\n }\n }\n </div>\n\n <div toolbar class=\"scheduling-toolbar\">\n <mj-tab-nav\n [Tabs]=\"Tabs\"\n [ActiveKey]=\"ActiveTab\"\n (TabChange)=\"OnTabChange($any($event))\">\n </mj-tab-nav>\n @switch (ActiveTab) {\n @case ('jobs') {\n <mj-page-search\n Placeholder=\"Search jobs...\"\n [Value]=\"jobsCmp?.SearchTerm ?? ''\"\n (ValueChange)=\"jobsCmp?.OnSearchChange($event)\">\n </mj-page-search>\n }\n @case ('activity') {\n <mj-page-search\n Placeholder=\"Search executions...\"\n [Value]=\"activityCmp?.SearchTerm ?? ''\"\n (ValueChange)=\"activityCmp?.OnSearchChange($event)\">\n </mj-page-search>\n @for (range of activityCmp?.TimeRanges; track range.value) {\n <mj-filter-chip\n [Label]=\"range.label\"\n [Active]=\"activityCmp?.SelectedTimeRange === range.value\"\n (Clicked)=\"activityCmp?.OnTimeRangeChange(range.value)\">\n </mj-filter-chip>\n }\n }\n }\n </div>\n </mj-page-header>\n\n <mj-page-body>\n @switch (ActiveTab) {\n @case ('dashboard') {\n <app-scheduling-overview\n #overviewCmp\n [initialState]=\"DashboardState\"\n [HideToolbar]=\"true\"\n (stateChange)=\"OnDashboardStateChange($event)\">\n </app-scheduling-overview>\n }\n @case ('jobs') {\n <app-scheduling-jobs\n #jobsCmp\n [initialState]=\"JobsState\"\n [HideToolbar]=\"true\"\n (stateChange)=\"OnJobsStateChange($event)\">\n </app-scheduling-jobs>\n }\n @case ('activity') {\n <app-scheduling-activity\n #activityCmp\n [initialState]=\"ActivityState\"\n [HideToolbar]=\"true\"\n (stateChange)=\"OnActivityStateChange($event)\">\n </app-scheduling-activity>\n }\n }\n </mj-page-body>\n</mj-page-layout>\n"]}
|
|
1
|
+
{"version":3,"file":"scheduling-dashboard.component.js","sourceRoot":"","sources":["../../src/Scheduling/scheduling-dashboard.component.ts","../../src/Scheduling/scheduling-dashboard.component.html"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,SAAS,EAA+C,uBAAuB,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC3H,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,OAAO,EAAgB,MAAM,MAAM,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;;;;;;;;;;;;ICElD,mCAKgB;;;IAFd,AADA,yCAAoB,uDAC2B;;;IAIjD,mCAIgB;;;IAGhB,mCAIgB;;;IAFd,AADA,8IAA4C,iHACR;;;;IAQpC,6CAAsD;IAAnC,6QAAkC;IAAC,iBAAoB;IAC1E,kCAI8B;IAD5B,wQAA0C;IAE1C,wBAAkC;IAClC,gCAA+B;IAAA,YAAwD;IACzF,AADyF,iBAAO,EACvF;;;IANP,cAAqE;IAArE,+HAAqE;IAKtC,eAAwD;IAAxD,2HAAwD;;;;IAIzF,6CAG2C;IAAzC,4NAAqB,yBAAkB,KAAC;IACxC,2CAI+B;IAA7B,AADA,sNAAgB,uCAAgC,KAAC,qLACxC,yBAAkB,KAAC;IAEhC,AADE,iBAAkB,EACA;IACpB,6CAAkD;IAA/B,qQAA8B;IAAC,iBAAoB;IACtE,kCAAqF;IAAxC,iQAAuC;IAClF,wBAAgC;IAAC,gCAA+B;IAAA,uBAAO;IACzE,AADyE,iBAAO,EACvE;;;IAZP,AADA,0DAAqC,kDACK;IAGxC,cAA2B;IAC3B,AADA,gDAA2B,mCACA;;;;IAW/B,6CAG+C;IAA7C,4NAAqB,6BAAsB,KAAC;IAC5C,2CAImC;IAAjC,AADA,sNAAgB,2CAAoC,KAAC,qLAC5C,6BAAsB,KAAC;IAEpC,AADE,iBAAkB,EACA;IACpB,6CAAsD;IAAnC,6QAAkC;IAAC,iBAAoB;;;IATxE,AADA,8DAAyC,sDACK;IAG5C,cAA+B;IAC/B,AADA,oDAA+B,uCACA;;;;IAkBnC,0CAGkD;IAAhD,8RAA+C;IACjD,iBAAiB;;;IAFf,yFAAmC;;;;IAWnC,0CAG0D;IAAxD,qUAAuD;IACzD,iBAAiB;;;;IAFf,AADA,sCAAqB,yGACoC;;;;IAR7D,0CAGsD;IAApD,sSAAmD;IACrD,iBAAiB;IACjB,mHAMC;;;IATC,iGAAuC;IAGzC,cAMC;IAND,gFAMC;;;;IASH,sDAIiD;IAA/C,6NAAe,qCAA8B,KAAC;IAChD,iBAA0B;;;IAFxB,AADA,oDAA+B,qBACX;;;;IAKtB,kDAI4C;IAA1C,0NAAe,gCAAyB,KAAC;IAC3C,iBAAsB;;;IAFpB,AADA,+CAA0B,qBACN;;;;IAKtB,sDAIgD;IAA9C,8NAAe,oCAA6B,KAAC;IAC/C,iBAA0B;;;IAFxB,AADA,mDAA8B,qBACV;;ADrGvB,IAAM,4BAA4B,GAAlC,MAAM,4BAA6B,SAAQ,aAAa;IAoCnD;IACA;IApCH,SAAS,GAAG,KAAK,CAAC;IAClB,SAAS,GAAG,WAAW,CAAC;IAExB,cAAc,GAA4B,EAAE,CAAC;IAC7C,SAAS,GAA4B,EAAE,CAAC;IACxC,aAAa,GAA4B,EAAE,CAAC;IAE3C,WAAW,GAAG,IAAI,GAAG,EAAU,CAAC;IAChC,kBAAkB,GAAG,IAAI,OAAO,EAA4B,CAAC;IAE9D,cAAc,GAAG,CAAC,CAAC;IACnB,UAAU,GAAG,CAAC,CAAC;IAEtB,kHAAkH;IACxF,WAAW,CAA+B;IAC9C,OAAO,CAA2B;IAC9B,WAAW,CAA+B;IAE5D,MAAM,CAA2B;IACjC,QAAQ,CAA2B;IAE3C,IAAW,IAAI;QACb,OAAO;YACL,EAAE,GAAG,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,wBAAwB,EAAE;YACxE;gBACE,GAAG,EAAE,MAAM;gBACX,KAAK,EAAE,MAAM;gBACb,IAAI,EAAE,4BAA4B;gBAClC,KAAK,EAAE,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI;aAC5D;YACD,EAAE,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,+BAA+B,EAAE;SAC9E,CAAC;IACJ,CAAC;IAED,YACU,GAAsB,EACtB,iBAAmD;QAE3D,KAAK,EAAE,CAAC;QAHA,QAAG,GAAH,GAAG,CAAmB;QACtB,sBAAiB,GAAjB,iBAAiB,CAAkC;QAG3D,IAAI,CAAC,oBAAoB,EAAE,CAAC;IAC9B,CAAC;IAED,KAAK,CAAC,sBAAsB,CAAC,IAAkB;QAC7C,OAAO,YAAY,CAAC;IACtB,CAAC;IAED,eAAe;QACb,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACrC,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACzB,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;IAC3B,CAAC;IAED,WAAW;QACT,KAAK,CAAC,WAAW,EAAE,CAAC;QACpB,IAAI,CAAC,kBAAkB,CAAC,QAAQ,EAAE,CAAC;QACnC,IAAI,IAAI,CAAC,MAAM;YAAE,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;QAC3C,IAAI,IAAI,CAAC,QAAQ;YAAE,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;IACjD,CAAC;IAEO,iBAAiB;QACvB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE;YAC1D,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,eAAe,CAAC;YAC3C,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;QAC1B,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE;YAChE,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC;YAChC,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;QAC1B,CAAC,CAAC,CAAC;IACL,CAAC;IAEM,WAAW,CAAC,KAAa;QAC9B,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QACvB,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAE5B,UAAU,CAAC,GAAG,EAAE;YACd,aAAa,CAAC,QAAQ,CAAC,kBAAkB,EAAE,CAAC;QAC9C,CAAC,EAAE,GAAG,CAAC,CAAC;QAER,IAAI,CAAC,eAAe,EAAE,CAAC;QACvB,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;IAC1B,CAAC;IAEM,UAAU,CAAC,KAAa;QAC7B,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACrC,CAAC;IAED,wEAAwE;IAExE,IAAW,gBAAgB;QACzB,MAAM,aAAa,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,aAAa,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YACpE,IAAI,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;YACnC,KAAK,EAAE,CAAC;SACT,CAAC,CAAC,CAAC;QACJ,MAAM,WAAW,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YAChE,IAAI,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;YAChC,KAAK,EAAE,CAAC;SACT,CAAC,CAAC,CAAC;QACJ,OAAO;YACL,EAAE,GAAG,EAAE,cAAc,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,yBAAyB,EAAE,WAAW,EAAE,cAAc,EAAE,OAAO,EAAE,aAAa,EAAE;YAChJ,EAAE,GAAG,EAAE,YAAY,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,oBAAoB,EAAE,WAAW,EAAE,WAAW,EAAE,OAAO,EAAE,WAAW,EAAE;SACnI,CAAC;IACJ,CAAC;IACD,IAAW,gBAAgB;QACzB,OAAO;YACL,YAAY,EAAE,IAAI,CAAC,OAAO,EAAE,YAAY,IAAI,EAAE;YAC9C,UAAU,EAAE,IAAI,CAAC,OAAO,EAAE,UAAU,IAAI,EAAE;SAC3C,CAAC;IACJ,CAAC;IACD,IAAW,qBAAqB;QAC9B,IAAI,CAAC,GAAG,CAAC,CAAC;QACV,IAAI,IAAI,CAAC,OAAO,EAAE,YAAY;YAAE,CAAC,EAAE,CAAC;QACpC,IAAI,IAAI,CAAC,OAAO,EAAE,UAAU;YAAE,CAAC,EAAE,CAAC;QAClC,OAAO,CAAC,CAAC;IACX,CAAC;IACM,wBAAwB,CAAC,CAA0B;QACxD,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,OAAO;QAC1B,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,EAAE,CAAmD,CAAC;QACzE,IAAI,CAAC,IAAI,CAAC,YAAY,IAAI,EAAE,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,YAAY;YAAE,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,IAAI,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC;QACxH,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,EAAE,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,UAAU;YAAE,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC;IAClH,CAAC;IACM,gBAAgB;QACrB,IAAI,IAAI,CAAC,OAAO,EAAE,YAAY;YAAE,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,EAAE,CAAC,CAAC;QACtE,IAAI,IAAI,CAAC,OAAO,EAAE,UAAU;YAAE,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC;IACpE,CAAC;IAED,IAAW,oBAAoB;QAC7B,MAAM,aAAa,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,aAAa,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YACxE,IAAI,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;YACnC,KAAK,EAAE,CAAC;SACT,CAAC,CAAC,CAAC;QACJ,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,cAAc,IAAI,EAAE,CAAC;QACxD,MAAM,UAAU,GAAG,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACpG,OAAO;YACL,EAAE,GAAG,EAAE,cAAc,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,yBAAyB,EAAE,WAAW,EAAE,cAAc,EAAE,OAAO,EAAE,aAAa,EAAE;YAChJ,EAAE,GAAG,EAAE,eAAe,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,iBAAiB,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE;SAClJ,CAAC;IACJ,CAAC;IACD,IAAW,oBAAoB;QAC7B,OAAO;YACL,YAAY,EAAE,IAAI,CAAC,WAAW,EAAE,YAAY,IAAI,EAAE;YAClD,aAAa,EAAE,IAAI,CAAC,WAAW,EAAE,aAAa,IAAI,EAAE;SACrD,CAAC;IACJ,CAAC;IACD,IAAW,yBAAyB;QAClC,IAAI,CAAC,GAAG,CAAC,CAAC;QACV,IAAI,IAAI,CAAC,WAAW,EAAE,YAAY;YAAE,CAAC,EAAE,CAAC;QACxC,IAAI,IAAI,CAAC,WAAW,EAAE,aAAa;YAAE,CAAC,EAAE,CAAC;QACzC,OAAO,CAAC,CAAC;IACX,CAAC;IACM,4BAA4B,CAAC,CAA0B;QAC5D,IAAI,CAAC,IAAI,CAAC,WAAW;YAAE,OAAO;QAC9B,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,EAAE,CAAsD,CAAC;QAC5E,IAAI,CAAC,IAAI,CAAC,YAAY,IAAI,EAAE,CAAC,KAAK,IAAI,CAAC,WAAW,CAAC,YAAY;YAAE,IAAI,CAAC,WAAW,CAAC,oBAAoB,CAAC,IAAI,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC;QAChI,IAAI,CAAC,IAAI,CAAC,aAAa,IAAI,EAAE,CAAC,KAAK,IAAI,CAAC,WAAW,CAAC,aAAa;YAAE,IAAI,CAAC,WAAW,CAAC,qBAAqB,CAAC,IAAI,CAAC,aAAa,IAAI,EAAE,CAAC,CAAC;IACtI,CAAC;IACM,oBAAoB;QACzB,IAAI,IAAI,CAAC,WAAW,EAAE,YAAY;YAAE,IAAI,CAAC,WAAW,CAAC,oBAAoB,CAAC,EAAE,CAAC,CAAC;QAC9E,IAAI,IAAI,CAAC,WAAW,EAAE,aAAa;YAAE,IAAI,CAAC,WAAW,CAAC,qBAAqB,CAAC,EAAE,CAAC,CAAC;IAClF,CAAC;IAEO,oBAAoB;QAC1B,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAC1B,YAAY,CAAC,EAAE,CAAC,CACjB,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE;YAClB,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACpC,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,eAAe;QACrB,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC;YAC3B,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,cAAc,EAAE,IAAI,CAAC,cAAc;YACnC,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,aAAa,EAAE,IAAI,CAAC,aAAa;SAClC,CAAC,CAAC;IACL,CAAC;IAEM,sBAAsB,CAAC,KAA8B;QAC1D,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;QAC5B,IAAI,CAAC,eAAe,EAAE,CAAC;IACzB,CAAC;IAEM,iBAAiB,CAAC,KAA8B;QACrD,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QACvB,IAAI,CAAC,eAAe,EAAE,CAAC;IACzB,CAAC;IAEM,qBAAqB,CAAC,KAA8B;QACzD,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;QAC3B,IAAI,CAAC,eAAe,EAAE,CAAC;IACzB,CAAC;IAED,aAAa;QACX,IAAI,CAAC,iBAAiB,CAAC,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC;QACrD,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;IACzB,CAAC;IAED,QAAQ;QACN,IAAI,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,CAAC;YAC3B,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,SAA8C,CAAC;YACzE,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;gBACpB,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC;gBACjC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;YACxC,CAAC;YACD,IAAI,KAAK,CAAC,cAAc;gBAAE,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC,cAAc,CAAC;YACrE,IAAI,KAAK,CAAC,SAAS;gBAAE,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC;YACtD,IAAI,KAAK,CAAC,aAAa;gBAAE,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC,aAAa,CAAC;YAClE,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;QAC1B,CAAC;QACD,IAAI,CAAC,kBAAkB,EAAE,CAAC;IAC5B,CAAC;sHApNU,4BAA4B;6DAA5B,4BAA4B;;;;;;;;YCvBrC,AAJF,AADF,sCAAgB,wBAI8C,aAChD;YAQN,AAPF,wGAAsB,kFAOb;YAOT,wGAA4B;YAO9B,iBAAM;YACN,8BAAa;YA8BT,AAjBA,AAXA,6EAAqB,uDAWL,uDAiBI;YAexB,iBAAM;YAGJ,AADF,+BAAwC,sBAII;YAAxC,4HAAa,uBAAyB,IAAC;YACzC,iBAAa;YASX,AAPA,qGAAgB,yDAOI;YAgB1B,AADE,iBAAM,EACS;YAEjB,qCAAc;YAkBV,AARA,AARA,8GAAqB,oFAQL,wFAQI;YAU1B,AADE,iBAAe,EACA;;;;;YAjIX,eAaC;YAbD,4CAaC;YACD,eAMC;YAND,mDAMC;YAGD,eA2CC;YA3CD,+CAAA,WAAW,mBAAX,MAAM,mBAAN,UAAU,UA2CT;YAKC,eAAa;YACb,AADA,+BAAa,4BACU;YAGzB,cAsBC;YAtBD,+CAAA,MAAM,oBAAN,UAAU,WAsBT;YAKH,eAyBC;YAzBD,+CAAA,WAAW,oBAAX,MAAM,oBAAN,UAAU,WAyBT;;;ADzGQ,4BAA4B;IADxC,aAAa,CAAC,aAAa,EAAE,qBAAqB,CAAC;GACvC,4BAA4B,CAqNxC;;iFArNY,4BAA4B;cARxC,SAAS;6BACI,KAAK,YACP,yBAAyB,mBAGlB,uBAAuB,CAAC,MAAM;;kBAkB9C,SAAS;mBAAC,aAAa;;kBACvB,SAAS;mBAAC,SAAS;;kBACnB,SAAS;mBAAC,aAAa;;kFAjBb,4BAA4B","sourcesContent":["import { Component, AfterViewInit, OnDestroy, ChangeDetectorRef, ChangeDetectionStrategy, ViewChild } from '@angular/core';\nimport { BaseDashboard } from '@memberjunction/ng-shared';\nimport { RegisterClass } from '@memberjunction/global';\nimport { Subject, Subscription } from 'rxjs';\nimport { debounceTime } from 'rxjs/operators';\nimport { SharedService } from '@memberjunction/ng-shared';\nimport { ResourceData } from '@memberjunction/core-entities';\nimport { TabConfig, FilterFieldConfig } from '@memberjunction/ng-ui-components';\nimport { SchedulingInstrumentationService } from './services/scheduling-instrumentation.service';\nimport { SchedulingOverviewComponent } from './components/scheduling-overview.component';\nimport { SchedulingJobsComponent } from './components/scheduling-jobs.component';\nimport { SchedulingActivityComponent } from './components/scheduling-activity.component';\n\ninterface SchedulingDashboardState {\n activeTab: string;\n dashboardState: Record<string, unknown>;\n jobsState: Record<string, unknown>;\n activityState: Record<string, unknown>;\n}\n\n@Component({\n standalone: false,\n selector: 'mj-scheduling-dashboard',\n templateUrl: './scheduling-dashboard.component.html',\n styleUrls: ['./scheduling-dashboard.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\n@RegisterClass(BaseDashboard, 'SchedulingDashboard')\nexport class SchedulingDashboardComponent extends BaseDashboard implements AfterViewInit, OnDestroy {\n public IsLoading = false;\n public ActiveTab = 'dashboard';\n\n public DashboardState: Record<string, unknown> = {};\n public JobsState: Record<string, unknown> = {};\n public ActivityState: Record<string, unknown> = {};\n\n private visitedTabs = new Set<string>();\n private stateChangeSubject = new Subject<SchedulingDashboardState>();\n\n public ActiveJobCount = 0;\n public AlertCount = 0;\n\n /** ViewChild references to the active inner tab component — drive the toolbar UI rendered in <mj-page-header>. */\n @ViewChild('overviewCmp') overviewCmp?: SchedulingOverviewComponent;\n @ViewChild('jobsCmp') jobsCmp?: SchedulingJobsComponent;\n @ViewChild('activityCmp') activityCmp?: SchedulingActivityComponent;\n\n private kpiSub: Subscription | undefined;\n private alertSub: Subscription | undefined;\n\n public get Tabs(): TabConfig[] {\n return [\n { key: 'dashboard', label: 'Dashboard', icon: 'fa-solid fa-gauge-high' },\n {\n key: 'jobs',\n label: 'Jobs',\n icon: 'fa-solid fa-calendar-check',\n badge: this.ActiveJobCount > 0 ? this.ActiveJobCount : null\n },\n { key: 'activity', label: 'Activity', icon: 'fa-solid fa-clock-rotate-left' }\n ];\n }\n\n constructor(\n private cdr: ChangeDetectorRef,\n private schedulingService: SchedulingInstrumentationService\n ) {\n super();\n this.setupStateManagement();\n }\n\n async GetResourceDisplayName(data: ResourceData): Promise<string> {\n return 'Scheduling';\n }\n\n ngAfterViewInit(): void {\n this.visitedTabs.add(this.ActiveTab);\n this.loadSidebarCounts();\n this.cdr.detectChanges();\n }\n\n ngOnDestroy(): void {\n super.ngOnDestroy();\n this.stateChangeSubject.complete();\n if (this.kpiSub) this.kpiSub.unsubscribe();\n if (this.alertSub) this.alertSub.unsubscribe();\n }\n\n private loadSidebarCounts(): void {\n this.kpiSub = this.schedulingService.kpis$.subscribe(kpis => {\n this.ActiveJobCount = kpis.totalActiveJobs;\n this.cdr.markForCheck();\n });\n\n this.alertSub = this.schedulingService.alerts$.subscribe(alerts => {\n this.AlertCount = alerts.length;\n this.cdr.markForCheck();\n });\n }\n\n public OnTabChange(tabId: string): void {\n this.ActiveTab = tabId;\n this.visitedTabs.add(tabId);\n\n setTimeout(() => {\n SharedService.Instance.InvokeManualResize();\n }, 100);\n\n this.emitStateChange();\n this.cdr.markForCheck();\n }\n\n public HasVisited(tabId: string): boolean {\n return this.visitedTabs.has(tabId);\n }\n\n // ───── Filter-popover plumbing for the [actions]/[toolbar] slots ─────\n\n public get JobsFilterFields(): FilterFieldConfig[] {\n const statusOptions = (this.jobsCmp?.StatusOptions ?? ['']).map(s => ({\n text: s === '' ? 'All Statuses' : s,\n value: s\n }));\n const typeOptions = (this.jobsCmp?.TypeOptions ?? ['']).map(t => ({\n text: t === '' ? 'All Types' : t,\n value: t\n }));\n return [\n { key: 'statusFilter', type: 'dropdown', label: 'Status', icon: 'fa-solid fa-circle-info', placeholder: 'All Statuses', options: statusOptions },\n { key: 'typeFilter', type: 'dropdown', label: 'Type', icon: 'fa-solid fa-shapes', placeholder: 'All Types', options: typeOptions }\n ];\n }\n public get JobsFilterValues(): Record<string, unknown> {\n return {\n statusFilter: this.jobsCmp?.StatusFilter ?? '',\n typeFilter: this.jobsCmp?.TypeFilter ?? ''\n };\n }\n public get JobsActiveFilterCount(): number {\n let n = 0;\n if (this.jobsCmp?.StatusFilter) n++;\n if (this.jobsCmp?.TypeFilter) n++;\n return n;\n }\n public onJobsFilterValuesChange(v: Record<string, unknown>): void {\n if (!this.jobsCmp) return;\n const next = (v ?? {}) as { statusFilter?: string; typeFilter?: string };\n if ((next.statusFilter ?? '') !== this.jobsCmp.StatusFilter) this.jobsCmp.OnStatusFilterChange(next.statusFilter ?? '');\n if ((next.typeFilter ?? '') !== this.jobsCmp.TypeFilter) this.jobsCmp.OnTypeFilterChange(next.typeFilter ?? '');\n }\n public resetJobsFilters(): void {\n if (this.jobsCmp?.StatusFilter) this.jobsCmp.OnStatusFilterChange('');\n if (this.jobsCmp?.TypeFilter) this.jobsCmp.OnTypeFilterChange('');\n }\n\n public get ActivityFilterFields(): FilterFieldConfig[] {\n const statusOptions = (this.activityCmp?.StatusOptions ?? ['']).map(s => ({\n text: s === '' ? 'All Statuses' : s,\n value: s\n }));\n const jobNames = this.activityCmp?.UniqueJobNames ?? [];\n const jobOptions = [{ text: 'All Jobs', value: '' }, ...jobNames.map(n => ({ text: n, value: n }))];\n return [\n { key: 'statusFilter', type: 'dropdown', label: 'Status', icon: 'fa-solid fa-circle-info', placeholder: 'All Statuses', options: statusOptions },\n { key: 'jobNameFilter', type: 'dropdown', label: 'Job', icon: 'fa-solid fa-tag', placeholder: 'All Jobs', filterable: true, options: jobOptions }\n ];\n }\n public get ActivityFilterValues(): Record<string, unknown> {\n return {\n statusFilter: this.activityCmp?.StatusFilter ?? '',\n jobNameFilter: this.activityCmp?.JobNameFilter ?? ''\n };\n }\n public get ActivityActiveFilterCount(): number {\n let n = 0;\n if (this.activityCmp?.StatusFilter) n++;\n if (this.activityCmp?.JobNameFilter) n++;\n return n;\n }\n public onActivityFilterValuesChange(v: Record<string, unknown>): void {\n if (!this.activityCmp) return;\n const next = (v ?? {}) as { statusFilter?: string; jobNameFilter?: string };\n if ((next.statusFilter ?? '') !== this.activityCmp.StatusFilter) this.activityCmp.OnStatusFilterChange(next.statusFilter ?? '');\n if ((next.jobNameFilter ?? '') !== this.activityCmp.JobNameFilter) this.activityCmp.OnJobNameFilterChange(next.jobNameFilter ?? '');\n }\n public resetActivityFilters(): void {\n if (this.activityCmp?.StatusFilter) this.activityCmp.OnStatusFilterChange('');\n if (this.activityCmp?.JobNameFilter) this.activityCmp.OnJobNameFilterChange('');\n }\n\n private setupStateManagement(): void {\n this.stateChangeSubject.pipe(\n debounceTime(50)\n ).subscribe(state => {\n this.UserStateChanged.emit(state);\n });\n }\n\n private emitStateChange(): void {\n this.stateChangeSubject.next({\n activeTab: this.ActiveTab,\n dashboardState: this.DashboardState,\n jobsState: this.JobsState,\n activityState: this.ActivityState\n });\n }\n\n public OnDashboardStateChange(state: Record<string, unknown>): void {\n this.DashboardState = state;\n this.emitStateChange();\n }\n\n public OnJobsStateChange(state: Record<string, unknown>): void {\n this.JobsState = state;\n this.emitStateChange();\n }\n\n public OnActivityStateChange(state: Record<string, unknown>): void {\n this.ActivityState = state;\n this.emitStateChange();\n }\n\n initDashboard(): void {\n this.schedulingService.Provider = this.ProviderToUse;\n this.IsLoading = false;\n }\n\n loadData(): void {\n if (this.Config?.userState) {\n const state = this.Config.userState as Partial<SchedulingDashboardState>;\n if (state.activeTab) {\n this.ActiveTab = state.activeTab;\n this.visitedTabs.add(state.activeTab);\n }\n if (state.dashboardState) this.DashboardState = state.dashboardState;\n if (state.jobsState) this.JobsState = state.jobsState;\n if (state.activityState) this.ActivityState = state.activityState;\n this.cdr.markForCheck();\n }\n this.NotifyLoadComplete();\n }\n}\n","<mj-page-layout>\n <mj-page-header\n Title=\"Scheduling\"\n Icon=\"fa-solid fa-calendar-check\"\n Subtitle=\"Background jobs, executions, and system health\">\n <div meta>\n @if (AlertCount > 0) {\n <mj-stat-badge\n Icon=\"fa-solid fa-triangle-exclamation\"\n [Count]=\"AlertCount\"\n [Label]=\"AlertCount === 1 ? 'Alert' : 'Alerts'\"\n Variant=\"error\">\n </mj-stat-badge>\n } @else {\n <mj-stat-badge\n Icon=\"fa-solid fa-circle-check\"\n Label=\"Healthy\"\n Variant=\"success\">\n </mj-stat-badge>\n }\n @if (ActiveTab === 'jobs') {\n <mj-stat-badge\n [Count]=\"jobsCmp?.FilteredJobs?.length ?? 0\"\n [Total]=\"jobsCmp?.Jobs?.length ?? 0\"\n Label=\"jobs\">\n </mj-stat-badge>\n }\n </div>\n <div actions>\n @switch (ActiveTab) {\n @case ('dashboard') {\n <mj-refresh-button (Clicked)=\"overviewCmp?.Refresh()\"></mj-refresh-button>\n <button mjButton\n [variant]=\"overviewCmp?.AutoRefreshEnabled ? 'primary' : 'secondary'\"\n size=\"sm\"\n (click)=\"overviewCmp?.ToggleAutoRefresh()\"\n title=\"Toggle auto-refresh\">\n <i class=\"fa-solid fa-rotate\"></i>\n <span class=\"action-btn-label\">Auto: {{overviewCmp?.AutoRefreshEnabled ? 'ON' : 'OFF'}}</span>\n </button>\n }\n @case ('jobs') {\n <mj-filter-popover\n [ActiveCount]=\"JobsActiveFilterCount\"\n [ShowClearAll]=\"JobsActiveFilterCount > 0\"\n (ClearAllRequested)=\"resetJobsFilters()\">\n <mj-filter-panel\n [Fields]=\"JobsFilterFields\"\n [Values]=\"JobsFilterValues\"\n (ValuesChange)=\"onJobsFilterValuesChange($event)\"\n (Reset)=\"resetJobsFilters()\">\n </mj-filter-panel>\n </mj-filter-popover>\n <mj-refresh-button (Clicked)=\"jobsCmp?.Refresh()\"></mj-refresh-button>\n <button mjButton variant=\"primary\" size=\"sm\" (click)=\"jobsCmp?.OpenCreateSlideout()\">\n <i class=\"fa-solid fa-plus\"></i> <span class=\"action-btn-label\">New Job</span>\n </button>\n }\n @case ('activity') {\n <mj-filter-popover\n [ActiveCount]=\"ActivityActiveFilterCount\"\n [ShowClearAll]=\"ActivityActiveFilterCount > 0\"\n (ClearAllRequested)=\"resetActivityFilters()\">\n <mj-filter-panel\n [Fields]=\"ActivityFilterFields\"\n [Values]=\"ActivityFilterValues\"\n (ValuesChange)=\"onActivityFilterValuesChange($event)\"\n (Reset)=\"resetActivityFilters()\">\n </mj-filter-panel>\n </mj-filter-popover>\n <mj-refresh-button (Clicked)=\"activityCmp?.Refresh()\"></mj-refresh-button>\n }\n }\n </div>\n\n <div toolbar class=\"scheduling-toolbar\">\n <mj-tab-nav\n [Tabs]=\"Tabs\"\n [ActiveKey]=\"ActiveTab\"\n (TabChange)=\"OnTabChange($any($event))\">\n </mj-tab-nav>\n @switch (ActiveTab) {\n @case ('jobs') {\n <mj-page-search\n Placeholder=\"Search jobs...\"\n [Value]=\"jobsCmp?.SearchTerm ?? ''\"\n (ValueChange)=\"jobsCmp?.OnSearchChange($event)\">\n </mj-page-search>\n }\n @case ('activity') {\n <mj-page-search\n Placeholder=\"Search executions...\"\n [Value]=\"activityCmp?.SearchTerm ?? ''\"\n (ValueChange)=\"activityCmp?.OnSearchChange($event)\">\n </mj-page-search>\n @for (range of activityCmp?.TimeRanges; track range.value) {\n <mj-filter-chip\n [Label]=\"range.label\"\n [Active]=\"activityCmp?.SelectedTimeRange === range.value\"\n (Clicked)=\"activityCmp?.OnTimeRangeChange(range.value)\">\n </mj-filter-chip>\n }\n }\n }\n </div>\n </mj-page-header>\n\n <mj-page-body>\n @switch (ActiveTab) {\n @case ('dashboard') {\n <app-scheduling-overview\n #overviewCmp\n [initialState]=\"DashboardState\"\n [HideToolbar]=\"true\"\n (stateChange)=\"OnDashboardStateChange($event)\">\n </app-scheduling-overview>\n }\n @case ('jobs') {\n <app-scheduling-jobs\n #jobsCmp\n [initialState]=\"JobsState\"\n [HideToolbar]=\"true\"\n (stateChange)=\"OnJobsStateChange($event)\">\n </app-scheduling-jobs>\n }\n @case ('activity') {\n <app-scheduling-activity\n #activityCmp\n [initialState]=\"ActivityState\"\n [HideToolbar]=\"true\"\n (stateChange)=\"OnActivityStateChange($event)\">\n </app-scheduling-activity>\n }\n }\n </mj-page-body>\n</mj-page-layout>\n"]}
|
|
@@ -52,6 +52,8 @@ export interface JobStatistics {
|
|
|
52
52
|
ownerUser: string | null;
|
|
53
53
|
notifyOnSuccess: boolean;
|
|
54
54
|
notifyOnFailure: boolean;
|
|
55
|
+
/** When true AND lastRunAt is unset, the scheduler runs the job immediately on its next poll instead of waiting for the next cron tick. */
|
|
56
|
+
runImmediatelyIfNeverRun: boolean;
|
|
55
57
|
startAt?: Date;
|
|
56
58
|
endAt?: Date;
|
|
57
59
|
createdAt: Date;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scheduling-instrumentation.service.d.ts","sourceRoot":"","sources":["../../../src/Scheduling/services/scheduling-instrumentation.service.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"scheduling-instrumentation.service.d.ts","sourceRoot":"","sources":["../../../src/Scheduling/services/scheduling-instrumentation.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -211,6 +211,7 @@ export class SchedulingInstrumentationService {
|
|
|
211
211
|
ownerUser: job.OwnerUser,
|
|
212
212
|
notifyOnSuccess: job.NotifyOnSuccess,
|
|
213
213
|
notifyOnFailure: job.NotifyOnFailure,
|
|
214
|
+
runImmediatelyIfNeverRun: job.RunImmediatelyIfNeverRun === true,
|
|
214
215
|
startAt: job.StartAt ? new Date(job.StartAt) : undefined,
|
|
215
216
|
endAt: job.EndAt ? new Date(job.EndAt) : undefined,
|
|
216
217
|
createdAt: new Date(job.__mj_CreatedAt)
|