@oneuptime/common 11.5.11 → 11.5.12

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 (71) hide show
  1. package/Models/AnalyticsModels/NetworkFlow.ts +12 -1
  2. package/Server/API/StatusPageAPI.ts +14 -1
  3. package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +0 -2
  4. package/Server/Services/IncidentService.ts +62 -67
  5. package/Server/Services/MonitorGroupService.ts +15 -2
  6. package/Server/Services/MonitorService.ts +91 -3
  7. package/Server/Services/MonitorStatusTimelineService.ts +285 -100
  8. package/Server/Services/StatusPageService.ts +59 -34
  9. package/Server/Utils/Monitor/MonitorResource.ts +43 -14
  10. package/Server/Utils/Monitor/MonitorStatusTimeline.ts +32 -7
  11. package/Server/Utils/Monitor/MonitorStatusTimelineReconciler.ts +362 -0
  12. package/Tests/Server/Services/MonitorStatusTimelineService.test.ts +235 -0
  13. package/Tests/Server/Utils/Monitor/MonitorStatusTimelineReconciler.test.ts +555 -0
  14. package/Tests/Types/Database/CompareOperatorWireSerialization.test.ts +216 -0
  15. package/Tests/Types/Database/GreaterThan.test.ts +5 -1
  16. package/Tests/Types/Database/GreaterThanOrEqual.test.ts +5 -1
  17. package/Tests/Types/Database/GreaterThanOrNull.test.ts +24 -1
  18. package/Tests/Types/Database/LessThan.test.ts +5 -1
  19. package/Tests/Types/Database/LessThanOrEqual.test.ts +24 -1
  20. package/Tests/Types/Database/LessThanOrNull.test.ts +5 -1
  21. package/Tests/Utils/Uptime/UptimeUtil.test.ts +726 -0
  22. package/Types/BaseDatabase/GreaterThan.ts +8 -1
  23. package/Types/BaseDatabase/GreaterThanOrEqual.ts +8 -1
  24. package/Types/BaseDatabase/GreaterThanOrNull.ts +9 -1
  25. package/Types/BaseDatabase/LessThan.ts +8 -1
  26. package/Types/BaseDatabase/LessThanOrEqual.ts +9 -1
  27. package/Types/BaseDatabase/LessThanOrNull.ts +8 -1
  28. package/Utils/StatusPage/ResourceUptime.ts +11 -1
  29. package/Utils/Uptime/UptimeUtil.ts +142 -36
  30. package/build/dist/Models/AnalyticsModels/NetworkFlow.js +12 -1
  31. package/build/dist/Models/AnalyticsModels/NetworkFlow.js.map +1 -1
  32. package/build/dist/Server/API/StatusPageAPI.js +12 -2
  33. package/build/dist/Server/API/StatusPageAPI.js.map +1 -1
  34. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +0 -2
  35. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
  36. package/build/dist/Server/Services/IncidentService.js +47 -56
  37. package/build/dist/Server/Services/IncidentService.js.map +1 -1
  38. package/build/dist/Server/Services/MonitorGroupService.js +15 -2
  39. package/build/dist/Server/Services/MonitorGroupService.js.map +1 -1
  40. package/build/dist/Server/Services/MonitorService.js +66 -3
  41. package/build/dist/Server/Services/MonitorService.js.map +1 -1
  42. package/build/dist/Server/Services/MonitorStatusTimelineService.js +244 -102
  43. package/build/dist/Server/Services/MonitorStatusTimelineService.js.map +1 -1
  44. package/build/dist/Server/Services/StatusPageService.js +57 -33
  45. package/build/dist/Server/Services/StatusPageService.js.map +1 -1
  46. package/build/dist/Server/Utils/Monitor/MonitorResource.js +34 -12
  47. package/build/dist/Server/Utils/Monitor/MonitorResource.js.map +1 -1
  48. package/build/dist/Server/Utils/Monitor/MonitorStatusTimeline.js +25 -8
  49. package/build/dist/Server/Utils/Monitor/MonitorStatusTimeline.js.map +1 -1
  50. package/build/dist/Server/Utils/Monitor/MonitorStatusTimelineReconciler.js +268 -0
  51. package/build/dist/Server/Utils/Monitor/MonitorStatusTimelineReconciler.js.map +1 -0
  52. package/build/dist/Types/BaseDatabase/GreaterThan.js +8 -1
  53. package/build/dist/Types/BaseDatabase/GreaterThan.js.map +1 -1
  54. package/build/dist/Types/BaseDatabase/GreaterThanOrEqual.js +8 -1
  55. package/build/dist/Types/BaseDatabase/GreaterThanOrEqual.js.map +1 -1
  56. package/build/dist/Types/BaseDatabase/GreaterThanOrNull.js +9 -1
  57. package/build/dist/Types/BaseDatabase/GreaterThanOrNull.js.map +1 -1
  58. package/build/dist/Types/BaseDatabase/LessThan.js +8 -1
  59. package/build/dist/Types/BaseDatabase/LessThan.js.map +1 -1
  60. package/build/dist/Types/BaseDatabase/LessThanOrEqual.js +9 -1
  61. package/build/dist/Types/BaseDatabase/LessThanOrEqual.js.map +1 -1
  62. package/build/dist/Types/BaseDatabase/LessThanOrNull.js +8 -1
  63. package/build/dist/Types/BaseDatabase/LessThanOrNull.js.map +1 -1
  64. package/build/dist/Utils/StatusPage/ResourceUptime.js +4 -1
  65. package/build/dist/Utils/StatusPage/ResourceUptime.js.map +1 -1
  66. package/build/dist/Utils/Uptime/UptimeUtil.js +86 -33
  67. package/build/dist/Utils/Uptime/UptimeUtil.js.map +1 -1
  68. package/package.json +1 -1
  69. package/Server/Infrastructure/Postgres/SchemaMigrations/1784401962564-MigrationName.ts +0 -101
  70. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784401962564-MigrationName.js +0 -40
  71. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784401962564-MigrationName.js.map +0 -1
@@ -22,15 +22,51 @@ import MonitorStatusTimeline from "../../Models/DatabaseModels/MonitorStatusTime
22
22
  import MonitorFeedService from "./MonitorFeedService";
23
23
  import { MonitorFeedEventType } from "../../Models/DatabaseModels/MonitorFeed";
24
24
  import MonitorStatusService from "./MonitorStatusService";
