@oneuptime/common 7.0.4135 → 7.0.4142

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.
@@ -26,6 +26,7 @@ import AlertFeedService from "./AlertFeedService";
26
26
  import { AlertFeedEventType } from "../../Models/DatabaseModels/AlertFeed";
27
27
  import WorkspaceNotificationRuleService from "./WorkspaceNotificationRuleService";
28
28
  import { LIMIT_PER_PROJECT } from "../../Types/Database/LimitMax";
29
+ import Semaphore from "../Infrastructure/Semaphore";
29
30
  export class Service extends DatabaseService {
30
31
  constructor() {
31
32
  super(AlertStateTimeline);
@@ -52,105 +53,176 @@ export class Service extends DatabaseService {
52
53
  return resolvedState.id;
53
54
  }
54
55
  async onBeforeCreate(createBy) {
55
- var _a, _b;
56
+ var _a, _b, _c, _d;
56
57
  if (!createBy.data.alertId) {
57
58
  throw new BadDataException("alertId is null");
58
59
  }
59
- if (!createBy.data.startsAt) {
60
- createBy.data.startsAt = OneUptimeDate.getCurrentDate();
61
- }
62
- if ((createBy.data.createdByUserId ||
63
- createBy.data.createdByUser ||
64
- createBy.props.userId) &&
65
- !createBy.data.rootCause) {
66
- let userId = createBy.data.createdByUserId;
67
- if (createBy.props.userId) {
68
- userId = createBy.props.userId;
60
+ let mutex = null;
61
+ try {
62
+ if (!createBy.data.startsAt) {
63
+ createBy.data.startsAt = OneUptimeDate.getCurrentDate();
69
64
  }
70
- if (createBy.data.createdByUser && createBy.data.createdByUser.id) {
71
- userId = createBy.data.createdByUser.id;
65
+ try {
66
+ mutex = await Semaphore.lock({
67
+ key: createBy.data.alertId.toString(),
68
+ namespace: "AlertStateTimeline.create",
69
+ });
72
70
  }
73
- if (userId) {
74
- createBy.data.rootCause = `Alert state created by ${await UserService.getUserMarkdownString({
75
- userId: userId,
76
- projectId: createBy.data.projectId || createBy.props.tenantId,
77
- })}`;
71
+ catch (err) {
72
+ logger.error(err);
78
73
  }
79
- }
80
- const stateBeforeThis = await this.findOneBy({
81
- query: {
82
- alertId: createBy.data.alertId,
83
- startsAt: QueryHelper.lessThanEqualTo(createBy.data.startsAt),
84
- },
85
- sort: {
86
- startsAt: SortOrder.Descending,
87
- },
88
- props: {
89
- isRoot: true,
90
- },
91
- select: {
92
- alertStateId: true,
93
- startsAt: true,
94
- endsAt: true,
95
- },
96
- });
97
- logger.debug("State Before this");
98
- logger.debug(stateBeforeThis);
99
- // If this is the first state, then do not notify the owner.
100
- if (!stateBeforeThis) {
101
- // since this is the first status, do not notify the owner.
102
- createBy.data.isOwnerNotified = true;
103
- }
104
- const stateAfterThis = await this.findOneBy({
105
- query: {
106
- alertId: createBy.data.alertId,
107
- startsAt: QueryHelper.greaterThan(createBy.data.startsAt),
108
- },
109
- sort: {
110
- startsAt: SortOrder.Ascending,
111
- },
112
- props: {
113
- isRoot: true,
114
- },
115
- select: {
116
- alertStateId: true,
117
- startsAt: true,
118
- endsAt: true,
119
- },
120
- });
121
- // compute ends at. It's the start of the next status.
122
- if (stateAfterThis && stateAfterThis.startsAt) {
123
- createBy.data.endsAt = stateAfterThis.startsAt;
124
- }
125
- logger.debug("State After this");
126
- logger.debug(stateAfterThis);
127
- const internalNote = (_a = createBy.miscDataProps) === null || _a === void 0 ? void 0 : _a["internalNote"];
128
- if (internalNote) {
129
- const alertNote = new AlertInternalNote();
130
- alertNote.alertId = createBy.data.alertId;
131
- alertNote.note = internalNote;
132
- alertNote.createdAt = createBy.data.startsAt;
133
- alertNote.projectId = createBy.data.projectId;
134
- await AlertInternalNoteService.create({
135
- data: alertNote,
136
- props: createBy.props,
74
+ if ((createBy.data.createdByUserId ||
75
+ createBy.data.createdByUser ||
76
+ createBy.props.userId) &&
77
+ !createBy.data.rootCause) {
78
+ let userId = createBy.data.createdByUserId;
79
+ if (createBy.props.userId) {
80
+ userId = createBy.props.userId;
81
+ }
82
+ if (createBy.data.createdByUser && createBy.data.createdByUser.id) {
83
+ userId = createBy.data.createdByUser.id;
84
+ }
85
+ if (userId) {
86
+ createBy.data.rootCause = `Alert state created by ${await UserService.getUserMarkdownString({
87
+ userId: userId,
88
+ projectId: createBy.data.projectId || createBy.props.tenantId,
89
+ })}`;
90
+ }
91
+ }
92
+ const alertStateId = createBy.data.alertStateId || ((_a = createBy.data.alertState) === null || _a === void 0 ? void 0 : _a.id);
93
+ if (!alertStateId) {
94
+ throw new BadDataException("alertStateId is null");
95
+ }
96
+ const stateBeforeThis = await this.findOneBy({
97
+ query: {
98
+ alertId: createBy.data.alertId,
99
+ startsAt: QueryHelper.lessThanEqualTo(createBy.data.startsAt),
100
+ },
101
+ sort: {
102
+ startsAt: SortOrder.Descending,
103
+ },
104
+ props: {
105
+ isRoot: true,
106
+ },
107
+ select: {
108
+ alertStateId: true,
109
+ alertState: {
110
+ order: true,
111
+ name: true,
112
+ },
113
+ startsAt: true,
114
+ endsAt: true,
115
+ },
116
+ });
117
+ logger.debug("State Before this");
118
+ logger.debug(stateBeforeThis);
119
+ // If this is the first state, then do not notify the owner.
120
+ if (!stateBeforeThis) {
121
+ // since this is the first status, do not notify the owner.
122
+ createBy.data.isOwnerNotified = true;
123
+ }
124
+ // check if this new state and the previous state are same.
125
+ // if yes, then throw bad data exception.
126
+ if (stateBeforeThis && stateBeforeThis.alertStateId && alertStateId) {
127
+ if (stateBeforeThis.alertStateId.toString() === alertStateId.toString()) {
128
+ throw new BadDataException("Alert state cannot be same as previous state.");
129
+ }
130
+ }
131
+ if (stateBeforeThis && ((_b = stateBeforeThis.alertState) === null || _b === void 0 ? void 0 : _b.order)) {
132
+ const newAlertState = await AlertStateService.findOneBy({
133
+ query: {
134
+ _id: alertStateId,
135
+ },
136
+ select: {
137
+ order: true,
138
+ name: true,
139
+ },
140
+ props: {
141
+ isRoot: true,
142
+ },
143
+ });
144
+ if (newAlertState && newAlertState.order) {
145
+ // check if the new alert state is in order is greater than the previous state order
146
+ if (stateBeforeThis &&
147
+ stateBeforeThis.alertState &&
148
+ stateBeforeThis.alertState.order &&
149
+ newAlertState.order <= stateBeforeThis.alertState.order) {
150
+ throw new BadDataException(`Alert cannot transition to ${newAlertState.name} state from ${stateBeforeThis.alertState.name} state because ${newAlertState.name} is before ${stateBeforeThis.alertState.name} in the order of alert states.`);
151
+ }
152
+ }
153
+ }
154
+ const stateAfterThis = await this.findOneBy({
155
+ query: {
156
+ alertId: createBy.data.alertId,
157
+ startsAt: QueryHelper.greaterThan(createBy.data.startsAt),
158
+ },
159
+ sort: {
160
+ startsAt: SortOrder.Ascending,
161
+ },
162
+ props: {
163
+ isRoot: true,
164
+ },
165
+ select: {
166
+ alertStateId: true,
167
+ startsAt: true,
168
+ endsAt: true,
169
+ },
137
170
  });
171
+ // compute ends at. It's the start of the next status.
172
+ if (stateAfterThis && stateAfterThis.startsAt) {
173
+ createBy.data.endsAt = stateAfterThis.startsAt;
174
+ }
175
+ // check if this new state and the previous state are same.
176
+ // if yes, then throw bad data exception.
177
+ if (stateAfterThis && stateAfterThis.alertStateId && alertStateId) {
178
+ if (stateAfterThis.alertStateId.toString() === alertStateId.toString()) {
179
+ throw new BadDataException("Alert state cannot be same as next state.");
180
+ }
181
+ }
182
+ logger.debug("State After this");
183
+ logger.debug(stateAfterThis);
184
+ const internalNote = (_c = createBy.miscDataProps) === null || _c === void 0 ? void 0 : _c["internalNote"];
185
+ if (internalNote) {
186
+ const alertNote = new AlertInternalNote();
187
+ alertNote.alertId = createBy.data.alertId;
188
+ alertNote.note = internalNote;
189
+ alertNote.createdAt = createBy.data.startsAt;
190
+ alertNote.projectId = createBy.data.projectId;
191
+ await AlertInternalNoteService.create({
192
+ data: alertNote,
193
+ props: createBy.props,
194
+ });
195
+ }
196
+ const privateNote = (_d = createBy.miscDataProps) === null || _d === void 0 ? void 0 : _d["privateNote"];
197
+ return {
198
+ createBy,
199
+ carryForward: {
200
+ statusTimelineBeforeThisStatus: stateBeforeThis || null,
201
+ statusTimelineAfterThisStatus: stateAfterThis || null,
202
+ privateNote: privateNote,
203
+ mutex: mutex,
204
+ },
205
+ };
206
+ }
207
+ catch (error) {
208
+ // release the mutex if it was acquired.
209
+ if (mutex) {
210
+ try {
211
+ await Semaphore.release(mutex);
212
+ }
213
+ catch (err) {
214
+ logger.error(err);
215
+ }
216
+ }
217
+ throw error;
138
218
  }
139
- const privateNote = (_b = createBy.miscDataProps) === null || _b === void 0 ? void 0 : _b["privateNote"];
140
- return {
141
- createBy,
142
- carryForward: {
143
- statusTimelineBeforeThisStatus: stateBeforeThis || null,
144
- statusTimelineAfterThisStatus: stateAfterThis || null,
145
- privateNote: privateNote,
146
- },
147
- };
148
219
  }
149
220
  async onCreateSuccess(onCreate, createdItem) {
150
221
  var _a;
151
222
  if (!createdItem.alertId) {
152
223
  throw new BadDataException("alertId is null");
153
224
  }
225
+ const mutex = onCreate.carryForward.mutex;
154
226
  if (!createdItem.alertStateId) {
155
227
  throw new BadDataException("alertStateId is null");
156
228
  }
@@ -215,6 +287,14 @@ export class Service extends DatabaseService {
215
287
  props: onCreate.createBy.props,
216
288
  });
217
289
  }
290
+ if (mutex) {
291
+ try {
292
+ await Semaphore.release(mutex);
293
+ }
294
+ catch (err) {
295
+ logger.error(err);
296
+ }
297
+ }
218
298
  const alertState = await AlertStateService.findOneBy({
219
299
  query: {
220
300
  _id: createdItem.alertStateId.toString(),
@@ -1 +1 @@
1
- {"version":3,"file":"AlertStateTimelineService.js","sourceRoot":"","sources":["../../../../Server/Services/AlertStateTimelineService.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"AlertStateTimelineService.js","sourceRoot":"","sources":["../../../../Server/Services/AlertStateTimelineService.ts"],"names":[],"mappings":"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"}
@@ -26,6 +26,7 @@ import { IncidentFeedEventType } from "../../Models/DatabaseModels/IncidentFeed"
26
26
  import CaptureSpan from "../Utils/Telemetry/CaptureSpan";
27
27
  import { LIMIT_PER_PROJECT } from "../../Types/Database/LimitMax";
28
28
  import WorkspaceNotificationRuleService from "./WorkspaceNotificationRuleService";
29
+ import Semaphore from "../Infrastructure/Semaphore";
29
30
  export class Service extends DatabaseService {
30
31
  constructor() {
31
32
  super(IncidentStateTimeline);
@@ -52,96 +53,172 @@ export class Service extends DatabaseService {
52
53
  return resolvedState.id;
53
54
  }
54
55
  async onBeforeCreate(createBy) {
55
- var _a;
56
- if (!createBy.data.incidentId) {
57
- throw new BadDataException("incidentId is null");
58
- }
59
- if (!createBy.data.startsAt) {
60
- createBy.data.startsAt = OneUptimeDate.getCurrentDate();
61
- }
62
- if ((createBy.data.createdByUserId ||
63
- createBy.data.createdByUser ||
64
- createBy.props.userId) &&
65
- !createBy.data.rootCause) {
66
- let userId = createBy.data.createdByUserId;
67
- if (createBy.props.userId) {
68
- userId = createBy.props.userId;
56
+ var _a, _b, _c;
57
+ let mutex = null;
58
+ try {
59
+ if (!createBy.data.incidentId) {
60
+ throw new BadDataException("incidentId is null");
69
61
  }
70
- if (createBy.data.createdByUser && createBy.data.createdByUser.id) {
71
- userId = createBy.data.createdByUser.id;
62
+ try {
63
+ mutex = await Semaphore.lock({
64
+ key: createBy.data.incidentId.toString(),
65
+ namespace: "IncidentStateTimeline.create",
66
+ });
72
67
  }
73
- if (userId) {
74
- createBy.data.rootCause = `Incident state created by ${await UserService.getUserMarkdownString({
75
- userId: userId,
76
- projectId: createBy.data.projectId || createBy.props.tenantId,
77
- })}`;
68
+ catch (err) {
69
+ logger.error(err);
78
70
  }
71
+ if (!createBy.data.startsAt) {
72
+ createBy.data.startsAt = OneUptimeDate.getCurrentDate();
73
+ }
74
+ if ((createBy.data.createdByUserId ||
75
+ createBy.data.createdByUser ||
76
+ createBy.props.userId) &&
77
+ !createBy.data.rootCause) {
78
+ let userId = createBy.data.createdByUserId;
79
+ if (createBy.props.userId) {
80
+ userId = createBy.props.userId;
81
+ }
82
+ if (createBy.data.createdByUser && createBy.data.createdByUser.id) {
83
+ userId = createBy.data.createdByUser.id;
84
+ }
85
+ if (userId) {
86
+ createBy.data.rootCause = `Incident state created by ${await UserService.getUserMarkdownString({
87
+ userId: userId,
88
+ projectId: createBy.data.projectId || createBy.props.tenantId,
89
+ })}`;
90
+ }
91
+ }
92
+ const incidentStateId = createBy.data.incidentStateId || ((_a = createBy.data.incidentState) === null || _a === void 0 ? void 0 : _a.id);
93
+ if (!incidentStateId) {
94
+ throw new BadDataException("incidentStateId is null");
95
+ }
96
+ const stateBeforeThis = await this.findOneBy({
97
+ query: {
98
+ incidentId: createBy.data.incidentId,
99
+ startsAt: QueryHelper.lessThanEqualTo(createBy.data.startsAt),
100
+ },
101
+ sort: {
102
+ startsAt: SortOrder.Descending,
103
+ },
104
+ props: {
105
+ isRoot: true,
106
+ },
107
+ select: {
108
+ incidentStateId: true,
109
+ incidentState: {
110
+ _id: true,
111
+ order: true,
112
+ name: true,
113
+ },
114
+ startsAt: true,
115
+ endsAt: true,
116
+ },
117
+ });
118
+ logger.debug("State Before this");
119
+ logger.debug(stateBeforeThis);
120
+ // If this is the first state, then do not notify the owner.
121
+ if (!stateBeforeThis) {
122
+ // since this is the first status, do not notify the owner.
123
+ createBy.data.isOwnerNotified = true;
124
+ }
125
+ // check if this new state and the previous state are same.
126
+ // if yes, then throw bad data exception.
127
+ if (stateBeforeThis &&
128
+ stateBeforeThis.incidentStateId &&
129
+ incidentStateId) {
130
+ if (stateBeforeThis.incidentStateId.toString() ===
131
+ incidentStateId.toString()) {
132
+ throw new BadDataException("Incident state cannot be same as previous state.");
133
+ }
134
+ }
135
+ if (stateBeforeThis && ((_b = stateBeforeThis.incidentState) === null || _b === void 0 ? void 0 : _b.order)) {
136
+ const newIncidentState = await IncidentStateService.findOneBy({
137
+ query: {
138
+ _id: incidentStateId,
139
+ },
140
+ select: {
141
+ order: true,
142
+ name: true,
143
+ },
144
+ props: {
145
+ isRoot: true,
146
+ },
147
+ });
148
+ if (newIncidentState && newIncidentState.order) {
149
+ // check if the new incident state is in order is greater than the previous state order
150
+ if (stateBeforeThis &&
151
+ stateBeforeThis.incidentState &&
152
+ stateBeforeThis.incidentState.order &&
153
+ newIncidentState.order <= stateBeforeThis.incidentState.order) {
154
+ throw new BadDataException(`Incident cannot transition to ${newIncidentState.name} state from ${stateBeforeThis.incidentState.name} state because ${newIncidentState.name} is before ${stateBeforeThis.incidentState.name} in the order of incident states.`);
155
+ }
156
+ }
157
+ }
158
+ const stateAfterThis = await this.findOneBy({
159
+ query: {
160
+ incidentId: createBy.data.incidentId,
161
+ startsAt: QueryHelper.greaterThan(createBy.data.startsAt),
162
+ },
163
+ sort: {
164
+ startsAt: SortOrder.Ascending,
165
+ },
166
+ props: {
167
+ isRoot: true,
168
+ },
169
+ select: {
170
+ incidentStateId: true,
171
+ startsAt: true,
172
+ endsAt: true,
173
+ },
174
+ });
175
+ // compute ends at. It's the start of the next status.
176
+ if (stateAfterThis && stateAfterThis.startsAt) {
177
+ createBy.data.endsAt = stateAfterThis.startsAt;
178
+ }
179
+ // check if this new state and the previous state are same.
180
+ // if yes, then throw bad data exception.
181
+ if (stateAfterThis && stateAfterThis.incidentStateId && incidentStateId) {
182
+ if (stateAfterThis.incidentStateId.toString() ===
183
+ incidentStateId.toString()) {
184
+ throw new BadDataException("Incident state cannot be same as next state.");
185
+ }
186
+ }
187
+ logger.debug("State After this");
188
+ logger.debug(stateAfterThis);
189
+ const publicNote = (_c = createBy.miscDataProps) === null || _c === void 0 ? void 0 : _c["publicNote"];
190
+ if (publicNote) {
191
+ // mark status page subscribers as notified for this state change because we dont want to send duplicate (two) emails one for public note and one for state change.
192
+ if (createBy.data.shouldStatusPageSubscribersBeNotified) {
193
+ createBy.data.isStatusPageSubscribersNotified = true;
194
+ }
195
+ }
196
+ return {
197
+ createBy,
198
+ carryForward: {
199
+ statusTimelineBeforeThisStatus: stateBeforeThis || null,
200
+ statusTimelineAfterThisStatus: stateAfterThis || null,
201
+ publicNote: publicNote,
202
+ mutex: mutex,
203
+ },
204
+ };
79
205
  }
80
- const stateBeforeThis = await this.findOneBy({
81
- query: {
82
- incidentId: createBy.data.incidentId,
83
- startsAt: QueryHelper.lessThanEqualTo(createBy.data.startsAt),
84
- },
85
- sort: {
86
- startsAt: SortOrder.Descending,
87
- },
88
- props: {
89
- isRoot: true,
90
- },
91
- select: {
92
- incidentStateId: true,
93
- startsAt: true,
94
- endsAt: true,
95
- },
96
- });
97
- logger.debug("State Before this");
98
- logger.debug(stateBeforeThis);
99
- // If this is the first state, then do not notify the owner.
100
- if (!stateBeforeThis) {
101
- // since this is the first status, do not notify the owner.
102
- createBy.data.isOwnerNotified = true;
103
- }
104
- const stateAfterThis = await this.findOneBy({
105
- query: {
106
- incidentId: createBy.data.incidentId,
107
- startsAt: QueryHelper.greaterThan(createBy.data.startsAt),
108
- },
109
- sort: {
110
- startsAt: SortOrder.Ascending,
111
- },
112
- props: {
113
- isRoot: true,
114
- },
115
- select: {
116
- incidentStateId: true,
117
- startsAt: true,
118
- endsAt: true,
119
- },
120
- });
121
- // compute ends at. It's the start of the next status.
122
- if (stateAfterThis && stateAfterThis.startsAt) {
123
- createBy.data.endsAt = stateAfterThis.startsAt;
124
- }
125
- logger.debug("State After this");
126
- logger.debug(stateAfterThis);
127
- const publicNote = (_a = createBy.miscDataProps) === null || _a === void 0 ? void 0 : _a["publicNote"];
128
- if (publicNote) {
129
- // mark status page subscribers as notified for this state change because we dont want to send duplicate (two) emails one for public note and one for state change.
130
- if (createBy.data.shouldStatusPageSubscribersBeNotified) {
131
- createBy.data.isStatusPageSubscribersNotified = true;
206
+ catch (err) {
207
+ // release the mutex if it was acquired.
208
+ if (mutex) {
209
+ try {
210
+ await Semaphore.release(mutex);
211
+ }
212
+ catch (err) {
213
+ logger.error(err);
214
+ }
132
215
  }
216
+ throw err;
133
217
  }
134
- return {
135
- createBy,
136
- carryForward: {
137
- statusTimelineBeforeThisStatus: stateBeforeThis || null,
138
- statusTimelineAfterThisStatus: stateAfterThis || null,
139
- publicNote: publicNote,
140
- },
141
- };
142
218
  }
143
219
  async onCreateSuccess(onCreate, createdItem) {
144
220
  var _a;
221
+ const mutex = onCreate.carryForward.mutex;
145
222
  if (!createdItem.incidentId) {
146
223
  throw new BadDataException("incidentId is null");
147
224
  }
@@ -226,6 +303,14 @@ export class Service extends DatabaseService {
226
303
  name: true,
227
304
  },
228
305
  });
306
+ if (mutex) {
307
+ try {
308
+ await Semaphore.release(mutex);
309
+ }
310
+ catch (err) {
311
+ logger.error(err);
312
+ }
313
+ }
229
314
  const stateName = (incidentState === null || incidentState === void 0 ? void 0 : incidentState.name) || "";
230
315
  let stateEmoji = "➡️";
231
316
  // if resolved state then change emoji to ✅.