@oneuptime/common 11.3.5 → 11.3.7

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 (65) hide show
  1. package/Server/Infrastructure/Queue.ts +103 -16
  2. package/Server/Services/AlertService.ts +302 -202
  3. package/Server/Services/AnalyticsDatabaseService.ts +9 -5
  4. package/Server/Services/IncidentService.ts +410 -306
  5. package/Server/Services/TeamMemberService.ts +38 -1
  6. package/Server/Utils/AnalyticsDatabase/StatementGenerator.ts +31 -0
  7. package/Server/Utils/Monitor/IncomingRequestIncidentGrouping.ts +428 -0
  8. package/Server/Utils/Monitor/MonitorAlert.ts +158 -8
  9. package/Server/Utils/Monitor/MonitorCriteriaEvaluator.ts +26 -0
  10. package/Server/Utils/Monitor/MonitorIncident.ts +147 -2
  11. package/Server/Utils/Monitor/MonitorResource.ts +74 -0
  12. package/Tests/Server/Utils/AnalyticsDatabase/ClusterAwareSchema.test.ts +2 -1
  13. package/Tests/Server/Utils/AnalyticsDatabase/StatementGenerator.test.ts +32 -0
  14. package/Tests/Server/Utils/Monitor/IncomingRequestIncidentGrouping.test.ts +389 -0
  15. package/Tests/Server/Utils/Monitor/SeriesAbsenceResolutionGuard.test.ts +177 -0
  16. package/Tests/Types/Events/Recurring.test.ts +475 -0
  17. package/Tests/Types/Monitor/CriteriaFilter.test.ts +348 -0
  18. package/Tests/Types/OnCallDutyPolicy/RestrictionTimes.test.ts +331 -0
  19. package/Tests/UI/Components/Alert.test.tsx +23 -15
  20. package/Tests/UI/Components/Breadcrumbs.test.tsx +18 -6
  21. package/Tests/UI/Components/Button.test.tsx +3 -3
  22. package/Tests/UI/Components/DictionaryFilterOperator.test.ts +174 -0
  23. package/Tests/UI/Components/EmptyState/EmptyState.test.tsx +4 -3
  24. package/Tests/UI/Components/Input.test.tsx +3 -2
  25. package/Tests/UI/Components/Pill.test.tsx +4 -2
  26. package/Tests/UI/Components/SideMenuItem.test.tsx +18 -8
  27. package/Tests/UI/Components/TextArea.test.tsx +6 -4
  28. package/Types/Monitor/IncomingMonitor/IncidentGroupingConfig.ts +74 -0
  29. package/Types/Monitor/MonitorCriteriaInstance.ts +22 -0
  30. package/UI/Components/Dictionary/Dictionary.tsx +123 -50
  31. package/UI/Components/Dictionary/DictionaryFilterOperator.ts +96 -1
  32. package/UI/Components/MasterPage/MasterPage.tsx +5 -3
  33. package/build/dist/Server/Infrastructure/Queue.js +83 -15
  34. package/build/dist/Server/Infrastructure/Queue.js.map +1 -1
  35. package/build/dist/Server/Services/AlertService.js +255 -161
  36. package/build/dist/Server/Services/AlertService.js.map +1 -1
  37. package/build/dist/Server/Services/AnalyticsDatabaseService.js +9 -5
  38. package/build/dist/Server/Services/AnalyticsDatabaseService.js.map +1 -1
  39. package/build/dist/Server/Services/IncidentService.js +322 -236
  40. package/build/dist/Server/Services/IncidentService.js.map +1 -1
  41. package/build/dist/Server/Services/TeamMemberService.js +37 -1
  42. package/build/dist/Server/Services/TeamMemberService.js.map +1 -1
  43. package/build/dist/Server/Utils/AnalyticsDatabase/StatementGenerator.js +26 -0
  44. package/build/dist/Server/Utils/AnalyticsDatabase/StatementGenerator.js.map +1 -1
  45. package/build/dist/Server/Utils/Monitor/IncomingRequestIncidentGrouping.js +288 -0
  46. package/build/dist/Server/Utils/Monitor/IncomingRequestIncidentGrouping.js.map +1 -0
  47. package/build/dist/Server/Utils/Monitor/MonitorAlert.js +119 -8
  48. package/build/dist/Server/Utils/Monitor/MonitorAlert.js.map +1 -1
  49. package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js +24 -0
  50. package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js.map +1 -1
  51. package/build/dist/Server/Utils/Monitor/MonitorIncident.js +103 -2
  52. package/build/dist/Server/Utils/Monitor/MonitorIncident.js.map +1 -1
  53. package/build/dist/Server/Utils/Monitor/MonitorResource.js +62 -0
  54. package/build/dist/Server/Utils/Monitor/MonitorResource.js.map +1 -1
  55. package/build/dist/Types/Monitor/IncomingMonitor/IncidentGroupingConfig.js +8 -0
  56. package/build/dist/Types/Monitor/IncomingMonitor/IncidentGroupingConfig.js.map +1 -0
  57. package/build/dist/Types/Monitor/MonitorCriteriaInstance.js +10 -0
  58. package/build/dist/Types/Monitor/MonitorCriteriaInstance.js.map +1 -1
  59. package/build/dist/UI/Components/Dictionary/Dictionary.js +60 -9
  60. package/build/dist/UI/Components/Dictionary/Dictionary.js.map +1 -1
  61. package/build/dist/UI/Components/Dictionary/DictionaryFilterOperator.js +69 -0
  62. package/build/dist/UI/Components/Dictionary/DictionaryFilterOperator.js.map +1 -1
  63. package/build/dist/UI/Components/MasterPage/MasterPage.js +5 -3
  64. package/build/dist/UI/Components/MasterPage/MasterPage.js.map +1 -1
  65. package/package.json +1 -1