25
+ import ServerException from "../../Types/Exception/ServerException";
26
+ /*
27
+ * Thrown by onBeforeCreate when the incoming status is the same as the status of
28
+ * the row immediately before it. Probe ingest call sites (Utils/Monitor/MonitorStatusTimeline
29
+ * and Utils/Monitor/MonitorResource) match on this exact message to treat the
30
+ * duplicate as an idempotent no-op, so the text must not change.
31
+ */
32
+ export const MONITOR_STATUS_SAME_AS_PREVIOUS_ERROR_MESSAGE = "Monitor Status cannot be same as previous status.";
33
+ /*
34
+ * Thrown by create() when the per-monitor mutex cannot be acquired. The timeline
35
+ * write is refused rather than performed unlocked - see the comment on the lock
36
+ * acquisition below. Probe ingest call sites match on this to log and skip
37
+ * instead of failing the whole ingest run.
38
+ */
39
+ export const MONITOR_STATUS_TIMELINE_LOCK_ERROR_MESSAGE = "Could not acquire the monitor status timeline lock for this monitor.";
25
40
  export class Service extends DatabaseService {
26
41
  constructor() {
27
42
  super(MonitorStatusTimeline);
28
43
  }
29
- async onBeforeCreate(createBy) {
30
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;
31
- if (!createBy.data.monitorId) {
32
- throw new BadDataException("monitorId is null");
44
+ async create(createBy) {
45
+ var _a, _b;
46
+ /*
47
+ * The per-monitor mutex is owned here, around the whole create, rather than
48
+ * inside onBeforeCreate. DatabaseService.create() invokes onBeforeCreate and
49
+ * then runs validation, permission checks and the INSERT before it ever
50
+ * reaches onCreateSuccess, all OUTSIDE any try/catch this service can hook
51
+ * (onCreateError never fires for a throw raised before the INSERT). So a
52
+ * mutex acquired in onBeforeCreate and released in onCreateSuccess leaks on
53
+ * any throw in between, and a leaked redis-semaphore mutex never expires - it
54
+ * keeps refreshing its own Redis key for the life of the process, which would
55
+ * block every later create for that monitor until acquireTimeout. Holding it
56
+ * in a try/finally here releases it on every path.
57
+ *
58
+ * The critical section that must be serialized per monitor spans reading the
59
+ * predecessor row (onBeforeCreate) through closing it (onCreateSuccess), so
60
+ * the lock is held across the entire super.create(), not just one hook.
61
+ */
62
+ if (createBy.props.ignoreHooks || !createBy.data.monitorId) {
63
+ // No predecessor bookkeeping runs on these paths, so no serialization is needed.
64
+ return await super.create(createBy);
33
65
  }
66
+ const logAttributes = {
67
+ projectId: (_a = createBy.data.projectId) === null || _a === void 0 ? void 0 : _a.toString(),
68
+ monitorId: (_b = createBy.data.monitorId) === null || _b === void 0 ? void 0 : _b.toString(),
69
+ };
34
70
  let mutex = null;
35
71
  try {
36
72
  mutex = await Semaphore.lock({
@@ -39,11 +75,63 @@ export class Service extends DatabaseService {
39
75
  });
40
76
  }
41
77
  catch (e) {
42
- logger.error(e, {
43
- projectId: (_a = createBy.data.projectId) === null || _a === void 0 ? void 0 : _a.toString(),
44
- monitorId: (_b = createBy.data.monitorId) === null || _b === void 0 ? void 0 : _b.toString(),
45
- });
78
+ /*
79
+ * Fail closed. This used to fall through and INSERT UNLOCKED, which let two
80
+ * concurrent writers resolve the same predecessor row, both pass the
81
+ * same-as-previous check, and both INSERT a status row milliseconds apart.
82
+ * Only the later row is ever closed (the next writer resolves its
83
+ * predecessor with ORDER BY startsAt DESC LIMIT 1), so the earlier row is
84
+ * orphaned with endsAt = NULL permanently and is read back as unbounded
85
+ * downtime. Refusing the write is strictly safer: the monitor keeps its
86
+ * current status and the next probe result for the same monitor
87
+ * re-evaluates the same criteria and recreates the status change.
88
+ */
89
+ logger.error(e, logAttributes);
90
+ throw new ServerException(MONITOR_STATUS_TIMELINE_LOCK_ERROR_MESSAGE);
91
+ }
92
+ let createdItem;
93
+ try {
94
+ createdItem = await super.create(createBy);
95
+ }
96
+ finally {
97
+ await this.releaseMutex(mutex, logAttributes);
46
98
  }
99
+ /*
100
+ * The feed item and its workspace notification run AFTER the mutex is
101
+ * released: they can involve third-party HTTP (Slack/Teams) with unbounded
102
+ * latency, and holding the per-monitor lock across them would block every
103
+ * concurrent status write for this monitor until acquireTimeout - turning
104
+ * one slow webhook into refused status transitions. Only the predecessor
105
+ * read -> INSERT -> predecessor close needs the lock, and all of that has
106
+ * completed by this point. (The pre-fail-closed code released the lock at
107
+ * this same boundary, before the feed block.)
108
+ */
109
+ await this.createStatusChangeFeedItem(createdItem, createBy);
110
+ return createdItem;
111
+ }
112
+ async onBeforeCreate(createBy) {
113
+ var _a, _b;
114
+ if (!createBy.data.monitorId) {
115
+ throw new BadDataException("monitorId is null");
116
+ }
117
+ const logAttributes = {
118
+ projectId: (_a = createBy.data.projectId) === null || _a === void 0 ? void 0 : _a.toString(),
119
+ monitorId: (_b = createBy.data.monitorId) === null || _b === void 0 ? void 0 : _b.toString(),
120
+ };
121
+ /*
122
+ * The per-monitor mutex that serializes this read-modify-write is acquired
123
+ * and released in create() (see the comment there); it is held for the whole
124
+ * duration of this hook.
125
+ */
126
+ return await this.buildOnCreate(createBy, createBy.data.monitorId, logAttributes);
127
+ }
128
+ /*
129
+ * Body of onBeforeCreate, split out to keep the null-narrowing of monitorId in
130
+ * one place: it is passed in already narrowed so it can never reach a query as
131
+ * undefined, which would widen the query to every monitor.
132
+ */
133
+ async buildOnCreate(createBy, monitorId, logAttributes) {
134
+ var _a, _b;
47
135
  if (!createBy.data.startsAt) {
48
136
  createBy.data.startsAt = OneUptimeDate.getCurrentDate();
49
137
  }
@@ -65,13 +153,13 @@ export class Service extends DatabaseService {
65
153
  })}`;
66
154
  }
67
155
  }
68
- const monitorStatusId = createBy.data.monitorStatusId || ((_c = createBy.data.monitorStatus) === null || _c === void 0 ? void 0 : _c.id);
156
+ const monitorStatusId = createBy.data.monitorStatusId || ((_a = createBy.data.monitorStatus) === null || _a === void 0 ? void 0 : _a.id);
69
157
  if (!monitorStatusId) {
70
158
  throw new BadDataException("monitorStatusId is null");
71
159
  }
72
160
  const stateBeforeThis = await this.findOneBy({
73
161
  query: {
74
- monitorId: createBy.data.monitorId,
162
+ monitorId: monitorId,
75
163
  startsAt: QueryHelper.lessThanEqualTo(createBy.data.startsAt),
76
164
  },
77
165
  sort: {
@@ -86,14 +174,8 @@ export class Service extends DatabaseService {
86
174
  endsAt: true,
87
175
  },
88
176
  });
89
- logger.debug("State Before this", {
90
- projectId: (_d = createBy.data.projectId) === null || _d === void 0 ? void 0 : _d.toString(),
91
- monitorId: (_e = createBy.data.monitorId) === null || _e === void 0 ? void 0 : _e.toString(),
92
- });
93
- logger.debug(stateBeforeThis, {
94
- projectId: (_f = createBy.data.projectId) === null || _f === void 0 ? void 0 : _f.toString(),
95
- monitorId: (_g = createBy.data.monitorId) === null || _g === void 0 ? void 0 : _g.toString(),
96
- });
177
+ logger.debug("State Before this", logAttributes);
178
+ logger.debug(stateBeforeThis, logAttributes);
97
179
  // If this is the first state, then do not notify the owner.
98
180
  if (!stateBeforeThis) {
99
181
  // since this is the first status, do not notify the owner.
@@ -106,12 +188,19 @@ export class Service extends DatabaseService {
106
188
  if (stateBeforeThis && stateBeforeThis.monitorStatusId && monitorStatusId) {
107
189
  if (stateBeforeThis.monitorStatusId.toString() ===
108
190
  monitorStatusId.toString()) {
109
- throw new BadDataException("Monitor Status cannot be same as previous status.");
191
+ /*
192
+ * Logged above debug on purpose. This is the exact point at which an
193
+ * orphaned (endsAt = NULL) row would have been created had the mutex
194
+ * fallen through unlocked, so it is the signal to alert on: a sustained
195
+ * rate here means two writers are racing for the same monitor.
196
+ */
197
+ logger.warn(`MonitorStatusTimeline: rejecting duplicate status ${monitorStatusId.toString()} for monitor ${monitorId.toString()}. The preceding status starting at ${(_b = stateBeforeThis.startsAt) === null || _b === void 0 ? void 0 : _b.toString()} is already this status.`, logAttributes);
198
+ throw new BadDataException(MONITOR_STATUS_SAME_AS_PREVIOUS_ERROR_MESSAGE);
110
199
  }
111
200
  }
112
201
  const stateAfterThis = await this.findOneBy({
113
202
  query: {
114
- monitorId: createBy.data.monitorId,
203
+ monitorId: monitorId,
115
204
  startsAt: QueryHelper.greaterThan(createBy.data.startsAt),
116
205
  },
117
206
  sort: {
@@ -139,120 +228,161 @@ export class Service extends DatabaseService {
139
228
  throw new BadDataException("Monitor Status cannot be same as next status.");
140
229
  }
141
230
  }
142
- logger.debug("State After this", {
143
- projectId: (_h = createBy.data.projectId) === null || _h === void 0 ? void 0 : _h.toString(),
144
- monitorId: (_j = createBy.data.monitorId) === null || _j === void 0 ? void 0 : _j.toString(),
145
- });
146
- logger.debug(stateAfterThis, {
147
- projectId: (_k = createBy.data.projectId) === null || _k === void 0 ? void 0 : _k.toString(),
148
- monitorId: (_l = createBy.data.monitorId) === null || _l === void 0 ? void 0 : _l.toString(),
149
- });
231
+ logger.debug("State After this", logAttributes);
232
+ logger.debug(stateAfterThis, logAttributes);
150
233
  return {
151
234
  createBy,
152
235
  carryForward: {
153
236
  statusTimelineBeforeThisStatus: stateBeforeThis || null,
154
237
  statusTimelineAfterThisStatus: stateAfterThis || null,
155
- mutex: mutex,
156
238
  },
157
239
  };
158
240
  }
241
+ /*
242
+ * Releases the per-monitor mutex. Never throws: a failed release must not mask
243
+ * the error we are already unwinding, and must not fail an otherwise successful
244
+ * create. Semaphore.release stops the refresh interval before it talks to
245
+ * Redis, so even if the Redis call fails the key expires on its own lockTimeout.
246
+ */
247
+ async releaseMutex(mutex, logAttributes) {
248
+ if (!mutex) {
249
+ return;
250
+ }
251
+ try {
252
+ await Semaphore.release(mutex);
253
+ }
254
+ catch (err) {
255
+ logger.error(err, logAttributes);
256
+ }
257
+ }
258
+ /*
259
+ * Closes the status timeline row that precedes the row we just created.
260
+ *
261
+ * The update is conditional instead of a blind updateOneById: it only touches
262
+ * the row if it starts at or before the new row (startsAt <= endsAt) and is
263
+ * either still open or currently closed at or after the new row's startsAt
264
+ * (endsAt >= :endsAt OR endsAt IS NULL). That keeps a concurrent or
265
+ * out-of-order writer from extending a row forward over a gap it does not own,
266
+ * and keeps a backfilled row from being closed at a time earlier than the row
267
+ * that actually follows it.
268
+ *
269
+ * startsAt uses <= and not <: on an exact startsAt tie (a backfill inserted at
270
+ * the same timestamp as the open predecessor) the predecessor must still be
271
+ * closed - at zero duration, which is harmless. With a strict < the tie would
272
+ * leave BOTH rows open forever: the reconciler deliberately never closes
273
+ * startsAt ties (its successor predicate is strictly later), so nothing would
274
+ * ever repair it, and the pair would read back as unbounded downtime.
275
+ *
276
+ * Note this closes only the single immediately-preceding row. If a monitor has
277
+ * more than one open row (the orphans this bug produced), the older ones are
278
+ * deliberately left alone: closing them here at the new row's startsAt would
279
+ * turn a near-zero-duration orphan into months of recorded downtime, which is
280
+ * worse than the current state and not repairable from the read path. Those
281
+ * rows must be closed at the startsAt of the row that actually follows each of
282
+ * them, which is the reconciler job's responsibility, not this write path's.
283
+ */
284
+ async closePrecedingStatusTimeline(data) {
285
+ const updatedCount = await this.updateOneBy({
286
+ query: {
287
+ _id: data.precedingStatusTimelineId.toString(),
288
+ startsAt: QueryHelper.lessThanEqualTo(data.endsAt),
289
+ endsAt: QueryHelper.greaterThanEqualToOrNull(data.endsAt),
290
+ },
291
+ data: {
292
+ endsAt: data.endsAt,
293
+ },
294
+ props: {
295
+ isRoot: true,
296
+ },
297
+ });
298
+ if (updatedCount === 0) {
299
+ /*
300
+ * The preceding row moved under us between onBeforeCreate reading it and
301
+ * this update - it was already closed at an earlier time, or it no longer
302
+ * starts before the new row. Leaving it as-is is correct; surface it so the
303
+ * reconciler has a signal to look at this monitor.
304
+ */
305
+ logger.warn(`MonitorStatusTimeline: did not close preceding status timeline ${data.precedingStatusTimelineId.toString()} at ${data.endsAt.toString()}; it is no longer open and older than the new status.`, data.logAttributes);
306
+ }
307
+ }
159
308
  async onCreateSuccess(onCreate, createdItem) {
160
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u;
309
+ var _a, _b, _c;
310
+ const logAttributes = {
311
+ projectId: (_a = createdItem.projectId) === null || _a === void 0 ? void 0 : _a.toString(),
312
+ monitorId: (_b = createdItem.monitorId) === null || _b === void 0 ? void 0 : _b.toString(),
313
+ };
161
314
  if (!createdItem.monitorId) {
162
315
  throw new BadDataException("monitorId is null");
163
316
  }
164
317
  if (!createdItem.monitorStatusId) {
165
318
  throw new BadDataException("monitorStatusId is null");
166
319
  }
320
+ /*
321
+ * Everything below runs while the per-monitor mutex acquired in create() is
322
+ * still held, so the read of the predecessor in onBeforeCreate and the close
323
+ * of it here cannot interleave with another writer for the same monitor.
324
+ */
167
325
  // update the last status as ended.
168
- logger.debug("Status Timeline Before this", {
169
- projectId: (_a = createdItem.projectId) === null || _a === void 0 ? void 0 : _a.toString(),
170
- monitorId: (_b = createdItem.monitorId) === null || _b === void 0 ? void 0 : _b.toString(),
171
- });
172
- logger.debug(onCreate.carryForward.statusTimelineBeforeThisStatus, {
173
- projectId: (_c = createdItem.projectId) === null || _c === void 0 ? void 0 : _c.toString(),
174
- monitorId: (_d = createdItem.monitorId) === null || _d === void 0 ? void 0 : _d.toString(),
175
- });
176
- logger.debug("Status Timeline After this", {
177
- projectId: (_e = createdItem.projectId) === null || _e === void 0 ? void 0 : _e.toString(),
178
- monitorId: (_f = createdItem.monitorId) === null || _f === void 0 ? void 0 : _f.toString(),
179
- });
180
- logger.debug(onCreate.carryForward.statusTimelineAfterThisStatus, {
181
- projectId: (_g = createdItem.projectId) === null || _g === void 0 ? void 0 : _g.toString(),
182
- monitorId: (_h = createdItem.monitorId) === null || _h === void 0 ? void 0 : _h.toString(),
183
- });
184
- logger.debug("Created Item", {
185
- projectId: (_j = createdItem.projectId) === null || _j === void 0 ? void 0 : _j.toString(),
186
- monitorId: (_k = createdItem.monitorId) === null || _k === void 0 ? void 0 : _k.toString(),
187
- });
188
- logger.debug(createdItem, {
189
- projectId: (_l = createdItem.projectId) === null || _l === void 0 ? void 0 : _l.toString(),
190
- monitorId: (_m = createdItem.monitorId) === null || _m === void 0 ? void 0 : _m.toString(),
191
- });
326
+ logger.debug("Status Timeline Before this", logAttributes);
327
+ logger.debug(onCreate.carryForward.statusTimelineBeforeThisStatus, logAttributes);
328
+ logger.debug("Status Timeline After this", logAttributes);
329
+ logger.debug(onCreate.carryForward.statusTimelineAfterThisStatus, logAttributes);
330
+ logger.debug("Created Item", logAttributes);
331
+ logger.debug(createdItem, logAttributes);
192
332
  /*
193
333
  * now there are three cases.
194
334
  * 1. This is the first status OR there's no status after this.
195
335
  */
196
336
  if (!onCreate.carryForward.statusTimelineBeforeThisStatus) {
197
337
  // This is the first status, no need to update previous status.
198
- logger.debug("This is the first status.", {
199
- projectId: (_o = createdItem.projectId) === null || _o === void 0 ? void 0 : _o.toString(),
200
- monitorId: (_p = createdItem.monitorId) === null || _p === void 0 ? void 0 : _p.toString(),
201
- });
338
+ logger.debug("This is the first status.", logAttributes);
202
339
  }
203
340
  else if (!onCreate.carryForward.statusTimelineAfterThisStatus) {
204
341
  /*
205
342
  * 2. This is the last status.
206
343
  * Update the previous status to end at the start of this status.
207
344
  */
208
- await this.updateOneById({
209
- id: onCreate.carryForward.statusTimelineBeforeThisStatus.id,
210
- data: {
211
- endsAt: createdItem.startsAt,
212
- },
213
- props: {
214
- isRoot: true,
215
- },
216
- });
217
- logger.debug("This is the last status.", {
218
- projectId: (_q = createdItem.projectId) === null || _q === void 0 ? void 0 : _q.toString(),
219
- monitorId: (_r = createdItem.monitorId) === null || _r === void 0 ? void 0 : _r.toString(),
345
+ await this.closePrecedingStatusTimeline({
346
+ precedingStatusTimelineId: onCreate.carryForward.statusTimelineBeforeThisStatus.id,
347
+ endsAt: createdItem.startsAt,
348
+ logAttributes: logAttributes,
220
349
  });
350
+ logger.debug("This is the last status.", logAttributes);
221
351
  }
222
352
  else {
223
353
  /*
224
354
  * 3. This is in the middle.
225
355
  * Update the previous status to end at the start of this status.
226
356
  */
227
- await this.updateOneById({
228
- id: onCreate.carryForward.statusTimelineBeforeThisStatus.id,
229
- data: {
230
- endsAt: createdItem.startsAt,
231
- },
232
- props: {
233
- isRoot: true,
234
- },
235
- });
236
- // Update the next status to start at the end of this status.
237
- await this.updateOneById({
238
- id: onCreate.carryForward.statusTimelineAfterThisStatus.id,
239
- data: {
240
- startsAt: createdItem.endsAt,
241
- },
242
- props: {
243
- isRoot: true,
244
- },
245
- });
246
- logger.debug("This status is in the middle.", {
247
- projectId: (_s = createdItem.projectId) === null || _s === void 0 ? void 0 : _s.toString(),
248
- monitorId: (_t = createdItem.monitorId) === null || _t === void 0 ? void 0 : _t.toString(),
357
+ await this.closePrecedingStatusTimeline({
358
+ precedingStatusTimelineId: onCreate.carryForward.statusTimelineBeforeThisStatus.id,
359
+ endsAt: createdItem.startsAt,
360
+ logAttributes: logAttributes,
249
361
  });
362
+ /*
363
+ * Update the next status to start at the end of this status. endsAt was
364
+ * set to the next row's startsAt in onBeforeCreate, so this is normally a
365
+ * no-op; it is guarded because writing an empty startsAt onto the next row
366
+ * would corrupt it.
367
+ */
368
+ if (createdItem.endsAt) {
369
+ await this.updateOneById({
370
+ id: onCreate.carryForward.statusTimelineAfterThisStatus.id,
371
+ data: {
372
+ startsAt: createdItem.endsAt,
373
+ },
374
+ props: {
375
+ isRoot: true,
376
+ },
377
+ });
378
+ }
379
+ logger.debug("This status is in the middle.", logAttributes);
250
380
  }
251
381
  if (!createdItem.endsAt) {
252
382
  // if this is the last status, then update the monitor status.
253
383
  await MonitorService.updateOneBy({
254
384
  query: {
255
- _id: (_u = createdItem.monitorId) === null || _u === void 0 ? void 0 : _u.toString(),
385
+ _id: (_c = createdItem.monitorId) === null || _c === void 0 ? void 0 : _c.toString(),
256
386
  },
257
387
  data: {
258
388
  currentMonitorStatusId: createdItem.monitorStatusId,
@@ -260,9 +390,18 @@ export class Service extends DatabaseService {
260
390
  props: onCreate.createBy.props,
261
391
  });
262
392
  }
263
- if (onCreate.carryForward.mutex) {
264
- const mutex = onCreate.carryForward.mutex;
265
- await Semaphore.release(mutex);
393
+ return createdItem;
394
+ }
395
+ /*
396
+ * Writes the monitor feed item (and its workspace notification, which can be
397
+ * third-party HTTP to Slack/Teams) for a status change. Called from create()
398
+ * AFTER the per-monitor mutex has been released - see the comment there. Kept
399
+ * out of onCreateSuccess on purpose: everything in onCreateSuccess runs while
400
+ * the mutex is held.
401
+ */
402
+ async createStatusChangeFeedItem(createdItem, createBy) {
403
+ if (!createdItem.monitorId || !createdItem.monitorStatusId) {
404
+ return;
266
405
  }
267
406
  const monitorStatus = await MonitorStatusService.findOneBy({
268
407
  query: {
@@ -302,17 +441,14 @@ export class Service extends DatabaseService {
302
441
  ` Changed Monitor **[${monitorName}](${(await MonitorService.getMonitorLinkInDashboard(projectId, monitorId)).toString()}) State** to **` +
303
442
  stateName +
304
443
  "**",
305
- moreInformationInMarkdown: `**Cause:**
444
+ moreInformationInMarkdown: `**Cause:**
306
445
  ${createdItem.rootCause}`,
307
- userId: createdItem.createdByUserId || onCreate.createBy.props.userId,
446
+ userId: createdItem.createdByUserId || createBy.props.userId,
308
447
  workspaceNotification: {
309
448
  sendWorkspaceNotification: true,
310
- notifyUserId: createdItem.createdByUserId ||
311
- onCreate.createBy.props.userId ||
312
- undefined,
449
+ notifyUserId: createdItem.createdByUserId || createBy.props.userId || undefined,
313
450
  },
314
451
  });
315
- return createdItem;
316
452
  }
