@miragon/pulse-analytics-connector 0.0.0-bootstrap.0 → 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 +86 -3
- 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 -5
- 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,58 @@
|
|
|
1
|
+
import { PERIODS, queries } from "@miragon/pulse-analytics-client";
|
|
2
|
+
import { analyticsSettingsSchema, settingsFor } from "../settings.js";
|
|
3
|
+
import { NO_NAMES } from "../bpmn-name-lookup.js";
|
|
4
|
+
import { namedDashboard } from "../named-views.js";
|
|
5
|
+
import { ENGINE_KEY_DECLARATION, stepEngines, stepPeriod, stepProcessKey, } from "./app-config.js";
|
|
6
|
+
import { builderText } from "../builder-texts.js";
|
|
7
|
+
/** The period a caller without a saved default gets — the settings schema's default. */
|
|
8
|
+
const MODULE_DEFAULT_PERIOD = analyticsSettingsSchema.shape.defaultPeriod.parse(undefined);
|
|
9
|
+
/**
|
|
10
|
+
* Loads the dashboard figures from Prometheus — window flows plus the live
|
|
11
|
+
* state, the same `dashboardData` as `analytics_show_dashboard`. Consumed by
|
|
12
|
+
* `analytics:dashboard`. Reads optional filter keys:
|
|
13
|
+
* - `analytics:processDefinitionKey`
|
|
14
|
+
* - `analytics:period` (1d | 3d | 7d | 14d | 30d; omitted = the caller's saved default)
|
|
15
|
+
* - `analytics:engine` (configured engine id(s); omitted = all of them)
|
|
16
|
+
*/
|
|
17
|
+
export const loadDashboardStep = {
|
|
18
|
+
id: "analytics:load-dashboard",
|
|
19
|
+
...builderText("step.load-dashboard"),
|
|
20
|
+
description: "Process metrics: what happened within a time window (instances started/completed, incidents created/resolved, durations of the instances that ended) plus the live state right now (instances running, incidents open), per process definition and per (process, activity). Powers the four dashboard widgets (execution-summary-kpi, execution-performance-kpi, process-definition-breakdown, activity-bottleneck-table).",
|
|
21
|
+
dataType: "analytics:dashboard",
|
|
22
|
+
requires: [],
|
|
23
|
+
optionalKeys: [
|
|
24
|
+
{
|
|
25
|
+
key: "analytics:processDefinitionKey",
|
|
26
|
+
description: "Scope the dashboard to a single process definition (e.g. 'miraveloLeasing'). When omitted, all processes are aggregated.",
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
key: "analytics:period",
|
|
30
|
+
description: `Time window. When omitted, the caller's saved analytics default (else '${MODULE_DEFAULT_PERIOD}').`,
|
|
31
|
+
enum: [...PERIODS],
|
|
32
|
+
},
|
|
33
|
+
ENGINE_KEY_DECLARATION,
|
|
34
|
+
],
|
|
35
|
+
produces: ["analytics:dashboardData"],
|
|
36
|
+
execute: async (context, appConfig) => {
|
|
37
|
+
// Every key is checked before the first query is sent.
|
|
38
|
+
const processDefinitionKey = stepProcessKey(context.keys);
|
|
39
|
+
const engine = stepEngines(context.keys, appConfig.engineScope);
|
|
40
|
+
const period = await stepPeriod(context.keys, appConfig.profileStore);
|
|
41
|
+
// The floor for judging the incident rate against the previous period:
|
|
42
|
+
// the caller's saved minBucketSize, like the tools'.
|
|
43
|
+
const { minBucketSize } = await settingsFor(appConfig.profileStore);
|
|
44
|
+
const data = await namedDashboard(await queries.dashboardData(appConfig.client, {
|
|
45
|
+
processDefinitionKey,
|
|
46
|
+
period,
|
|
47
|
+
engine,
|
|
48
|
+
minBucketSize,
|
|
49
|
+
}), appConfig.namesFor ?? NO_NAMES);
|
|
50
|
+
return {
|
|
51
|
+
data,
|
|
52
|
+
keys: { "analytics:dashboardData": data },
|
|
53
|
+
_app: "analytics",
|
|
54
|
+
_step: "load-dashboard",
|
|
55
|
+
};
|
|
56
|
+
},
|
|
57
|
+
};
|
|
58
|
+
//# sourceMappingURL=dashboard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dashboard.js","sourceRoot":"","sources":["../../src/steps/dashboard.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,iCAAiC,CAAA;AAClE,OAAO,EAAE,uBAAuB,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AACrE,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAA;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAClD,OAAO,EACL,sBAAsB,EACtB,WAAW,EACX,UAAU,EACV,cAAc,GAEf,MAAM,iBAAiB,CAAA;AACxB,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AAEjD,wFAAwF;AACxF,MAAM,qBAAqB,GAAG,uBAAuB,CAAC,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,SAAS,CAAC,CAAA;AAE1F;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAA+C;IAC3E,EAAE,EAAE,0BAA0B;IAC9B,GAAG,WAAW,CAAC,qBAAqB,CAAC;IACrC,WAAW,EACT,4ZAA4Z;IAC9Z,QAAQ,EAAE,qBAAqB;IAC/B,QAAQ,EAAE,EAAE;IACZ,YAAY,EAAE;QACZ;YACE,GAAG,EAAE,gCAAgC;YACrC,WAAW,EACT,0HAA0H;SAC7H;QACD;YACE,GAAG,EAAE,kBAAkB;YACvB,WAAW,EAAE,0EAA0E,qBAAqB,KAAK;YACjH,IAAI,EAAE,CAAC,GAAG,OAAO,CAAC;SACnB;QACD,sBAAsB;KACvB;IACD,QAAQ,EAAE,CAAC,yBAAyB,CAAC;IACrC,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE;QACpC,uDAAuD;QACvD,MAAM,oBAAoB,GAAG,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;QACzD,MAAM,MAAM,GAAG,WAAW,CAAC,OAAO,CAAC,IAAI,EAAE,SAAS,CAAC,WAAW,CAAC,CAAA;QAC/D,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,IAAI,EAAE,SAAS,CAAC,YAAY,CAAC,CAAA;QACrE,uEAAuE;QACvE,qDAAqD;QACrD,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,WAAW,CAAC,SAAS,CAAC,YAAY,CAAC,CAAA;QAEnE,MAAM,IAAI,GAAG,MAAM,cAAc,CAC/B,MAAM,OAAO,CAAC,aAAa,CAAC,SAAS,CAAC,MAAM,EAAE;YAC5C,oBAAoB;YACpB,MAAM;YACN,MAAM;YACN,aAAa;SACd,CAAC,EACF,SAAS,CAAC,QAAQ,IAAI,QAAQ,CAC/B,CAAA;QAED,OAAO;YACL,IAAI;YACJ,IAAI,EAAE,EAAE,yBAAyB,EAAE,IAAI,EAAE;YACzC,IAAI,EAAE,WAAW;YACjB,KAAK,EAAE,gBAAgB;SACxB,CAAA;IACH,CAAC;CACF,CAAA"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { PipelineStepDefinition } from "@miragon/mcp-toolkit-core";
|
|
2
|
+
import { type AnalyticsAppConfig } from "./app-config.js";
|
|
3
|
+
/**
|
|
4
|
+
* Loads current failure / incident state from Prometheus for the
|
|
5
|
+
* failure-dashboard widgets. Point-in-time (live state gauges), so there is no
|
|
6
|
+
* time-window input. Reads the optional `analytics:engine` key (configured
|
|
7
|
+
* engine id(s); omitted = all of them).
|
|
8
|
+
*/
|
|
9
|
+
export declare const loadFailureDashboardStep: PipelineStepDefinition<AnalyticsAppConfig>;
|
|
10
|
+
//# sourceMappingURL=failure-dashboard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"failure-dashboard.d.ts","sourceRoot":"","sources":["../../src/steps/failure-dashboard.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAA;AAEvE,OAAO,EAAuC,KAAK,kBAAkB,EAAE,MAAM,iBAAiB,CAAA;AAK9F;;;;;GAKG;AACH,eAAO,MAAM,wBAAwB,EAAE,sBAAsB,CAAC,kBAAkB,CAwB/E,CAAA"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { queries } from "@miragon/pulse-analytics-client";
|
|
2
|
+
import { ENGINE_KEY_DECLARATION, stepEngines } from "./app-config.js";
|
|
3
|
+
import { builderText } from "../builder-texts.js";
|
|
4
|
+
import { NO_NAMES } from "../bpmn-name-lookup.js";
|
|
5
|
+
import { namedFailureDashboard } from "../named-views.js";
|
|
6
|
+
/**
|
|
7
|
+
* Loads current failure / incident state from Prometheus for the
|
|
8
|
+
* failure-dashboard widgets. Point-in-time (live state gauges), so there is no
|
|
9
|
+
* time-window input. Reads the optional `analytics:engine` key (configured
|
|
10
|
+
* engine id(s); omitted = all of them).
|
|
11
|
+
*/
|
|
12
|
+
export const loadFailureDashboardStep = {
|
|
13
|
+
id: "analytics:load-failure-dashboard",
|
|
14
|
+
...builderText("step.load-failure-dashboard"),
|
|
15
|
+
description: "The incidents open right now, grouped by incident type and process definition, plus each affected process's running instances and dead jobs. Powers the failure widgets (failure-summary-kpi, failure-rate-table, error-patterns-table).",
|
|
16
|
+
dataType: "analytics:failureDashboard",
|
|
17
|
+
requires: [],
|
|
18
|
+
optionalKeys: [ENGINE_KEY_DECLARATION],
|
|
19
|
+
produces: ["analytics:failureDashboardData"],
|
|
20
|
+
execute: async (context, appConfig) => {
|
|
21
|
+
const data = await namedFailureDashboard(await queries.failureDashboardData(appConfig.client, {
|
|
22
|
+
engine: stepEngines(context.keys, appConfig.engineScope),
|
|
23
|
+
}), appConfig.namesFor ?? NO_NAMES);
|
|
24
|
+
return {
|
|
25
|
+
data,
|
|
26
|
+
keys: { "analytics:failureDashboardData": data },
|
|
27
|
+
_app: "analytics",
|
|
28
|
+
_step: "load-failure-dashboard",
|
|
29
|
+
};
|
|
30
|
+
},
|
|
31
|
+
};
|
|
32
|
+
//# sourceMappingURL=failure-dashboard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"failure-dashboard.js","sourceRoot":"","sources":["../../src/steps/failure-dashboard.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,iCAAiC,CAAA;AACzD,OAAO,EAAE,sBAAsB,EAAE,WAAW,EAA2B,MAAM,iBAAiB,CAAA;AAC9F,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AACjD,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAA;AACjD,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAA;AAEzD;;;;;GAKG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAA+C;IAClF,EAAE,EAAE,kCAAkC;IACtC,GAAG,WAAW,CAAC,6BAA6B,CAAC;IAC7C,WAAW,EACT,0OAA0O;IAC5O,QAAQ,EAAE,4BAA4B;IACtC,QAAQ,EAAE,EAAE;IACZ,YAAY,EAAE,CAAC,sBAAsB,CAAC;IACtC,QAAQ,EAAE,CAAC,gCAAgC,CAAC;IAC5C,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE;QACpC,MAAM,IAAI,GAAG,MAAM,qBAAqB,CACtC,MAAM,OAAO,CAAC,oBAAoB,CAAC,SAAS,CAAC,MAAM,EAAE;YACnD,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,IAAI,EAAE,SAAS,CAAC,WAAW,CAAC;SACzD,CAAC,EACF,SAAS,CAAC,QAAQ,IAAI,QAAQ,CAC/B,CAAA;QAED,OAAO;YACL,IAAI;YACJ,IAAI,EAAE,EAAE,gCAAgC,EAAE,IAAI,EAAE;YAChD,IAAI,EAAE,WAAW;YACjB,KAAK,EAAE,wBAAwB;SAChC,CAAA;IACH,CAAC;CACF,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/steps/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAA;AAClD,OAAO,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/steps/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAA;AAClD,OAAO,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"steps.test.d.ts","sourceRoot":"","sources":["../../src/steps/steps.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
import { describe, expect, it } from "vitest";
|
|
2
|
+
import { runWithMcpRequestInfo } from "@miragon/pulse-widget-shell/server";
|
|
3
|
+
import { createEngineScope } from "../engine-ids.js";
|
|
4
|
+
import { analyticsModule } from "../module.js";
|
|
5
|
+
import { loadDashboardStep, loadFailureDashboardStep } from "./index.js";
|
|
6
|
+
/**
|
|
7
|
+
* The analytics pipeline steps run under render-view / the dashboard builder,
|
|
8
|
+
* whose step keys are free-form (`z.record(z.string(), z.unknown())`) — no
|
|
9
|
+
* schema checks them before the step does. So the steps hold the line the
|
|
10
|
+
* tools' strict inputs hold: a malformed key is refused naming the key, never
|
|
11
|
+
* read as "omitted" (which for `analytics:engine` would silently widen one
|
|
12
|
+
* engine's view to the whole fleet).
|
|
13
|
+
*/
|
|
14
|
+
function recordingClient() {
|
|
15
|
+
const sent = [];
|
|
16
|
+
const ch = {
|
|
17
|
+
instant: (q) => {
|
|
18
|
+
sent.push(q);
|
|
19
|
+
return Promise.resolve([]);
|
|
20
|
+
},
|
|
21
|
+
};
|
|
22
|
+
return { ch, sent };
|
|
23
|
+
}
|
|
24
|
+
/** A profile store holding one signed-in user's saved analytics period. */
|
|
25
|
+
const profileStore = {
|
|
26
|
+
get: (key) => Promise.resolve(key === "user-7" ? { modules: { analytics: { defaultPeriod: "30d" } } } : undefined),
|
|
27
|
+
};
|
|
28
|
+
function setup(withProfileStore = false) {
|
|
29
|
+
const { ch, sent } = recordingClient();
|
|
30
|
+
const appConfig = {
|
|
31
|
+
client: ch,
|
|
32
|
+
engineScope: createEngineScope(["prod-a", "prod-b"]),
|
|
33
|
+
...(withProfileStore ? { profileStore } : {}),
|
|
34
|
+
};
|
|
35
|
+
return { appConfig, sent };
|
|
36
|
+
}
|
|
37
|
+
const context = (keys) => ({
|
|
38
|
+
steps: {},
|
|
39
|
+
keys,
|
|
40
|
+
errors: [],
|
|
41
|
+
});
|
|
42
|
+
const STEPS = [
|
|
43
|
+
["analytics:load-dashboard", loadDashboardStep],
|
|
44
|
+
["analytics:load-failure-dashboard", loadFailureDashboardStep],
|
|
45
|
+
];
|
|
46
|
+
/** Every engine id the `engine_id` matchers of `promql` admit. */
|
|
47
|
+
const enginesRead = (sent) => new Set(sent.flatMap((q) => [...q.matchAll(/engine_id(=~?)"([^"]*)"/g)].flatMap((m) => m[1] === "=~" ? m[2].split("|") : [m[2]])));
|
|
48
|
+
describe.each(STEPS)("%s — analytics:engine", (_id, step) => {
|
|
49
|
+
it("reads the whole configured fleet when the key is omitted", async () => {
|
|
50
|
+
const { appConfig, sent } = setup();
|
|
51
|
+
const out = await step.execute(context({}), appConfig);
|
|
52
|
+
expect(out.data.engines).toEqual(["prod-a", "prod-b"]);
|
|
53
|
+
expect([...enginesRead(sent)].sort()).toEqual(["prod-a", "prod-b"]);
|
|
54
|
+
});
|
|
55
|
+
it("reads exactly the configured engine(s) the key names", async () => {
|
|
56
|
+
const { appConfig, sent } = setup();
|
|
57
|
+
const out = await step.execute(context({ "analytics:engine": "prod-b" }), appConfig);
|
|
58
|
+
expect(out.data.engines).toEqual(["prod-b"]);
|
|
59
|
+
expect([...enginesRead(sent)]).toEqual(["prod-b"]);
|
|
60
|
+
});
|
|
61
|
+
it("refuses an engine this server is not configured for, before any query", async () => {
|
|
62
|
+
const { appConfig, sent } = setup();
|
|
63
|
+
await expect(step.execute(context({ "analytics:engine": "tenant-x" }), appConfig)).rejects.toThrow('Unknown engine "tenant-x"');
|
|
64
|
+
expect(sent).toEqual([]);
|
|
65
|
+
});
|
|
66
|
+
it.each([
|
|
67
|
+
["a number", 7],
|
|
68
|
+
["a list with a non-string id", ["prod-a", 7]],
|
|
69
|
+
["null", null],
|
|
70
|
+
["an object", { id: "prod-a" }],
|
|
71
|
+
])("refuses %s instead of widening to the fleet", async (_label, raw) => {
|
|
72
|
+
const { appConfig, sent } = setup();
|
|
73
|
+
await expect(step.execute(context({ "analytics:engine": raw }), appConfig)).rejects.toThrow(/analytics:engine must be an engine id or a list of engine ids/);
|
|
74
|
+
expect(sent).toEqual([]);
|
|
75
|
+
});
|
|
76
|
+
});
|
|
77
|
+
describe("the plugin wires the steps' caller lookup", () => {
|
|
78
|
+
it("hands the steps the profile store and installs the ambient request info they read", () => {
|
|
79
|
+
const patterns = [];
|
|
80
|
+
const server = {
|
|
81
|
+
tool: () => { },
|
|
82
|
+
use: (pattern) => {
|
|
83
|
+
patterns.push(pattern);
|
|
84
|
+
},
|
|
85
|
+
};
|
|
86
|
+
const plugin = analyticsModule.createPlugin({ url: "http://prometheus.invalid" }, { profileStore, engineIds: ["prod-a"] });
|
|
87
|
+
plugin.registerTools?.(server);
|
|
88
|
+
expect(plugin.appConfig.profileStore).toBe(profileStore);
|
|
89
|
+
// A step gets no handler ctx: without this middleware its caller lookup
|
|
90
|
+
// finds no identity and every saved period silently reads as the default.
|
|
91
|
+
expect(patterns).toEqual(["mcp:*"]);
|
|
92
|
+
});
|
|
93
|
+
it("hands the steps the name lookup over the injected BPMN lookup", async () => {
|
|
94
|
+
const xml = '<definitions><process id="order" name="Order fulfillment"/></definitions>';
|
|
95
|
+
const plugin = analyticsModule.createPlugin({ url: "http://prometheus.invalid" }, { profileStore, engineIds: ["prod-a"], fetchBpmnXml: () => Promise.resolve(xml) });
|
|
96
|
+
const { namesFor } = plugin.appConfig;
|
|
97
|
+
expect(await namesFor(["order"])).toEqual({
|
|
98
|
+
order: { name: "Order fulfillment", elements: {} },
|
|
99
|
+
});
|
|
100
|
+
});
|
|
101
|
+
});
|
|
102
|
+
describe.each(STEPS)("%s — the names behind the ids", (_id, step) => {
|
|
103
|
+
it("passes its figures through the view's name lookup", async () => {
|
|
104
|
+
const names = { order: { name: "Order fulfillment", elements: {} } };
|
|
105
|
+
const { appConfig } = setup();
|
|
106
|
+
const out = await step.execute(context({}), {
|
|
107
|
+
...appConfig,
|
|
108
|
+
namesFor: () => Promise.resolve(names),
|
|
109
|
+
});
|
|
110
|
+
expect(out.data.names).toEqual(names);
|
|
111
|
+
});
|
|
112
|
+
it("shows ids when the server has no lookup", async () => {
|
|
113
|
+
const out = await step.execute(context({}), setup().appConfig);
|
|
114
|
+
expect(out.data.names).toEqual({});
|
|
115
|
+
});
|
|
116
|
+
});
|
|
117
|
+
describe("analytics:load-dashboard — analytics:period", () => {
|
|
118
|
+
// The windows read — not the hour the born-series check looks at (`[1h] offset …`).
|
|
119
|
+
const windows = (sent) => new Set(sent.flatMap((q) => [...q.matchAll(/\[(\w+)\](?!(?: @ \d+)? offset)/g)].map((m) => m[1])));
|
|
120
|
+
it("takes the caller's SAVED period when the key is omitted (N83/N116)", async () => {
|
|
121
|
+
const { appConfig, sent } = setup(true);
|
|
122
|
+
const out = await runWithMcpRequestInfo({ authUserId: "user-7" }, () => loadDashboardStep.execute(context({}), appConfig));
|
|
123
|
+
expect(out.data.period).toBe("30d");
|
|
124
|
+
expect([...windows(sent)]).toEqual(["30d"]);
|
|
125
|
+
});
|
|
126
|
+
it("falls back to the module default without a caller or a saved period", async () => {
|
|
127
|
+
const { appConfig } = setup(true);
|
|
128
|
+
const anonymous = await runWithMcpRequestInfo({}, () => loadDashboardStep.execute(context({}), appConfig));
|
|
129
|
+
const storeless = await loadDashboardStep.execute(context({}), setup().appConfig);
|
|
130
|
+
expect(anonymous.data.period).toBe("7d");
|
|
131
|
+
expect(storeless.data.period).toBe("7d");
|
|
132
|
+
});
|
|
133
|
+
it("lets an explicit period win over the saved one", async () => {
|
|
134
|
+
const { appConfig } = setup(true);
|
|
135
|
+
const out = await runWithMcpRequestInfo({ authUserId: "user-7" }, () => loadDashboardStep.execute(context({ "analytics:period": "1d" }), appConfig));
|
|
136
|
+
expect(out.data.period).toBe("1d");
|
|
137
|
+
});
|
|
138
|
+
it.each([
|
|
139
|
+
["an unknown period", "90d"],
|
|
140
|
+
["a number", 7],
|
|
141
|
+
["null", null],
|
|
142
|
+
])("refuses %s instead of substituting a default", async (_label, raw) => {
|
|
143
|
+
const { appConfig, sent } = setup();
|
|
144
|
+
await expect(loadDashboardStep.execute(context({ "analytics:period": raw }), appConfig)).rejects.toThrow(/analytics:period must be one of 1d, 3d, 7d, 14d, 30d/);
|
|
145
|
+
expect(sent).toEqual([]);
|
|
146
|
+
});
|
|
147
|
+
it("refuses a non-string process key, naming the key", async () => {
|
|
148
|
+
const { appConfig, sent } = setup();
|
|
149
|
+
await expect(loadDashboardStep.execute(context({ "analytics:processDefinitionKey": 7 }), appConfig)).rejects.toThrow(/analytics:processDefinitionKey must be a process definition key/);
|
|
150
|
+
expect(sent).toEqual([]);
|
|
151
|
+
});
|
|
152
|
+
});
|
|
153
|
+
//# sourceMappingURL=steps.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"steps.test.js","sourceRoot":"","sources":["../../src/steps/steps.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Names of the analytics widget tools referenced from widget code, so a tool
|
|
3
|
+
* rename in `widget-tools.ts` trips a TS error at every call site (same rule
|
|
4
|
+
* as the camunda7 module's tool-names.ts).
|
|
5
|
+
*/
|
|
6
|
+
export declare const ANALYTICS_DASHBOARD_DATA = "analytics_dashboard_data";
|
|
7
|
+
export declare const ANALYTICS_FAILURE_DASHBOARD_DATA = "analytics_failure_dashboard_data";
|
|
8
|
+
export declare const ANALYTICS_BPMN_HEATMAP_DATA = "analytics_bpmn_heatmap_data";
|
|
9
|
+
export declare const ANALYTICS_BPMN_XML_DATA = "analytics_bpmn_xml_data";
|
|
10
|
+
export declare const ANALYTICS_ENGINE_LANDSCAPE_DATA = "analytics_engine_landscape_data";
|
|
11
|
+
export declare const ANALYTICS_SETTINGS_DATA = "analytics_settings_data";
|
|
12
|
+
export declare const ANALYTICS_SAVE_SETTINGS = "analytics_save_settings";
|
|
13
|
+
//# sourceMappingURL=tool-names.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-names.d.ts","sourceRoot":"","sources":["../src/tool-names.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,eAAO,MAAM,wBAAwB,6BAA6B,CAAA;AAClE,eAAO,MAAM,gCAAgC,qCAAqC,CAAA;AAGlF,eAAO,MAAM,2BAA2B,gCAAgC,CAAA;AAIxE,eAAO,MAAM,uBAAuB,4BAA4B,CAAA;AAIhE,eAAO,MAAM,+BAA+B,oCAAoC,CAAA;AAGhF,eAAO,MAAM,uBAAuB,4BAA4B,CAAA;AAChE,eAAO,MAAM,uBAAuB,4BAA4B,CAAA"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Names of the analytics widget tools referenced from widget code, so a tool
|
|
3
|
+
* rename in `widget-tools.ts` trips a TS error at every call site (same rule
|
|
4
|
+
* as the camunda7 module's tool-names.ts).
|
|
5
|
+
*/
|
|
6
|
+
// Per-view data-only feeds (no UI, app-only via `visibility: "app"`) backing
|
|
7
|
+
// each widget's own self-fetch. A widget tool (view-bound) can't be used for
|
|
8
|
+
// this: the host renders it instead of returning data to the in-widget
|
|
9
|
+
// callTool().
|
|
10
|
+
export const ANALYTICS_DASHBOARD_DATA = "analytics_dashboard_data";
|
|
11
|
+
export const ANALYTICS_FAILURE_DASHBOARD_DATA = "analytics_failure_dashboard_data";
|
|
12
|
+
// Cross-module consumers (camunda7's process-incidents flow) reference this
|
|
13
|
+
// feed by raw string with graceful degradation — keep the name stable.
|
|
14
|
+
export const ANALYTICS_BPMN_HEATMAP_DATA = "analytics_bpmn_heatmap_data";
|
|
15
|
+
// The latest deployed diagram of a process key, for the heatmap view: never
|
|
16
|
+
// inside the heat payload, so the model never reads the XML and the heat
|
|
17
|
+
// values refresh without it.
|
|
18
|
+
export const ANALYTICS_BPMN_XML_DATA = "analytics_bpmn_xml_data";
|
|
19
|
+
// Backs the cross-engine landscape widget's self-fetch. Also referenced by
|
|
20
|
+
// camunda7's cross-engine cockpit mode through the widget id (tier-2), so the
|
|
21
|
+
// section disappears with the module instead of erroring.
|
|
22
|
+
export const ANALYTICS_ENGINE_LANDSCAPE_DATA = "analytics_engine_landscape_data";
|
|
23
|
+
// Settings section: the widget self-fetches the feed and writes via the save
|
|
24
|
+
// tool; both live in settings-tools.ts.
|
|
25
|
+
export const ANALYTICS_SETTINGS_DATA = "analytics_settings_data";
|
|
26
|
+
export const ANALYTICS_SAVE_SETTINGS = "analytics_save_settings";
|
|
27
|
+
//# sourceMappingURL=tool-names.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-names.js","sourceRoot":"","sources":["../src/tool-names.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,6EAA6E;AAC7E,6EAA6E;AAC7E,uEAAuE;AACvE,cAAc;AACd,MAAM,CAAC,MAAM,wBAAwB,GAAG,0BAA0B,CAAA;AAClE,MAAM,CAAC,MAAM,gCAAgC,GAAG,kCAAkC,CAAA;AAClF,4EAA4E;AAC5E,uEAAuE;AACvE,MAAM,CAAC,MAAM,2BAA2B,GAAG,6BAA6B,CAAA;AACxE,4EAA4E;AAC5E,yEAAyE;AACzE,6BAA6B;AAC7B,MAAM,CAAC,MAAM,uBAAuB,GAAG,yBAAyB,CAAA;AAChE,2EAA2E;AAC3E,8EAA8E;AAC9E,0DAA0D;AAC1D,MAAM,CAAC,MAAM,+BAA+B,GAAG,iCAAiC,CAAA;AAChF,6EAA6E;AAC7E,wCAAwC;AACxC,MAAM,CAAC,MAAM,uBAAuB,GAAG,yBAAyB,CAAA;AAChE,MAAM,CAAC,MAAM,uBAAuB,GAAG,yBAAyB,CAAA"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { PrometheusClient } from "@miragon/pulse-analytics-client";
|
|
2
|
+
import type { createToolRegistrar } from "@miragon/mcp-toolkit-core/tools";
|
|
3
|
+
import type { ProfileSource } from "../server-locale.js";
|
|
4
|
+
import { type AnalyticsEngineScope } from "../engine-ids.js";
|
|
5
|
+
type Register = ReturnType<typeof createToolRegistrar<PrometheusClient>>;
|
|
6
|
+
export declare function registerClusterCompareTools(register: Register, engineScope: AnalyticsEngineScope, profileStore?: ProfileSource): void;
|
|
7
|
+
export {};
|
|
8
|
+
//# sourceMappingURL=cluster-compare.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cluster-compare.d.ts","sourceRoot":"","sources":["../../src/tools/cluster-compare.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAA;AAEvE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAA;AAC1E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAExD,OAAO,EAAmB,KAAK,oBAAoB,EAAE,MAAM,kBAAkB,CAAA;AAE7E,KAAK,QAAQ,GAAG,UAAU,CAAC,OAAO,mBAAmB,CAAC,gBAAgB,CAAC,CAAC,CAAA;AAExE,wBAAgB,2BAA2B,CACzC,QAAQ,EAAE,QAAQ,EAClB,WAAW,EAAE,oBAAoB,EACjC,YAAY,CAAC,EAAE,aAAa,QAe7B"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { schemas, queries } from "@miragon/pulse-analytics-client";
|
|
2
|
+
import { optionalMinBucketSize, settingsFor } from "../settings.js";
|
|
3
|
+
import { withEngineScope } from "../engine-ids.js";
|
|
4
|
+
export function registerClusterCompareTools(register, engineScope, profileStore) {
|
|
5
|
+
register({
|
|
6
|
+
name: "analytics_cluster_compare",
|
|
7
|
+
category: "analytics",
|
|
8
|
+
description: "Pre/Post deployment correlation from metrics. Given a deployment timestamp and windows before/after, compute instance KPIs per window and the delta, using PromQL historical windows. Windows are clamped to now and the 30-day retention and reported as measured (`windowDays`, `partial`) — right after a deploy the post window holds only the elapsed time; starts compare per day. Results are flagged `suppressed` if either window has fewer than minBucketSize started or completed instances. Typical flow: commit-hash → camunda7_get_deployment → deployment.timestamp → this tool.",
|
|
9
|
+
annotations: { readOnlyHint: true, idempotentHint: true, openWorldHint: true },
|
|
10
|
+
inputSchema: { ...schemas.clusterCompareInput.shape, minBucketSize: optionalMinBucketSize },
|
|
11
|
+
handler: async (ch, args, ctx) => queries.clusterCompare(ch, {
|
|
12
|
+
...withEngineScope(engineScope, args),
|
|
13
|
+
minBucketSize: args.minBucketSize ?? (await settingsFor(profileStore, ctx)).minBucketSize,
|
|
14
|
+
}),
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=cluster-compare.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cluster-compare.js","sourceRoot":"","sources":["../../src/tools/cluster-compare.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,iCAAiC,CAAA;AAGlE,OAAO,EAAE,qBAAqB,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AACnE,OAAO,EAAE,eAAe,EAA6B,MAAM,kBAAkB,CAAA;AAI7E,MAAM,UAAU,2BAA2B,CACzC,QAAkB,EAClB,WAAiC,EACjC,YAA4B;IAE5B,QAAQ,CAAC;QACP,IAAI,EAAE,2BAA2B;QACjC,QAAQ,EAAE,WAAW;QACrB,WAAW,EACT,ikBAAikB;QACnkB,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE;QAC9E,WAAW,EAAE,EAAE,GAAG,OAAO,CAAC,mBAAmB,CAAC,KAAK,EAAE,aAAa,EAAE,qBAAqB,EAAE;QAC3F,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,CAC/B,OAAO,CAAC,cAAc,CAAC,EAAE,EAAE;YACzB,GAAG,eAAe,CAAC,WAAW,EAAE,IAAI,CAAC;YACrC,aAAa,EAAE,IAAI,CAAC,aAAa,IAAI,CAAC,MAAM,WAAW,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC,CAAC,aAAa;SAC1F,CAAC;KACL,CAAC,CAAA;AACJ,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { PrometheusClient } from "@miragon/pulse-analytics-client";
|
|
2
|
+
import type { createToolRegistrar } from "@miragon/mcp-toolkit-core/tools";
|
|
3
|
+
import type { ProfileSource } from "../server-locale.js";
|
|
4
|
+
import { type AnalyticsEngineScope } from "../engine-ids.js";
|
|
5
|
+
type Register = ReturnType<typeof createToolRegistrar<PrometheusClient>>;
|
|
6
|
+
export declare function registerElementTools(register: Register, engineScope: AnalyticsEngineScope, profileStore?: ProfileSource): void;
|
|
7
|
+
export {};
|
|
8
|
+
//# sourceMappingURL=element.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"element.d.ts","sourceRoot":"","sources":["../../src/tools/element.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAA;AAEvE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAA;AAC1E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAExD,OAAO,EAAmB,KAAK,oBAAoB,EAAE,MAAM,kBAAkB,CAAA;AAE7E,KAAK,QAAQ,GAAG,UAAU,CAAC,OAAO,mBAAmB,CAAC,gBAAgB,CAAC,CAAC,CAAA;AAExE,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,QAAQ,EAClB,WAAW,EAAE,oBAAoB,EACjC,YAAY,CAAC,EAAE,aAAa,QAsB7B"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { schemas, queries } from "@miragon/pulse-analytics-client";
|
|
2
|
+
import { optionalMinBucketSize, optionalPeriod, settingsFor } from "../settings.js";
|
|
3
|
+
import { withEngineScope } from "../engine-ids.js";
|
|
4
|
+
export function registerElementTools(register, engineScope, profileStore) {
|
|
5
|
+
register({
|
|
6
|
+
name: "analytics_element_bottleneck",
|
|
7
|
+
category: "analytics",
|
|
8
|
+
description: "Rank activities by execution-time contribution and incident rate over a rolling window, from process metrics. Activities with fewer than `minBucketSize` executions are suppressed. Note: queue/wait time is not available from metrics.",
|
|
9
|
+
annotations: { readOnlyHint: true, idempotentHint: true, openWorldHint: true },
|
|
10
|
+
inputSchema: {
|
|
11
|
+
...schemas.elementBottleneckInput.shape,
|
|
12
|
+
period: optionalPeriod,
|
|
13
|
+
minBucketSize: optionalMinBucketSize,
|
|
14
|
+
},
|
|
15
|
+
handler: async (ch, args, ctx) => {
|
|
16
|
+
const settings = await settingsFor(profileStore, ctx);
|
|
17
|
+
return queries.elementBottleneck(ch, {
|
|
18
|
+
...withEngineScope(engineScope, args),
|
|
19
|
+
period: args.period ?? settings.defaultPeriod,
|
|
20
|
+
minBucketSize: args.minBucketSize ?? settings.minBucketSize,
|
|
21
|
+
});
|
|
22
|
+
},
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=element.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"element.js","sourceRoot":"","sources":["../../src/tools/element.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,iCAAiC,CAAA;AAGlE,OAAO,EAAE,qBAAqB,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AACnF,OAAO,EAAE,eAAe,EAA6B,MAAM,kBAAkB,CAAA;AAI7E,MAAM,UAAU,oBAAoB,CAClC,QAAkB,EAClB,WAAiC,EACjC,YAA4B;IAE5B,QAAQ,CAAC;QACP,IAAI,EAAE,8BAA8B;QACpC,QAAQ,EAAE,WAAW;QACrB,WAAW,EACT,0OAA0O;QAC5O,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE;QAC9E,WAAW,EAAE;YACX,GAAG,OAAO,CAAC,sBAAsB,CAAC,KAAK;YACvC,MAAM,EAAE,cAAc;YACtB,aAAa,EAAE,qBAAqB;SACrC;QACD,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE;YAC/B,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC,YAAY,EAAE,GAAG,CAAC,CAAA;YACrD,OAAO,OAAO,CAAC,iBAAiB,CAAC,EAAE,EAAE;gBACnC,GAAG,eAAe,CAAC,WAAW,EAAE,IAAI,CAAC;gBACrC,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,QAAQ,CAAC,aAAa;gBAC7C,aAAa,EAAE,IAAI,CAAC,aAAa,IAAI,QAAQ,CAAC,aAAa;aAC5D,CAAC,CAAA;QACJ,CAAC;KACF,CAAC,CAAA;AACJ,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { PrometheusClient } from "@miragon/pulse-analytics-client";
|
|
2
|
+
import type { createToolRegistrar } from "@miragon/mcp-toolkit-core/tools";
|
|
3
|
+
import type { ProfileSource } from "../server-locale.js";
|
|
4
|
+
import type { AnalyticsEngineScope } from "../engine-ids.js";
|
|
5
|
+
type Register = ReturnType<typeof createToolRegistrar<PrometheusClient>>;
|
|
6
|
+
export declare function registerEngineCompareTools(register: Register, engineScope: AnalyticsEngineScope, profileStore?: ProfileSource): void;
|
|
7
|
+
export {};
|
|
8
|
+
//# sourceMappingURL=engine-compare.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"engine-compare.d.ts","sourceRoot":"","sources":["../../src/tools/engine-compare.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAA;AAEvE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAA;AAC1E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAExD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAA;AAE5D,KAAK,QAAQ,GAAG,UAAU,CAAC,OAAO,mBAAmB,CAAC,gBAAgB,CAAC,CAAC,CAAA;AAExE,wBAAgB,0BAA0B,CACxC,QAAQ,EAAE,QAAQ,EAClB,WAAW,EAAE,oBAAoB,EACjC,YAAY,CAAC,EAAE,aAAa,QAiB7B"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { schemas, queries } from "@miragon/pulse-analytics-client";
|
|
2
|
+
import { optionalMinBucketSize, settingsFor } from "../settings.js";
|
|
3
|
+
export function registerEngineCompareTools(register, engineScope, profileStore) {
|
|
4
|
+
register({
|
|
5
|
+
name: "analytics_engine_compare",
|
|
6
|
+
category: "analytics",
|
|
7
|
+
description: "Compare ONE process definition as it runs on two configured CIB Seven engines (e.g. prod-a vs prod-b) over a shared rolling window, from metrics. processDefinitionKey is required: engines host different process mixes, so comparing their whole workloads would measure the mix rather than the engines — holding the process fixed is what makes the delta attributable. Returns per engine starts, completions, incidents per 100 starts (with activityId also at that element) and avg/p95 duration of the instances that ENDED, plus the deltas. Flagged `suppressed` when either engine has fewer than minBucketSize started or completed instances. For the unscoped cross-engine picture (what runs where, load, job backlog, which keys are deployed on several engines) use analytics_engine_landscape first; its `sharedProcessKeys` are the valid inputs here.",
|
|
8
|
+
annotations: { readOnlyHint: true, idempotentHint: true, openWorldHint: true },
|
|
9
|
+
inputSchema: { ...schemas.engineCompareInput.shape, minBucketSize: optionalMinBucketSize },
|
|
10
|
+
handler: async (ch, args, ctx) => queries.engineCompare(ch, {
|
|
11
|
+
...args,
|
|
12
|
+
engineA: engineScope.require(args.engineA, "engineA"),
|
|
13
|
+
engineB: engineScope.require(args.engineB, "engineB"),
|
|
14
|
+
minBucketSize: args.minBucketSize ?? (await settingsFor(profileStore, ctx)).minBucketSize,
|
|
15
|
+
}),
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=engine-compare.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"engine-compare.js","sourceRoot":"","sources":["../../src/tools/engine-compare.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,iCAAiC,CAAA;AAGlE,OAAO,EAAE,qBAAqB,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAKnE,MAAM,UAAU,0BAA0B,CACxC,QAAkB,EAClB,WAAiC,EACjC,YAA4B;IAE5B,QAAQ,CAAC;QACP,IAAI,EAAE,0BAA0B;QAChC,QAAQ,EAAE,WAAW;QACrB,WAAW,EACT,80BAA80B;QACh1B,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE;QAC9E,WAAW,EAAE,EAAE,GAAG,OAAO,CAAC,kBAAkB,CAAC,KAAK,EAAE,aAAa,EAAE,qBAAqB,EAAE;QAC1F,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,CAC/B,OAAO,CAAC,aAAa,CAAC,EAAE,EAAE;YACxB,GAAG,IAAI;YACP,OAAO,EAAE,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC;YACrD,OAAO,EAAE,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC;YACrD,aAAa,EAAE,IAAI,CAAC,aAAa,IAAI,CAAC,MAAM,WAAW,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC,CAAC,aAAa;SAC1F,CAAC;KACL,CAAC,CAAA;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"engine-compare.test.d.ts","sourceRoot":"","sources":["../../src/tools/engine-compare.test.ts"],"names":[],"mappings":""}
|