@@ -55,7 +55,7 @@ export interface ComponentProps {
55
55
 
56
56
  interface Item {
57
57
  key: string;
58
- value: string | number | boolean;
58
+ value: string | number | boolean | Array<string>;
59
59
  type: ValueType;
60
60
  operator: DictionaryFilterOperator;
61
61
  }
@@ -108,14 +108,18 @@ const DictionaryForm: FunctionComponent<ComponentProps> = (
108
108
  const detected: {
109
109
  operator: DictionaryFilterOperator;
110
110
  rawValue: string;
111
+ rawValues?: Array<string> | undefined;
111
112
  } = detectOperatorFromValue(rawEntry);
112
113
 
113
114
  /*
114
- * Restore typed values (number/boolean) for the form input from
115
+ * Restore typed values (number/boolean/array) for the form input from
115
116
  * the stringified raw representation when the column type allows.
116
117
  */
117
- let restoredValue: string | number | boolean = detected.rawValue;
118
- if (valueType === ValueType.Number && detected.rawValue !== "") {
118
+ let restoredValue: string | number | boolean | Array<string> =
119
+ detected.rawValue;
120
+ if (getOperatorOption(detected.operator).expectsMultiValue) {
121
+ restoredValue = detected.rawValues ?? [];
122
+ } else if (valueType === ValueType.Number && detected.rawValue !== "") {
119
123
  const parsed: number = Number(detected.rawValue);
120
124
  restoredValue = isNaN(parsed) ? detected.rawValue : parsed;
121
125
  } else if (valueType === ValueType.Boolean) {
@@ -178,6 +182,16 @@ const DictionaryForm: FunctionComponent<ComponentProps> = (
178
182
  });
179
183
  return;
180
184
  }
185
+ if (operatorOption.expectsMultiValue) {
186
+ result[item.key] = buildDictionaryValue({
187
+ operator: item.operator,
188
+ rawValue: "",
189
+ rawValues: Array.isArray(item.value)
190
+ ? (item.value as Array<string>)
191
+ : [],
192
+ });
193
+ return;
194
+ }
181
195
  result[item.key] = buildDictionaryValue({
182
196
  operator: item.operator,
183
197
  rawValue: String(item.value ?? ""),
@@ -298,11 +312,22 @@ const DictionaryForm: FunctionComponent<ComponentProps> = (
298
312
  const newData: Array<Item> = [...data];
299
313
  newData[index]!.operator = newOperator;
300
314
  /*
301
- * Reset the value when switching to a value-less
302
- * operator so we don't ship stale text downstream.
315
+ * Reset the value when the input shape changes so we
316
+ * don't ship a stale scalar where an array is expected
317
+ * (or vice versa). Value-less operators clear to "".
303
318
  */
304
319
  if (newOperatorOption.hidesValueInput) {
305
320
  newData[index]!.value = "";
321
+ } else if (
322
+ newOperatorOption.expectsMultiValue &&
323
+ !Array.isArray(newData[index]!.value)
324
+ ) {
325
+ newData[index]!.value = [];
326
+ } else if (
327
+ !newOperatorOption.expectsMultiValue &&
328
+ Array.isArray(newData[index]!.value)
329
+ ) {
330
+ newData[index]!.value = "";
306
331
  }
307
332
  setData(newData);
308
333
  onDataChange(newData);
@@ -370,51 +395,99 @@ const DictionaryForm: FunctionComponent<ComponentProps> = (
370
395
  }}
371
396
  />
372
397
  )}
373
- {!hideValueInput && item.type === ValueType.Text && (
374
- <AutocompleteTextInput
375
- value={item.value.toString()}
376
- placeholder={
377
- operatorOption.expectsNumericValue
378
- ? "Number"
379
- : props.valuePlaceholder
380
- }
381
- suggestions={
382
- operatorOption.expectsNumericValue
383
- ? undefined
384
- : item.key && props.valueSuggestions?.[item.key]
385
- ? props.valueSuggestions[item.key]
386
- : undefined
387
- }
388
- isLoadingSuggestions={
389
- operatorOption.expectsNumericValue
390
- ? false
391
- : Boolean(
392
- item.key &&
393
- props.loadingValueKeys?.includes(item.key),
394
- )
395
- }
396
- loadingMessage="Loading values..."
397
- onChange={(value: string) => {
398
- const newData: Array<Item> = [...data];
399
- newData[index]!.value = value;
400
- setData(newData);
401
- onDataChange(newData);
402
-
403
- /*
404
- * Let the parent refine value suggestions server-side
405
- * as the user types. Skip numeric operators — those
406
- * have no value suggestions to narrow.
407
- */
408
- if (
409
- props.onValueSearch &&
410
- item.key &&
411
- !operatorOption.expectsNumericValue
412
- ) {
413
- props.onValueSearch(item.key, value);
398
+ {!hideValueInput &&
399
+ item.type === ValueType.Text &&
400
+ operatorOption.expectsMultiValue && (
401
+ <Dropdown
402
+ isMultiSelect={true}
403
+ placeholder={props.valuePlaceholder}
404
+ value={(Array.isArray(item.value) ? item.value : []).map(
405
+ (selectedValue: string) => {
406
+ return { label: selectedValue, value: selectedValue };
407
+ },
408
+ )}
409
+ options={Array.from(
410
+ new Set([
411
+ ...(Array.isArray(item.value)
412
+ ? (item.value as Array<string>)
413
+ : []),
414
+ ...(item.key && props.valueSuggestions?.[item.key]
415
+ ? props.valueSuggestions[item.key]!
416
+ : []),
417
+ ]),
418
+ ).map((optionValue: string) => {
419
+ return { label: optionValue, value: optionValue };
420
+ })}
421
+ onChange={(
422
+ selectedOption:
423
+ | DropdownValue
424
+ | Array<DropdownValue>
425
+ | null,
426
+ ) => {
427
+ const selectedValues: Array<string> = Array.isArray(
428
+ selectedOption,
429
+ )
430
+ ? selectedOption.map((selected: DropdownValue) => {
431
+ return String(selected);
432
+ })
433
+ : selectedOption !== null &&
434
+ selectedOption !== undefined
435
+ ? [String(selectedOption)]
436
+ : [];
437
+ const newData: Array<Item> = [...data];
438
+ newData[index]!.value = selectedValues;
439
+ setData(newData);
440
+ onDataChange(newData);
441
+ }}
442
+ />
443
+ )}
444
+ {!hideValueInput &&
445
+ item.type === ValueType.Text &&
446
+ !operatorOption.expectsMultiValue && (
447
+ <AutocompleteTextInput
448
+ value={item.value.toString()}
449
+ placeholder={
450
+ operatorOption.expectsNumericValue
451
+ ? "Number"
452
+ : props.valuePlaceholder
414
453
  }
415
- }}
416
- />
417
- )}
454
+ suggestions={
455
+ operatorOption.expectsNumericValue
456
+ ? undefined
457
+ : item.key && props.valueSuggestions?.[item.key]
458
+ ? props.valueSuggestions[item.key]
459
+ : undefined
460
+ }
461
+ isLoadingSuggestions={
462
+ operatorOption.expectsNumericValue
463
+ ? false
464
+ : Boolean(
465
+ item.key &&
466
+ props.loadingValueKeys?.includes(item.key),
467
+ )
468
+ }
469
+ loadingMessage="Loading values..."
470
+ onChange={(value: string) => {
471
+ const newData: Array<Item> = [...data];
472
+ newData[index]!.value = value;
473
+ setData(newData);
474
+ onDataChange(newData);
475
+
476
+ /*
477
+ * Let the parent refine value suggestions server-side
478
+ * as the user types. Skip numeric operators — those
479
+ * have no value suggestions to narrow.
480
+ */
481
+ if (
482
+ props.onValueSearch &&
483
+ item.key &&
484
+ !operatorOption.expectsNumericValue
485
+ ) {
486
+ props.onValueSearch(item.key, value);
487
+ }
488
+ }}
489
+ />
490
+ )}
418
491
 
419
492
  {!hideValueInput && item.type === ValueType.Number && (
420
493
  <Input
@@ -10,6 +10,8 @@ import LessThan from "../../../Types/BaseDatabase/LessThan";
10
10
  import LessThanOrEqual from "../../../Types/BaseDatabase/LessThanOrEqual";
11
11
  import IsNull from "../../../Types/BaseDatabase/IsNull";
12
12
  import NotNull from "../../../Types/BaseDatabase/NotNull";
13
+ import Includes from "../../../Types/BaseDatabase/Includes";
14
+ import IncludesNone from "../../../Types/BaseDatabase/IncludesNone";
13
15
  import { ObjectType } from "../../../Types/JSON";
14
16
 
15
17
  /*
@@ -20,6 +22,8 @@ import { ObjectType } from "../../../Types/JSON";
20
22
  export enum DictionaryFilterOperator {
21
23
  EqualTo = "EqualTo",
22
24
  NotEqual = "NotEqual",
25
+ IsAnyOf = "IsAnyOf",
26
+ IsNoneOf = "IsNoneOf",
23
27
  Contains = "Contains",
24
28
  NotContains = "NotContains",
25
29
  StartsWith = "StartsWith",
@@ -40,6 +44,11 @@ export interface DictionaryFilterOperatorOption {
40
44
  hidesValueInput?: boolean | undefined;
41
45
  // Numeric operators force a numeric value input.
42
46
  expectsNumericValue?: boolean | undefined;
47
+ /*
48
+ * Multi-value operators (IsAnyOf) take an array of values and render a
49
+ * multi-select instead of a single value input.
50
+ */
51
+ expectsMultiValue?: boolean | undefined;
43
52
  }
44
53
 
45
54
  export const DICTIONARY_FILTER_OPERATOR_OPTIONS: ReadonlyArray<DictionaryFilterOperatorOption> =
@@ -54,6 +63,18 @@ export const DICTIONARY_FILTER_OPERATOR_OPTIONS: ReadonlyArray<DictionaryFilterO
54
63
  label: "does not equal",
55
64
  symbol: "!=",
56
65
  },
66
+ {
67
+ operator: DictionaryFilterOperator.IsAnyOf,
68
+ label: "is any of",
69
+ symbol: "is any of",
70
+ expectsMultiValue: true,
71
+ },
72
+ {
73
+ operator: DictionaryFilterOperator.IsNoneOf,
74
+ label: "is none of",
75
+ symbol: "is none of",
76
+ expectsMultiValue: true,
77
+ },
57
78
  {
58
79
  operator: DictionaryFilterOperator.Contains,
59
80
  label: "contains",
@@ -127,7 +148,9 @@ export type DictionaryEntryValue =
127
148
  | LessThan<number>
128
149
  | LessThanOrEqual<number>
129
150
  | IsNull
130
- | NotNull;
151
+ | NotNull
152
+ | Includes
153
+ | IncludesNone;
131
154
 
132
155
  export const getOperatorOption: (
133
156
  operator: DictionaryFilterOperator,
@@ -162,7 +185,13 @@ const matchesObjectType: (value: unknown, type: ObjectType) => boolean = (
162
185
 
163
186
  interface RawValueAndOperator {
164
187
  operator: DictionaryFilterOperator;
188
+ /*
189
+ * For multi-value operators (IsAnyOf) this is a display-friendly joined
190
+ * string (e.g. "system, user") so existing chip/viewer consumers render
191
+ * it without changes; `rawValues` carries the structured array.
192
+ */
165
193
  rawValue: string;
194
+ rawValues?: Array<string> | undefined;
166
195
  }
167
196
 
168
197
  /**
@@ -201,6 +230,46 @@ export const detectOperatorFromValue: (
201
230
  return { operator: DictionaryFilterOperator.IsNotEmpty, rawValue: "" };
202
231
  }
203
232
 
233
+ if (
234
+ value instanceof Includes ||
235
+ matchesObjectType(value, ObjectType.Includes)
236
+ ) {
237
+ const rawArray: unknown =
238
+ value instanceof Includes
239
+ ? value.values
240
+ : (value as { value?: unknown }).value;
241
+ const values: Array<string> = Array.isArray(rawArray)
242
+ ? rawArray.map((entry: unknown) => {
243
+ return String(entry);
244
+ })
245
+ : [];
246
+ return {
247
+ operator: DictionaryFilterOperator.IsAnyOf,
248
+ rawValue: values.join(", "),
249
+ rawValues: values,
250
+ };
251
+ }
252
+
253
+ if (
254
+ value instanceof IncludesNone ||
255
+ matchesObjectType(value, ObjectType.IncludesNone)
256
+ ) {
257
+ const rawArray: unknown =
258
+ value instanceof IncludesNone
259
+ ? value.values
260
+ : (value as { value?: unknown }).value;
261
+ const values: Array<string> = Array.isArray(rawArray)
262
+ ? rawArray.map((entry: unknown) => {
263
+ return String(entry);
264
+ })
265
+ : [];
266
+ return {
267
+ operator: DictionaryFilterOperator.IsNoneOf,
268
+ rawValue: values.join(", "),
269
+ rawValues: values,
270
+ };
271
+ }
272
+
204
273
  const wrapperValue: string =
205
274
  value instanceof Object && "value" in value
206
275
  ? String(
@@ -315,9 +384,11 @@ export const detectOperatorFromValue: (
315
384
  export const buildDictionaryValue: (input: {
316
385
  operator: DictionaryFilterOperator;
317
386
  rawValue: string;
387
+ rawValues?: Array<string> | undefined;
318
388
  }) => DictionaryEntryValue = (input: {
319
389
  operator: DictionaryFilterOperator;
320
390
  rawValue: string;
391
+ rawValues?: Array<string> | undefined;
321
392
  }): DictionaryEntryValue => {
322
393
  const { operator, rawValue } = input;
323
394
  const trimmed: string = rawValue ?? "";
@@ -327,6 +398,30 @@ export const buildDictionaryValue: (input: {
327
398
  return trimmed;
328
399
  case DictionaryFilterOperator.NotEqual:
329
400
  return new NotEqual<string>(trimmed);
401
+ case DictionaryFilterOperator.IsAnyOf:
402
+ /*
403
+ * Multi-value membership → SQL `attributes['k'] IN (...)`. Drop empty
404
+ * entries; an empty Includes is treated as "All" downstream
405
+ * (sanitizeAttributeFilters drops it and StatementGenerator skips the
406
+ * predicate rather than emitting `IN ()`).
407
+ */
408
+ return new Includes(
409
+ (input.rawValues ?? []).filter((entry: string) => {
410
+ return entry !== "";
411
+ }),
412
+ );
413
+ case DictionaryFilterOperator.IsNoneOf:
414
+ /*
415
+ * Multi-value exclusion → SQL `attributes['k'] NOT IN (...)`. Drop
416
+ * empty entries; an empty IncludesNone is treated as "All" downstream
417
+ * (sanitizeAttributeFilters drops it and StatementGenerator skips the
418
+ * predicate rather than emitting `NOT IN ()`).
419
+ */
420
+ return new IncludesNone(
421
+ (input.rawValues ?? []).filter((entry: string) => {
422
+ return entry !== "";
423
+ }),
424
+ );
330
425
  case DictionaryFilterOperator.Contains:
331
426
  /*
332
427
  * Statement.serialize already wraps Search instances with `%...%`,
@@ -78,9 +78,11 @@ const MasterPage: FunctionComponent<ComponentProps> = (
78
78
  <main
79
79
  id="main-content"
80
80
  tabIndex={-1}
81
- // grow so the main content fills the remaining vertical space in
82
- // the flex column, keeping the page top-aligned and pinning the
83
- // footer to the bottom even when the content is short.
81
+ /*
82
+ * grow so the main content fills the remaining vertical space in
83
+ * the flex column, keeping the page top-aligned and pinning the
84
+ * footer to the bottom even when the content is short.
85
+ */
84
86
  className="grow focus:outline-none"
85
87
  >
86
88
  {props.children}
@@ -60,8 +60,8 @@ class Queue {
60
60
  // Keep BullMQ data under control to avoid Redis bloat
61
61
  defaultJobOptions: {
62
62
  // keep only recent completed/failed jobs
63
- removeOnComplete: { count: 500 }, // keep last 1000 completed jobs
64
- removeOnFail: { count: 100 }, // keep last 500 failed jobs
63
+ removeOnComplete: { count: 500 }, // keep last 500 completed jobs
64
+ removeOnFail: { count: 100 }, // keep last 100 failed jobs
65
65
  },
66
66
  /*
67
67
  * Optionally cap the event stream length (supported in BullMQ >= v5)
@@ -80,22 +80,71 @@ class Queue {
80
80
  logger.error("Error setting up reconnect listener for queue");
81
81
  logger.error(err);
82
82
  });
83
- // Fire-and-forget initial cleanup for legacy/old data if not done before
84
- if (!this.cleanedQueueNames.has(queueName)) {
85
- this.cleanedQueueNames.add(queueName);
86
- // Clean jobs older than 1 days to reclaim memory from historic runs
87
- const oneDaysMs = 1 * 24 * 60 * 60 * 1000;
88
- void (async () => {
89
- try {
90
- await queue.clean(oneDaysMs, 1000, "completed");
91
- await queue.clean(oneDaysMs, 1000, "failed");
83
+ /*
84
+ * Lazy fallback for the startup sweep: the first time a queue is created in
85
+ * this process, kick off its once-per-process terminal-job cleanup. The
86
+ * eager path (cleanAllQueuesOnStartup, called at service boot) normally
87
+ * wins; whichever runs first is the only one to sweep, via the gate inside
88
+ * cleanQueueOnStartup(). Fire and forget so it never blocks enqueue.
89
+ */
90
+ void this.cleanQueueOnStartup(queueName);
91
+ return queue;
92
+ }
93
+ /**
94
+ * Eagerly sweeps every queue's terminal (completed/failed) jobs at process
95
+ * startup, so the Completed/Failed counts on the admin Health page reset on a
96
+ * pod (re)start regardless of when — or whether — each queue next produces a
97
+ * job. Call once during service boot (see App/Index.ts). Each queue is swept
98
+ * at most once per process via the cleanedQueueNames gate, so this is safe to
99
+ * call alongside the lazy getQueue() path and from any service role.
100
+ */
101
+ static async cleanAllQueuesOnStartup() {
102
+ await Promise.all(Object.values(QueueName).map((queueName) => {
103
+ return this.cleanQueueOnStartup(queueName);
104
+ }));
105
+ }
106
+ /**
107
+ * Removes terminal (completed/failed) jobs for a single queue, at most once
108
+ * per process (gated by cleanedQueueNames). Drains in batches because
109
+ * BullMQ's clean() caps each call at `limit` removals. Leaves live states
110
+ * (waiting/active/delayed) untouched. Best-effort: any error is logged and
111
+ * swallowed so a transient Redis hiccup at boot never breaks queue setup.
112
+ */
113
+ static async cleanQueueOnStartup(queueName) {
114
+ /*
115
+ * Gate synchronously, before any await, so the lazy getQueue() trigger and
116
+ * the eager cleanAllQueuesOnStartup() call can't both sweep the same queue.
117
+ */
118
+ if (this.cleanedQueueNames.has(queueName)) {
119
+ return;
120
+ }
121
+ this.cleanedQueueNames.add(queueName);
122
+ const queue = this.getQueue(queueName);
123
+ const terminalStates = [
124
+ "completed",
125
+ "failed",
126
+ ];
127
+ for (const state of terminalStates) {
128
+ try {
129
+ let removedTotal = 0;
130
+ for (let batch = 0; batch < this.STARTUP_CLEANUP_MAX_BATCHES; batch++) {
131
+ const removed = await queue.clean(this.STARTUP_CLEANUP_GRACE_MS, this.STARTUP_CLEANUP_BATCH_SIZE, state);
132
+ removedTotal += removed.length;
133
+ // A short batch means the state is drained; stop looping.
134
+ if (removed.length < this.STARTUP_CLEANUP_BATCH_SIZE) {
135
+ break;
136
+ }
92
137
  }
93
- catch (_a) {
94
- // ignore cleanup errors to not impact normal flow
138
+ if (removedTotal > 0) {
139
+ logger.debug(`Queue ${queueName}: removed ${removedTotal} ${state} job(s) on startup`);
95
140
  }
96
- })();
141
+ }
142
+ catch (err) {
143
+ // Ignore cleanup errors to not impact normal flow.
144
+ logger.debug(`Queue ${queueName}: startup ${state} cleanup failed`);
145
+ logger.debug(err);
146
+ }
97
147
  }
98
- return queue;
99
148
  }
100
149
  static async removeJob(queueName, jobId) {
101
150
  if (!jobId) {
@@ -340,6 +389,19 @@ Queue.cleanedQueueNames = new Set();
340
389
  Queue.queueSizeMetricRegistered = false;
341
390
  // store repeatable jobs to re-add on reconnect
342
391
  Queue.repeatableJobs = {};
392
+ /*
393
+ * How old (in ms) a completed/failed job must be before the startup sweep
394
+ * removes it. 0 means "remove all terminal jobs on every restart", which
395
+ * resets the Completed/Failed counts on the admin Health page so operators
396
+ * stop seeing stale failures after a deploy/restart. Raise this (e.g. to
397
+ * 24 * 60 * 60 * 1000) if you'd rather keep recent failures around for
398
+ * crash-loop debugging.
399
+ */
400
+ Queue.STARTUP_CLEANUP_GRACE_MS = 0;
401
+ // Number of jobs removed per clean() call; we loop until the state is drained.
402
+ Queue.STARTUP_CLEANUP_BATCH_SIZE = 1000;
403
+ // Safety cap so a pathologically large backlog can't loop forever.
404
+ Queue.STARTUP_CLEANUP_MAX_BATCHES = 1000;
343
405
  export default Queue;
344
406
  __decorate([
345
407
  CaptureSpan(),
@@ -347,6 +409,12 @@ __decorate([
347
409
  __metadata("design:paramtypes", [String]),
348
410
  __metadata("design:returntype", BullQueue)
349
411
  ], Queue, "getQueue", null);
412
+ __decorate([
413
+ CaptureSpan(),
414
+ __metadata("design:type", Function),
415
+ __metadata("design:paramtypes", []),
416
+ __metadata("design:returntype", Promise)
417
+ ], Queue, "cleanAllQueuesOnStartup", null);
350
418
  __decorate([
351
419
  CaptureSpan(),
352
420
  __metadata("design:type", Function),
@@ -1 +1 @@
1
- {"version":3,"file":"Queue.js","sourceRoot":"","sources":["../../../../Server/Infrastructure/Queue.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Queue.js","sourceRoot":"","sources":["../../../../Server/Infrastructure/Queue.ts"],"names":[],"mappings":"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"}