317
453
  async onBeforeDelete(deleteBy) {
318
454
  if (deleteBy.query._id) {
@@ -478,6 +614,12 @@ export class Service extends DatabaseService {
478
614
  return onDelete;
479
615
  }
480
616
  }
617
+ __decorate([
618
+ CaptureSpan(),
619
+ __metadata("design:type", Function),
620
+ __metadata("design:paramtypes", [Object]),
621
+ __metadata("design:returntype", Promise)
622
+ ], Service.prototype, "create", null);
481
623
  __decorate([
482
624
  CaptureSpan(),
483
625
  __metadata("design:type", Function),
@@ -1 +1 @@
1
- {"version":3,"file":"MonitorStatusTimelineService.js","sourceRoot":"","sources":["../../../../Server/Services/MonitorStatusTimelineService.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,SAA6B,MAAM,6BAA6B,CAAC;AAIxE,OAAO,WAAW,MAAM,+BAA+B,CAAC;AACxD,OAAO,MAAyB,MAAM,iBAAiB,CAAC;AACxD,OAAO,eAAe,MAAM,mBAAmB,CAAC;AAChD,OAAO,cAAc,MAAM,kBAAkB,CAAC;AAC9C,OAAO,WAAW,MAAM,eAAe,CAAC;AACxC,OAAO,WAAW,MAAM,gCAAgC,CAAC;AACzD,OAAO,SAAS,MAAM,oCAAoC,CAAC;AAC3D,OAAO,aAAa,MAAM,kBAAkB,CAAC;AAC7C,OAAO,gBAAgB,MAAM,wCAAwC,CAAC;AACtE,OAAO,QAAQ,MAAM,sBAAsB,CAAC;AAE5C,OAAO,qBAAqB,MAAM,mDAAmD,CAAC;AACtF,OAAO,kBAAkB,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,yCAAyC,CAAC;AAE/E,OAAO,oBAAoB,MAAM,wBAAwB,CAAC;AAE1D,MAAM,OAAO,OAAQ,SAAQ,eAAsC;IACjE;QACE,KAAK,CAAC,qBAAqB,CAAC,CAAC;IAC/B,CAAC;IAGwB,AAAN,KAAK,CAAC,cAAc,CACrC,QAAyC;;QAEzC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YAC7B,MAAM,IAAI,gBAAgB,CAAC,mBAAmB,CAAC,CAAC;QAClD,CAAC;QAED,IAAI,KAAK,GAA0B,IAAI,CAAC;QAExC,IAAI,CAAC;YACH,KAAK,GAAG,MAAM,SAAS,CAAC,IAAI,CAAC;gBAC3B,GAAG,EAAE,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE;gBACvC,SAAS,EAAE,8BAA8B;aAC1C,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE;gBACd,SAAS,EAAE,MAAA,QAAQ,CAAC,IAAI,CAAC,SAAS,0CAAE,QAAQ,EAAE;gBAC9C,SAAS,EAAE,MAAA,QAAQ,CAAC,IAAI,CAAC,SAAS,0CAAE,QAAQ,EAAE;aAC9B,CAAC,CAAC;QACtB,CAAC;QAED,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC5B,QAAQ,CAAC,IAAI,CAAC,QAAQ,GAAG,aAAa,CAAC,cAAc,EAAE,CAAC;QAC1D,CAAC;QAED,IACE,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe;YAC5B,QAAQ,CAAC,IAAI,CAAC,aAAa;YAC3B,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC;YACxB,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,EACxB,CAAC;YACD,IAAI,MAAM,GAAyB,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC;YAEjE,IAAI,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;gBAC1B,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC;YACjC,CAAC;YAED,IAAI,QAAQ,CAAC,IAAI,CAAC,aAAa,IAAI,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,EAAE,CAAC;gBAClE,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC;YAC1C,CAAC;YAED,IAAI,MAAM,EAAE,CAAC;gBACX,QAAQ,CAAC,IAAI,CAAC,SAAS,GAAG,6BAA6B,MAAM,WAAW,CAAC,qBAAqB,CAC5F;oBACE,MAAM,EAAE,MAAO;oBACf,SAAS,EAAE,QAAQ,CAAC,IAAI,CAAC,SAAS,IAAI,QAAQ,CAAC,KAAK,CAAC,QAAS;iBAC/D,CACF,EAAE,CAAC;YACN,CAAC;QACH,CAAC;QAED,MAAM,eAAe,GACnB,QAAQ,CAAC,IAAI,CAAC,eAAe,KAAI,MAAA,QAAQ,CAAC,IAAI,CAAC,aAAa,0CAAE,EAAE,CAAA,CAAC;QAEnE,IAAI,CAAC,eAAe,EAAE,CAAC;YACrB,MAAM,IAAI,gBAAgB,CAAC,yBAAyB,CAAC,CAAC;QACxD,CAAC;QAED,MAAM,eAAe,GAAiC,MAAM,IAAI,CAAC,SAAS,CAAC;YACzE,KAAK,EAAE;gBACL,SAAS,EAAE,QAAQ,CAAC,IAAI,CAAC,SAAS;gBAClC,QAAQ,EAAE,WAAW,CAAC,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC;aAC9D;YACD,IAAI,EAAE;gBACJ,QAAQ,EAAE,SAAS,CAAC,UAAU;aAC/B;YACD,KAAK,EAAE;gBACL,MAAM,EAAE,IAAI;aACb;YACD,MAAM,EAAE;gBACN,eAAe,EAAE,IAAI;gBACrB,QAAQ,EAAE,IAAI;gBACd,MAAM,EAAE,IAAI;aACb;SACF,CAAC,CAAC;QAEH,MAAM,CAAC,KAAK,CAAC,mBAAmB,EAAE;YAChC,SAAS,EAAE,MAAA,QAAQ,CAAC,IAAI,CAAC,SAAS,0CAAE,QAAQ,EAAE;YAC9C,SAAS,EAAE,MAAA,QAAQ,CAAC,IAAI,CAAC,SAAS,0CAAE,QAAQ,EAAE;SAC9B,CAAC,CAAC;QACpB,MAAM,CAAC,KAAK,CAAC,eAAe,EAAE;YAC5B,SAAS,EAAE,MAAA,QAAQ,CAAC,IAAI,CAAC,SAAS,0CAAE,QAAQ,EAAE;YAC9C,SAAS,EAAE,MAAA,QAAQ,CAAC,IAAI,CAAC,SAAS,0CAAE,QAAQ,EAAE;SAC9B,CAAC,CAAC;QAEpB,4DAA4D;QAC5D,IAAI,CAAC,eAAe,EAAE,CAAC;YACrB,2DAA2D;YAC3D,QAAQ,CAAC,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;QACvC,CAAC;QAED;;;WAGG;QAEH,IAAI,eAAe,IAAI,eAAe,CAAC,eAAe,IAAI,eAAe,EAAE,CAAC;YAC1E,IACE,eAAe,CAAC,eAAe,CAAC,QAAQ,EAAE;gBAC1C,eAAe,CAAC,QAAQ,EAAE,EAC1B,CAAC;gBACD,MAAM,IAAI,gBAAgB,CACxB,mDAAmD,CACpD,CAAC;YACJ,CAAC;QACH,CAAC;QAED,MAAM,cAAc,GAAiC,MAAM,IAAI,CAAC,SAAS,CAAC;YACxE,KAAK,EAAE;gBACL,SAAS,EAAE,QAAQ,CAAC,IAAI,CAAC,SAAS;gBAClC,QAAQ,EAAE,WAAW,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC;aAC1D;YACD,IAAI,EAAE;gBACJ,QAAQ,EAAE,SAAS,CAAC,SAAS;aAC9B;YACD,KAAK,EAAE;gBACL,MAAM,EAAE,IAAI;aACb;YACD,MAAM,EAAE;gBACN,eAAe,EAAE,IAAI;gBACrB,QAAQ,EAAE,IAAI;gBACd,MAAM,EAAE,IAAI;aACb;SACF,CAAC,CAAC;QAEH,sDAAsD;QACtD,IAAI,cAAc,IAAI,cAAc,CAAC,QAAQ,EAAE,CAAC;YAC9C,QAAQ,CAAC,IAAI,CAAC,MAAM,GAAG,cAAc,CAAC,QAAQ,CAAC;QACjD,CAAC;QAED;;;WAGG;QAEH,IAAI,cAAc,IAAI,cAAc,CAAC,eAAe,IAAI,eAAe,EAAE,CAAC;YACxE,IACE,cAAc,CAAC,eAAe,CAAC,QAAQ,EAAE,KAAK,eAAe,CAAC,QAAQ,EAAE,EACxE,CAAC;gBACD,MAAM,IAAI,gBAAgB,CACxB,+CAA+C,CAChD,CAAC;YACJ,CAAC;QACH,CAAC;QAED,MAAM,CAAC,KAAK,CAAC,kBAAkB,EAAE;YAC/B,SAAS,EAAE,MAAA,QAAQ,CAAC,IAAI,CAAC,SAAS,0CAAE,QAAQ,EAAE;YAC9C,SAAS,EAAE,MAAA,QAAQ,CAAC,IAAI,CAAC,SAAS,0CAAE,QAAQ,EAAE;SAC9B,CAAC,CAAC;QACpB,MAAM,CAAC,KAAK,CAAC,cAAc,EAAE;YAC3B,SAAS,EAAE,MAAA,QAAQ,CAAC,IAAI,CAAC,SAAS,0CAAE,QAAQ,EAAE;YAC9C,SAAS,EAAE,MAAA,QAAQ,CAAC,IAAI,CAAC,SAAS,0CAAE,QAAQ,EAAE;SAC9B,CAAC,CAAC;QAEpB,OAAO;YACL,QAAQ;YACR,YAAY,EAAE;gBACZ,8BAA8B,EAAE,eAAe,IAAI,IAAI;gBACvD,6BAA6B,EAAE,cAAc,IAAI,IAAI;gBACrD,KAAK,EAAE,KAAK;aACb;SACF,CAAC;IACJ,CAAC;IAGwB,AAAN,KAAK,CAAC,eAAe,CACtC,QAAyC,EACzC,WAAkC;;QAElC,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,CAAC;YAC3B,MAAM,IAAI,gBAAgB,CAAC,mBAAmB,CAAC,CAAC;QAClD,CAAC;QAED,IAAI,CAAC,WAAW,CAAC,eAAe,EAAE,CAAC;YACjC,MAAM,IAAI,gBAAgB,CAAC,yBAAyB,CAAC,CAAC;QACxD,CAAC;QAED,mCAAmC;QAEnC,MAAM,CAAC,KAAK,CAAC,6BAA6B,EAAE;YAC1C,SAAS,EAAE,MAAA,WAAW,CAAC,SAAS,0CAAE,QAAQ,EAAE;YAC5C,SAAS,EAAE,MAAA,WAAW,CAAC,SAAS,0CAAE,QAAQ,EAAE;SAC5B,CAAC,CAAC;QACpB,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC,8BAA8B,EAAE;YACjE,SAAS,EAAE,MAAA,WAAW,CAAC,SAAS,0CAAE,QAAQ,EAAE;YAC5C,SAAS,EAAE,MAAA,WAAW,CAAC,SAAS,0CAAE,QAAQ,EAAE;SAC5B,CAAC,CAAC;QAEpB,MAAM,CAAC,KAAK,CAAC,4BAA4B,EAAE;YACzC,SAAS,EAAE,MAAA,WAAW,CAAC,SAAS,0CAAE,QAAQ,EAAE;YAC5C,SAAS,EAAE,MAAA,WAAW,CAAC,SAAS,0CAAE,QAAQ,EAAE;SAC5B,CAAC,CAAC;QACpB,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC,6BAA6B,EAAE;YAChE,SAAS,EAAE,MAAA,WAAW,CAAC,SAAS,0CAAE,QAAQ,EAAE;YAC5C,SAAS,EAAE,MAAA,WAAW,CAAC,SAAS,0CAAE,QAAQ,EAAE;SAC5B,CAAC,CAAC;QAEpB,MAAM,CAAC,KAAK,CAAC,cAAc,EAAE;YAC3B,SAAS,EAAE,MAAA,WAAW,CAAC,SAAS,0CAAE,QAAQ,EAAE;YAC5C,SAAS,EAAE,MAAA,WAAW,CAAC,SAAS,0CAAE,QAAQ,EAAE;SAC5B,CAAC,CAAC;QACpB,MAAM,CAAC,KAAK,CAAC,WAAW,EAAE;YACxB,SAAS,EAAE,MAAA,WAAW,CAAC,SAAS,0CAAE,QAAQ,EAAE;YAC5C,SAAS,EAAE,MAAA,WAAW,CAAC,SAAS,0CAAE,QAAQ,EAAE;SAC5B,CAAC,CAAC;QAEpB;;;WAGG;QACH,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,8BAA8B,EAAE,CAAC;YAC1D,+DAA+D;YAC/D,MAAM,CAAC,KAAK,CAAC,2BAA2B,EAAE;gBACxC,SAAS,EAAE,MAAA,WAAW,CAAC,SAAS,0CAAE,QAAQ,EAAE;gBAC5C,SAAS,EAAE,MAAA,WAAW,CAAC,SAAS,0CAAE,QAAQ,EAAE;aAC5B,CAAC,CAAC;QACtB,CAAC;aAAM,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,6BAA6B,EAAE,CAAC;YAChE;;;eAGG;YACH,MAAM,IAAI,CAAC,aAAa,CAAC;gBACvB,EAAE,EAAE,QAAQ,CAAC,YAAY,CAAC,8BAA8B,CAAC,EAAG;gBAC5D,IAAI,EAAE;oBACJ,MAAM,EAAE,WAAW,CAAC,QAAS;iBAC9B;gBACD,KAAK,EAAE;oBACL,MAAM,EAAE,IAAI;iBACb;aACF,CAAC,CAAC;YACH,MAAM,CAAC,KAAK,CAAC,0BAA0B,EAAE;gBACvC,SAAS,EAAE,MAAA,WAAW,CAAC,SAAS,0CAAE,QAAQ,EAAE;gBAC5C,SAAS,EAAE,MAAA,WAAW,CAAC,SAAS,0CAAE,QAAQ,EAAE;aAC5B,CAAC,CAAC;QACtB,CAAC;aAAM,CAAC;YACN;;;eAGG;YACH,MAAM,IAAI,CAAC,aAAa,CAAC;gBACvB,EAAE,EAAE,QAAQ,CAAC,YAAY,CAAC,8BAA8B,CAAC,EAAG;gBAC5D,IAAI,EAAE;oBACJ,MAAM,EAAE,WAAW,CAAC,QAAS;iBAC9B;gBACD,KAAK,EAAE;oBACL,MAAM,EAAE,IAAI;iBACb;aACF,CAAC,CAAC;YAEH,6DAA6D;YAC7D,MAAM,IAAI,CAAC,aAAa,CAAC;gBACvB,EAAE,EAAE,QAAQ,CAAC,YAAY,CAAC,6BAA6B,CAAC,EAAG;gBAC3D,IAAI,EAAE;oBACJ,QAAQ,EAAE,WAAW,CAAC,MAAO;iBAC9B;gBACD,KAAK,EAAE;oBACL,MAAM,EAAE,IAAI;iBACb;aACF,CAAC,CAAC;YACH,MAAM,CAAC,KAAK,CAAC,+BAA+B,EAAE;gBAC5C,SAAS,EAAE,MAAA,WAAW,CAAC,SAAS,0CAAE,QAAQ,EAAE;gBAC5C,SAAS,EAAE,MAAA,WAAW,CAAC,SAAS,0CAAE,QAAQ,EAAE;aAC5B,CAAC,CAAC;QACtB,CAAC;QAED,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC;YACxB,8DAA8D;YAE9D,MAAM,cAAc,CAAC,WAAW,CAAC;gBAC/B,KAAK,EAAE;oBACL,GAAG,EAAE,MAAA,WAAW,CAAC,SAAS,0CAAE,QAAQ,EAAE;iBACvC;gBACD,IAAI,EAAE;oBACJ,sBAAsB,EAAE,WAAW,CAAC,eAAe;iBACpD;gBACD,KAAK,EAAE,QAAQ,CAAC,QAAQ,CAAC,KAAK;aAC/B,CAAC,CAAC;QACL,CAAC;QAED,IAAI,QAAQ,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;YAChC,MAAM,KAAK,GAAmB,QAAQ,CAAC,YAAY,CAAC,KAAK,CAAC;YAC1D,MAAM,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACjC,CAAC;QAED,MAAM,aAAa,GACjB,MAAM,oBAAoB,CAAC,SAAS,CAAC;YACnC,KAAK,EAAE;gBACL,GAAG,EAAE,WAAW,CAAC,eAAe,CAAC,QAAQ,EAAG;aAC7C;YACD,KAAK,EAAE;gBACL,MAAM,EAAE,IAAI;aACb;YACD,MAAM,EAAE;gBACN,GAAG,EAAE,IAAI;gBACT,cAAc,EAAE,IAAI;gBACpB,kBAAkB,EAAE,IAAI;gBACxB,KAAK,EAAE,IAAI;gBACX,IAAI,EAAE,IAAI;aACX;SACF,CAAC,CAAC;QAEL,MAAM,SAAS,GAAW,CAAA,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,IAAI,KAAI,EAAE,CAAC;QACpD,IAAI,UAAU,GAAW,IAAI,CAAC;QAE9B,6CAA6C;QAE7C,IAAI,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,kBAAkB,EAAE,CAAC;YACtC,UAAU,GAAG,IAAI,CAAC;QACpB,CAAC;aAAM,IAAI,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,cAAc,EAAE,CAAC;YACzC,UAAU,GAAG,IAAI,CAAC;QACpB,CAAC;QAED,MAAM,WAAW,GAAkB,MAAM,cAAc,CAAC,cAAc,CAAC;YACrE,SAAS,EAAE,WAAW,CAAC,SAAS;SACjC,CAAC,CAAC;QAEH,MAAM,SAAS,GAAa,WAAW,CAAC,SAAU,CAAC;QACnD,MAAM,SAAS,GAAa,WAAW,CAAC,SAAU,CAAC;QAEnD,MAAM,kBAAkB,CAAC,qBAAqB,CAAC;YAC7C,SAAS,EAAE,WAAW,CAAC,SAAU;YACjC,SAAS,EAAE,WAAW,CAAC,SAAU;YACjC,oBAAoB,EAAE,oBAAoB,CAAC,oBAAoB;YAC/D,YAAY,EAAE,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,KAAK;YAClC,kBAAkB,EAChB,UAAU;gBACV,uBAAuB,WAAW,KAAK,CAAC,MAAM,cAAc,CAAC,yBAAyB,CAAC,SAAU,EAAE,SAAU,CAAC,CAAC,CAAC,QAAQ,EAAE,iBAAiB;gBAC3I,SAAS;gBACT,IAAI;YACN,yBAAyB,EAAE;MAC3B,WAAW,CAAC,SAAS,EAAE;YACvB,MAAM,EAAE,WAAW,CAAC,eAAe,IAAI,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM;YACrE,qBAAqB,EAAE;gBACrB,yBAAyB,EAAE,IAAI;gBAC/B,YAAY,EACV,WAAW,CAAC,eAAe;oBAC3B,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM;oBAC9B,SAAS;aACZ;SACF,CAAC,CAAC;QAEH,OAAO,WAAW,CAAC;IACrB,CAAC;IAGwB,AAAN,KAAK,CAAC,cAAc,CACrC,QAAyC;QAEzC,IAAI,QAAQ,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;YACvB,MAAM,gCAAgC,GACpC,MAAM,IAAI,CAAC,WAAW,CAAC;gBACrB,EAAE,EAAE,IAAI,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAa,CAAC;gBAC9C,MAAM,EAAE;oBACN,SAAS,EAAE,IAAI;oBACf,QAAQ,EAAE,IAAI;oBACd,MAAM,EAAE,IAAI;iBACb;gBACD,KAAK,EAAE;oBACL,MAAM,EAAE,IAAI;iBACb;aACF,CAAC,CAAC;YAEL,MAAM,SAAS,GACb,gCAAgC,aAAhC,gCAAgC,uBAAhC,gCAAgC,CAAE,SAAS,CAAC;YAE9C,IAAI,SAAS,EAAE,CAAC;gBACd,MAAM,qBAAqB,GAAmB,MAAM,IAAI,CAAC,OAAO,CAAC;oBAC/D,KAAK,EAAE;wBACL,SAAS,EAAE,SAAS;qBACrB;oBACD,KAAK,EAAE;wBACL,MAAM,EAAE,IAAI;qBACb;iBACF,CAAC,CAAC;gBAEH,IAAI,CAAC,gCAAgC,EAAE,CAAC;oBACtC,MAAM,IAAI,gBAAgB,CAAC,oCAAoC,CAAC,CAAC;gBACnE,CAAC;gBAED,IAAI,qBAAqB,CAAC,KAAK,EAAE,EAAE,CAAC;oBAClC,MAAM,IAAI,gBAAgB,CACxB,2FAA2F,CAC5F,CAAC;gBACJ,CAAC;gBAED;;;;;mBAKG;gBAEH,MAAM,eAAe,GACnB,MAAM,IAAI,CAAC,SAAS,CAAC;oBACnB,KAAK,EAAE;wBACL,GAAG,EAAE,WAAW,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAa,CAAC;wBACxD,SAAS,EAAE,SAAS;wBACpB,QAAQ,EAAE,WAAW,CAAC,eAAe,CACnC,gCAAgC,CAAC,QAAS,CAC3C;qBACF;oBACD,IAAI,EAAE;wBACJ,QAAQ,EAAE,SAAS,CAAC,UAAU;qBAC/B;oBACD,KAAK,EAAE;wBACL,MAAM,EAAE,IAAI;qBACb;oBACD,MAAM,EAAE;wBACN,eAAe,EAAE,IAAI;wBACrB,QAAQ,EAAE,IAAI;wBACd,MAAM,EAAE,IAAI;qBACb;iBACF,CAAC,CAAC;gBAEL,MAAM,cAAc,GAClB,MAAM,IAAI,CAAC,SAAS,CAAC;oBACnB,KAAK,EAAE;wBACL,SAAS,EAAE,SAAS;wBACpB,QAAQ,EAAE,WAAW,CAAC,WAAW,CAC/B,gCAAgC,CAAC,QAAS,CAC3C;qBACF;oBACD,IAAI,EAAE;wBACJ,QAAQ,EAAE,SAAS,CAAC,SAAS;qBAC9B;oBACD,KAAK,EAAE;wBACL,MAAM,EAAE,IAAI;qBACb;oBACD,MAAM,EAAE;wBACN,eAAe,EAAE,IAAI;wBACrB,QAAQ,EAAE,IAAI;wBACd,MAAM,EAAE,IAAI;qBACb;iBACF,CAAC,CAAC;gBAEL,IAAI,CAAC,eAAe,EAAE,CAAC;oBACrB,+DAA+D;oBAC/D,MAAM,CAAC,KAAK,CAAC,2BAA2B,EAAE;wBACxC,SAAS,EAAE,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,QAAQ,EAAE;qBAChB,CAAC,CAAC;gBACtB,CAAC;qBAAM,IAAI,CAAC,cAAc,EAAE,CAAC;oBAC3B;;;uBAGG;oBACH,MAAM,IAAI,CAAC,aAAa,CAAC;wBACvB,EAAE,EAAE,eAAe,CAAC,EAAG;wBACvB,IAAI,EAAE;4BACJ,MAAM,EAAE,gCAAgC,CAAC,MAAO;yBACjD;wBACD,KAAK,EAAE;4BACL,MAAM,EAAE,IAAI;yBACb;qBACF,CAAC,CAAC;oBACH,MAAM,CAAC,KAAK,CAAC,0BAA0B,EAAE;wBACvC,SAAS,EAAE,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,QAAQ,EAAE;qBAChB,CAAC,CAAC;gBACtB,CAAC;qBAAM,CAAC;oBACN;;;uBAGG;oBACH,MAAM,IAAI,CAAC,aAAa,CAAC;wBACvB,EAAE,EAAE,eAAe,CAAC,EAAG;wBACvB,IAAI,EAAE;4BACJ,MAAM,EAAE,cAAc,CAAC,QAAS;yBACjC;wBACD,KAAK,EAAE;4BACL,MAAM,EAAE,IAAI;yBACb;qBACF,CAAC,CAAC;oBAEH,6DAA6D;oBAC7D,MAAM,IAAI,CAAC,aAAa,CAAC;wBACvB,EAAE,EAAE,cAAc,CAAC,EAAG;wBACtB,IAAI,EAAE;4BACJ,QAAQ,EAAE,gCAAgC,CAAC,QAAS;yBACrD;wBACD,KAAK,EAAE;4BACL,MAAM,EAAE,IAAI;yBACb;qBACF,CAAC,CAAC;oBACH,MAAM,CAAC,KAAK,CAAC,+BAA+B,EAAE;wBAC5C,SAAS,EAAE,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,QAAQ,EAAE;qBAChB,CAAC,CAAC;gBACtB,CAAC;YACH,CAAC;YAED,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,SAAS,EAAE,CAAC;QAC/C,CAAC;QAED,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;IAC1C,CAAC;IAGwB,AAAN,KAAK,CAAC,eAAe,CACtC,QAAyC,EACzC,oBAAgC;QAEhC,IAAI,QAAQ,CAAC,YAAY,EAAE,CAAC;YAC1B,qBAAqB;YACrB,MAAM,SAAS,GAAa,QAAQ,CAAC,YAAwB,CAAC;YAE9D,mCAAmC;YACnC,MAAM,qBAAqB,GACzB,MAAM,IAAI,CAAC,SAAS,CAAC;gBACnB,KAAK,EAAE;oBACL,SAAS,EAAE,SAAS;iBACrB;gBACD,IAAI,EAAE;oBACJ,QAAQ,EAAE,SAAS,CAAC,UAAU;iBAC/B;gBACD,KAAK,EAAE;oBACL,MAAM,EAAE,IAAI;iBACb;gBACD,MAAM,EAAE;oBACN,GAAG,EAAE,IAAI;oBACT,eAAe,EAAE,IAAI;iBACtB;aACF,CAAC,CAAC;YAEL,IAAI,qBAAqB,IAAI,qBAAqB,CAAC,eAAe,EAAE,CAAC;gBACnE,MAAM,cAAc,CAAC,WAAW,CAAC;oBAC/B,KAAK,EAAE;wBACL,GAAG,EAAE,SAAS,CAAC,QAAQ,EAAE;qBAC1B;oBACD,IAAI,EAAE;wBACJ,sBAAsB,EAAE,qBAAqB,CAAC,eAAe;qBAC9D;oBACD,KAAK,EAAE;wBACL,MAAM,EAAE,IAAI;qBACb;iBACF,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;CACF;AA1hB0B;IADxB,WAAW,EAAE;;;;6CAmKb;AAGwB;IADxB,WAAW,EAAE;;6CAGC,qBAAqB;;8CA+KnC;AAGwB;IADxB,WAAW,EAAE;;;;6CAoJb;AAGwB;IADxB,WAAW,EAAE;;;;8CA2Cb;AAGH,eAAe,IAAI,OAAO,EAAE,CAAC"}
1
+ {"version":3,"file":"MonitorStatusTimelineService.js","sourceRoot":"","sources":["../../../../Server/Services/MonitorStatusTimelineService.ts"],"names":[],"mappings":"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"}