@memberjunction/ng-dashboards 6.2.0-edge.2 → 6.2.0-edge.4
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/dist/AI/components/analytics/realtime/realtime-transcripts-data.d.ts +4 -3
- package/dist/AI/components/analytics/realtime/realtime-transcripts-data.d.ts.map +1 -1
- package/dist/AI/components/analytics/realtime/realtime-transcripts-data.js +8 -5
- package/dist/AI/components/analytics/realtime/realtime-transcripts-data.js.map +1 -1
- package/dist/AI/components/duplicates/compare-value.component.d.ts +67 -0
- package/dist/AI/components/duplicates/compare-value.component.d.ts.map +1 -0
- package/dist/AI/components/duplicates/compare-value.component.js +168 -0
- package/dist/AI/components/duplicates/compare-value.component.js.map +1 -0
- package/dist/AI/components/duplicates/duplicate-detection-resource.component.d.ts +49 -3
- package/dist/AI/components/duplicates/duplicate-detection-resource.component.d.ts.map +1 -1
- package/dist/AI/components/duplicates/duplicate-detection-resource.component.js +287 -169
- package/dist/AI/components/duplicates/duplicate-detection-resource.component.js.map +1 -1
- package/dist/AI/components/duplicates/duplicate-detection-run-scope.d.ts +77 -0
- package/dist/AI/components/duplicates/duplicate-detection-run-scope.d.ts.map +1 -0
- package/dist/AI/components/duplicates/duplicate-detection-run-scope.js +116 -0
- package/dist/AI/components/duplicates/duplicate-detection-run-scope.js.map +1 -0
- package/dist/AI/components/prompts/model-prompt-priority-matrix.component.d.ts +1 -0
- package/dist/AI/components/prompts/model-prompt-priority-matrix.component.d.ts.map +1 -1
- package/dist/AI/components/prompts/model-prompt-priority-matrix.component.js +16 -4
- package/dist/AI/components/prompts/model-prompt-priority-matrix.component.js.map +1 -1
- package/dist/AI/components/tags/tags-resource.component.d.ts +2 -0
- package/dist/AI/components/tags/tags-resource.component.d.ts.map +1 -1
- package/dist/AI/components/tags/tags-resource.component.js +12 -6
- package/dist/AI/components/tags/tags-resource.component.js.map +1 -1
- package/dist/AI/components/vectors/vector-index-auto.d.ts +29 -0
- package/dist/AI/components/vectors/vector-index-auto.d.ts.map +1 -0
- package/dist/AI/components/vectors/vector-index-auto.js +59 -0
- package/dist/AI/components/vectors/vector-index-auto.js.map +1 -0
- package/dist/AI/components/vectors/vector-management-resource.component.d.ts +9 -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 +65 -20
- package/dist/AI/components/vectors/vector-management-resource.component.js.map +1 -1
- package/dist/Actions/components/actions-overview.component.d.ts.map +1 -1
- package/dist/Actions/components/actions-overview.component.js +7 -3
- package/dist/Actions/components/actions-overview.component.js.map +1 -1
- package/dist/Actions/components/categories-list-view.component.d.ts.map +1 -1
- package/dist/Actions/components/categories-list-view.component.js +3 -2
- package/dist/Actions/components/categories-list-view.component.js.map +1 -1
- package/dist/ComponentStudio/component-studio-dashboard.component.d.ts.map +1 -1
- package/dist/ComponentStudio/component-studio-dashboard.component.js +1 -0
- package/dist/ComponentStudio/component-studio-dashboard.component.js.map +1 -1
- package/dist/ComponentStudio/components/ai-assistant/ai-assistant-panel.component.d.ts +0 -3
- package/dist/ComponentStudio/components/ai-assistant/ai-assistant-panel.component.d.ts.map +1 -1
- package/dist/ComponentStudio/components/ai-assistant/ai-assistant-panel.component.js +5 -14
- package/dist/ComponentStudio/components/ai-assistant/ai-assistant-panel.component.js.map +1 -1
- package/dist/ComponentStudio/components/artifact-load-dialog.component.d.ts.map +1 -1
- package/dist/ComponentStudio/components/artifact-load-dialog.component.js +1 -0
- package/dist/ComponentStudio/components/artifact-load-dialog.component.js.map +1 -1
- package/dist/ComponentStudio/components/artifact-selection-dialog.component.d.ts.map +1 -1
- package/dist/ComponentStudio/components/artifact-selection-dialog.component.js +1 -0
- package/dist/ComponentStudio/components/artifact-selection-dialog.component.js.map +1 -1
- package/dist/ComponentStudio/components/form-override-dialog.component.d.ts +12 -1
- package/dist/ComponentStudio/components/form-override-dialog.component.d.ts.map +1 -1
- package/dist/ComponentStudio/components/form-override-dialog.component.js +128 -81
- package/dist/ComponentStudio/components/form-override-dialog.component.js.map +1 -1
- package/dist/Credentials/components/credentials-list-resource.component.d.ts +2 -0
- package/dist/Credentials/components/credentials-list-resource.component.d.ts.map +1 -1
- package/dist/Credentials/components/credentials-list-resource.component.js +12 -10
- package/dist/Credentials/components/credentials-list-resource.component.js.map +1 -1
- package/dist/DashboardBrowser/dashboard-browser-agent-context.d.ts +14 -43
- package/dist/DashboardBrowser/dashboard-browser-agent-context.d.ts.map +1 -1
- package/dist/DashboardBrowser/dashboard-browser-agent-context.js +6 -29
- package/dist/DashboardBrowser/dashboard-browser-agent-context.js.map +1 -1
- package/dist/DashboardBrowser/dashboard-browser-resource.component.d.ts +174 -321
- package/dist/DashboardBrowser/dashboard-browser-resource.component.d.ts.map +1 -1
- package/dist/DashboardBrowser/dashboard-browser-resource.component.js +522 -1195
- package/dist/DashboardBrowser/dashboard-browser-resource.component.js.map +1 -1
- package/dist/DashboardBrowser/dashboard-library-filter.d.ts +116 -0
- package/dist/DashboardBrowser/dashboard-library-filter.d.ts.map +1 -0
- package/dist/DashboardBrowser/dashboard-library-filter.js +277 -0
- package/dist/DashboardBrowser/dashboard-library-filter.js.map +1 -0
- package/dist/DashboardBrowser/dashboard-share-dialog.component.d.ts +1 -1
- package/dist/DashboardBrowser/dashboard-share-dialog.component.js.map +1 -1
- package/dist/DashboardBrowser/dashboards-agent-tools.d.ts +26 -0
- package/dist/DashboardBrowser/dashboards-agent-tools.d.ts.map +1 -0
- package/dist/DashboardBrowser/dashboards-agent-tools.js +32 -0
- package/dist/DashboardBrowser/dashboards-agent-tools.js.map +1 -0
- package/dist/DashboardBrowser/dashboards-categories-resource.component.d.ts +58 -0
- package/dist/DashboardBrowser/dashboards-categories-resource.component.d.ts.map +1 -0
- package/dist/DashboardBrowser/dashboards-categories-resource.component.js +391 -0
- package/dist/DashboardBrowser/dashboards-categories-resource.component.js.map +1 -0
- package/dist/DashboardBrowser/dashboards-categories.helpers.d.ts +37 -0
- package/dist/DashboardBrowser/dashboards-categories.helpers.d.ts.map +1 -0
- package/dist/DashboardBrowser/dashboards-categories.helpers.js +68 -0
- package/dist/DashboardBrowser/dashboards-categories.helpers.js.map +1 -0
- package/dist/DashboardEditor/dashboard-editor.component.d.ts +295 -0
- package/dist/DashboardEditor/dashboard-editor.component.d.ts.map +1 -0
- package/dist/DashboardEditor/dashboard-editor.component.js +1022 -0
- package/dist/DashboardEditor/dashboard-editor.component.js.map +1 -0
- package/dist/DashboardEditor/dashboard-editor.types.d.ts +23 -0
- package/dist/DashboardEditor/dashboard-editor.types.d.ts.map +1 -0
- package/dist/DashboardEditor/dashboard-editor.types.js +3 -0
- package/dist/DashboardEditor/dashboard-editor.types.js.map +1 -0
- package/dist/DashboardEditor/dashboard-viewer-factory.d.ts +11 -0
- package/dist/DashboardEditor/dashboard-viewer-factory.d.ts.map +1 -0
- package/dist/DashboardEditor/dashboard-viewer-factory.js +17 -0
- package/dist/DashboardEditor/dashboard-viewer-factory.js.map +1 -0
- package/dist/DataExplorer/data-explorer-dashboard.component.d.ts +30 -0
- package/dist/DataExplorer/data-explorer-dashboard.component.d.ts.map +1 -1
- package/dist/DataExplorer/data-explorer-dashboard.component.js +349 -232
- package/dist/DataExplorer/data-explorer-dashboard.component.js.map +1 -1
- package/dist/DataExplorer/services/explorer-state.service.d.ts +1 -1
- package/dist/DataExplorer/services/explorer-state.service.js +2 -5
- package/dist/DataExplorer/services/explorer-state.service.js.map +1 -1
- package/dist/FormBuilder/form-builder-resource.component.d.ts +0 -14
- package/dist/FormBuilder/form-builder-resource.component.d.ts.map +1 -1
- package/dist/FormBuilder/form-builder-resource.component.js +7 -29
- package/dist/FormBuilder/form-builder-resource.component.js.map +1 -1
- package/dist/Home/home-agent-context.d.ts +29 -10
- package/dist/Home/home-agent-context.d.ts.map +1 -1
- package/dist/Home/home-agent-context.js +50 -24
- package/dist/Home/home-agent-context.js.map +1 -1
- package/dist/Home/home-dashboard-switcher.component.d.ts +95 -0
- package/dist/Home/home-dashboard-switcher.component.d.ts.map +1 -0
- package/dist/Home/home-dashboard-switcher.component.js +442 -0
- package/dist/Home/home-dashboard-switcher.component.js.map +1 -0
- package/dist/Home/home-dashboard.component.d.ts +330 -17
- package/dist/Home/home-dashboard.component.d.ts.map +1 -1
- package/dist/Home/home-dashboard.component.js +1702 -1014
- package/dist/Home/home-dashboard.component.js.map +1 -1
- package/dist/Home/home-menus.d.ts +38 -0
- package/dist/Home/home-menus.d.ts.map +1 -0
- package/dist/Home/home-menus.js +53 -0
- package/dist/Home/home-menus.js.map +1 -0
- package/dist/Home/home-pinned-dashboards.d.ts +33 -0
- package/dist/Home/home-pinned-dashboards.d.ts.map +1 -0
- package/dist/Home/home-pinned-dashboards.js +76 -0
- package/dist/Home/home-pinned-dashboards.js.map +1 -0
- package/dist/PredictiveStudio/components/ps-production.component.d.ts +5 -1
- package/dist/PredictiveStudio/components/ps-production.component.d.ts.map +1 -1
- package/dist/PredictiveStudio/components/ps-production.component.js +64 -41
- package/dist/PredictiveStudio/components/ps-production.component.js.map +1 -1
- package/dist/QueryBrowser/query-browser-resource.component.d.ts.map +1 -1
- package/dist/QueryBrowser/query-browser-resource.component.js +3 -2
- package/dist/QueryBrowser/query-browser-resource.component.js.map +1 -1
- package/dist/RealtimeRecordings/realtime-recordings-dashboard.component.js +2 -2
- package/dist/RealtimeRecordings/realtime-recordings-dashboard.component.js.map +1 -1
- package/dist/TelephonyOperations/telephony-operations-agent-context.d.ts +107 -0
- package/dist/TelephonyOperations/telephony-operations-agent-context.d.ts.map +1 -0
- package/dist/TelephonyOperations/telephony-operations-agent-context.js +216 -0
- package/dist/TelephonyOperations/telephony-operations-agent-context.js.map +1 -0
- package/dist/TelephonyOperations/telephony-operations-dashboard.component.d.ts +58 -0
- package/dist/TelephonyOperations/telephony-operations-dashboard.component.d.ts.map +1 -0
- package/dist/TelephonyOperations/telephony-operations-dashboard.component.js +812 -0
- package/dist/TelephonyOperations/telephony-operations-dashboard.component.js.map +1 -0
- package/dist/Testing/components/testing-explorer.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-explorer.component.js +7 -7
- package/dist/Testing/components/testing-explorer.component.js.map +1 -1
- package/dist/WorkQueue/components/work-queue-bindings.component.d.ts +37 -0
- package/dist/WorkQueue/components/work-queue-bindings.component.d.ts.map +1 -0
- package/dist/WorkQueue/components/work-queue-bindings.component.js +210 -0
- package/dist/WorkQueue/components/work-queue-bindings.component.js.map +1 -0
- package/dist/WorkQueue/components/work-queue-dead-letters.component.d.ts +70 -0
- package/dist/WorkQueue/components/work-queue-dead-letters.component.d.ts.map +1 -0
- package/dist/WorkQueue/components/work-queue-dead-letters.component.js +496 -0
- package/dist/WorkQueue/components/work-queue-dead-letters.component.js.map +1 -0
- package/dist/WorkQueue/components/work-queue-discard-dialog.component.d.ts +22 -0
- package/dist/WorkQueue/components/work-queue-discard-dialog.component.d.ts.map +1 -0
- package/dist/WorkQueue/components/work-queue-discard-dialog.component.js +99 -0
- package/dist/WorkQueue/components/work-queue-discard-dialog.component.js.map +1 -0
- package/dist/WorkQueue/components/work-queue-overview.component.d.ts +29 -0
- package/dist/WorkQueue/components/work-queue-overview.component.d.ts.map +1 -0
- package/dist/WorkQueue/components/work-queue-overview.component.js +278 -0
- package/dist/WorkQueue/components/work-queue-overview.component.js.map +1 -0
- package/dist/WorkQueue/components/work-queue-partitions.component.d.ts +59 -0
- package/dist/WorkQueue/components/work-queue-partitions.component.d.ts.map +1 -0
- package/dist/WorkQueue/components/work-queue-partitions.component.js +359 -0
- package/dist/WorkQueue/components/work-queue-partitions.component.js.map +1 -0
- package/dist/WorkQueue/services/work-queue-operator.service.d.ts +22 -0
- package/dist/WorkQueue/services/work-queue-operator.service.d.ts.map +1 -0
- package/dist/WorkQueue/services/work-queue-operator.service.js +44 -0
- package/dist/WorkQueue/services/work-queue-operator.service.js.map +1 -0
- package/dist/WorkQueue/work-queue-agent-context.d.ts +67 -0
- package/dist/WorkQueue/work-queue-agent-context.d.ts.map +1 -0
- package/dist/WorkQueue/work-queue-agent-context.js +119 -0
- package/dist/WorkQueue/work-queue-agent-context.js.map +1 -0
- package/dist/WorkQueue/work-queue-dashboard.component.d.ts +94 -0
- package/dist/WorkQueue/work-queue-dashboard.component.d.ts.map +1 -0
- package/dist/WorkQueue/work-queue-dashboard.component.js +545 -0
- package/dist/WorkQueue/work-queue-dashboard.component.js.map +1 -0
- package/dist/WorkQueue/work-queue-types.d.ts +40 -0
- package/dist/WorkQueue/work-queue-types.d.ts.map +1 -0
- package/dist/WorkQueue/work-queue-types.js +2 -0
- package/dist/WorkQueue/work-queue-types.js.map +1 -0
- package/dist/ai-dashboards.module.d.ts +21 -20
- package/dist/ai-dashboards.module.d.ts.map +1 -1
- package/dist/ai-dashboards.module.js +4 -1
- package/dist/ai-dashboards.module.js.map +1 -1
- package/dist/core-dashboards.module.d.ts +69 -61
- package/dist/core-dashboards.module.d.ts.map +1 -1
- package/dist/core-dashboards.module.js +29 -2
- package/dist/core-dashboards.module.js.map +1 -1
- package/dist/data-explorer-dashboards.module.d.ts +1 -1
- package/dist/data-explorer-dashboards.module.d.ts.map +1 -1
- package/dist/data-explorer-dashboards.module.js +3 -1
- package/dist/data-explorer-dashboards.module.js.map +1 -1
- package/dist/module.d.ts +14 -13
- package/dist/module.d.ts.map +1 -1
- package/dist/module.js +7 -0
- package/dist/module.js.map +1 -1
- package/dist/public-api.d.ts +6 -0
- package/dist/public-api.d.ts.map +1 -1
- package/dist/public-api.js +9 -0
- package/dist/public-api.js.map +1 -1
- package/dist/shared/dashboard-library-changes.d.ts +23 -0
- package/dist/shared/dashboard-library-changes.d.ts.map +1 -0
- package/dist/shared/dashboard-library-changes.js +26 -0
- package/dist/shared/dashboard-library-changes.js.map +1 -0
- package/dist/shared/dashboard-owner-names.d.ts +17 -0
- package/dist/shared/dashboard-owner-names.d.ts.map +1 -0
- package/dist/shared/dashboard-owner-names.js +65 -0
- package/dist/shared/dashboard-owner-names.js.map +1 -0
- package/dist/shared/dashboard-recents.d.ts +34 -0
- package/dist/shared/dashboard-recents.d.ts.map +1 -0
- package/dist/shared/dashboard-recents.js +87 -0
- package/dist/shared/dashboard-recents.js.map +1 -0
- package/dist/shared/dashboards-app-install.d.ts +59 -0
- package/dist/shared/dashboards-app-install.d.ts.map +1 -0
- package/dist/shared/dashboards-app-install.js +97 -0
- package/dist/shared/dashboards-app-install.js.map +1 -0
- package/dist/shared/dashboards-app.helpers.d.ts +42 -0
- package/dist/shared/dashboards-app.helpers.d.ts.map +1 -0
- package/dist/shared/dashboards-app.helpers.js +143 -0
- package/dist/shared/dashboards-app.helpers.js.map +1 -0
- package/dist/work-queue-dashboards.module.d.ts +23 -0
- package/dist/work-queue-dashboards.module.d.ts.map +1 -0
- package/dist/work-queue-dashboards.module.js +92 -0
- package/dist/work-queue-dashboards.module.js.map +1 -0
- package/package.json +73 -66
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Pure helpers for the Work Queue dashboard: tab ids, attention ordering, age formatting, the
|
|
3
|
+
* tolerant subscription resolver the agent tools use, and the agent-context shaping. No Angular imports, so
|
|
4
|
+
* every function here is unit-tested in isolation (see __tests__/work-queue-agent-context.test.ts).
|
|
5
|
+
*
|
|
6
|
+
* 🔒 SAFETY: the agent surface is read-only and navigational. Replay and discard are mutations that must be
|
|
7
|
+
* confirmed by the user in the UI; the tools registered by the dashboard never execute them.
|
|
8
|
+
*/
|
|
9
|
+
import { UUIDsEqual } from '@memberjunction/global';
|
|
10
|
+
export const WORK_QUEUE_TABS = ['overview', 'dead-letters', 'partitions', 'bindings'];
|
|
11
|
+
export const WORK_QUEUE_TAB_LABELS = {
|
|
12
|
+
overview: 'Overview',
|
|
13
|
+
'dead-letters': 'Dead Letters',
|
|
14
|
+
partitions: 'Partitions',
|
|
15
|
+
bindings: 'Bindings',
|
|
16
|
+
};
|
|
17
|
+
/** The partition conditions WorkQueue.ListPartitions accepts (03 §5.2). */
|
|
18
|
+
export const WORK_QUEUE_PARTITION_CONDITIONS = ['Blocked', 'InFlight', 'Idle'];
|
|
19
|
+
/** Upper bound on any list published in the agent context; a companion count reports the true total. */
|
|
20
|
+
export const WORK_QUEUE_CONTEXT_LIST_CAP = 25;
|
|
21
|
+
export function IsValidWorkQueueTab(value) {
|
|
22
|
+
return typeof value === 'string' && WORK_QUEUE_TABS.includes(value);
|
|
23
|
+
}
|
|
24
|
+
export function IsValidPartitionCondition(value) {
|
|
25
|
+
return typeof value === 'string' && WORK_QUEUE_PARTITION_CONDITIONS.includes(value);
|
|
26
|
+
}
|
|
27
|
+
/** A subscription needs an operator when it holds dead letters or a blocked Ordered key. */
|
|
28
|
+
export function NeedsAttention(snapshot) {
|
|
29
|
+
return (snapshot.DeadLettered ?? 0) > 0 || (snapshot.BlockedKeys ?? 0) > 0;
|
|
30
|
+
}
|
|
31
|
+
/** Attention first, then by name; returns a new array. */
|
|
32
|
+
export function SortByAttention(items) {
|
|
33
|
+
return [...items].sort((a, b) => {
|
|
34
|
+
const attention = Number(NeedsAttention(b)) - Number(NeedsAttention(a));
|
|
35
|
+
return attention !== 0 ? attention : a.Name.localeCompare(b.Name);
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
/** '—' for null, then s / m / h m / d h at the coarsest useful unit. */
|
|
39
|
+
export function FormatAge(seconds) {
|
|
40
|
+
if (seconds === null || seconds === undefined || !Number.isFinite(seconds) || seconds < 0) {
|
|
41
|
+
return '—';
|
|
42
|
+
}
|
|
43
|
+
const s = Math.floor(seconds);
|
|
44
|
+
if (s < 60)
|
|
45
|
+
return `${s}s`;
|
|
46
|
+
const m = Math.floor(s / 60);
|
|
47
|
+
if (m < 60)
|
|
48
|
+
return `${m}m`;
|
|
49
|
+
const h = Math.floor(m / 60);
|
|
50
|
+
if (h < 24)
|
|
51
|
+
return `${h}h ${m % 60}m`;
|
|
52
|
+
const d = Math.floor(h / 24);
|
|
53
|
+
return `${d}d ${h % 24}h`;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Resolves an agent-supplied id or name tolerantly: exact id, then exact name (case-insensitive), then a unique
|
|
57
|
+
* case-insensitive substring of the name. Several substring matches are reported as Ambiguous, never guessed.
|
|
58
|
+
*/
|
|
59
|
+
export function ResolveSubscription(candidates, query) {
|
|
60
|
+
const needle = query.trim();
|
|
61
|
+
if (needle === '') {
|
|
62
|
+
return { Kind: 'NotFound' };
|
|
63
|
+
}
|
|
64
|
+
const byId = candidates.find((c) => UUIDsEqual(c.ID, needle));
|
|
65
|
+
if (byId)
|
|
66
|
+
return { Kind: 'Match', Item: byId };
|
|
67
|
+
const lower = needle.toLowerCase();
|
|
68
|
+
const byName = candidates.find((c) => c.Name.toLowerCase() === lower);
|
|
69
|
+
if (byName)
|
|
70
|
+
return { Kind: 'Match', Item: byName };
|
|
71
|
+
const partial = candidates.filter((c) => c.Name.toLowerCase().includes(lower));
|
|
72
|
+
if (partial.length === 1)
|
|
73
|
+
return { Kind: 'Match', Item: partial[0] };
|
|
74
|
+
return partial.length > 1 ? { Kind: 'Ambiguous', Matches: partial } : { Kind: 'NotFound' };
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Shapes the dashboard state for NavigationService.SetAgentContext. Counts come only from loaded stats: before the
|
|
78
|
+
* first stats read the aggregate fields are null rather than fabricated zeros.
|
|
79
|
+
*/
|
|
80
|
+
export function BuildWorkQueueAgentContext(input) {
|
|
81
|
+
const attention = SortByAttention(input.Subscriptions).filter(NeedsAttention);
|
|
82
|
+
const totals = input.StatsLoaded
|
|
83
|
+
? input.Subscriptions.reduce((acc, s) => ({
|
|
84
|
+
Pending: acc.Pending + (s.Pending ?? 0),
|
|
85
|
+
InFlight: acc.InFlight + (s.InFlight ?? 0),
|
|
86
|
+
DeadLettered: acc.DeadLettered + (s.DeadLettered ?? 0),
|
|
87
|
+
BlockedKeys: acc.BlockedKeys + (s.BlockedKeys ?? 0),
|
|
88
|
+
}), { Pending: 0, InFlight: 0, DeadLettered: 0, BlockedKeys: 0 })
|
|
89
|
+
: null;
|
|
90
|
+
const context = {
|
|
91
|
+
Surface: 'WorkQueue',
|
|
92
|
+
ActiveTab: input.ActiveTab,
|
|
93
|
+
ActiveTabLabel: IsValidWorkQueueTab(input.ActiveTab) ? WORK_QUEUE_TAB_LABELS[input.ActiveTab] : input.ActiveTab,
|
|
94
|
+
SubscriptionCount: input.Subscriptions.length,
|
|
95
|
+
Subscriptions: input.Subscriptions.slice(0, WORK_QUEUE_CONTEXT_LIST_CAP).map((s) => `${s.Name} (${s.Topic} / ${s.PartitionMode}, ${s.Status})`),
|
|
96
|
+
StatsLoaded: input.StatsLoaded,
|
|
97
|
+
Totals: totals,
|
|
98
|
+
SubscriptionsNeedingAttentionCount: attention.length,
|
|
99
|
+
SubscriptionsNeedingAttention: attention.slice(0, WORK_QUEUE_CONTEXT_LIST_CAP).map((s) => ({
|
|
100
|
+
Name: s.Name, DeadLettered: s.DeadLettered, BlockedKeys: s.BlockedKeys, OldestPendingAgeSeconds: s.OldestPendingAgeSeconds,
|
|
101
|
+
})),
|
|
102
|
+
StatsFailures: input.StatsFailures.slice(0, WORK_QUEUE_CONTEXT_LIST_CAP),
|
|
103
|
+
SelectedSubscription: input.SelectedSubscription,
|
|
104
|
+
LastRefreshedAt: input.LastRefreshedAt,
|
|
105
|
+
};
|
|
106
|
+
if (input.ActiveTab === 'dead-letters') {
|
|
107
|
+
context['DeadLetterCount'] = input.DeadLetterCount;
|
|
108
|
+
context['SelectedDeadLetterCount'] = input.SelectedDeadLetterCount;
|
|
109
|
+
}
|
|
110
|
+
if (input.ActiveTab === 'partitions') {
|
|
111
|
+
context['PartitionCondition'] = input.PartitionCondition;
|
|
112
|
+
}
|
|
113
|
+
if (input.ActiveTab === 'bindings') {
|
|
114
|
+
context['BindingErrorCount'] = input.BindingErrorCount;
|
|
115
|
+
context['BindingWarningCount'] = input.BindingWarningCount;
|
|
116
|
+
}
|
|
117
|
+
return context;
|
|
118
|
+
}
|
|
119
|
+
//# sourceMappingURL=work-queue-agent-context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"work-queue-agent-context.js","sourceRoot":"","sources":["../../src/WorkQueue/work-queue-agent-context.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEpD,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,UAAU,EAAE,cAAc,EAAE,YAAY,EAAE,UAAU,CAAU,CAAC;AAG/F,MAAM,CAAC,MAAM,qBAAqB,GAAiC;IAC/D,QAAQ,EAAE,UAAU;IACpB,cAAc,EAAE,cAAc;IAC9B,UAAU,EAAE,YAAY;IACxB,QAAQ,EAAE,UAAU;CACvB,CAAC;AAEF,2EAA2E;AAC3E,MAAM,CAAC,MAAM,+BAA+B,GAAG,CAAC,SAAS,EAAE,UAAU,EAAE,MAAM,CAAU,CAAC;AAGxF,wGAAwG;AACxG,MAAM,CAAC,MAAM,2BAA2B,GAAG,EAAE,CAAC;AAE9C,MAAM,UAAU,mBAAmB,CAAC,KAAc;IAC9C,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAK,eAAqC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAC/F,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,KAAc;IACpD,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAK,+BAAqD,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAC/G,CAAC;AAiBD,4FAA4F;AAC5F,MAAM,UAAU,cAAc,CAAC,QAA6E;IACxG,OAAO,CAAC,QAAQ,CAAC,YAAY,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;AAC/E,CAAC;AAED,0DAA0D;AAC1D,MAAM,UAAU,eAAe,CAAyF,KAAmB;IACvI,OAAO,CAAC,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QAC5B,MAAM,SAAS,GAAG,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;QACxE,OAAO,SAAS,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IACtE,CAAC,CAAC,CAAC;AACP,CAAC;AAED,wEAAwE;AACxE,MAAM,UAAU,SAAS,CAAC,OAAkC;IACxD,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,SAAS,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;QACxF,OAAO,GAAG,CAAC;IACf,CAAC;IACD,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC9B,IAAI,CAAC,GAAG,EAAE;QAAE,OAAO,GAAG,CAAC,GAAG,CAAC;IAC3B,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;IAC7B,IAAI,CAAC,GAAG,EAAE;QAAE,OAAO,GAAG,CAAC,GAAG,CAAC;IAC3B,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;IAC7B,IAAI,CAAC,GAAG,EAAE;QAAE,OAAO,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC;IACtC,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;IAC7B,OAAO,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC;AAC9B,CAAC;AAYD;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAkC,UAAwB,EAAE,KAAa;IACxG,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC5B,IAAI,MAAM,KAAK,EAAE,EAAE,CAAC;QAChB,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;IAChC,CAAC;IACD,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC;IAC9D,IAAI,IAAI;QAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IAC/C,MAAM,KAAK,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC;IACnC,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,KAAK,CAAC,CAAC;IACtE,IAAI,MAAM;QAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IACnD,MAAM,OAAO,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;IAC/E,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;IACrE,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;AAC/F,CAAC;AAgBD;;;GAGG;AACH,MAAM,UAAU,0BAA0B,CAAC,KAAiC;IACxE,MAAM,SAAS,GAAG,eAAe,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;IAC9E,MAAM,MAAM,GAAG,KAAK,CAAC,WAAW;QAC5B,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,MAAM,CACxB,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;YACT,OAAO,EAAE,GAAG,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC;YACvC,QAAQ,EAAE,GAAG,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC;YAC1C,YAAY,EAAE,GAAG,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC;YACtD,WAAW,EAAE,GAAG,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC,WAAW,IAAI,CAAC,CAAC;SACtD,CAAC,EACF,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,CAC/D;QACD,CAAC,CAAC,IAAI,CAAC;IACX,MAAM,OAAO,GAA4B;QACrC,OAAO,EAAE,WAAW;QACpB,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,cAAc,EAAE,mBAAmB,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,qBAAqB,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS;QAC/G,iBAAiB,EAAE,KAAK,CAAC,aAAa,CAAC,MAAM;QAC7C,aAAa,EAAE,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,EAAE,2BAA2B,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,aAAa,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC;QAC/I,WAAW,EAAE,KAAK,CAAC,WAAW;QAC9B,MAAM,EAAE,MAAM;QACd,kCAAkC,EAAE,SAAS,CAAC,MAAM;QACpD,6BAA6B,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,2BAA2B,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACvF,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC,YAAY,EAAE,WAAW,EAAE,CAAC,CAAC,WAAW,EAAE,uBAAuB,EAAE,CAAC,CAAC,uBAAuB;SAC7H,CAAC,CAAC;QACH,aAAa,EAAE,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,EAAE,2BAA2B,CAAC;QACxE,oBAAoB,EAAE,KAAK,CAAC,oBAAoB;QAChD,eAAe,EAAE,KAAK,CAAC,eAAe;KACzC,CAAC;IACF,IAAI,KAAK,CAAC,SAAS,KAAK,cAAc,EAAE,CAAC;QACrC,OAAO,CAAC,iBAAiB,CAAC,GAAG,KAAK,CAAC,eAAe,CAAC;QACnD,OAAO,CAAC,yBAAyB,CAAC,GAAG,KAAK,CAAC,uBAAuB,CAAC;IACvE,CAAC;IACD,IAAI,KAAK,CAAC,SAAS,KAAK,YAAY,EAAE,CAAC;QACnC,OAAO,CAAC,oBAAoB,CAAC,GAAG,KAAK,CAAC,kBAAkB,CAAC;IAC7D,CAAC;IACD,IAAI,KAAK,CAAC,SAAS,KAAK,UAAU,EAAE,CAAC;QACjC,OAAO,CAAC,mBAAmB,CAAC,GAAG,KAAK,CAAC,iBAAiB,CAAC;QACvD,OAAO,CAAC,qBAAqB,CAAC,GAAG,KAAK,CAAC,mBAAmB,CAAC;IAC/D,CAAC;IACD,OAAO,OAAO,CAAC;AACnB,CAAC","sourcesContent":["/**\n * @fileoverview Pure helpers for the Work Queue dashboard: tab ids, attention ordering, age formatting, the\n * tolerant subscription resolver the agent tools use, and the agent-context shaping. No Angular imports, so\n * every function here is unit-tested in isolation (see __tests__/work-queue-agent-context.test.ts).\n *\n * 🔒 SAFETY: the agent surface is read-only and navigational. Replay and discard are mutations that must be\n * confirmed by the user in the UI; the tools registered by the dashboard never execute them.\n */\nimport { UUIDsEqual } from '@memberjunction/global';\n\nexport const WORK_QUEUE_TABS = ['overview', 'dead-letters', 'partitions', 'bindings'] as const;\nexport type WorkQueueTab = (typeof WORK_QUEUE_TABS)[number];\n\nexport const WORK_QUEUE_TAB_LABELS: Record<WorkQueueTab, string> = {\n overview: 'Overview',\n 'dead-letters': 'Dead Letters',\n partitions: 'Partitions',\n bindings: 'Bindings',\n};\n\n/** The partition conditions WorkQueue.ListPartitions accepts (03 §5.2). */\nexport const WORK_QUEUE_PARTITION_CONDITIONS = ['Blocked', 'InFlight', 'Idle'] as const;\nexport type WorkQueuePartitionCondition = (typeof WORK_QUEUE_PARTITION_CONDITIONS)[number];\n\n/** Upper bound on any list published in the agent context; a companion count reports the true total. */\nexport const WORK_QUEUE_CONTEXT_LIST_CAP = 25;\n\nexport function IsValidWorkQueueTab(value: unknown): value is WorkQueueTab {\n return typeof value === 'string' && (WORK_QUEUE_TABS as readonly string[]).includes(value);\n}\n\nexport function IsValidPartitionCondition(value: unknown): value is WorkQueuePartitionCondition {\n return typeof value === 'string' && (WORK_QUEUE_PARTITION_CONDITIONS as readonly string[]).includes(value);\n}\n\n/** One subscription as the dashboard reports it to the agent: topology plus the last stats read (null until loaded). */\nexport interface WorkQueueSubscriptionSnapshot {\n ID: string;\n Name: string;\n Topic: string;\n Transport: string;\n PartitionMode: string;\n Status: string;\n Pending: number | null;\n InFlight: number | null;\n DeadLettered: number | null;\n BlockedKeys: number | null;\n OldestPendingAgeSeconds: number | null;\n}\n\n/** A subscription needs an operator when it holds dead letters or a blocked Ordered key. */\nexport function NeedsAttention(snapshot: Pick<WorkQueueSubscriptionSnapshot, 'DeadLettered' | 'BlockedKeys'>): boolean {\n return (snapshot.DeadLettered ?? 0) > 0 || (snapshot.BlockedKeys ?? 0) > 0;\n}\n\n/** Attention first, then by name; returns a new array. */\nexport function SortByAttention<T extends Pick<WorkQueueSubscriptionSnapshot, 'DeadLettered' | 'BlockedKeys' | 'Name'>>(items: readonly T[]): T[] {\n return [...items].sort((a, b) => {\n const attention = Number(NeedsAttention(b)) - Number(NeedsAttention(a));\n return attention !== 0 ? attention : a.Name.localeCompare(b.Name);\n });\n}\n\n/** '—' for null, then s / m / h m / d h at the coarsest useful unit. */\nexport function FormatAge(seconds: number | null | undefined): string {\n if (seconds === null || seconds === undefined || !Number.isFinite(seconds) || seconds < 0) {\n return '—';\n }\n const s = Math.floor(seconds);\n if (s < 60) return `${s}s`;\n const m = Math.floor(s / 60);\n if (m < 60) return `${m}m`;\n const h = Math.floor(m / 60);\n if (h < 24) return `${h}h ${m % 60}m`;\n const d = Math.floor(h / 24);\n return `${d}d ${h % 24}h`;\n}\n\nexport interface SubscriptionCandidate {\n ID: string;\n Name: string;\n}\n\nexport type SubscriptionResolution<T extends SubscriptionCandidate> =\n | { Kind: 'Match'; Item: T }\n | { Kind: 'Ambiguous'; Matches: T[] }\n | { Kind: 'NotFound' };\n\n/**\n * Resolves an agent-supplied id or name tolerantly: exact id, then exact name (case-insensitive), then a unique\n * case-insensitive substring of the name. Several substring matches are reported as Ambiguous, never guessed.\n */\nexport function ResolveSubscription<T extends SubscriptionCandidate>(candidates: readonly T[], query: string): SubscriptionResolution<T> {\n const needle = query.trim();\n if (needle === '') {\n return { Kind: 'NotFound' };\n }\n const byId = candidates.find((c) => UUIDsEqual(c.ID, needle));\n if (byId) return { Kind: 'Match', Item: byId };\n const lower = needle.toLowerCase();\n const byName = candidates.find((c) => c.Name.toLowerCase() === lower);\n if (byName) return { Kind: 'Match', Item: byName };\n const partial = candidates.filter((c) => c.Name.toLowerCase().includes(lower));\n if (partial.length === 1) return { Kind: 'Match', Item: partial[0] };\n return partial.length > 1 ? { Kind: 'Ambiguous', Matches: partial } : { Kind: 'NotFound' };\n}\n\nexport interface WorkQueueAgentContextInput {\n ActiveTab: string;\n Subscriptions: WorkQueueSubscriptionSnapshot[];\n StatsFailures: string[];\n StatsLoaded: boolean;\n SelectedSubscription: string | null;\n PartitionCondition: WorkQueuePartitionCondition | null;\n DeadLetterCount: number | null;\n SelectedDeadLetterCount: number;\n BindingErrorCount: number | null;\n BindingWarningCount: number | null;\n LastRefreshedAt: string | null;\n}\n\n/**\n * Shapes the dashboard state for NavigationService.SetAgentContext. Counts come only from loaded stats: before the\n * first stats read the aggregate fields are null rather than fabricated zeros.\n */\nexport function BuildWorkQueueAgentContext(input: WorkQueueAgentContextInput): Record<string, unknown> {\n const attention = SortByAttention(input.Subscriptions).filter(NeedsAttention);\n const totals = input.StatsLoaded\n ? input.Subscriptions.reduce(\n (acc, s) => ({\n Pending: acc.Pending + (s.Pending ?? 0),\n InFlight: acc.InFlight + (s.InFlight ?? 0),\n DeadLettered: acc.DeadLettered + (s.DeadLettered ?? 0),\n BlockedKeys: acc.BlockedKeys + (s.BlockedKeys ?? 0),\n }),\n { Pending: 0, InFlight: 0, DeadLettered: 0, BlockedKeys: 0 },\n )\n : null;\n const context: Record<string, unknown> = {\n Surface: 'WorkQueue',\n ActiveTab: input.ActiveTab,\n ActiveTabLabel: IsValidWorkQueueTab(input.ActiveTab) ? WORK_QUEUE_TAB_LABELS[input.ActiveTab] : input.ActiveTab,\n SubscriptionCount: input.Subscriptions.length,\n Subscriptions: input.Subscriptions.slice(0, WORK_QUEUE_CONTEXT_LIST_CAP).map((s) => `${s.Name} (${s.Topic} / ${s.PartitionMode}, ${s.Status})`),\n StatsLoaded: input.StatsLoaded,\n Totals: totals,\n SubscriptionsNeedingAttentionCount: attention.length,\n SubscriptionsNeedingAttention: attention.slice(0, WORK_QUEUE_CONTEXT_LIST_CAP).map((s) => ({\n Name: s.Name, DeadLettered: s.DeadLettered, BlockedKeys: s.BlockedKeys, OldestPendingAgeSeconds: s.OldestPendingAgeSeconds,\n })),\n StatsFailures: input.StatsFailures.slice(0, WORK_QUEUE_CONTEXT_LIST_CAP),\n SelectedSubscription: input.SelectedSubscription,\n LastRefreshedAt: input.LastRefreshedAt,\n };\n if (input.ActiveTab === 'dead-letters') {\n context['DeadLetterCount'] = input.DeadLetterCount;\n context['SelectedDeadLetterCount'] = input.SelectedDeadLetterCount;\n }\n if (input.ActiveTab === 'partitions') {\n context['PartitionCondition'] = input.PartitionCondition;\n }\n if (input.ActiveTab === 'bindings') {\n context['BindingErrorCount'] = input.BindingErrorCount;\n context['BindingWarningCount'] = input.BindingWarningCount;\n }\n return context;\n}\n"]}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import { AfterViewInit, ChangeDetectorRef, OnDestroy } from '@angular/core';
|
|
2
|
+
import { BaseDashboard } from '@memberjunction/ng-shared';
|
|
3
|
+
import { ResourceData } from '@memberjunction/core-entities';
|
|
4
|
+
import { TabConfig } from '@memberjunction/ng-ui-components';
|
|
5
|
+
import { WorkQueueOperatorService } from './services/work-queue-operator.service';
|
|
6
|
+
import { WorkQueuePartitionCondition, WorkQueueTab } from './work-queue-agent-context';
|
|
7
|
+
import type { WorkQueueOverviewRow, WorkQueueRecordOpenRequest, WorkQueueSubscriptionOption, WorkQueueTransportOption } from './work-queue-types';
|
|
8
|
+
import * as i0 from "@angular/core";
|
|
9
|
+
/**
|
|
10
|
+
* Work Queue operator dashboard (spec 09b): topology + live stats, dead-letter triage, Ordered partition state and
|
|
11
|
+
* binding validation, on top of the seven WorkQueue.* remote operations. The dashboard owns the topology load
|
|
12
|
+
* (WorkQueueEngineBase) and the stats read; each tab owns its own operation calls through WorkQueueOperatorService.
|
|
13
|
+
*
|
|
14
|
+
* 🔒 SAFETY BOUNDARY: the agent tools registered here are read-only and navigational. Replay and discard are
|
|
15
|
+
* mutations that require the operator's explicit confirmation in the UI and are never exposed as tools.
|
|
16
|
+
*/
|
|
17
|
+
export declare class WorkQueueDashboardComponent extends BaseDashboard implements AfterViewInit, OnDestroy {
|
|
18
|
+
private readonly cdr;
|
|
19
|
+
private readonly operator;
|
|
20
|
+
IsLoading: boolean;
|
|
21
|
+
LoadError: string | null;
|
|
22
|
+
ActiveTab: WorkQueueTab;
|
|
23
|
+
SelectedSubscription: string | null;
|
|
24
|
+
PartitionCondition: WorkQueuePartitionCondition | null;
|
|
25
|
+
Rows: WorkQueueOverviewRow[];
|
|
26
|
+
SubscriptionOptions: WorkQueueSubscriptionOption[];
|
|
27
|
+
TransportOptions: WorkQueueTransportOption[];
|
|
28
|
+
StatsFailures: string[];
|
|
29
|
+
StatsLoaded: boolean;
|
|
30
|
+
LastRefreshedAt: Date | null;
|
|
31
|
+
/** Update on MJ: Work Queue Subscriptions gates replay/discard (spec 09b §permissions). */
|
|
32
|
+
CanOperate: boolean;
|
|
33
|
+
DeadLetterCount: number | null;
|
|
34
|
+
SelectedDeadLetterCount: number;
|
|
35
|
+
BlockedPartitionCount: number | null;
|
|
36
|
+
BindingErrorCount: number | null;
|
|
37
|
+
BindingWarningCount: number | null;
|
|
38
|
+
private isVisible;
|
|
39
|
+
private autoRefreshHandle;
|
|
40
|
+
private readonly stateChangeSubject;
|
|
41
|
+
private lastRegisteredToolTab;
|
|
42
|
+
constructor(cdr: ChangeDetectorRef, operator: WorkQueueOperatorService);
|
|
43
|
+
GetResourceDisplayName(_data: ResourceData): Promise<string>;
|
|
44
|
+
GetResourceIconClass(_data: ResourceData): Promise<string>;
|
|
45
|
+
ngAfterViewInit(): void;
|
|
46
|
+
ngOnDestroy(): void;
|
|
47
|
+
SetVisible(visible: boolean): void;
|
|
48
|
+
protected initDashboard(): void;
|
|
49
|
+
protected loadData(): Promise<void>;
|
|
50
|
+
protected OnQueryParamsChanged(params: Record<string, string>, _source: 'popstate' | 'deeplink'): void;
|
|
51
|
+
get Tabs(): TabConfig[];
|
|
52
|
+
get TotalPending(): number;
|
|
53
|
+
get TotalInFlight(): number;
|
|
54
|
+
get TotalDeadLettered(): number;
|
|
55
|
+
get TotalBlockedKeys(): number;
|
|
56
|
+
OnTabChange(tabId: string): void;
|
|
57
|
+
OnSubscriptionChange(name: string | null): void;
|
|
58
|
+
OnConditionChange(condition: WorkQueuePartitionCondition | null): void;
|
|
59
|
+
/** Overview row click: jump to the dead letters of that subscription. */
|
|
60
|
+
OnOverviewSubscriptionSelected(name: string): void;
|
|
61
|
+
OnOpenRecord(request: WorkQueueRecordOpenRequest): void;
|
|
62
|
+
OnDeadLettersLoaded(event: {
|
|
63
|
+
Count: number;
|
|
64
|
+
Selected: number;
|
|
65
|
+
}): void;
|
|
66
|
+
OnPartitionsLoaded(event: {
|
|
67
|
+
Count: number;
|
|
68
|
+
Blocked: number;
|
|
69
|
+
}): void;
|
|
70
|
+
OnBindingsLoaded(event: {
|
|
71
|
+
Errors: number;
|
|
72
|
+
Warnings: number;
|
|
73
|
+
}): void;
|
|
74
|
+
/** A tab reports that replay/discard changed queue state: re-read stats so badges and totals catch up. */
|
|
75
|
+
OnQueueChanged(): void;
|
|
76
|
+
private buildTopology;
|
|
77
|
+
private refreshStats;
|
|
78
|
+
private startAutoRefresh;
|
|
79
|
+
private stopAutoRefresh;
|
|
80
|
+
private resolveCanOperate;
|
|
81
|
+
private applyQueryParams;
|
|
82
|
+
private applyUserState;
|
|
83
|
+
private emitStateChange;
|
|
84
|
+
private get subscriptionSnapshots();
|
|
85
|
+
private publishAgentContext;
|
|
86
|
+
private syncAgentToolsForTab;
|
|
87
|
+
private buildCommonTools;
|
|
88
|
+
private buildFilterPartitionsTool;
|
|
89
|
+
private selectSubscriptionTool;
|
|
90
|
+
private resolveSubscriptionParam;
|
|
91
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<WorkQueueDashboardComponent, never>;
|
|
92
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<WorkQueueDashboardComponent, "mj-work-queue-dashboard", never, {}, {}, never, never, false, never>;
|
|
93
|
+
}
|
|
94
|
+
//# sourceMappingURL=work-queue-dashboard.component.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"work-queue-dashboard.component.d.ts","sourceRoot":"","sources":["../../src/WorkQueue/work-queue-dashboard.component.ts"],"names":[],"mappings":"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"}
|