@oneuptime/common 10.2.18 → 10.2.20

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 (109) hide show
  1. package/Models/DatabaseModels/Index.ts +4 -0
  2. package/Models/DatabaseModels/ScheduledMaintenanceFeed.ts +2 -0
  3. package/Models/DatabaseModels/ScheduledMaintenanceLabelRule.ts +742 -0
  4. package/Models/DatabaseModels/ScheduledMaintenanceOwnerRule.ts +828 -0
  5. package/Server/Infrastructure/Postgres/SchemaMigrations/1778703414082-AddScheduledMaintenanceRules.ts +375 -0
  6. package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +2 -0
  7. package/Server/Services/ScheduledMaintenanceLabelRuleEngineService.ts +463 -0
  8. package/Server/Services/ScheduledMaintenanceLabelRuleService.ts +14 -0
  9. package/Server/Services/ScheduledMaintenanceOwnerRuleEngineService.ts +545 -0
  10. package/Server/Services/ScheduledMaintenanceOwnerRuleService.ts +14 -0
  11. package/Server/Services/ScheduledMaintenanceService.ts +34 -0
  12. package/Types/Call/CallRequest.ts +29 -5
  13. package/Types/Docs/DocsLanguage.ts +36 -0
  14. package/Types/Permission.ts +96 -0
  15. package/UI/Components/AlertBanner/AlertBanner.tsx +4 -1
  16. package/UI/Components/Alerts/Alert.tsx +15 -4
  17. package/UI/Components/Button/DropdownButton.tsx +4 -2
  18. package/UI/Components/Detail/Detail.tsx +5 -1
  19. package/UI/Components/Detail/FieldLabel.tsx +14 -6
  20. package/UI/Components/Detail/PlaceholderText.tsx +4 -1
  21. package/UI/Components/Dropdown/Dropdown.tsx +13 -4
  22. package/UI/Components/ErrorMessage/ErrorMessage.tsx +9 -2
  23. package/UI/Components/Filters/FilterViewer.tsx +42 -31
  24. package/UI/Components/Filters/FiltersForm.tsx +13 -6
  25. package/UI/Components/Forms/BasicForm.tsx +23 -6
  26. package/UI/Components/Forms/Fields/FieldLabel.tsx +18 -6
  27. package/UI/Components/ModelTable/BaseModelTable.tsx +16 -13
  28. package/UI/Components/MoreMenu/MoreMenuSection.tsx +4 -1
  29. package/UI/Components/Navbar/NavBarItem.tsx +4 -1
  30. package/UI/Components/Navbar/NavBarMenuItem.tsx +7 -2
  31. package/UI/Components/Navbar/NavBarMenuSubItem.tsx +4 -1
  32. package/UI/Components/ProgressButtons/ProgressButtonItem.tsx +4 -1
  33. package/UI/Components/Table/Table.tsx +13 -7
  34. package/UI/Components/Table/TableHeader.tsx +3 -1
  35. package/UI/Components/Tabs/Tab.tsx +5 -1
  36. package/UI/Components/TopAlert/TopAlert.tsx +8 -2
  37. package/build/dist/Models/DatabaseModels/Index.js +4 -0
  38. package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
  39. package/build/dist/Models/DatabaseModels/ScheduledMaintenanceFeed.js +2 -0
  40. package/build/dist/Models/DatabaseModels/ScheduledMaintenanceFeed.js.map +1 -1
  41. package/build/dist/Models/DatabaseModels/ScheduledMaintenanceLabelRule.js +749 -0
  42. package/build/dist/Models/DatabaseModels/ScheduledMaintenanceLabelRule.js.map +1 -0
  43. package/build/dist/Models/DatabaseModels/ScheduledMaintenanceOwnerRule.js +834 -0
  44. package/build/dist/Models/DatabaseModels/ScheduledMaintenanceOwnerRule.js.map +1 -0
  45. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1778703414082-AddScheduledMaintenanceRules.js +132 -0
  46. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1778703414082-AddScheduledMaintenanceRules.js.map +1 -0
  47. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +2 -0
  48. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
  49. package/build/dist/Server/Services/ScheduledMaintenanceLabelRuleEngineService.js +375 -0
  50. package/build/dist/Server/Services/ScheduledMaintenanceLabelRuleEngineService.js.map +1 -0
  51. package/build/dist/Server/Services/ScheduledMaintenanceLabelRuleService.js +13 -0
  52. package/build/dist/Server/Services/ScheduledMaintenanceLabelRuleService.js.map +1 -0
  53. package/build/dist/Server/Services/ScheduledMaintenanceOwnerRuleEngineService.js +431 -0
  54. package/build/dist/Server/Services/ScheduledMaintenanceOwnerRuleEngineService.js.map +1 -0
  55. package/build/dist/Server/Services/ScheduledMaintenanceOwnerRuleService.js +13 -0
  56. package/build/dist/Server/Services/ScheduledMaintenanceOwnerRuleService.js.map +1 -0
  57. package/build/dist/Server/Services/ScheduledMaintenanceService.js +28 -0
  58. package/build/dist/Server/Services/ScheduledMaintenanceService.js.map +1 -1
  59. package/build/dist/Types/Call/CallRequest.js +28 -5
  60. package/build/dist/Types/Call/CallRequest.js.map +1 -1
  61. package/build/dist/Types/Docs/DocsLanguage.js +25 -0
  62. package/build/dist/Types/Docs/DocsLanguage.js.map +1 -0
  63. package/build/dist/Types/Permission.js +84 -0
  64. package/build/dist/Types/Permission.js.map +1 -1
  65. package/build/dist/UI/Components/AlertBanner/AlertBanner.js +5 -1
  66. package/build/dist/UI/Components/AlertBanner/AlertBanner.js.map +1 -1
  67. package/build/dist/UI/Components/Alerts/Alert.js +9 -4
  68. package/build/dist/UI/Components/Alerts/Alert.js.map +1 -1
  69. package/build/dist/UI/Components/Button/DropdownButton.js +6 -2
  70. package/build/dist/UI/Components/Button/DropdownButton.js.map +1 -1
  71. package/build/dist/UI/Components/Detail/Detail.js +4 -1
  72. package/build/dist/UI/Components/Detail/Detail.js.map +1 -1
  73. package/build/dist/UI/Components/Detail/FieldLabel.js +11 -6
  74. package/build/dist/UI/Components/Detail/FieldLabel.js.map +1 -1
  75. package/build/dist/UI/Components/Detail/PlaceholderText.js +5 -1
  76. package/build/dist/UI/Components/Detail/PlaceholderText.js.map +1 -1
  77. package/build/dist/UI/Components/Dropdown/Dropdown.js +11 -4
  78. package/build/dist/UI/Components/Dropdown/Dropdown.js.map +1 -1
  79. package/build/dist/UI/Components/ErrorMessage/ErrorMessage.js +8 -2
  80. package/build/dist/UI/Components/ErrorMessage/ErrorMessage.js.map +1 -1
  81. package/build/dist/UI/Components/Filters/FilterViewer.js +49 -32
  82. package/build/dist/UI/Components/Filters/FilterViewer.js.map +1 -1
  83. package/build/dist/UI/Components/Filters/FiltersForm.js +9 -3
  84. package/build/dist/UI/Components/Filters/FiltersForm.js.map +1 -1
  85. package/build/dist/UI/Components/Forms/BasicForm.js +16 -6
  86. package/build/dist/UI/Components/Forms/BasicForm.js.map +1 -1
  87. package/build/dist/UI/Components/Forms/Fields/FieldLabel.js +13 -6
  88. package/build/dist/UI/Components/Forms/Fields/FieldLabel.js.map +1 -1
  89. package/build/dist/UI/Components/ModelTable/BaseModelTable.js +15 -10
  90. package/build/dist/UI/Components/ModelTable/BaseModelTable.js.map +1 -1
  91. package/build/dist/UI/Components/MoreMenu/MoreMenuSection.js +5 -1
  92. package/build/dist/UI/Components/MoreMenu/MoreMenuSection.js.map +1 -1
  93. package/build/dist/UI/Components/Navbar/NavBarItem.js +5 -1
  94. package/build/dist/UI/Components/Navbar/NavBarItem.js.map +1 -1
  95. package/build/dist/UI/Components/Navbar/NavBarMenuItem.js +7 -2
  96. package/build/dist/UI/Components/Navbar/NavBarMenuItem.js.map +1 -1
  97. package/build/dist/UI/Components/Navbar/NavBarMenuSubItem.js +5 -1
  98. package/build/dist/UI/Components/Navbar/NavBarMenuSubItem.js.map +1 -1
  99. package/build/dist/UI/Components/ProgressButtons/ProgressButtonItem.js +5 -1
  100. package/build/dist/UI/Components/ProgressButtons/ProgressButtonItem.js.map +1 -1
  101. package/build/dist/UI/Components/Table/Table.js +12 -7
  102. package/build/dist/UI/Components/Table/Table.js.map +1 -1
  103. package/build/dist/UI/Components/Table/TableHeader.js +4 -2
  104. package/build/dist/UI/Components/Table/TableHeader.js.map +1 -1
  105. package/build/dist/UI/Components/Tabs/Tab.js +5 -1
  106. package/build/dist/UI/Components/Tabs/Tab.js.map +1 -1
  107. package/build/dist/UI/Components/TopAlert/TopAlert.js +7 -2
  108. package/build/dist/UI/Components/TopAlert/TopAlert.js.map +1 -1
  109. package/package.json +1 -1
