@miragon/pulse-analytics-client 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.
Files changed (200) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +84 -2
  3. package/dist/index.d.ts +12 -0
  4. package/dist/index.d.ts.map +1 -0
  5. package/dist/index.js +14 -0
  6. package/dist/index.js.map +1 -0
  7. package/dist/metric-names.d.ts +43 -0
  8. package/dist/metric-names.d.ts.map +1 -0
  9. package/dist/metric-names.js +53 -0
  10. package/dist/metric-names.js.map +1 -0
  11. package/dist/metrics-contract-labels.test.d.ts +2 -0
  12. package/dist/metrics-contract-labels.test.d.ts.map +1 -0
  13. package/dist/metrics-contract-labels.test.js +169 -0
  14. package/dist/metrics-contract-labels.test.js.map +1 -0
  15. package/dist/metrics-contract.test.d.ts +2 -0
  16. package/dist/metrics-contract.test.d.ts.map +1 -0
  17. package/dist/metrics-contract.test.js +247 -0
  18. package/dist/metrics-contract.test.js.map +1 -0
  19. package/dist/prometheus-client.test.d.ts +2 -0
  20. package/dist/prometheus-client.test.d.ts.map +1 -0
  21. package/dist/prometheus-client.test.js +265 -0
  22. package/dist/prometheus-client.test.js.map +1 -0
  23. package/dist/prometheus.d.ts +100 -0
  24. package/dist/prometheus.d.ts.map +1 -0
  25. package/dist/prometheus.js +295 -0
  26. package/dist/prometheus.js.map +1 -0
  27. package/dist/prometheus.test.d.ts +2 -0
  28. package/dist/prometheus.test.d.ts.map +1 -0
  29. package/dist/prometheus.test.js +54 -0
  30. package/dist/prometheus.test.js.map +1 -0
  31. package/dist/promql-labels.test-support.d.ts +53 -0
  32. package/dist/promql-labels.test-support.d.ts.map +1 -0
  33. package/dist/promql-labels.test-support.js +237 -0
  34. package/dist/promql-labels.test-support.js.map +1 -0
  35. package/dist/promql-labels.test.d.ts +2 -0
  36. package/dist/promql-labels.test.d.ts.map +1 -0
  37. package/dist/promql-labels.test.js +190 -0
  38. package/dist/promql-labels.test.js.map +1 -0
  39. package/dist/promql-parse.test-support.d.ts +57 -0
  40. package/dist/promql-parse.test-support.d.ts.map +1 -0
  41. package/dist/promql-parse.test-support.js +284 -0
  42. package/dist/promql-parse.test-support.js.map +1 -0
  43. package/dist/promql-reading-rules.test-support.d.ts +29 -0
  44. package/dist/promql-reading-rules.test-support.d.ts.map +1 -0
  45. package/dist/promql-reading-rules.test-support.js +79 -0
  46. package/dist/promql-reading-rules.test-support.js.map +1 -0
  47. package/dist/promql-reading-rules.test.d.ts +2 -0
  48. package/dist/promql-reading-rules.test.d.ts.map +1 -0
  49. package/dist/promql-reading-rules.test.js +61 -0
  50. package/dist/promql-reading-rules.test.js.map +1 -0
  51. package/dist/promql-sources.test-support.d.ts +29 -0
  52. package/dist/promql-sources.test-support.d.ts.map +1 -0
  53. package/dist/promql-sources.test-support.js +112 -0
  54. package/dist/promql-sources.test-support.js.map +1 -0
  55. package/dist/promql-sources.test.d.ts +2 -0
  56. package/dist/promql-sources.test.d.ts.map +1 -0
  57. package/dist/promql-sources.test.js +93 -0
  58. package/dist/promql-sources.test.js.map +1 -0
  59. package/dist/queries/as-of.test.d.ts +2 -0
  60. package/dist/queries/as-of.test.d.ts.map +1 -0
  61. package/dist/queries/as-of.test.js +80 -0
  62. package/dist/queries/as-of.test.js.map +1 -0
  63. package/dist/queries/cluster-compare.d.ts +62 -0
  64. package/dist/queries/cluster-compare.d.ts.map +1 -0
  65. package/dist/queries/cluster-compare.js +70 -0
  66. package/dist/queries/cluster-compare.js.map +1 -0
  67. package/dist/queries/cluster-compare.test.d.ts +2 -0
  68. package/dist/queries/cluster-compare.test.d.ts.map +1 -0
  69. package/dist/queries/cluster-compare.test.js +81 -0
  70. package/dist/queries/cluster-compare.test.js.map +1 -0
  71. package/dist/queries/dashboard.d.ts +60 -0
  72. package/dist/queries/dashboard.d.ts.map +1 -0
  73. package/dist/queries/dashboard.js +292 -0
  74. package/dist/queries/dashboard.js.map +1 -0
  75. package/dist/queries/dashboard.test.d.ts +2 -0
  76. package/dist/queries/dashboard.test.d.ts.map +1 -0
  77. package/dist/queries/dashboard.test.js +423 -0
  78. package/dist/queries/dashboard.test.js.map +1 -0
  79. package/dist/queries/element.d.ts +68 -0
  80. package/dist/queries/element.d.ts.map +1 -0
  81. package/dist/queries/element.js +98 -0
  82. package/dist/queries/element.js.map +1 -0
  83. package/dist/queries/element.test.d.ts +2 -0
  84. package/dist/queries/element.test.d.ts.map +1 -0
  85. package/dist/queries/element.test.js +105 -0
  86. package/dist/queries/element.test.js.map +1 -0
  87. package/dist/queries/engine-compare.d.ts +52 -0
  88. package/dist/queries/engine-compare.d.ts.map +1 -0
  89. package/dist/queries/engine-compare.js +57 -0
  90. package/dist/queries/engine-compare.js.map +1 -0
  91. package/dist/queries/engine-compare.test.d.ts +2 -0
  92. package/dist/queries/engine-compare.test.d.ts.map +1 -0
  93. package/dist/queries/engine-compare.test.js +159 -0
  94. package/dist/queries/engine-compare.test.js.map +1 -0
  95. package/dist/queries/engine-landscape.d.ts +92 -0
  96. package/dist/queries/engine-landscape.d.ts.map +1 -0
  97. package/dist/queries/engine-landscape.js +183 -0
  98. package/dist/queries/engine-landscape.js.map +1 -0
  99. package/dist/queries/engine-landscape.test.d.ts +2 -0
  100. package/dist/queries/engine-landscape.test.d.ts.map +1 -0
  101. package/dist/queries/engine-landscape.test.js +171 -0
  102. package/dist/queries/engine-landscape.test.js.map +1 -0
  103. package/dist/queries/failures.d.ts +33 -0
  104. package/dist/queries/failures.d.ts.map +1 -0
  105. package/dist/queries/failures.js +31 -0
  106. package/dist/queries/failures.js.map +1 -0
  107. package/dist/queries/health.d.ts +77 -0
  108. package/dist/queries/health.d.ts.map +1 -0
  109. package/dist/queries/health.js +126 -0
  110. package/dist/queries/health.js.map +1 -0
  111. package/dist/queries/health.test.d.ts +2 -0
  112. package/dist/queries/health.test.d.ts.map +1 -0
  113. package/dist/queries/health.test.js +187 -0
  114. package/dist/queries/health.test.js.map +1 -0
  115. package/dist/queries/helpers.d.ts +184 -0
  116. package/dist/queries/helpers.d.ts.map +1 -0
  117. package/dist/queries/helpers.js +219 -0
  118. package/dist/queries/helpers.js.map +1 -0
  119. package/dist/queries/helpers.test.d.ts +2 -0
  120. package/dist/queries/helpers.test.d.ts.map +1 -0
  121. package/dist/queries/helpers.test.js +53 -0
  122. package/dist/queries/helpers.test.js.map +1 -0
  123. package/dist/queries/index.d.ts +19 -0
  124. package/dist/queries/index.d.ts.map +1 -0
  125. package/dist/queries/index.js +10 -0
  126. package/dist/queries/index.js.map +1 -0
  127. package/dist/queries/performance.d.ts +103 -0
  128. package/dist/queries/performance.d.ts.map +1 -0
  129. package/dist/queries/performance.js +173 -0
  130. package/dist/queries/performance.js.map +1 -0
  131. package/dist/queries/performance.test.d.ts +2 -0
  132. package/dist/queries/performance.test.d.ts.map +1 -0
  133. package/dist/queries/performance.test.js +265 -0
  134. package/dist/queries/performance.test.js.map +1 -0
  135. package/dist/queries/version-compare.d.ts +41 -0
  136. package/dist/queries/version-compare.d.ts.map +1 -0
  137. package/dist/queries/version-compare.js +44 -0
  138. package/dist/queries/version-compare.js.map +1 -0
  139. package/dist/queries/version-compare.test.d.ts +2 -0
  140. package/dist/queries/version-compare.test.d.ts.map +1 -0
  141. package/dist/queries/version-compare.test.js +162 -0
  142. package/dist/queries/version-compare.test.js.map +1 -0
  143. package/dist/queries/windows.d.ts +40 -0
  144. package/dist/queries/windows.d.ts.map +1 -0
  145. package/dist/queries/windows.js +56 -0
  146. package/dist/queries/windows.js.map +1 -0
  147. package/dist/query-honesty.test.d.ts +2 -0
  148. package/dist/query-honesty.test.d.ts.map +1 -0
  149. package/dist/query-honesty.test.js +294 -0
  150. package/dist/query-honesty.test.js.map +1 -0
  151. package/dist/query-scenarios.test-support.d.ts +49 -0
  152. package/dist/query-scenarios.test-support.d.ts.map +1 -0
  153. package/dist/query-scenarios.test-support.js +146 -0
  154. package/dist/query-scenarios.test-support.js.map +1 -0
  155. package/dist/schemas/cluster-compare.d.ts +11 -0
  156. package/dist/schemas/cluster-compare.d.ts.map +1 -0
  157. package/dist/schemas/cluster-compare.js +35 -0
  158. package/dist/schemas/cluster-compare.js.map +1 -0
  159. package/dist/schemas/engine-compare.d.ts +10 -0
  160. package/dist/schemas/engine-compare.d.ts.map +1 -0
  161. package/dist/schemas/engine-compare.js +27 -0
  162. package/dist/schemas/engine-compare.js.map +1 -0
  163. package/dist/schemas/engine-landscape.d.ts +5 -0
  164. package/dist/schemas/engine-landscape.d.ts.map +1 -0
  165. package/dist/schemas/engine-landscape.js +8 -0
  166. package/dist/schemas/engine-landscape.js.map +1 -0
  167. package/dist/schemas/failures.d.ts +8 -0
  168. package/dist/schemas/failures.d.ts.map +1 -0
  169. package/dist/schemas/failures.js +9 -0
  170. package/dist/schemas/failures.js.map +1 -0
  171. package/dist/schemas/health.d.ts +5 -0
  172. package/dist/schemas/health.d.ts.map +1 -0
  173. package/dist/schemas/health.js +6 -0
  174. package/dist/schemas/health.js.map +1 -0
  175. package/dist/schemas/index.d.ts +10 -0
  176. package/dist/schemas/index.d.ts.map +1 -0
  177. package/dist/schemas/index.js +10 -0
  178. package/dist/schemas/index.js.map +1 -0
  179. package/dist/schemas/path.d.ts +15 -0
  180. package/dist/schemas/path.d.ts.map +1 -0
  181. package/dist/schemas/path.js +21 -0
  182. package/dist/schemas/path.js.map +1 -0
  183. package/dist/schemas/performance.d.ts +23 -0
  184. package/dist/schemas/performance.d.ts.map +1 -0
  185. package/dist/schemas/performance.js +21 -0
  186. package/dist/schemas/performance.js.map +1 -0
  187. package/dist/schemas/shared.d.ts +34 -0
  188. package/dist/schemas/shared.d.ts.map +1 -0
  189. package/dist/schemas/shared.js +34 -0
  190. package/dist/schemas/shared.js.map +1 -0
  191. package/dist/schemas/version-compare.d.ts +10 -0
  192. package/dist/schemas/version-compare.d.ts.map +1 -0
  193. package/dist/schemas/version-compare.js +25 -0
  194. package/dist/schemas/version-compare.js.map +1 -0
  195. package/dist/widgets.d.ts +138 -0
  196. package/dist/widgets.d.ts.map +1 -0
  197. package/dist/widgets.js +2 -0
  198. package/dist/widgets.js.map +1 -0
  199. package/metrics-contract.json +174 -0
  200. package/package.json +72 -3
