@miragon/pulse-analytics-connector 0.0.0-stage → 0.21.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/LICENSE +21 -0
- package/README.md +87 -2
- package/dist/bpmn-name-lookup.d.ts +72 -0
- package/dist/bpmn-name-lookup.d.ts.map +1 -0
- package/dist/bpmn-name-lookup.js +123 -0
- package/dist/bpmn-name-lookup.js.map +1 -0
- package/dist/bpmn-name-lookup.test.d.ts +2 -0
- package/dist/bpmn-name-lookup.test.d.ts.map +1 -0
- package/dist/bpmn-name-lookup.test.js +287 -0
- package/dist/bpmn-name-lookup.test.js.map +1 -0
- package/dist/bpmn-names.d.ts +38 -0
- package/dist/bpmn-names.d.ts.map +1 -0
- package/dist/bpmn-names.js +22 -0
- package/dist/bpmn-names.js.map +1 -0
- package/dist/brand-gates.test.d.ts +2 -0
- package/dist/brand-gates.test.d.ts.map +1 -0
- package/dist/brand-gates.test.js +58 -0
- package/dist/brand-gates.test.js.map +1 -0
- package/dist/builder-texts.d.ts +4 -0
- package/dist/builder-texts.d.ts.map +1 -0
- package/dist/builder-texts.js +14 -0
- package/dist/builder-texts.js.map +1 -0
- package/dist/builder-texts.test.d.ts +2 -0
- package/dist/builder-texts.test.d.ts.map +1 -0
- package/dist/builder-texts.test.js +32 -0
- package/dist/builder-texts.test.js.map +1 -0
- package/dist/definition.d.ts +3 -0
- package/dist/definition.d.ts.map +1 -0
- package/dist/definition.js +151 -0
- package/dist/definition.js.map +1 -0
- package/dist/engine-ids.d.ts +42 -0
- package/dist/engine-ids.d.ts.map +1 -0
- package/dist/engine-ids.js +50 -0
- package/dist/engine-ids.js.map +1 -0
- package/dist/engine-scope.test.d.ts +2 -0
- package/dist/engine-scope.test.d.ts.map +1 -0
- package/dist/engine-scope.test.js +260 -0
- package/dist/engine-scope.test.js.map +1 -0
- package/dist/heatmap-data.d.ts +15 -0
- package/dist/heatmap-data.d.ts.map +1 -0
- package/dist/heatmap-data.js +2 -0
- package/dist/heatmap-data.js.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -0
- package/dist/instructions.d.ts +8 -0
- package/dist/instructions.d.ts.map +1 -0
- package/dist/instructions.js +33 -0
- package/dist/instructions.js.map +1 -0
- package/dist/messages/de.ask-ai.d.ts +9 -0
- package/dist/messages/de.ask-ai.d.ts.map +1 -0
- package/dist/messages/de.ask-ai.js +18 -0
- package/dist/messages/de.ask-ai.js.map +1 -0
- package/dist/messages/de.builder.d.ts +12 -0
- package/dist/messages/de.builder.d.ts.map +1 -0
- package/dist/messages/de.builder.js +53 -0
- package/dist/messages/de.builder.js.map +1 -0
- package/dist/messages/de.server.d.ts +8 -0
- package/dist/messages/de.server.d.ts.map +1 -0
- package/dist/messages/de.server.js +26 -0
- package/dist/messages/de.server.js.map +1 -0
- package/dist/messages/de.sweep.d.ts +10 -0
- package/dist/messages/de.sweep.d.ts.map +1 -0
- package/dist/messages/de.sweep.js +203 -0
- package/dist/messages/de.sweep.js.map +1 -0
- package/dist/messages/en.ask-ai.d.ts +25 -0
- package/dist/messages/en.ask-ai.d.ts.map +1 -0
- package/dist/messages/en.ask-ai.js +24 -0
- package/dist/messages/en.ask-ai.js.map +1 -0
- package/dist/messages/en.builder.d.ts +12 -0
- package/dist/messages/en.builder.d.ts.map +1 -0
- package/dist/messages/en.builder.js +53 -0
- package/dist/messages/en.builder.js.map +1 -0
- package/dist/messages/en.server.d.ts +8 -0
- package/dist/messages/en.server.d.ts.map +1 -0
- package/dist/messages/en.server.js +26 -0
- package/dist/messages/en.server.js.map +1 -0
- package/dist/messages/en.sweep.d.ts +11 -0
- package/dist/messages/en.sweep.d.ts.map +1 -0
- package/dist/messages/en.sweep.js +204 -0
- package/dist/messages/en.sweep.js.map +1 -0
- package/dist/messages/glossary.d.ts +26 -0
- package/dist/messages/glossary.d.ts.map +1 -0
- package/dist/messages/glossary.js +37 -0
- package/dist/messages/glossary.js.map +1 -0
- package/dist/messages/glossary.test.d.ts +2 -0
- package/dist/messages/glossary.test.d.ts.map +1 -0
- package/dist/messages/glossary.test.js +109 -0
- package/dist/messages/glossary.test.js.map +1 -0
- package/dist/messages/index.d.ts +12 -0
- package/dist/messages/index.d.ts.map +1 -0
- package/dist/messages/index.js +23 -0
- package/dist/messages/index.js.map +1 -0
- package/dist/messages/plural.d.ts +10 -0
- package/dist/messages/plural.d.ts.map +1 -0
- package/dist/messages/plural.js +17 -0
- package/dist/messages/plural.js.map +1 -0
- package/dist/messages/use-t.d.ts +10 -0
- package/dist/messages/use-t.d.ts.map +1 -0
- package/dist/messages/use-t.js +10 -0
- package/dist/messages/use-t.js.map +1 -0
- package/dist/module.d.ts +48 -0
- package/dist/module.d.ts.map +1 -0
- package/dist/module.js +174 -0
- package/dist/module.js.map +1 -0
- package/dist/module.test.d.ts +2 -0
- package/dist/module.test.d.ts.map +1 -0
- package/dist/module.test.js +230 -0
- package/dist/module.test.js.map +1 -0
- package/dist/named-views.d.ts +27 -0
- package/dist/named-views.d.ts.map +1 -0
- package/dist/named-views.js +73 -0
- package/dist/named-views.js.map +1 -0
- package/dist/named-views.test.d.ts +2 -0
- package/dist/named-views.test.d.ts.map +1 -0
- package/dist/named-views.test.js +110 -0
- package/dist/named-views.test.js.map +1 -0
- package/dist/plugin.d.ts +44 -0
- package/dist/plugin.d.ts.map +1 -0
- package/dist/plugin.js +52 -0
- package/dist/plugin.js.map +1 -0
- package/dist/prometheus-wiring.test.d.ts +2 -0
- package/dist/prometheus-wiring.test.d.ts.map +1 -0
- package/dist/prometheus-wiring.test.js +142 -0
- package/dist/prometheus-wiring.test.js.map +1 -0
- package/dist/server-locale.d.ts +48 -0
- package/dist/server-locale.d.ts.map +1 -0
- package/dist/server-locale.js +33 -0
- package/dist/server-locale.js.map +1 -0
- package/dist/settings-tools.d.ts +23 -0
- package/dist/settings-tools.d.ts.map +1 -0
- package/dist/settings-tools.js +100 -0
- package/dist/settings-tools.js.map +1 -0
- package/dist/settings.d.ts +77 -0
- package/dist/settings.d.ts.map +1 -0
- package/dist/settings.js +99 -0
- package/dist/settings.js.map +1 -0
- package/dist/settings.test.d.ts +2 -0
- package/dist/settings.test.d.ts.map +1 -0
- package/dist/settings.test.js +299 -0
- package/dist/settings.test.js.map +1 -0
- package/dist/steps/app-config.d.ts +30 -0
- package/dist/steps/app-config.d.ts.map +1 -0
- package/dist/steps/app-config.js +46 -0
- package/dist/steps/app-config.js.map +1 -0
- package/dist/steps/dashboard.d.ts +12 -0
- package/dist/steps/dashboard.d.ts.map +1 -0
- package/dist/steps/dashboard.js +58 -0
- package/dist/steps/dashboard.js.map +1 -0
- package/dist/steps/failure-dashboard.d.ts +10 -0
- package/dist/steps/failure-dashboard.d.ts.map +1 -0
- package/dist/steps/failure-dashboard.js +32 -0
- package/dist/steps/failure-dashboard.js.map +1 -0
- package/dist/steps/index.d.ts +3 -0
- package/dist/steps/index.d.ts.map +1 -0
- package/dist/steps/index.js +3 -0
- package/dist/steps/index.js.map +1 -0
- package/dist/steps/steps.test.d.ts +2 -0
- package/dist/steps/steps.test.d.ts.map +1 -0
- package/dist/steps/steps.test.js +153 -0
- package/dist/steps/steps.test.js.map +1 -0
- package/dist/tool-names.d.ts +13 -0
- package/dist/tool-names.d.ts.map +1 -0
- package/dist/tool-names.js +27 -0
- package/dist/tool-names.js.map +1 -0
- package/dist/tools/cluster-compare.d.ts +8 -0
- package/dist/tools/cluster-compare.d.ts.map +1 -0
- package/dist/tools/cluster-compare.js +17 -0
- package/dist/tools/cluster-compare.js.map +1 -0
- package/dist/tools/element.d.ts +8 -0
- package/dist/tools/element.d.ts.map +1 -0
- package/dist/tools/element.js +25 -0
- package/dist/tools/element.js.map +1 -0
- package/dist/tools/engine-compare.d.ts +8 -0
- package/dist/tools/engine-compare.d.ts.map +1 -0
- package/dist/tools/engine-compare.js +18 -0
- package/dist/tools/engine-compare.js.map +1 -0
- package/dist/tools/engine-compare.test.d.ts +2 -0
- package/dist/tools/engine-compare.test.d.ts.map +1 -0
- package/dist/tools/engine-compare.test.js +166 -0
- package/dist/tools/engine-compare.test.js.map +1 -0
- package/dist/tools/engine-landscape.d.ts +7 -0
- package/dist/tools/engine-landscape.d.ts.map +1 -0
- package/dist/tools/engine-landscape.js +13 -0
- package/dist/tools/engine-landscape.js.map +1 -0
- package/dist/tools/engine-landscape.test.d.ts +2 -0
- package/dist/tools/engine-landscape.test.d.ts.map +1 -0
- package/dist/tools/engine-landscape.test.js +110 -0
- package/dist/tools/engine-landscape.test.js.map +1 -0
- package/dist/tools/failures.d.ts +7 -0
- package/dist/tools/failures.d.ts.map +1 -0
- package/dist/tools/failures.js +13 -0
- package/dist/tools/failures.js.map +1 -0
- package/dist/tools/health.d.ts +7 -0
- package/dist/tools/health.d.ts.map +1 -0
- package/dist/tools/health.js +23 -0
- package/dist/tools/health.js.map +1 -0
- package/dist/tools/health.test.d.ts +2 -0
- package/dist/tools/health.test.d.ts.map +1 -0
- package/dist/tools/health.test.js +119 -0
- package/dist/tools/health.test.js.map +1 -0
- package/dist/tools/index.d.ts +18 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +35 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/performance.d.ts +8 -0
- package/dist/tools/performance.d.ts.map +1 -0
- package/dist/tools/performance.js +25 -0
- package/dist/tools/performance.js.map +1 -0
- package/dist/tools/performance.test.d.ts +2 -0
- package/dist/tools/performance.test.d.ts.map +1 -0
- package/dist/tools/performance.test.js +176 -0
- package/dist/tools/performance.test.js.map +1 -0
- package/dist/tools/version-compare.d.ts +8 -0
- package/dist/tools/version-compare.d.ts.map +1 -0
- package/dist/tools/version-compare.js +17 -0
- package/dist/tools/version-compare.js.map +1 -0
- package/dist/tools/version-compare.test.d.ts +2 -0
- package/dist/tools/version-compare.test.d.ts.map +1 -0
- package/dist/tools/version-compare.test.js +82 -0
- package/dist/tools/version-compare.test.js.map +1 -0
- package/dist/toolsets.d.ts +17 -0
- package/dist/toolsets.d.ts.map +1 -0
- package/dist/toolsets.js +47 -0
- package/dist/toolsets.js.map +1 -0
- package/dist/toolsets.test.d.ts +2 -0
- package/dist/toolsets.test.d.ts.map +1 -0
- package/dist/toolsets.test.js +91 -0
- package/dist/toolsets.test.js.map +1 -0
- package/dist/view-title.test.d.ts +2 -0
- package/dist/view-title.test.d.ts.map +1 -0
- package/dist/view-title.test.js +91 -0
- package/dist/view-title.test.js.map +1 -0
- package/dist/widget-tools/comparisons.d.ts +13 -0
- package/dist/widget-tools/comparisons.d.ts.map +1 -0
- package/dist/widget-tools/comparisons.js +177 -0
- package/dist/widget-tools/comparisons.js.map +1 -0
- package/dist/widget-tools/comparisons.test.d.ts +2 -0
- package/dist/widget-tools/comparisons.test.d.ts.map +1 -0
- package/dist/widget-tools/comparisons.test.js +123 -0
- package/dist/widget-tools/comparisons.test.js.map +1 -0
- package/dist/widget-tools/shared.d.ts +36 -0
- package/dist/widget-tools/shared.d.ts.map +1 -0
- package/dist/widget-tools/shared.js +39 -0
- package/dist/widget-tools/shared.js.map +1 -0
- package/dist/widget-tools.d.ts +25 -0
- package/dist/widget-tools.d.ts.map +1 -0
- package/dist/widget-tools.js +269 -0
- package/dist/widget-tools.js.map +1 -0
- package/dist/widget-tools.test.d.ts +2 -0
- package/dist/widget-tools.test.d.ts.map +1 -0
- package/dist/widget-tools.test.js +272 -0
- package/dist/widget-tools.test.js.map +1 -0
- package/package.json +91 -3
- package/src/bpmn-name-lookup.test.ts +333 -0
- package/src/bpmn-name-lookup.ts +197 -0
- package/src/bpmn-names.ts +51 -0
- package/src/brand-gates.test.ts +69 -0
- package/src/builder-texts.test.ts +40 -0
- package/src/builder-texts.ts +15 -0
- package/src/definition.ts +181 -0
- package/src/engine-ids.ts +85 -0
- package/src/engine-scope.test.ts +324 -0
- package/src/heatmap-data.ts +14 -0
- package/src/index.ts +4 -0
- package/src/instructions.ts +33 -0
- package/src/messages/GLOSSARY.md +88 -0
- package/src/messages/de.ask-ai.ts +28 -0
- package/src/messages/de.builder.ts +77 -0
- package/src/messages/de.server.ts +39 -0
- package/src/messages/de.sweep.ts +244 -0
- package/src/messages/en.ask-ai.ts +34 -0
- package/src/messages/en.builder.ts +76 -0
- package/src/messages/en.server.ts +39 -0
- package/src/messages/en.sweep.ts +240 -0
- package/src/messages/glossary.test.ts +122 -0
- package/src/messages/glossary.ts +62 -0
- package/src/messages/index.ts +24 -0
- package/src/messages/plural.ts +18 -0
- package/src/messages/use-t.ts +12 -0
- package/src/module.test.ts +319 -0
- package/src/module.ts +211 -0
- package/src/named-views.test.ts +141 -0
- package/src/named-views.ts +97 -0
- package/src/plugin.ts +94 -0
- package/src/prometheus-wiring.test.ts +174 -0
- package/src/server-locale.ts +59 -0
- package/src/settings-tools.ts +170 -0
- package/src/settings.test.ts +402 -0
- package/src/settings.ts +114 -0
- package/src/steps/app-config.ts +75 -0
- package/src/steps/dashboard.ts +73 -0
- package/src/steps/failure-dashboard.ts +38 -0
- package/src/steps/index.ts +2 -0
- package/src/steps/steps.test.ts +216 -0
- package/src/tool-names.ts +26 -0
- package/src/tools/cluster-compare.ts +28 -0
- package/src/tools/element.ts +35 -0
- package/src/tools/engine-compare.test.ts +210 -0
- package/src/tools/engine-compare.ts +30 -0
- package/src/tools/engine-landscape.test.ts +138 -0
- package/src/tools/engine-landscape.ts +21 -0
- package/src/tools/failures.ts +19 -0
- package/src/tools/health.test.ts +156 -0
- package/src/tools/health.ts +29 -0
- package/src/tools/index.ts +44 -0
- package/src/tools/performance.test.ts +210 -0
- package/src/tools/performance.ts +38 -0
- package/src/tools/version-compare.test.ts +97 -0
- package/src/tools/version-compare.ts +28 -0
- package/src/toolsets.test.ts +107 -0
- package/src/toolsets.ts +56 -0
- package/src/view-title.test.ts +123 -0
- package/src/widget-tools/comparisons.test.ts +170 -0
- package/src/widget-tools/comparisons.ts +229 -0
- package/src/widget-tools/shared.ts +67 -0
- package/src/widget-tools.test.ts +306 -0
- package/src/widget-tools.ts +375 -0
- package/src/widgets/analytics-dashboard/activity-bottleneck-table.tsx +179 -0
- package/src/widgets/analytics-dashboard/definition-breakdown.tsx +108 -0
- package/src/widgets/analytics-dashboard/execution-performance-kpi.tsx +94 -0
- package/src/widgets/analytics-dashboard/execution-summary-kpi.tsx +122 -0
- package/src/widgets/analytics-dashboard/lib.ts +43 -0
- package/src/widgets/bpmn-heatmap.test.tsx +75 -0
- package/src/widgets/bpmn-heatmap.tsx +127 -0
- package/src/widgets/catalogue-sync.test.ts +16 -0
- package/src/widgets/cluster-compare.tsx +148 -0
- package/src/widgets/comparison-shared.test.ts +237 -0
- package/src/widgets/comparison-shared.tsx +371 -0
- package/src/widgets/comparison-widgets.test.tsx +307 -0
- package/src/widgets/dashboard-widgets.test.tsx +397 -0
- package/src/widgets/engine-compare.tsx +87 -0
- package/src/widgets/engine-landscape.tsx +352 -0
- package/src/widgets/failure-dashboard/error-patterns-table.tsx +122 -0
- package/src/widgets/failure-dashboard/failure-rate-table.test.ts +80 -0
- package/src/widgets/failure-dashboard/failure-rate-table.tsx +170 -0
- package/src/widgets/failure-dashboard/lib.ts +32 -0
- package/src/widgets/failure-dashboard/summary-kpi.tsx +122 -0
- package/src/widgets/failure-landscape-widgets.test.tsx +393 -0
- package/src/widgets/figure.tsx +79 -0
- package/src/widgets/hand-off.test.ts +126 -0
- package/src/widgets/hand-off.ts +102 -0
- package/src/widgets/index.ts +124 -0
- package/src/widgets/model-descriptions.dashboard.test.ts +280 -0
- package/src/widgets/model-descriptions.test.ts +251 -0
- package/src/widgets/model-descriptions.ts +428 -0
- package/src/widgets/names.test.ts +32 -0
- package/src/widgets/names.ts +39 -0
- package/src/widgets/query-gate.test.tsx +57 -0
- package/src/widgets/query-gate.tsx +50 -0
- package/src/widgets/settings-section.test.tsx +174 -0
- package/src/widgets/settings-section.tsx +244 -0
- package/src/widgets/version-compare.test.ts +68 -0
- package/src/widgets/version-compare.tsx +96 -0
- package/src/widgets/view-meta.ts +18 -0
- package/src/widgets/widget-render.test-support.tsx +103 -0
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { describe, expect, it } from "vitest";
|
|
2
|
+
import { createInMemoryProfileStore } from "@miragon/pulse-widget-shell/server";
|
|
3
|
+
import { createEngineScope } from "./engine-ids.js";
|
|
4
|
+
import { registerSettingsTools } from "./settings-tools.js";
|
|
5
|
+
import { registerWidgetTools } from "./widget-tools.js";
|
|
6
|
+
/** Prometheus without samples: every view renders its empty state. */
|
|
7
|
+
const prometheus = { instant: () => Promise.resolve([]) };
|
|
8
|
+
/** The required arguments per show tool; the tool's own input schema fills in its defaults. */
|
|
9
|
+
const ARGS = {
|
|
10
|
+
analytics_show_bpmn_heatmap: { processDefinitionKey: "order" },
|
|
11
|
+
// Inside Prometheus' retention, with a post-deployment window to measure.
|
|
12
|
+
analytics_show_cluster_compare: {
|
|
13
|
+
deploymentTimestamp: new Date(Date.now() - 10 * 86_400_000).toISOString(),
|
|
14
|
+
},
|
|
15
|
+
analytics_show_version_compare: { processDefinitionKey: "order", versionA: 1, versionB: 2 },
|
|
16
|
+
analytics_show_engine_compare: {
|
|
17
|
+
processDefinitionKey: "order",
|
|
18
|
+
engineA: "prod-a",
|
|
19
|
+
engineB: "prod-b",
|
|
20
|
+
},
|
|
21
|
+
};
|
|
22
|
+
const callerCtx = (id) => ({ auth: { user: { id } } });
|
|
23
|
+
/** The show tools, each called the way the server does: arguments parsed by its input schema. */
|
|
24
|
+
async function showTools() {
|
|
25
|
+
const tools = new Map();
|
|
26
|
+
const server = {
|
|
27
|
+
tool: (definition, callback) => {
|
|
28
|
+
if (definition.view) {
|
|
29
|
+
tools.set(definition.name, (args, ctx) => callback(definition.inputSchema.parse(args), ctx));
|
|
30
|
+
}
|
|
31
|
+
},
|
|
32
|
+
};
|
|
33
|
+
const profileStore = createInMemoryProfileStore();
|
|
34
|
+
await profileStore.save("de-user", { language: "de" });
|
|
35
|
+
await profileStore.save("en-user", { language: "en" });
|
|
36
|
+
await profileStore.save("system-user", { language: "system" });
|
|
37
|
+
registerWidgetTools(server, prometheus, {
|
|
38
|
+
engineScope: createEngineScope(["prod-a", "prod-b"]),
|
|
39
|
+
profileStore,
|
|
40
|
+
});
|
|
41
|
+
registerSettingsTools(server, profileStore, "standard");
|
|
42
|
+
return tools;
|
|
43
|
+
}
|
|
44
|
+
/** Each show tool's view title for one caller; every show tool must render its view. */
|
|
45
|
+
async function titlesFor(tools, ctx) {
|
|
46
|
+
const titles = new Map();
|
|
47
|
+
for (const [name, call] of tools) {
|
|
48
|
+
const result = (await call(ARGS[name] ?? {}, ctx));
|
|
49
|
+
expect(result.isError, `${name}: ${JSON.stringify(result.content)}`).not.toBe(true);
|
|
50
|
+
expect(result.structuredContent?.layout, name).toBeTruthy();
|
|
51
|
+
titles.set(name, result.structuredContent?.title);
|
|
52
|
+
}
|
|
53
|
+
return titles;
|
|
54
|
+
}
|
|
55
|
+
describe("analytics show tools title their view only in a language the profile names", () => {
|
|
56
|
+
it("covers every analytics show tool (the sweep is not vacuous)", async () => {
|
|
57
|
+
expect([...(await showTools()).keys()].sort()).toEqual([
|
|
58
|
+
"analytics_show_bpmn_heatmap",
|
|
59
|
+
"analytics_show_cluster_compare",
|
|
60
|
+
"analytics_show_dashboard",
|
|
61
|
+
"analytics_show_engine_compare",
|
|
62
|
+
"analytics_show_engine_landscape",
|
|
63
|
+
"analytics_show_failure_dashboard",
|
|
64
|
+
"analytics_show_settings",
|
|
65
|
+
"analytics_show_version_compare",
|
|
66
|
+
]);
|
|
67
|
+
});
|
|
68
|
+
it("no title for an anonymous caller or one whose profile follows the host", async () => {
|
|
69
|
+
const tools = await showTools();
|
|
70
|
+
// `{}`: a handler ctx without a caller identity (no OAuth).
|
|
71
|
+
for (const ctx of [{}, callerCtx("system-user"), callerCtx("nobody-saved-yet")]) {
|
|
72
|
+
const titles = await titlesFor(tools, ctx);
|
|
73
|
+
expect(Object.fromEntries([...titles].filter(([, title]) => title !== undefined))).toEqual({});
|
|
74
|
+
}
|
|
75
|
+
});
|
|
76
|
+
it("a named language titles every view, each in that language", async () => {
|
|
77
|
+
const tools = await showTools();
|
|
78
|
+
const de = await titlesFor(tools, callerCtx("de-user"));
|
|
79
|
+
const en = await titlesFor(tools, callerCtx("en-user"));
|
|
80
|
+
for (const [name] of tools) {
|
|
81
|
+
expect(de.get(name), name).toEqual(expect.any(String));
|
|
82
|
+
expect(en.get(name), name).toEqual(expect.any(String));
|
|
83
|
+
expect(de.get(name), name).not.toBe(en.get(name));
|
|
84
|
+
}
|
|
85
|
+
expect(de.get("analytics_show_settings")).toBe("Analyse-Einstellungen");
|
|
86
|
+
expect(en.get("analytics_show_settings")).toBe("Analytics settings");
|
|
87
|
+
expect(de.get("analytics_show_dashboard")).toBe("Prozessanalyse");
|
|
88
|
+
expect(en.get("analytics_show_dashboard")).toBe("Process analytics");
|
|
89
|
+
});
|
|
90
|
+
});
|
|
91
|
+
//# sourceMappingURL=view-title.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"view-title.test.js","sourceRoot":"","sources":["../src/view-title.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { type AnalyticsWidgetToolsContext } from "./shared.js";
|
|
2
|
+
/**
|
|
3
|
+
* The comparison family plus the cross-engine landscape they hang off.
|
|
4
|
+
*
|
|
5
|
+
* The three compare views answer "did this get worse?" along one axis at a
|
|
6
|
+
* time — across a deployment (cluster), across two versions of a process
|
|
7
|
+
* (version), across two engines running the SAME process (engine). The
|
|
8
|
+
* landscape is deliberately not a fourth comparison: engines host different
|
|
9
|
+
* process mixes, so it reports what runs where plus mix-independent signals
|
|
10
|
+
* and names the definitions for which an engine comparison actually holds.
|
|
11
|
+
*/
|
|
12
|
+
export declare function registerComparisonWidgetTools(ctx: AnalyticsWidgetToolsContext): void;
|
|
13
|
+
//# sourceMappingURL=comparisons.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"comparisons.d.ts","sourceRoot":"","sources":["../../src/widget-tools/comparisons.ts"],"names":[],"mappings":"AAeA,OAAO,EAIL,KAAK,2BAA2B,EACjC,MAAM,aAAa,CAAA;AAEpB;;;;;;;;;GASG;AACH,wBAAgB,6BAA6B,CAAC,GAAG,EAAE,2BAA2B,QAoM7E"}
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
import { appOnly, buildDataFeedResult, buildSingleWidgetView, showToolBinding, withToolErrors, strictToolInput, } from "@miragon/pulse-widget-shell/server";
|
|
2
|
+
import { queries, schemas, withCallerSignal } from "@miragon/pulse-analytics-client";
|
|
3
|
+
import { ANALYTICS_ENGINE_LANDSCAPE_DATA } from "../tool-names.js";
|
|
4
|
+
import { localizeViewFor } from "../server-locale.js";
|
|
5
|
+
import { optionalMinBucketSize, settingsFor } from "../settings.js";
|
|
6
|
+
import { isFleetRequest, withEngineScope } from "../engine-ids.js";
|
|
7
|
+
import { namedLandscape } from "../named-views.js";
|
|
8
|
+
import { NO_NAMES } from "../bpmn-name-lookup.js";
|
|
9
|
+
import { compareDeltaSummary, engineScopeSummary, suppressedNote, } from "./shared.js";
|
|
10
|
+
/**
|
|
11
|
+
* The comparison family plus the cross-engine landscape they hang off.
|
|
12
|
+
*
|
|
13
|
+
* The three compare views answer "did this get worse?" along one axis at a
|
|
14
|
+
* time — across a deployment (cluster), across two versions of a process
|
|
15
|
+
* (version), across two engines running the SAME process (engine). The
|
|
16
|
+
* landscape is deliberately not a fourth comparison: engines host different
|
|
17
|
+
* process mixes, so it reports what runs where plus mix-independent signals
|
|
18
|
+
* and names the definitions for which an engine comparison actually holds.
|
|
19
|
+
*/
|
|
20
|
+
export function registerComparisonWidgetTools(ctx) {
|
|
21
|
+
const { server, ch, engineScope, profileStore } = ctx;
|
|
22
|
+
const namesFor = ctx.namesFor ?? NO_NAMES;
|
|
23
|
+
// --- Cluster Compare (Pre/Post deployment diff) ---
|
|
24
|
+
server.tool({
|
|
25
|
+
name: "analytics_show_cluster_compare",
|
|
26
|
+
title: "Pre/Post Deployment Comparison",
|
|
27
|
+
description: "Visualize before/after KPI deltas around a deployment timestamp. Windows are clamped to now and the retention (flagged `partial`; starts compare per day). Results are flagged `suppressed` when either window has fewer than minBucketSize started or completed instances.",
|
|
28
|
+
annotations: { readOnlyHint: true, idempotentHint: true, openWorldHint: true },
|
|
29
|
+
inputSchema: strictToolInput({
|
|
30
|
+
...schemas.clusterCompareInput.shape,
|
|
31
|
+
minBucketSize: optionalMinBucketSize,
|
|
32
|
+
}),
|
|
33
|
+
...showToolBinding("analytics_show_cluster_compare", "Pre/Post Deployment Comparison"),
|
|
34
|
+
}, withToolErrors(async (args, toolCtx) => {
|
|
35
|
+
const { t, title } = await localizeViewFor(profileStore, toolCtx);
|
|
36
|
+
const minBucketSize = args.minBucketSize ?? (await settingsFor(profileStore, toolCtx)).minBucketSize;
|
|
37
|
+
const data = await queries.clusterCompare(withCallerSignal(ch, toolCtx.signal), {
|
|
38
|
+
...withEngineScope(engineScope, args),
|
|
39
|
+
minBucketSize,
|
|
40
|
+
});
|
|
41
|
+
return buildSingleWidgetView({
|
|
42
|
+
widget: "analytics:cluster-compare",
|
|
43
|
+
app: "analytics",
|
|
44
|
+
dataType: "analytics:clusterCompare",
|
|
45
|
+
data,
|
|
46
|
+
// The view title in the language the profile names (the widget heading's
|
|
47
|
+
// own key); none with "system", where the heading names the view.
|
|
48
|
+
title: title("aClusterCompare.title"),
|
|
49
|
+
summary: t("aSum.clusterCompare", {
|
|
50
|
+
scope: data.processDefinitionKey
|
|
51
|
+
? t("aSum.scopeForProcess", { key: data.processDefinitionKey })
|
|
52
|
+
: "",
|
|
53
|
+
engines: engineScopeSummary(t, data.engines, isFleetRequest(args.engine)),
|
|
54
|
+
deploymentTimestamp: data.deploymentTimestamp,
|
|
55
|
+
before: data.windowDays.before,
|
|
56
|
+
after: data.windowDays.after,
|
|
57
|
+
partial: data.partial ? t("aSum.clusterComparePartial") : "",
|
|
58
|
+
delta: compareDeltaSummary(data.delta),
|
|
59
|
+
suppressed: suppressedNote(data.suppressed),
|
|
60
|
+
}),
|
|
61
|
+
});
|
|
62
|
+
}));
|
|
63
|
+
// --- Version Compare (v1 vs v2 of one process) ---
|
|
64
|
+
server.tool({
|
|
65
|
+
name: "analytics_show_version_compare",
|
|
66
|
+
title: "Process Version Comparison",
|
|
67
|
+
description: "Visualize KPI deltas between two deployed versions of the same processDefinitionKey within a shared time window. Instance counts and durations are exact per version; the incident rates show as n/a — the incident metric carries no version label, so they are not measured per version (never read them as zero). Results are flagged `suppressed` when either version has fewer than minBucketSize started or completed instances.",
|
|
68
|
+
annotations: { readOnlyHint: true, idempotentHint: true, openWorldHint: true },
|
|
69
|
+
inputSchema: strictToolInput({
|
|
70
|
+
...schemas.versionCompareInput.shape,
|
|
71
|
+
minBucketSize: optionalMinBucketSize,
|
|
72
|
+
}),
|
|
73
|
+
...showToolBinding("analytics_show_version_compare", "Process Version Comparison"),
|
|
74
|
+
}, withToolErrors(async (args, toolCtx) => {
|
|
75
|
+
const { t, title } = await localizeViewFor(profileStore, toolCtx);
|
|
76
|
+
const minBucketSize = args.minBucketSize ?? (await settingsFor(profileStore, toolCtx)).minBucketSize;
|
|
77
|
+
const data = await queries.versionCompare(withCallerSignal(ch, toolCtx.signal), {
|
|
78
|
+
...withEngineScope(engineScope, args),
|
|
79
|
+
minBucketSize,
|
|
80
|
+
});
|
|
81
|
+
return buildSingleWidgetView({
|
|
82
|
+
widget: "analytics:version-compare",
|
|
83
|
+
app: "analytics",
|
|
84
|
+
dataType: "analytics:versionCompare",
|
|
85
|
+
data,
|
|
86
|
+
title: title("aVersionCompare.title"),
|
|
87
|
+
summary: t("aSum.versionCompare", {
|
|
88
|
+
key: data.processDefinitionKey,
|
|
89
|
+
versionA: data.versionA,
|
|
90
|
+
versionB: data.versionB,
|
|
91
|
+
windowDays: data.windowDays,
|
|
92
|
+
engines: engineScopeSummary(t, data.engines, isFleetRequest(args.engine)),
|
|
93
|
+
delta: compareDeltaSummary(data.delta),
|
|
94
|
+
suppressed: suppressedNote(data.suppressed),
|
|
95
|
+
}),
|
|
96
|
+
});
|
|
97
|
+
}));
|
|
98
|
+
// --- Engine Compare (ONE process, engine A vs engine B) ---
|
|
99
|
+
server.tool({
|
|
100
|
+
name: "analytics_show_engine_compare",
|
|
101
|
+
title: "Engine Comparison",
|
|
102
|
+
description: "Visualize KPI deltas for ONE process definition as it runs on two configured CIB Seven engines (e.g. prod-a vs prod-b) over a shared time window. processDefinitionKey is required — engines host different process mixes, so an unscoped engine-vs-engine comparison would measure the mix, not the engines. Results are flagged `suppressed` when either engine has fewer than minBucketSize started or completed instances. For the cross-engine picture use analytics_show_engine_landscape.",
|
|
103
|
+
annotations: { readOnlyHint: true, idempotentHint: true, openWorldHint: true },
|
|
104
|
+
inputSchema: strictToolInput({
|
|
105
|
+
...schemas.engineCompareInput.shape,
|
|
106
|
+
minBucketSize: optionalMinBucketSize,
|
|
107
|
+
}),
|
|
108
|
+
...showToolBinding("analytics_show_engine_compare", "Engine Comparison"),
|
|
109
|
+
}, withToolErrors(async (args, toolCtx) => {
|
|
110
|
+
const { t, title } = await localizeViewFor(profileStore, toolCtx);
|
|
111
|
+
const minBucketSize = args.minBucketSize ?? (await settingsFor(profileStore, toolCtx)).minBucketSize;
|
|
112
|
+
const data = await queries.engineCompare(withCallerSignal(ch, toolCtx.signal), {
|
|
113
|
+
...args,
|
|
114
|
+
engineA: engineScope.require(args.engineA, "engineA"),
|
|
115
|
+
engineB: engineScope.require(args.engineB, "engineB"),
|
|
116
|
+
minBucketSize,
|
|
117
|
+
});
|
|
118
|
+
return buildSingleWidgetView({
|
|
119
|
+
widget: "analytics:engine-compare",
|
|
120
|
+
app: "analytics",
|
|
121
|
+
dataType: "analytics:engineCompare",
|
|
122
|
+
data,
|
|
123
|
+
title: title("aEngineCompare.title"),
|
|
124
|
+
summary: t("aSum.engineCompare", {
|
|
125
|
+
engineA: data.engineA,
|
|
126
|
+
engineB: data.engineB,
|
|
127
|
+
key: data.processDefinitionKey,
|
|
128
|
+
windowDays: data.windowDays,
|
|
129
|
+
delta: compareDeltaSummary(data.delta),
|
|
130
|
+
suppressed: suppressedNote(data.suppressed),
|
|
131
|
+
}),
|
|
132
|
+
});
|
|
133
|
+
}));
|
|
134
|
+
// --- Engine Landscape (cross-engine overview, NOT an engine ranking) ---
|
|
135
|
+
server.tool({
|
|
136
|
+
name: "analytics_show_engine_landscape",
|
|
137
|
+
title: "Cross-Engine Landscape",
|
|
138
|
+
description: "Show the cross-engine process landscape of the configured engines: which process definitions run on which engine, the absolute load per engine (running instances, open incidents, failed jobs) and the engine-owned job backlog. Counts, not rates — engines host different process mixes, so per-engine rates would measure the mix. Highlights the definitions deployed on several engines, the only sound targets for analytics_show_engine_compare.",
|
|
139
|
+
annotations: { readOnlyHint: true, idempotentHint: true, openWorldHint: true },
|
|
140
|
+
inputSchema: strictToolInput(schemas.engineLandscapeInput.shape),
|
|
141
|
+
...showToolBinding("analytics_show_engine_landscape", "Cross-Engine Landscape"),
|
|
142
|
+
}, withToolErrors(async (args, toolCtx) => {
|
|
143
|
+
const { t, title } = await localizeViewFor(profileStore, toolCtx);
|
|
144
|
+
const data = await namedLandscape(await queries.engineLandscape(withCallerSignal(ch, toolCtx.signal), withEngineScope(engineScope, args)), namesFor);
|
|
145
|
+
return buildSingleWidgetView({
|
|
146
|
+
widget: "analytics:engine-landscape",
|
|
147
|
+
app: "analytics",
|
|
148
|
+
dataType: "analytics:engineLandscape",
|
|
149
|
+
data,
|
|
150
|
+
title: title("aLandscape.heading"),
|
|
151
|
+
summary: t("aSum.engineLandscape", {
|
|
152
|
+
engineCount: data.totals.engineCount,
|
|
153
|
+
reportingEngineCount: data.totals.reportingEngineCount,
|
|
154
|
+
processKeyCount: data.totals.processKeyCount,
|
|
155
|
+
sharedProcessKeyCount: data.totals.sharedProcessKeyCount,
|
|
156
|
+
// Unknown while no engine reports: "n/a", never a plausible 0.
|
|
157
|
+
runningInstances: data.totals.runningInstances ?? "n/a",
|
|
158
|
+
openIncidents: data.totals.openIncidents ?? "n/a",
|
|
159
|
+
shared: data.sharedProcessKeys.length
|
|
160
|
+
? t("aSum.sharedKeys", { keys: data.sharedProcessKeys.join(", ") })
|
|
161
|
+
: "",
|
|
162
|
+
}),
|
|
163
|
+
});
|
|
164
|
+
}));
|
|
165
|
+
server.tool({
|
|
166
|
+
name: ANALYTICS_ENGINE_LANDSCAPE_DATA,
|
|
167
|
+
title: "Engine landscape data (internal)",
|
|
168
|
+
description: "Internal JSON feed (no UI) for the cross-engine landscape widget's self-fetch — also consumed by the camunda7 cockpit's cross-engine mode. Prefer analytics_show_engine_landscape.",
|
|
169
|
+
annotations: { readOnlyHint: true, idempotentHint: true, openWorldHint: true },
|
|
170
|
+
inputSchema: strictToolInput(schemas.engineLandscapeInput.shape),
|
|
171
|
+
...appOnly,
|
|
172
|
+
}, withToolErrors(async (args, toolCtx) => {
|
|
173
|
+
const data = await namedLandscape(await queries.engineLandscape(withCallerSignal(ch, toolCtx.signal), withEngineScope(engineScope, args)), namesFor);
|
|
174
|
+
return buildDataFeedResult({ ...data });
|
|
175
|
+
}));
|
|
176
|
+
}
|
|
177
|
+
//# sourceMappingURL=comparisons.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"comparisons.js","sourceRoot":"","sources":["../../src/widget-tools/comparisons.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"comparisons.test.d.ts","sourceRoot":"","sources":["../../src/widget-tools/comparisons.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
import { afterAll, beforeAll, describe, expect, it, vi } from "vitest";
|
|
2
|
+
import { createEngineScope } from "../engine-ids.js";
|
|
3
|
+
import { registerComparisonWidgetTools } from "./comparisons.js";
|
|
4
|
+
const engineScope = createEngineScope(["prod-a", "prod-b"]);
|
|
5
|
+
/** Registers the comparison widget tools on a stand-in server and returns their handlers. */
|
|
6
|
+
function handlers(ch) {
|
|
7
|
+
const byName = new Map();
|
|
8
|
+
const server = {
|
|
9
|
+
tool: (definition, handler) => {
|
|
10
|
+
byName.set(definition.name, handler);
|
|
11
|
+
},
|
|
12
|
+
};
|
|
13
|
+
registerComparisonWidgetTools({ server, ch, engineScope });
|
|
14
|
+
return byName;
|
|
15
|
+
}
|
|
16
|
+
const dataOf = (result) => result.structuredContent.context.stepData.result.data;
|
|
17
|
+
/** Every query answers 20, so instance counts and durations are equal across versions. */
|
|
18
|
+
const ch = { instant: () => Promise.resolve([{ metric: {}, value: 20 }]) };
|
|
19
|
+
describe("analytics_show_version_compare", () => {
|
|
20
|
+
it("summarises the measured incident-rate delta per version (#337)", async () => {
|
|
21
|
+
const show = handlers(ch).get("analytics_show_version_compare");
|
|
22
|
+
const result = await show({ processDefinitionKey: "order", versionA: 1, versionB: 2, windowDays: 14 }, {});
|
|
23
|
+
expect(result.content[0].text).toContain("incident rate 0pp");
|
|
24
|
+
const data = dataOf(result);
|
|
25
|
+
expect(data.kpis.map((k) => k.incident_rate_pct)).toEqual([100, 100]);
|
|
26
|
+
});
|
|
27
|
+
it("names the engines a fleet comparison aggregates (K33)", async () => {
|
|
28
|
+
const show = handlers(ch).get("analytics_show_version_compare");
|
|
29
|
+
const result = await show({ processDefinitionKey: "order", versionA: 1, versionB: 2, windowDays: 14 }, {});
|
|
30
|
+
expect(result.content[0].text).toContain('across all 2 configured engines ("prod-a", "prod-b"), aggregated');
|
|
31
|
+
expect(dataOf(result).engines).toEqual(["prod-a", "prod-b"]);
|
|
32
|
+
});
|
|
33
|
+
});
|
|
34
|
+
describe("analytics_show_cluster_compare — clamped windows (N79)", () => {
|
|
35
|
+
const NOW = Date.parse("2026-10-09T12:00:00Z");
|
|
36
|
+
beforeAll(() => {
|
|
37
|
+
vi.useFakeTimers({ toFake: ["Date"], now: NOW });
|
|
38
|
+
});
|
|
39
|
+
afterAll(() => {
|
|
40
|
+
vi.useRealTimers();
|
|
41
|
+
});
|
|
42
|
+
it("measures a recent deployment's post window up to now and says so", async () => {
|
|
43
|
+
const sent = [];
|
|
44
|
+
const recording = {
|
|
45
|
+
instant: (q) => {
|
|
46
|
+
sent.push(q);
|
|
47
|
+
return Promise.resolve([{ metric: {}, value: 20 }]);
|
|
48
|
+
},
|
|
49
|
+
};
|
|
50
|
+
const deployedTwoHoursAgo = new Date(NOW - 2 * 3_600_000).toISOString();
|
|
51
|
+
const result = await handlers(recording).get("analytics_show_cluster_compare")({ deploymentTimestamp: deployedTwoHoursAgo, windowBeforeDays: 7, windowAfterDays: 7 }, {});
|
|
52
|
+
// No `@` anchor beyond now — the post window is 2 h, not 7 d.
|
|
53
|
+
const anchors = sent.flatMap((q) => [...q.matchAll(/@ (\d+)/g)].map((m) => Number(m[1])));
|
|
54
|
+
expect(Math.max(...anchors)).toBe(NOW / 1000);
|
|
55
|
+
const data = dataOf(result);
|
|
56
|
+
expect(data).toMatchObject({
|
|
57
|
+
partial: true,
|
|
58
|
+
requestedWindowDays: { before: 7, after: 7 },
|
|
59
|
+
windowDays: { before: 7, after: 0.08 },
|
|
60
|
+
});
|
|
61
|
+
expect(result.content[0].text).toContain("measured -7d / +0.08d, partial");
|
|
62
|
+
// 20 starts in 2 h vs 20 in 7 d is a huge rise PER DAY — never a flat 0 %.
|
|
63
|
+
expect(data.delta.started_per_day_delta_pct).toBe(8300);
|
|
64
|
+
});
|
|
65
|
+
it("refuses a deployment in the future instead of comparing an empty window", async () => {
|
|
66
|
+
const result = await handlers(ch).get("analytics_show_cluster_compare")({ deploymentTimestamp: new Date(NOW + 3_600_000).toISOString() }, {});
|
|
67
|
+
expect(result.isError).toBe(true);
|
|
68
|
+
expect(result.content[0].text).toContain("deploymentTimestamp lies in the future");
|
|
69
|
+
});
|
|
70
|
+
});
|
|
71
|
+
describe("analytics_show_engine_compare — engine scope (N138)", () => {
|
|
72
|
+
it("refuses an engine outside the configured ones", async () => {
|
|
73
|
+
const result = await handlers(ch).get("analytics_show_engine_compare")({ processDefinitionKey: "order", engineA: "prod-a", engineB: "tenant-x" }, {});
|
|
74
|
+
expect(result.isError).toBe(true);
|
|
75
|
+
expect(result.content[0].text).toContain('Unknown engine "tenant-x" in engineB');
|
|
76
|
+
});
|
|
77
|
+
});
|
|
78
|
+
describe("view titles (U3): the toolbar speaks the caller's language", () => {
|
|
79
|
+
const CTX = { auth: { user: { id: "user-1" } } };
|
|
80
|
+
const titledHandlers = (language) => {
|
|
81
|
+
const byName = new Map();
|
|
82
|
+
const server = {
|
|
83
|
+
tool: (definition, handler) => {
|
|
84
|
+
byName.set(definition.name, handler);
|
|
85
|
+
},
|
|
86
|
+
};
|
|
87
|
+
const profileStore = { get: () => Promise.resolve({ language }) };
|
|
88
|
+
registerComparisonWidgetTools({ server, ch, engineScope, profileStore });
|
|
89
|
+
return byName;
|
|
90
|
+
};
|
|
91
|
+
const titleOf = (result) => result.structuredContent.title;
|
|
92
|
+
const CALLS = [
|
|
93
|
+
// Handlers called directly get no schema defaults: pass the window.
|
|
94
|
+
[
|
|
95
|
+
"analytics_show_version_compare",
|
|
96
|
+
{ processDefinitionKey: "o", versionA: 1, versionB: 2, windowDays: 14 },
|
|
97
|
+
],
|
|
98
|
+
[
|
|
99
|
+
"analytics_show_engine_compare",
|
|
100
|
+
{ processDefinitionKey: "o", engineA: "prod-a", engineB: "prod-b", windowDays: 14 },
|
|
101
|
+
],
|
|
102
|
+
["analytics_show_engine_landscape", {}],
|
|
103
|
+
];
|
|
104
|
+
const titles = async (language) => {
|
|
105
|
+
const tools = titledHandlers(language);
|
|
106
|
+
return Promise.all(CALLS.map(([name, args]) => tools.get(name)(args, CTX).then(titleOf)));
|
|
107
|
+
};
|
|
108
|
+
it("titles each comparison and the landscape in German", async () => {
|
|
109
|
+
expect(await titles("de")).toEqual([
|
|
110
|
+
"Versionsvergleich",
|
|
111
|
+
"Engine-Vergleich",
|
|
112
|
+
"Engine-übergreifende Übersicht",
|
|
113
|
+
]);
|
|
114
|
+
});
|
|
115
|
+
it("and in English, in sentence case", async () => {
|
|
116
|
+
expect(await titles("en")).toEqual([
|
|
117
|
+
"Version comparison",
|
|
118
|
+
"Engine comparison",
|
|
119
|
+
"Cross-engine landscape",
|
|
120
|
+
]);
|
|
121
|
+
});
|
|
122
|
+
});
|
|
123
|
+
//# sourceMappingURL=comparisons.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"comparisons.test.js","sourceRoot":"","sources":["../../src/widget-tools/comparisons.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import type { MCPServer } from "mcp-use";
|
|
2
|
+
import type { CompareKpiDelta, PrometheusClient } from "@miragon/pulse-analytics-client";
|
|
3
|
+
import type { ProfileSource, ServerT } from "../server-locale.js";
|
|
4
|
+
import type { AnalyticsEngineScope } from "../engine-ids.js";
|
|
5
|
+
import type { NameLookup } from "../bpmn-name-lookup.js";
|
|
6
|
+
/**
|
|
7
|
+
* Everything the per-domain widget-tool registrars need, handed over by the
|
|
8
|
+
* `widget-tools.ts` entry — mirrors camunda7's `WidgetToolsContext`. The
|
|
9
|
+
* `_meta`/view bindings are NOT passed through: each registration spreads
|
|
10
|
+
* `showToolBinding()` / `appOnly` from `@miragon/pulse-widget-shell/server`
|
|
11
|
+
* itself, so the dual-protocol contract stays in one place.
|
|
12
|
+
*/
|
|
13
|
+
export interface AnalyticsWidgetToolsContext {
|
|
14
|
+
server: MCPServer;
|
|
15
|
+
ch: PrometheusClient;
|
|
16
|
+
/** The server's configured engine ids — every query resolves `engine` through it. */
|
|
17
|
+
engineScope: AnalyticsEngineScope;
|
|
18
|
+
/** Locale for model-facing summaries plus the saved analytics defaults. */
|
|
19
|
+
profileStore?: ProfileSource;
|
|
20
|
+
/** The process names behind the ids a view lists (`bpmn-name-lookup.ts`); absent → ids. */
|
|
21
|
+
namesFor?: NameLookup;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Shared delta shape of the three compare queries, for one-line summaries. A
|
|
25
|
+
* null delta reads "n/a" — a side was not measured (nothing ended, nothing
|
|
26
|
+
* started) or the baseline is 0 — never a −100 %.
|
|
27
|
+
*/
|
|
28
|
+
export declare function compareDeltaSummary(delta: CompareKpiDelta): string;
|
|
29
|
+
export declare const suppressedNote: (suppressed: boolean) => "" | "; flagged suppressed (sample below minBucketSize)";
|
|
30
|
+
/**
|
|
31
|
+
* The engine scope of a result, for summaries: one engine by name, or — the
|
|
32
|
+
* deliberate fleet aggregate — every engine it adds up, so a fleet-wide figure
|
|
33
|
+
* never reads as one engine's. `fleet` = the caller named no engine.
|
|
34
|
+
*/
|
|
35
|
+
export declare function engineScopeSummary(t: ServerT, engines: readonly string[] | null, fleet: boolean): string;
|
|
36
|
+
//# sourceMappingURL=shared.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../src/widget-tools/shared.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AACxC,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAA;AACxF,OAAO,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AACjE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAA;AAC5D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAA;AAExD;;;;;;GAMG;AACH,MAAM,WAAW,2BAA2B;IAC1C,MAAM,EAAE,SAAS,CAAA;IACjB,EAAE,EAAE,gBAAgB,CAAA;IACpB,qFAAqF;IACrF,WAAW,EAAE,oBAAoB,CAAA;IACjC,2EAA2E;IAC3E,YAAY,CAAC,EAAE,aAAa,CAAA;IAC5B,2FAA2F;IAC3F,QAAQ,CAAC,EAAE,UAAU,CAAA;CACtB;AAQD;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,eAAe,GAAG,MAAM,CAUlE;AAED,eAAO,MAAM,cAAc,GAAI,YAAY,OAAO,6DACqB,CAAA;AAEvE;;;;GAIG;AACH,wBAAgB,kBAAkB,CAChC,CAAC,EAAE,OAAO,EACV,OAAO,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI,EACjC,KAAK,EAAE,OAAO,GACb,MAAM,CAOR"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/** Formats a nullable comparison delta ("+12.5%", "-3pp", "n/a") for summaries. */
|
|
2
|
+
function fmtDelta(value, unit) {
|
|
3
|
+
if (value == null)
|
|
4
|
+
return "n/a";
|
|
5
|
+
return `${value > 0 ? "+" : ""}${value}${unit}`;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Shared delta shape of the three compare queries, for one-line summaries. A
|
|
9
|
+
* null delta reads "n/a" — a side was not measured (nothing ended, nothing
|
|
10
|
+
* started) or the baseline is 0 — never a −100 %.
|
|
11
|
+
*/
|
|
12
|
+
export function compareDeltaSummary(delta) {
|
|
13
|
+
return [
|
|
14
|
+
`starts/day ${fmtDelta(delta.started_per_day_delta_pct, "%")}`,
|
|
15
|
+
`incident rate ${fmtDelta(delta.incident_rate_delta_pp, "pp")}`,
|
|
16
|
+
...(delta.element_incident_rate_delta_pp === null
|
|
17
|
+
? []
|
|
18
|
+
: [`element incident rate ${fmtDelta(delta.element_incident_rate_delta_pp, "pp")}`]),
|
|
19
|
+
`avg duration ${fmtDelta(delta.avg_duration_delta_pct, "%")}`,
|
|
20
|
+
`p95 ${fmtDelta(delta.p95_duration_delta_pct, "%")}`,
|
|
21
|
+
].join(", ");
|
|
22
|
+
}
|
|
23
|
+
export const suppressedNote = (suppressed) => suppressed ? "; flagged suppressed (sample below minBucketSize)" : "";
|
|
24
|
+
/**
|
|
25
|
+
* The engine scope of a result, for summaries: one engine by name, or — the
|
|
26
|
+
* deliberate fleet aggregate — every engine it adds up, so a fleet-wide figure
|
|
27
|
+
* never reads as one engine's. `fleet` = the caller named no engine.
|
|
28
|
+
*/
|
|
29
|
+
export function engineScopeSummary(t, engines, fleet) {
|
|
30
|
+
if (!engines || engines.length === 0)
|
|
31
|
+
return "";
|
|
32
|
+
const ids = engines.map((id) => `"${id}"`).join(", ");
|
|
33
|
+
if (fleet)
|
|
34
|
+
return t("aSum.engineScopeFleet", { count: engines.length, ids });
|
|
35
|
+
return engines.length === 1
|
|
36
|
+
? t("aSum.engineScopeOne", { id: engines[0] })
|
|
37
|
+
: t("aSum.engineScopeSubset", { ids });
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=shared.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared.js","sourceRoot":"","sources":["../../src/widget-tools/shared.ts"],"names":[],"mappings":"AAwBA,mFAAmF;AACnF,SAAS,QAAQ,CAAC,KAAoB,EAAE,IAAY;IAClD,IAAI,KAAK,IAAI,IAAI;QAAE,OAAO,KAAK,CAAA;IAC/B,OAAO,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,GAAG,IAAI,EAAE,CAAA;AACjD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CAAC,KAAsB;IACxD,OAAO;QACL,cAAc,QAAQ,CAAC,KAAK,CAAC,yBAAyB,EAAE,GAAG,CAAC,EAAE;QAC9D,iBAAiB,QAAQ,CAAC,KAAK,CAAC,sBAAsB,EAAE,IAAI,CAAC,EAAE;QAC/D,GAAG,CAAC,KAAK,CAAC,8BAA8B,KAAK,IAAI;YAC/C,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC,CAAC,yBAAyB,QAAQ,CAAC,KAAK,CAAC,8BAA8B,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;QACtF,gBAAgB,QAAQ,CAAC,KAAK,CAAC,sBAAsB,EAAE,GAAG,CAAC,EAAE;QAC7D,OAAO,QAAQ,CAAC,KAAK,CAAC,sBAAsB,EAAE,GAAG,CAAC,EAAE;KACrD,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACd,CAAC;AAED,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,UAAmB,EAAE,EAAE,CACpD,UAAU,CAAC,CAAC,CAAC,mDAAmD,CAAC,CAAC,CAAC,EAAE,CAAA;AAEvE;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAChC,CAAU,EACV,OAAiC,EACjC,KAAc;IAEd,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAA;IAC/C,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACrD,IAAI,KAAK;QAAE,OAAO,CAAC,CAAC,uBAAuB,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,CAAA;IAC5E,OAAO,OAAO,CAAC,MAAM,KAAK,CAAC;QACzB,CAAC,CAAC,CAAC,CAAC,qBAAqB,EAAE,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9C,CAAC,CAAC,CAAC,CAAC,wBAAwB,EAAE,EAAE,GAAG,EAAE,CAAC,CAAA;AAC1C,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { MCPServer } from "mcp-use";
|
|
2
|
+
import { type PrometheusClient } from "@miragon/pulse-analytics-client";
|
|
3
|
+
import { type ProfileSource } from "./server-locale.js";
|
|
4
|
+
import { type AnalyticsEngineScope } from "./engine-ids.js";
|
|
5
|
+
import { type FetchBpmnXml, type NameLookup } from "./bpmn-name-lookup.js";
|
|
6
|
+
export type { FetchBpmnXml } from "./bpmn-name-lookup.js";
|
|
7
|
+
export interface AnalyticsWidgetToolsOptions {
|
|
8
|
+
/** The server's configured engine ids — every query resolves `engine` through it. */
|
|
9
|
+
engineScope: AnalyticsEngineScope;
|
|
10
|
+
/** Used by the BPMN heatmap to fetch the diagram XML. Absent → non-diagram fallback. */
|
|
11
|
+
fetchBpmnXml?: FetchBpmnXml;
|
|
12
|
+
/**
|
|
13
|
+
* The process and element names behind the ids the dashboards list
|
|
14
|
+
* (`createNameLookup` over the same BPMN lookup). Absent → the ids.
|
|
15
|
+
*/
|
|
16
|
+
namesFor?: NameLookup;
|
|
17
|
+
/**
|
|
18
|
+
* Profile store: locale for model-facing summaries plus the caller's saved
|
|
19
|
+
* analytics defaults (`modules.analytics`) — the "explicit arg > saved
|
|
20
|
+
* setting > schema default" resolution for `period`/`minBucketSize`.
|
|
21
|
+
*/
|
|
22
|
+
profileStore?: ProfileSource;
|
|
23
|
+
}
|
|
24
|
+
export declare function registerWidgetTools(server: MCPServer, ch: PrometheusClient, options: AnalyticsWidgetToolsOptions): void;
|
|
25
|
+
//# sourceMappingURL=widget-tools.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"widget-tools.d.ts","sourceRoot":"","sources":["../src/widget-tools.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AAUxC,OAAO,EAKL,KAAK,gBAAgB,EACtB,MAAM,iCAAiC,CAAA;AAOxC,OAAO,EAAmB,KAAK,aAAa,EAAgB,MAAM,oBAAoB,CAAA;AAItF,OAAO,EAAmC,KAAK,oBAAoB,EAAE,MAAM,iBAAiB,CAAA;AAE5F,OAAO,EAAY,KAAK,YAAY,EAAE,KAAK,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAGpF,YAAY,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AAEzD,MAAM,WAAW,2BAA2B;IAC1C,qFAAqF;IACrF,WAAW,EAAE,oBAAoB,CAAA;IACjC,wFAAwF;IACxF,YAAY,CAAC,EAAE,YAAY,CAAA;IAC3B;;;OAGG;IACH,QAAQ,CAAC,EAAE,UAAU,CAAA;IACrB;;;;OAIG;IACH,YAAY,CAAC,EAAE,aAAa,CAAA;CAC7B;AAwCD,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,SAAS,EACjB,EAAE,EAAE,gBAAgB,EACpB,OAAO,EAAE,2BAA2B,QAyRrC"}
|