@@ -0,0 +1,431 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var __metadata = (this && this.__metadata) || function (k, v) {
8
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
+ };
10
+ import ScheduledMaintenance from "../../Models/DatabaseModels/ScheduledMaintenance";
11
+ import ScheduledMaintenanceOwnerRule from "../../Models/DatabaseModels/ScheduledMaintenanceOwnerRule";
12
+ import MonitorOwnerTeamService from "./MonitorOwnerTeamService";
13
+ import MonitorOwnerUserService from "./MonitorOwnerUserService";
14
+ import MonitorService from "./MonitorService";
15
+ import ScheduledMaintenanceFeedService from "./ScheduledMaintenanceFeedService";
16
+ import ScheduledMaintenanceOwnerRuleService from "./ScheduledMaintenanceOwnerRuleService";
17
+ import ScheduledMaintenanceService from "./ScheduledMaintenanceService";
18
+ import TeamService from "./TeamService";
19
+ import UserService from "./UserService";
20
+ import { ScheduledMaintenanceFeedEventType } from "../../Models/DatabaseModels/ScheduledMaintenanceFeed";
21
+ import { Indigo500 } from "../../Types/BrandColors";
22
+ import ObjectID from "../../Types/ObjectID";
23
+ import LIMIT_MAX from "../../Types/Database/LimitMax";
24
+ import QueryHelper from "../Types/Database/QueryHelper";
25
+ import CaptureSpan from "../Utils/Telemetry/CaptureSpan";
26
+ import logger from "../Utils/Logger";
27
+ class ScheduledMaintenanceOwnerRuleEngineServiceClass {
28
+ /**
29
+ * Evaluates ScheduledMaintenanceOwnerRule rows for the given event and adds
30
+ * matched owner users / teams via ScheduledMaintenanceService.addOwners.
31
+ * Rules with notifyOwners set notify the added owners; rules with
32
+ * notifyOwners off add silently.
33
+ */
34
+ async applyRulesToScheduledMaintenance(scheduledMaintenance) {
35
+ var _a, _b, _c;
36
+ if (!scheduledMaintenance.id || !scheduledMaintenance.projectId) {
37
+ return;
38
+ }
39
+ try {
40
+ const rules = await ScheduledMaintenanceOwnerRuleService.findBy({
41
+ query: {
42
+ projectId: scheduledMaintenance.projectId,
43
+ isEnabled: true,
44
+ },
45
+ props: { isRoot: true },
46
+ select: {
47
+ _id: true,
48
+ name: true,
49
+ notifyOwners: true,
50
+ monitors: { _id: true },
51
+ scheduledMaintenanceLabels: { _id: true },
52
+ monitorLabels: { _id: true },
53
+ titlePattern: true,
54
+ descriptionPattern: true,
55
+ monitorNamePattern: true,
56
+ monitorDescriptionPattern: true,
57
+ ownerUsers: { _id: true },
58
+ ownerTeams: { _id: true },
59
+ inheritOwnersFromMonitors: true,
60
+ },
61
+ limit: 100,
62
+ skip: 0,
63
+ });
64
+ if (rules.length === 0) {
65
+ return;
66
+ }
67
+ const usersByNotify = new Map([
68
+ [true, new Set()],
69
+ [false, new Set()],
70
+ ]);
71
+ const teamsByNotify = new Map([
72
+ [true, new Set()],
73
+ [false, new Set()],
74
+ ]);
75
+ const matchedRules = [];
76
+ const allUserIds = new Set();
77
+ const allTeamIds = new Set();
78
+ let inheritFromMonitors = false;
79
+ const inheritNotifyMode = { value: null };
80
+ for (const rule of rules) {
81
+ const matches = await this.doesScheduledMaintenanceMatchRule(scheduledMaintenance, rule);
82
+ if (!matches) {
83
+ continue;
84
+ }
85
+ let ruleAddedAny = false;
86
+ const notify = rule.notifyOwners !== false;
87
+ for (const user of rule.ownerUsers || []) {
88
+ if (user.id) {
89
+ usersByNotify.get(notify).add(user.id.toString());
90
+ allUserIds.add(user.id.toString());
91
+ ruleAddedAny = true;
92
+ }
93
+ }
94
+ for (const team of rule.ownerTeams || []) {
95
+ if (team.id) {
96
+ teamsByNotify.get(notify).add(team.id.toString());
97
+ allTeamIds.add(team.id.toString());
98
+ ruleAddedAny = true;
99
+ }
100
+ }
101
+ if (rule.inheritOwnersFromMonitors) {
102
+ inheritFromMonitors = true;
103
+ ruleAddedAny = true;
104
+ inheritNotifyMode.value =
105
+ inheritNotifyMode.value === true ? true : notify;
106
+ }
107
+ if (ruleAddedAny) {
108
+ matchedRules.push(rule);
109
+ }
110
+ }
111
+ const inheritedFromMonitorUserIds = new Set();
112
+ const inheritedFromMonitorTeamIds = new Set();
113
+ if (inheritFromMonitors && ((_a = scheduledMaintenance.monitors) === null || _a === void 0 ? void 0 : _a.length)) {
114
+ const monitorIds = scheduledMaintenance.monitors
115
+ .map((m) => {
116
+ return m.id;
117
+ })
118
+ .filter((id) => {
119
+ return Boolean(id);
120
+ });
121
+ if (monitorIds.length > 0) {
122
+ const [monitorOwnerUsers, monitorOwnerTeams] = await Promise.all([
123
+ MonitorOwnerUserService.findBy({
124
+ query: { monitorId: QueryHelper.any(monitorIds) },
125
+ select: { userId: true },
126
+ props: { isRoot: true },
127
+ limit: LIMIT_MAX,
128
+ skip: 0,
129
+ }),
130
+ MonitorOwnerTeamService.findBy({
131
+ query: { monitorId: QueryHelper.any(monitorIds) },
132
+ select: { teamId: true },
133
+ props: { isRoot: true },
134
+ limit: LIMIT_MAX,
135
+ skip: 0,
136
+ }),
137
+ ]);
138
+ for (const ownerUser of monitorOwnerUsers) {
139
+ if (ownerUser.userId) {
140
+ inheritedFromMonitorUserIds.add(ownerUser.userId.toString());
141
+ }
142
+ }
143
+ for (const ownerTeam of monitorOwnerTeams) {
144
+ if (ownerTeam.teamId) {
145
+ inheritedFromMonitorTeamIds.add(ownerTeam.teamId.toString());
146
+ }
147
+ }
148
+ }
149
+ }
150
+ if (inheritedFromMonitorUserIds.size > 0 ||
151
+ inheritedFromMonitorTeamIds.size > 0) {
152
+ const inheritNotify = inheritNotifyMode.value === true;
153
+ for (const id of inheritedFromMonitorUserIds) {
154
+ usersByNotify.get(inheritNotify).add(id);
155
+ allUserIds.add(id);
156
+ }
157
+ for (const id of inheritedFromMonitorTeamIds) {
158
+ teamsByNotify.get(inheritNotify).add(id);
159
+ allTeamIds.add(id);
160
+ }
161
+ }
162
+ if (matchedRules.length === 0) {
163
+ return;
164
+ }
165
+ if (allUserIds.size === 0 && allTeamIds.size === 0) {
166
+ return;
167
+ }
168
+ for (const notify of [true, false]) {
169
+ const userIds = Array.from(usersByNotify.get(notify)).map((id) => {
170
+ return new ObjectID(id);
171
+ });
172
+ const teamIds = Array.from(teamsByNotify.get(notify)).map((id) => {
173
+ return new ObjectID(id);
174
+ });
175
+ if (userIds.length === 0 && teamIds.length === 0) {
176
+ continue;
177
+ }
178
+ await ScheduledMaintenanceService.addOwners(scheduledMaintenance.projectId, scheduledMaintenance.id, userIds, teamIds, notify, { isRoot: true });
179
+ }
180
+ logger.debug(`ScheduledMaintenanceOwnerRuleEngine added owners to event ${scheduledMaintenance.id}`, {
181
+ projectId: scheduledMaintenance.projectId.toString(),
182
+ });
183
+ await this.createRuleExecutedFeedItem({
184
+ scheduledMaintenance,
185
+ matchedRules,
186
+ userIds: Array.from(allUserIds),
187
+ teamIds: Array.from(allTeamIds),
188
+ inheritedFromMonitors: inheritedFromMonitorUserIds.size + inheritedFromMonitorTeamIds.size >
189
+ 0,
190
+ });
191
+ }
192
+ catch (error) {
193
+ logger.error(`Error applying scheduled maintenance owner rules: ${error}`, {
194
+ projectId: (_b = scheduledMaintenance.projectId) === null || _b === void 0 ? void 0 : _b.toString(),
195
+ scheduledMaintenanceId: (_c = scheduledMaintenance.id) === null || _c === void 0 ? void 0 : _c.toString(),
196
+ });
197
+ }
198
+ }
199
+ async createRuleExecutedFeedItem(data) {
200
+ var _a, _b;
201
+ const { scheduledMaintenance, matchedRules, userIds, teamIds, inheritedFromMonitors, } = data;
202
+ if (!scheduledMaintenance.id ||
203
+ !scheduledMaintenance.projectId ||
204
+ matchedRules.length === 0 ||
205
+ (userIds.length === 0 && teamIds.length === 0)) {
206
+ return;
207
+ }
208
+ try {
209
+ const userObjectIds = userIds.map((id) => {
210
+ return new ObjectID(id);
211
+ });
212
+ const teamObjectIds = teamIds.map((id) => {
213
+ return new ObjectID(id);
214
+ });
215
+ const [users, teams] = await Promise.all([
216
+ userObjectIds.length > 0
217
+ ? UserService.findBy({
218
+ query: { _id: QueryHelper.any(userObjectIds) },
219
+ select: { name: true, email: true },
220
+ props: { isRoot: true },
221
+ limit: LIMIT_MAX,
222
+ skip: 0,
223
+ })
224
+ : Promise.resolve([]),
225
+ teamObjectIds.length > 0
226
+ ? TeamService.findBy({
227
+ query: { _id: QueryHelper.any(teamObjectIds) },
228
+ select: { name: true },
229
+ props: { isRoot: true },
230
+ limit: LIMIT_MAX,
231
+ skip: 0,
232
+ })
233
+ : Promise.resolve([]),
234
+ ]);
235
+ const userLines = users.map((u) => {
236
+ var _a, _b;
237
+ const display = ((_a = u.name) === null || _a === void 0 ? void 0 : _a.toString()) || ((_b = u.email) === null || _b === void 0 ? void 0 : _b.toString()) || "Unknown User";
238
+ return `\n- 👤 ${display}`;
239
+ });
240
+ const teamLines = teams.map((t) => {
241
+ var _a;
242
+ return `\n- 👥 ${((_a = t.name) === null || _a === void 0 ? void 0 : _a.toString()) || "Unnamed Team"}`;
243
+ });
244
+ const ruleNames = matchedRules
245
+ .map((r) => {
246
+ var _a;
247
+ return ((_a = r.name) === null || _a === void 0 ? void 0 : _a.toString()) || "Unnamed Rule";
248
+ })
249
+ .filter((n) => {
250
+ return n !== "";
251
+ });
252
+ const rulesPart = ruleNames.length === 1
253
+ ? `**${ruleNames[0]}**`
254
+ : ruleNames
255
+ .map((n) => {
256
+ return `**${n}**`;
257
+ })
258
+ .join(", ");
259
+ const ownersPart = userLines.length + teamLines.length > 0
260
+ ? userLines.concat(teamLines).join("")
261
+ : "\n- (no named owners)";
262
+ const inheritedNote = inheritedFromMonitors
263
+ ? `\n\n_Some owners were inherited from the event's monitors._`
264
+ : "";
265
+ const feedInfoInMarkdown = `🛡️ **Scheduled Maintenance Owner Rule${matchedRules.length > 1 ? "s" : ""} executed:** ${rulesPart}\n\nAssigned the following owner${userLines.length + teamLines.length === 1 ? "" : "s"} to the event:${ownersPart}${inheritedNote}`;
266
+ await ScheduledMaintenanceFeedService.createScheduledMaintenanceFeedItem({
267
+ scheduledMaintenanceId: scheduledMaintenance.id,
268
+ projectId: scheduledMaintenance.projectId,
269
+ scheduledMaintenanceFeedEventType: ScheduledMaintenanceFeedEventType.OwnerRuleExecuted,
270
+ displayColor: Indigo500,
271
+ feedInfoInMarkdown,
272
+ });
273
+ }
274
+ catch (error) {
275
+ logger.error(`ScheduledMaintenanceOwnerRuleEngine: failed to create rule-executed feed item: ${error instanceof Error ? error.message : String(error)}`, {
276
+ projectId: (_a = scheduledMaintenance.projectId) === null || _a === void 0 ? void 0 : _a.toString(),
277
+ scheduledMaintenanceId: (_b = scheduledMaintenance.id) === null || _b === void 0 ? void 0 : _b.toString(),
278
+ });
279
+ }
280
+ }
281
+ async doesScheduledMaintenanceMatchRule(scheduledMaintenance, rule) {
282
+ if (rule.monitors && rule.monitors.length > 0) {
283
+ if (!scheduledMaintenance.monitors ||
284
+ scheduledMaintenance.monitors.length === 0) {
285
+ return false;
286
+ }
287
+ const ruleMonitorIds = rule.monitors.map((m) => {
288
+ var _a;
289
+ return ((_a = m.id) === null || _a === void 0 ? void 0 : _a.toString()) || "";
290
+ });
291
+ const eventMonitorIds = scheduledMaintenance.monitors.map((m) => {
292
+ var _a;
293
+ return ((_a = m.id) === null || _a === void 0 ? void 0 : _a.toString()) || "";
294
+ });
295
+ if (!ruleMonitorIds.some((id) => {
296
+ return eventMonitorIds.includes(id);
297
+ })) {
298
+ return false;
299
+ }
300
+ }
301
+ if (rule.scheduledMaintenanceLabels &&
302
+ rule.scheduledMaintenanceLabels.length > 0) {
303
+ if (!scheduledMaintenance.labels ||
304
+ scheduledMaintenance.labels.length === 0) {
305
+ return false;
306
+ }
307
+ const ruleLabelIds = rule.scheduledMaintenanceLabels.map((l) => {
308
+ var _a;
309
+ return ((_a = l.id) === null || _a === void 0 ? void 0 : _a.toString()) || "";
310
+ });
311
+ const eventLabelIds = scheduledMaintenance.labels.map((l) => {
312
+ var _a;
313
+ return ((_a = l.id) === null || _a === void 0 ? void 0 : _a.toString()) || "";
314
+ });
315
+ if (!ruleLabelIds.some((id) => {
316
+ return eventLabelIds.includes(id);
317
+ })) {
318
+ return false;
319
+ }
320
+ }
321
+ const hasMonitorCriteria = Boolean((rule.monitorLabels && rule.monitorLabels.length > 0) ||
322
+ rule.monitorNamePattern ||
323
+ rule.monitorDescriptionPattern);
324
+ if (hasMonitorCriteria) {
325
+ if (!scheduledMaintenance.monitors ||
326
+ scheduledMaintenance.monitors.length === 0) {
327
+ return false;
328
+ }
329
+ let anyMonitorMatches = false;
330
+ for (const eventMonitor of scheduledMaintenance.monitors) {
331
+ if (!eventMonitor.id) {
332
+ continue;
333
+ }
334
+ const monitor = await MonitorService.findOneById({
335
+ id: eventMonitor.id,
336
+ select: {
337
+ name: true,
338
+ description: true,
339
+ labels: { _id: true },
340
+ },
341
+ props: { isRoot: true },
342
+ });
343
+ if (!monitor) {
344
+ continue;
345
+ }
346
+ let monitorMatches = true;
347
+ if (rule.monitorLabels && rule.monitorLabels.length > 0) {
348
+ if (!monitor.labels || monitor.labels.length === 0) {
349
+ monitorMatches = false;
350
+ }
351
+ else {
352
+ const ruleMonitorLabelIds = rule.monitorLabels.map((l) => {
353
+ var _a;
354
+ return ((_a = l.id) === null || _a === void 0 ? void 0 : _a.toString()) || "";
355
+ });
356
+ const monitorLabelIds = monitor.labels.map((l) => {
357
+ var _a;
358
+ return ((_a = l.id) === null || _a === void 0 ? void 0 : _a.toString()) || "";
359
+ });
360
+ if (!ruleMonitorLabelIds.some((id) => {
361
+ return monitorLabelIds.includes(id);
362
+ })) {
363
+ monitorMatches = false;
364
+ }
365
+ }
366
+ }
367
+ if (monitorMatches &&
368
+ rule.monitorNamePattern &&
369
+ (!monitor.name ||
370
+ !this.testRegex(rule.monitorNamePattern, monitor.name, rule))) {
371
+ monitorMatches = false;
372
+ }
373
+ if (monitorMatches &&
374
+ rule.monitorDescriptionPattern &&
375
+ (!monitor.description ||
376
+ !this.testRegex(rule.monitorDescriptionPattern, monitor.description, rule))) {
377
+ monitorMatches = false;
378
+ }
379
+ if (monitorMatches) {
380
+ anyMonitorMatches = true;
381
+ break;
382
+ }
383
+ }
384
+ if (!anyMonitorMatches) {
385
+ return false;
386
+ }
387
+ }
388
+ if (rule.titlePattern &&
389
+ (!scheduledMaintenance.title ||
390
+ !this.testRegex(rule.titlePattern, scheduledMaintenance.title, rule))) {
391
+ return false;
392
+ }
393
+ if (rule.descriptionPattern &&
394
+ (!scheduledMaintenance.description ||
395
+ !this.testRegex(rule.descriptionPattern, scheduledMaintenance.description, rule))) {
396
+ return false;
397
+ }
398
+ return true;
399
+ }
400
+ testRegex(pattern, value, rule) {
401
+ try {
402
+ const regex = new RegExp(pattern, "i");
403
+ return regex.test(value);
404
+ }
405
+ catch (_a) {
406
+ logger.warn(`Invalid regex in scheduled maintenance owner rule ${rule.id}: ${pattern}`);
407
+ return false;
408
+ }
409
+ }
410
+ }
411
+ __decorate([
412
+ CaptureSpan(),
413
+ __metadata("design:type", Function),
414
+ __metadata("design:paramtypes", [ScheduledMaintenance]),
415
+ __metadata("design:returntype", Promise)
416
+ ], ScheduledMaintenanceOwnerRuleEngineServiceClass.prototype, "applyRulesToScheduledMaintenance", null);
417
+ __decorate([
418
+ CaptureSpan(),
419
+ __metadata("design:type", Function),
420
+ __metadata("design:paramtypes", [Object]),
421
+ __metadata("design:returntype", Promise)
422
+ ], ScheduledMaintenanceOwnerRuleEngineServiceClass.prototype, "createRuleExecutedFeedItem", null);
423
+ __decorate([
424
+ CaptureSpan(),
425
+ __metadata("design:type", Function),
426
+ __metadata("design:paramtypes", [ScheduledMaintenance,
427
+ ScheduledMaintenanceOwnerRule]),
428
+ __metadata("design:returntype", Promise)
429
+ ], ScheduledMaintenanceOwnerRuleEngineServiceClass.prototype, "doesScheduledMaintenanceMatchRule", null);
430
+ export default new ScheduledMaintenanceOwnerRuleEngineServiceClass();
431
+ //# sourceMappingURL=ScheduledMaintenanceOwnerRuleEngineService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ScheduledMaintenanceOwnerRuleEngineService.js","sourceRoot":"","sources":["../../../../Server/Services/ScheduledMaintenanceOwnerRuleEngineService.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import DatabaseService from "./DatabaseService";
2
+ import Model from "../../Models/DatabaseModels/ScheduledMaintenanceOwnerRule";
3
+ import { IsBillingEnabled } from "../EnvironmentConfig";
4
+ export class Service extends DatabaseService {
5
+ constructor() {
6
+ super(Model);
7
+ if (IsBillingEnabled) {
8
+ this.hardDeleteItemsOlderThanInDays("createdAt", 3 * 365);
9
+ }
10
+ }
11
+ }
12
+ export default new Service();
13
+ //# sourceMappingURL=ScheduledMaintenanceOwnerRuleService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ScheduledMaintenanceOwnerRuleService.js","sourceRoot":"","sources":["../../../../Server/Services/ScheduledMaintenanceOwnerRuleService.ts"],"names":[],"mappings":"AAAA,OAAO,eAAe,MAAM,mBAAmB,CAAC;AAChD,OAAO,KAAK,MAAM,2DAA2D,CAAC;AAC9E,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAExD,MAAM,OAAO,OAAQ,SAAQ,eAAsB;IACjD;QACE,KAAK,CAAC,KAAK,CAAC,CAAC;QACb,IAAI,gBAAgB,EAAE,CAAC;YACrB,IAAI,CAAC,8BAA8B,CAAC,WAAW,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC;QAC5D,CAAC;IACH,CAAC;CACF;AAED,eAAe,IAAI,OAAO,EAAE,CAAC"}
@@ -43,6 +43,8 @@ import logger from "../../Server/Utils/Logger";
43
43
  import { IsBillingEnabled } from "../EnvironmentConfig";