@@ -0,0 +1,292 @@
1
+ import { engineIdsOf, engineMatcher, escapeLabelValue, selector, } from "../prometheus.js";
2
+ import { METRIC_NAMES as M } from "../metric-names.js";
3
+ import { asOfNow, byLabel, engineState, first, firstOrNull, increaseIn, kpiQueries, ratePct, reportingEngineIds, reportingEnginesQuery, } from "./helpers.js";
4
+ import { clampWindow, DAY_SECONDS, nowSeconds, windowAt } from "./windows.js";
5
+ /**
6
+ * How many (process, activity) rows the activity breakdown carries: the top
7
+ * ones by total time. The result says how many there were in all
8
+ * (`activityCount`), so a view calls the list what it is ("Top 20 by total
9
+ * time") instead of showing an unexplained count.
10
+ */
11
+ export const ACTIVITY_BREAKDOWN_LIMIT = 20;
12
+ /**
13
+ * The comparison floor when the caller names none: the analytics settings'
14
+ * default `minBucketSize` (10 instances per window).
15
+ */
16
+ const DEFAULT_MIN_BUCKET_SIZE = 10;
17
+ /** Whole milliseconds, the histograms' unit and the dashboard's. */
18
+ const ms = (value) => Math.round(value);
19
+ const msOrNull = (value) => (value === null ? null : ms(value));
20
+ /**
21
+ * Aggregated dashboard KPIs + activity / definition breakdowns, from the
22
+ * engine's process metrics. Shared by the dashboard pipeline step and the
23
+ * `analytics_show_dashboard` widget tool. Two kinds of figures, never mixed:
24
+ *
25
+ * - FLOWS within the window (`period`): starts, completions, incidents created
26
+ * and resolved, and the durations of the instances that ended — counted over
27
+ * the range with {@link increaseIn}. Durations are null when nothing ended; `incidentRatePct` is null
28
+ * when nothing started.
29
+ * - LIVE STATE right now: `runningNow` / `openIncidentsNow` from the state
30
+ * gauges (`camunda_process_instances_running`, `camunda_incidents_open`) —
31
+ * the same numbers the failure dashboard, engine health and the landscape
32
+ * read, independent of the window. A counter difference within the window
33
+ * is no substitute: it misses every instance started before the window.
34
+ * The gauges have rows only for what exists, so whether a missing series is
35
+ * 0 or "not reported" (null) is decided by the engine presence probe
36
+ * ({@link reportingEnginesQuery}): null only while no engine in scope reports.
37
+ *
38
+ * The activity breakdown groups by (process, activity): BPMN ids are only
39
+ * unique within one model, so `StartEvent_1` of two processes are two rows.
40
+ * The result echoes its scope (process key, period, engines).
41
+ *
42
+ * `previous` holds the starts and incidents of the window right before the
43
+ * period: the reference an incident rate is judged against (a rate on its
44
+ * own says nothing about whether it is high). It is null when that window
45
+ * lies wholly before the Prometheus retention (a 30-day period), and
46
+ * `suppressed` when either window started fewer than `minBucketSize`
47
+ * instances: a change of a rate over a handful of starts is noise.
48
+ */
49
+ export async function dashboardData(ch, params) {
50
+ const asOf = asOfNow();
51
+ const range = params.period;
52
+ const engine = engineMatcher(params.engine);
53
+ const keyMatcher = params.processDefinitionKey
54
+ ? `process_definition_key="${escapeLabelValue(params.processDefinitionKey)}"`
55
+ : undefined;
56
+ const sel = selector(keyMatcher, engine);
57
+ const completedSel = selector(keyMatcher, `state="COMPLETED"`, engine);
58
+ const w = { range };
59
+ const q = kpiQueries({ sel, completedSel }, w);
60
+ const before = previousWindow(params.period);
61
+ const prev = before ? kpiQueries({ sel, completedSel }, windowAt(before)) : null;
62
+ const inWindow = (series) => increaseIn(series, w);
63
+ const [started, completed, incCreated, incResolved, avg, median, p95, runningNow, openIncidentsNow, actCount, actSum, actP95, defStarted, defCompleted, defIncidents, defDurSum, defDurCount, defRunning, reporting, prevStarted, prevIncidents,] = await Promise.all([
64
+ ch.instant(q.started),
65
+ ch.instant(q.completed),
66
+ ch.instant(q.incidents),
67
+ ch.instant(`sum(${inWindow(`${M.incidentResolved}${sel}`)})`),
68
+ ch.instant(q.avgDuration),
69
+ ch.instant(q.medianDuration),
70
+ ch.instant(q.p95Duration),
71
+ ch.instant(`sum(${engineState(M.processInstancesRunning, sel)})`),
72
+ ch.instant(`sum(${engineState(M.incidentsOpen, sel)})`),
73
+ ch.instant(`sum by (process_definition_key, activity_id, activity_type)(${inWindow(`${M.activityEnded}${sel}`)})`),
74
+ ch.instant(`sum by (process_definition_key, activity_id)(${inWindow(`${M.activityDuration}_sum${sel}`)})`),
75
+ ch.instant(`histogram_quantile(0.95, sum by (process_definition_key, activity_id, le)(${inWindow(`${M.activityDuration}_bucket${sel}`)}))`),
76
+ ch.instant(`sum by (process_definition_key)(${inWindow(`${M.processInstanceStarted}${sel}`)})`),
77
+ ch.instant(`sum by (process_definition_key)(${inWindow(`${M.processInstanceEnded}${completedSel}`)})`),
78
+ ch.instant(`sum by (process_definition_key)(${inWindow(`${M.incidentCreated}${sel}`)})`),
79
+ ch.instant(`sum by (process_definition_key)(${inWindow(`${M.processInstanceDuration}_sum${sel}`)})`),
80
+ ch.instant(`sum by (process_definition_key)(${inWindow(`${M.processInstanceDuration}_count${sel}`)})`),
81
+ ch.instant(`sum by (process_definition_key)(${engineState(M.processInstancesRunning, sel)})`),
82
+ ch.instant(reportingEnginesQuery(selector(engine))),
83
+ prev ? ch.instant(prev.started) : null,
84
+ prev ? ch.instant(prev.incidents) : null,
85
+ ]);
86
+ const totalCount = Math.round(first(started));
87
+ const incidentsCreated = Math.round(first(incCreated));
88
+ const engineReports = reporting.length > 0;
89
+ /** A live gauge: its value; else 0 while an engine in scope reports (no row = none); else unknown. */
90
+ const live = (samples) => {
91
+ const value = firstOrNull(samples);
92
+ if (value !== null)
93
+ return Math.round(value);
94
+ return engineReports ? 0 : null;
95
+ };
96
+ const activities = buildActivityBreakdown(actCount, actSum, actP95);
97
+ const minBucket = Math.max(1, Math.floor(params.minBucketSize ?? DEFAULT_MIN_BUCKET_SIZE));
98
+ const previous = previousFlows(prevStarted, prevIncidents, before?.partial ?? false);
99
+ return {
100
+ processDefinitionKey: params.processDefinitionKey ?? null,
101
+ period: params.period,
102
+ engines: engineIdsOf(params.engine),
103
+ reportingEngines: reportingEngineIds(reporting),
104
+ asOf,
105
+ totalCount,
106
+ completedCount: Math.round(first(completed)),
107
+ incidentsCreated,
108
+ incidentsResolved: Math.round(first(incResolved)),
109
+ incidentRatePct: ratePct(incidentsCreated, totalCount),
110
+ avgDurationMs: msOrNull(firstOrNull(avg)),
111
+ medianDurationMs: msOrNull(firstOrNull(median)),
112
+ p95DurationMs: msOrNull(firstOrNull(p95)),
113
+ runningNow: live(runningNow),
114
+ openIncidentsNow: live(openIncidentsNow),
115
+ previous: previous && {
116
+ ...previous,
117
+ suppressed: Math.min(totalCount, previous.totalCount) < minBucket,
118
+ },
119
+ activityBreakdown: activities.slice(0, ACTIVITY_BREAKDOWN_LIMIT),
120
+ activityCount: activities.length,
121
+ definitionBreakdown: buildDefinitionBreakdown({
122
+ started: defStarted,
123
+ completed: defCompleted,
124
+ incidents: defIncidents,
125
+ durSum: defDurSum,
126
+ durCount: defDurCount,
127
+ running: defRunning,
128
+ }, engineReports || defRunning.length > 0),
129
+ };
130
+ }
131
+ /** A period's length in seconds ("7d" → 604 800). */
132
+ const periodSeconds = (period) => Number.parseInt(period, 10) * DAY_SECONDS;
133
+ /**
134
+ * The window right before `period`, held inside the retention; null when it
135
+ * lies wholly before it (no figures can exist for it).
136
+ */
137
+ function previousWindow(period) {
138
+ const now = nowSeconds();
139
+ const length = periodSeconds(period);
140
+ try {
141
+ return clampWindow("previous period", now - 2 * length, now - length, now);
142
+ }
143
+ catch {
144
+ return null;
145
+ }
146
+ }
147
+ /** The previous window's starts and incidents, or null when it was not read. */
148
+ function previousFlows(started, incidents, partial) {
149
+ if (!started || !incidents)
150
+ return null;
151
+ const totalCount = Math.round(first(started));
152
+ const incidentsCreated = Math.round(first(incidents));
153
+ return {
154
+ totalCount,
155
+ incidentsCreated,
156
+ incidentRatePct: ratePct(incidentsCreated, totalCount),
157
+ partial,
158
+ };
159
+ }
160
+ /** Composite (process, activity) key — activity ids repeat across models. */
161
+ const activityKey = (s) => `${s.metric.process_definition_key ?? ""}\u0000${s.metric.activity_id ?? ""}`;
162
+ function byActivityKey(samples) {
163
+ const out = new Map();
164
+ for (const s of samples)
165
+ out.set(activityKey(s), s.value);
166
+ return out;
167
+ }
168
+ function buildActivityBreakdown(typedCounts, sums, p95) {
169
+ // One row per (process, activity); the type is fixed within one model.
170
+ const rows = new Map();
171
+ for (const s of typedCounts) {
172
+ const k = activityKey(s);
173
+ const row = rows.get(k) ?? {
174
+ key: s.metric.process_definition_key ?? "",
175
+ id: s.metric.activity_id ?? "",
176
+ type: s.metric.activity_type ?? "",
177
+ count: 0,
178
+ };
179
+ row.count += s.value;
180
+ rows.set(k, row);
181
+ }
182
+ const sumBy = byActivityKey(sums);
183
+ const p95By = byActivityKey(p95);
184
+ return [...rows.entries()]
185
+ .map(([k, row]) => {
186
+ const count = Math.round(row.count);
187
+ const sumMs = sumBy.get(k);
188
+ const p95Ms = p95By.get(k);
189
+ return {
190
+ processDefinitionKey: row.key,
191
+ activityId: row.id,
192
+ activityType: row.type,
193
+ executionCount: count,
194
+ avgDurationMs: sumMs !== undefined && count > 0 ? ms(sumMs / count) : null,
195
+ p95DurationMs: p95Ms === undefined ? null : ms(p95Ms),
196
+ totalTimeMs: ms(sumMs ?? 0),
197
+ };
198
+ })
199
+ .sort((a, b) => b.totalTimeMs - a.totalTimeMs);
200
+ }
201
+ /**
202
+ * `runningReported`: an engine in scope reports its state gauges — a key
203
+ * without a running row then runs nothing (0); otherwise its count is
204
+ * unknown (null), not 0.
205
+ */
206
+ function buildDefinitionBreakdown(s, runningReported) {
207
+ const startedBy = byLabel(s.started, "process_definition_key");
208
+ const completedBy = byLabel(s.completed, "process_definition_key");
209
+ const incidentsBy = byLabel(s.incidents, "process_definition_key");
210
+ const sumBy = byLabel(s.durSum, "process_definition_key");
211
+ const countBy = byLabel(s.durCount, "process_definition_key");
212
+ const runningBy = byLabel(s.running, "process_definition_key");
213
+ // A definition belongs in the breakdown when it started work in the window
214
+ // OR has work running now — a long-running process must not vanish.
215
+ const keys = new Set([...Object.keys(startedBy), ...Object.keys(runningBy)]);
216
+ return [...keys]
217
+ .map((key) => {
218
+ const cnt = countBy[key] ?? 0;
219
+ return {
220
+ processDefinitionKey: key,
221
+ totalInstances: Math.round(startedBy[key] ?? 0),
222
+ completed: Math.round(completedBy[key] ?? 0),
223
+ runningNow: runningReported ? Math.round(runningBy[key] ?? 0) : null,
224
+ incidentsCreated: Math.round(incidentsBy[key] ?? 0),
225
+ avgDurationMs: cnt > 0 ? ms((sumBy[key] ?? 0) / cnt) : null,
226
+ };
227
+ })
228
+ .filter((d) => d.totalInstances > 0 || (d.runningNow ?? 0) > 0)
229
+ .sort((a, b) => b.totalInstances - a.totalInstances ||
230
+ (b.runningNow ?? 0) - (a.runningNow ?? 0) ||
231
+ a.processDefinitionKey.localeCompare(b.processDefinitionKey));
232
+ }
233
+ /**
234
+ * Current failure / incident state, from the live state gauges
235
+ * (`camunda_incidents_open`, `camunda_jobs_failed`, `camunda_process_instances_running`).
236
+ *
237
+ * Point-in-time ("what is failing now"), so it is robust regardless of how the
238
+ * data arrived — unlike a rate window over `incident_created`, which reads zero
239
+ * on backdated/bulk-imported history. Per process: instances running now, dead
240
+ * jobs, open incidents and open incidents per 100 running instances. Groups
241
+ * are (process, incident type) — the gauge carries no message, activity id,
242
+ * timestamps or instance ids, so the rows carry none either.
243
+ */
244
+ export async function failureDashboardData(ch, params) {
245
+ const asOf = asOfNow();
246
+ const sel = selector(engineMatcher(params.engine));
247
+ const [patterns, runningByKey, incidentsByKey, deadJobsByKey] = await Promise.all([
248
+ ch.instant(`sum by (process_definition_key, incident_type)(${engineState(M.incidentsOpen, sel)})`),
249
+ ch.instant(`sum by (process_definition_key)(${engineState(M.processInstancesRunning, sel)})`),
250
+ ch.instant(`sum by (process_definition_key)(${engineState(M.incidentsOpen, sel)})`),
251
+ ch.instant(`sum by (process_definition_key)(${engineState(M.jobsFailed, sel)})`),
252
+ ]);
253
+ // Totals are computed over ALL patterns; only the list itself is capped at
254
+ // the top 50 for display.
255
+ const allPatterns = patterns
256
+ .map((s) => ({
257
+ incidentType: s.metric.incident_type ?? "",
258
+ processDefinitionKey: s.metric.process_definition_key ?? "",
259
+ incidentCount: Math.round(s.value),
260
+ }))
261
+ .filter((p) => p.incidentCount > 0)
262
+ .sort((a, b) => b.incidentCount - a.incidentCount);
263
+ const errorPatterns = allPatterns.slice(0, 50);
264
+ const runningBy = byLabel(runningByKey, "process_definition_key");
265
+ const incidentBy = byLabel(incidentsByKey, "process_definition_key");
266
+ const deadBy = byLabel(deadJobsByKey, "process_definition_key");
267
+ const processBreakdown = Object.keys(incidentBy)
268
+ .map((key) => {
269
+ const running = Math.round(runningBy[key] ?? 0);
270
+ const openIncidents = Math.round(incidentBy[key] ?? 0);
271
+ return {
272
+ processDefinitionKey: key,
273
+ runningNow: running,
274
+ deadJobs: Math.round(deadBy[key] ?? 0),
275
+ openIncidents,
276
+ incidentRatePct: ratePct(openIncidents, running),
277
+ };
278
+ })
279
+ .filter((p) => p.openIncidents > 0)
280
+ .sort((a, b) => b.openIncidents - a.openIncidents);
281
+ const totalIncidents = allPatterns.reduce((s, p) => s + p.incidentCount, 0);
282
+ return {
283
+ engines: engineIdsOf(params.engine),
284
+ totalIncidents,
285
+ uniqueErrorPatterns: allPatterns.length,
286
+ mostAffectedProcess: processBreakdown.length > 0 ? processBreakdown[0].processDefinitionKey : null,
287
+ errorPatterns,
288
+ processBreakdown,
289
+ asOf,
290
+ };
291
+ }
292
+ //# sourceMappingURL=dashboard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dashboard.js","sourceRoot":"","sources":["../../src/queries/dashboard.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=dashboard.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dashboard.test.d.ts","sourceRoot":"","sources":["../../src/queries/dashboard.test.ts"],"names":[],"mappings":""}