44
44
  import StatusPageEventType from "../../Types/StatusPage/StatusPageEventType";
45
45
  import ScheduledMaintenanceFeedService from "./ScheduledMaintenanceFeedService";
46
+ import ScheduledMaintenanceLabelRuleEngineService from "./ScheduledMaintenanceLabelRuleEngineService";
47
+ import ScheduledMaintenanceOwnerRuleEngineService from "./ScheduledMaintenanceOwnerRuleEngineService";
46
48
  import { ScheduledMaintenanceFeedEventType } from "../../Models/DatabaseModels/ScheduledMaintenanceFeed";
47
49
  import SlackUtil from "../Utils/Workspace/Slack/Slack";
48
50
  import StatusPageSubscriberWebhookUtil from "../Utils/StatusPageSubscriberWebhook";
@@ -635,6 +637,32 @@ ${resourcesAffected ? `**Resources Affected:** ${resourcesAffected}` : ""}
635
637
  });
636
638
  return Promise.resolve();
637
639
  }
640
+ })
641
+ .then(async () => {
642
+ var _a, _b;
643
+ // Apply owner rules: add matched owner users/teams to the event.
644
+ try {
645
+ await ScheduledMaintenanceOwnerRuleEngineService.applyRulesToScheduledMaintenance(createdItem);
646
+ }
647
+ catch (error) {
648
+ logger.error(`Apply scheduled maintenance owner rules failed in ScheduledMaintenanceService.onCreateSuccess: ${error}`, {
649
+ projectId: (_a = createdItem.projectId) === null || _a === void 0 ? void 0 : _a.toString(),
650
+ scheduledMaintenanceId: (_b = createdItem.id) === null || _b === void 0 ? void 0 : _b.toString(),
651
+ });
652
+ }
653
+ })
654
+ .then(async () => {
655
+ var _a, _b;
656
+ // Apply label rules: attach matched (and optionally inherited monitor) labels to the event.
657
+ try {
658
+ await ScheduledMaintenanceLabelRuleEngineService.applyRulesToScheduledMaintenance(createdItem);
659
+ }
660
+ catch (error) {
661
+ logger.error(`Apply scheduled maintenance label rules failed in ScheduledMaintenanceService.onCreateSuccess: ${error}`, {
662
+ projectId: (_a = createdItem.projectId) === null || _a === void 0 ? void 0 : _a.toString(),
663
+ scheduledMaintenanceId: (_b = createdItem.id) === null || _b === void 0 ? void 0 : _b.toString(),
664
+ });
665
+ }
638
666
  })
639
667
  .catch((error) => {
640
668
  var _a, _b;