@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,828 @@
1
+ import Label from "./Label";
2
+ import Monitor from "./Monitor";
3
+ import Project from "./Project";
4
+ import Team from "./Team";
5
+ import User from "./User";
6
+ import BaseModel from "./DatabaseBaseModel/DatabaseBaseModel";
7
+ import Route from "../../Types/API/Route";
8
+ import ColumnAccessControl from "../../Types/Database/AccessControl/ColumnAccessControl";
9
+ import TableAccessControl from "../../Types/Database/AccessControl/TableAccessControl";
10
+ import ColumnLength from "../../Types/Database/ColumnLength";
11
+ import ColumnType from "../../Types/Database/ColumnType";
12
+ import CrudApiEndpoint from "../../Types/Database/CrudApiEndpoint";
13
+ import EnableDocumentation from "../../Types/Database/EnableDocumentation";
14
+ import EnableWorkflow from "../../Types/Database/EnableWorkflow";
15
+ import TableColumn from "../../Types/Database/TableColumn";
16
+ import TableColumnType from "../../Types/Database/TableColumnType";
17
+ import TableMetadata from "../../Types/Database/TableMetadata";
18
+ import TenantColumn from "../../Types/Database/TenantColumn";
19
+ import IconProp from "../../Types/Icon/IconProp";
20
+ import ObjectID from "../../Types/ObjectID";
21
+ import Permission from "../../Types/Permission";
22
+ import {
23
+ Column,
24
+ Entity,
25
+ Index,
26
+ JoinColumn,
27
+ JoinTable,
28
+ ManyToMany,
29
+ ManyToOne,
30
+ } from "typeorm";
31
+
32
+ @EnableDocumentation()
33
+ @TenantColumn("projectId")
34
+ @TableAccessControl({
35
+ create: [
36
+ Permission.ProjectOwner,
37
+ Permission.ProjectAdmin,
38
+ Permission.CreateScheduledMaintenanceOwnerRule,
39
+ ],
40
+ read: [
41
+ Permission.ProjectOwner,
42
+ Permission.ProjectAdmin,
43
+ Permission.ProjectMember,
44
+ Permission.Viewer,
45
+ Permission.ScheduledMaintenanceManager,
46
+ Permission.ReadScheduledMaintenanceOwnerRule,
47
+ Permission.ReadAllProjectResources,
48
+ ],
49
+ delete: [
50
+ Permission.ProjectOwner,
51
+ Permission.ProjectAdmin,
52
+ Permission.DeleteScheduledMaintenanceOwnerRule,
53
+ ],
54
+ update: [
55
+ Permission.ProjectOwner,
56
+ Permission.ProjectAdmin,
57
+ Permission.EditScheduledMaintenanceOwnerRule,
58
+ ],
59
+ })
60
+ @CrudApiEndpoint(new Route("/scheduled-maintenance-owner-rule"))
61
+ @Entity({
62
+ name: "ScheduledMaintenanceOwnerRule",
63
+ })
64
+ @EnableWorkflow({
65
+ create: true,
66
+ delete: true,
67
+ update: true,
68
+ read: true,
69
+ })
70
+ @TableMetadata({
71
+ tableName: "ScheduledMaintenanceOwnerRule",
72
+ singularName: "Scheduled Maintenance Owner Rule",
73
+ pluralName: "Scheduled Maintenance Owner Rules",
74
+ icon: IconProp.User,
75
+ tableDescription:
76
+ "Configure rules for automatically assigning owner users and teams when matching scheduled maintenance events are created",
77
+ })
78
+ export default class ScheduledMaintenanceOwnerRule extends BaseModel {
79
+ @ColumnAccessControl({
80
+ create: [
81
+ Permission.ProjectOwner,
82
+ Permission.ProjectAdmin,
83
+ Permission.CreateScheduledMaintenanceOwnerRule,
84
+ ],
85
+ read: [
86
+ Permission.ProjectOwner,
87
+ Permission.ProjectAdmin,
88
+ Permission.ProjectMember,
89
+ Permission.Viewer,
90
+ Permission.ScheduledMaintenanceManager,
91
+ Permission.ReadScheduledMaintenanceOwnerRule,
92
+ Permission.ReadAllProjectResources,
93
+ ],
94
+ update: [],
95
+ })
96
+ @TableColumn({
97
+ manyToOneRelationColumn: "projectId",
98
+ type: TableColumnType.Entity,
99
+ modelType: Project,
100
+ title: "Project",
101
+ description: "Relation to Project Resource in which this object belongs",
102
+ })
103
+ @ManyToOne(
104
+ () => {
105
+ return Project;
106
+ },
107
+ {
108
+ eager: false,
109
+ nullable: true,
110
+ onDelete: "CASCADE",
111
+ orphanedRowAction: "nullify",
112
+ },
113
+ )
114
+ @JoinColumn({ name: "projectId" })
115
+ public project?: Project = undefined;
116
+
117
+ @ColumnAccessControl({
118
+ create: [
119
+ Permission.ProjectOwner,
120
+ Permission.ProjectAdmin,
121
+ Permission.CreateScheduledMaintenanceOwnerRule,
122
+ ],
123
+ read: [
124
+ Permission.ProjectOwner,
125
+ Permission.ProjectAdmin,
126
+ Permission.ProjectMember,
127
+ Permission.Viewer,
128
+ Permission.ScheduledMaintenanceManager,
129
+ Permission.ReadScheduledMaintenanceOwnerRule,
130
+ Permission.ReadAllProjectResources,
131
+ ],
132
+ update: [],
133
+ })
134
+ @Index()
135
+ @TableColumn({
136
+ type: TableColumnType.ObjectID,
137
+ required: true,
138
+ canReadOnRelationQuery: true,
139
+ title: "Project ID",
140
+ description: "ID of your OneUptime Project in which this object belongs",
141
+ })
142
+ @Column({
143
+ type: ColumnType.ObjectID,
144
+ nullable: false,
145
+ transformer: ObjectID.getDatabaseTransformer(),
146
+ })
147
+ public projectId?: ObjectID = undefined;
148
+
149
+ @ColumnAccessControl({
150
+ create: [
151
+ Permission.ProjectOwner,
152
+ Permission.ProjectAdmin,
153
+ Permission.CreateScheduledMaintenanceOwnerRule,
154
+ ],
155
+ read: [
156
+ Permission.ProjectOwner,
157
+ Permission.ProjectAdmin,
158
+ Permission.ProjectMember,
159
+ Permission.Viewer,
160
+ Permission.ScheduledMaintenanceManager,
161
+ Permission.ReadScheduledMaintenanceOwnerRule,
162
+ Permission.ReadAllProjectResources,
163
+ ],
164
+ update: [
165
+ Permission.ProjectOwner,
166
+ Permission.ProjectAdmin,
167
+ Permission.EditScheduledMaintenanceOwnerRule,
168
+ ],
169
+ })
170
+ @Index()
171
+ @TableColumn({
172
+ required: true,
173
+ type: TableColumnType.ShortText,
174
+ canReadOnRelationQuery: true,
175
+ title: "Name",
176
+ description: "Name of this scheduled maintenance owner rule",
177
+ })
178
+ @Column({
179
+ nullable: false,
180
+ type: ColumnType.ShortText,
181
+ length: ColumnLength.ShortText,
182
+ })
183
+ public name?: string = undefined;
184
+
185
+ @ColumnAccessControl({
186
+ create: [
187
+ Permission.ProjectOwner,
188
+ Permission.ProjectAdmin,
189
+ Permission.CreateScheduledMaintenanceOwnerRule,
190
+ ],
191
+ read: [
192
+ Permission.ProjectOwner,
193
+ Permission.ProjectAdmin,
194
+ Permission.ProjectMember,
195
+ Permission.Viewer,
196
+ Permission.ScheduledMaintenanceManager,
197
+ Permission.ReadScheduledMaintenanceOwnerRule,
198
+ Permission.ReadAllProjectResources,
199
+ ],
200
+ update: [
201
+ Permission.ProjectOwner,
202
+ Permission.ProjectAdmin,
203
+ Permission.EditScheduledMaintenanceOwnerRule,
204
+ ],
205
+ })
206
+ @TableColumn({
207
+ required: false,
208
+ type: TableColumnType.LongText,
209
+ title: "Description",
210
+ description: "Description of this scheduled maintenance owner rule",
211
+ })
212
+ @Column({
213
+ nullable: true,
214
+ type: ColumnType.LongText,
215
+ length: ColumnLength.LongText,
216
+ })
217
+ public description?: string = undefined;
218
+
219
+ @ColumnAccessControl({
220
+ create: [
221
+ Permission.ProjectOwner,
222
+ Permission.ProjectAdmin,
223
+ Permission.CreateScheduledMaintenanceOwnerRule,
224
+ ],
225
+ read: [
226
+ Permission.ProjectOwner,
227
+ Permission.ProjectAdmin,
228
+ Permission.ProjectMember,
229
+ Permission.Viewer,
230
+ Permission.ScheduledMaintenanceManager,
231
+ Permission.ReadScheduledMaintenanceOwnerRule,
232
+ Permission.ReadAllProjectResources,
233
+ ],
234
+ update: [
235
+ Permission.ProjectOwner,
236
+ Permission.ProjectAdmin,
237
+ Permission.EditScheduledMaintenanceOwnerRule,
238
+ ],
239
+ })
240
+ @Index()
241
+ @TableColumn({
242
+ required: true,
243
+ type: TableColumnType.Boolean,
244
+ title: "Is Enabled",
245
+ description: "Whether this rule is enabled",
246
+ defaultValue: true,
247
+ isDefaultValueColumn: true,
248
+ })
249
+ @Column({
250
+ type: ColumnType.Boolean,
251
+ nullable: false,
252
+ default: true,
253
+ })
254
+ public isEnabled?: boolean = undefined;
255
+
256
+ @ColumnAccessControl({
257
+ create: [
258
+ Permission.ProjectOwner,
259
+ Permission.ProjectAdmin,
260
+ Permission.CreateScheduledMaintenanceOwnerRule,
261
+ ],
262
+ read: [
263
+ Permission.ProjectOwner,
264
+ Permission.ProjectAdmin,
265
+ Permission.ProjectMember,
266
+ Permission.Viewer,
267
+ Permission.ScheduledMaintenanceManager,
268
+ Permission.ReadScheduledMaintenanceOwnerRule,
269
+ Permission.ReadAllProjectResources,
270
+ ],
271
+ update: [
272
+ Permission.ProjectOwner,
273
+ Permission.ProjectAdmin,
274
+ Permission.EditScheduledMaintenanceOwnerRule,
275
+ ],
276
+ })
277
+ @TableColumn({
278
+ required: false,
279
+ type: TableColumnType.Boolean,
280
+ title: "Notify Owners",
281
+ description:
282
+ "Send notifications to owner users and teams when they are added by this rule",
283
+ defaultValue: true,
284
+ isDefaultValueColumn: true,
285
+ })
286
+ @Column({
287
+ type: ColumnType.Boolean,
288
+ nullable: false,
289
+ default: true,
290
+ })
291
+ public notifyOwners?: boolean = undefined;
292
+
293
+ // Match Criteria
294
+
295
+ @ColumnAccessControl({
296
+ create: [
297
+ Permission.ProjectOwner,
298
+ Permission.ProjectAdmin,
299
+ Permission.CreateScheduledMaintenanceOwnerRule,
300
+ ],
301
+ read: [
302
+ Permission.ProjectOwner,
303
+ Permission.ProjectAdmin,
304
+ Permission.ProjectMember,
305
+ Permission.Viewer,
306
+ Permission.ScheduledMaintenanceManager,
307
+ Permission.ReadScheduledMaintenanceOwnerRule,
308
+ Permission.ReadAllProjectResources,
309
+ ],
310
+ update: [
311
+ Permission.ProjectOwner,
312
+ Permission.ProjectAdmin,
313
+ Permission.EditScheduledMaintenanceOwnerRule,
314
+ ],
315
+ })
316
+ @TableColumn({
317
+ required: false,
318
+ type: TableColumnType.EntityArray,
319
+ modelType: Monitor,
320
+ title: "Monitors",
321
+ description:
322
+ "Only trigger for scheduled maintenance events on these monitors. Leave empty to match events on any monitor.",
323
+ })
324
+ @ManyToMany(
325
+ () => {
326
+ return Monitor;
327
+ },
328
+ { eager: false },
329
+ )
330
+ @JoinTable({
331
+ name: "ScheduledMaintenanceOwnerRuleMonitor",
332
+ inverseJoinColumn: {
333
+ name: "monitorId",
334
+ referencedColumnName: "_id",
335
+ },
336
+ joinColumn: {
337
+ name: "scheduledMaintenanceOwnerRuleId",
338
+ referencedColumnName: "_id",
339
+ },
340
+ })
341
+ public monitors?: Array<Monitor> = undefined;
342
+
343
+ @ColumnAccessControl({
344
+ create: [
345
+ Permission.ProjectOwner,
346
+ Permission.ProjectAdmin,
347
+ Permission.CreateScheduledMaintenanceOwnerRule,
348
+ ],
349
+ read: [
350
+ Permission.ProjectOwner,
351
+ Permission.ProjectAdmin,
352
+ Permission.ProjectMember,
353
+ Permission.Viewer,
354
+ Permission.ScheduledMaintenanceManager,
355
+ Permission.ReadScheduledMaintenanceOwnerRule,
356
+ Permission.ReadAllProjectResources,
357
+ ],
358
+ update: [
359
+ Permission.ProjectOwner,
360
+ Permission.ProjectAdmin,
361
+ Permission.EditScheduledMaintenanceOwnerRule,
362
+ ],
363
+ })
364
+ @TableColumn({
365
+ required: false,
366
+ type: TableColumnType.EntityArray,
367
+ modelType: Label,
368
+ title: "Scheduled Maintenance Labels",
369
+ description:
370
+ "Only trigger for events that have at least one of these labels. Leave empty to match regardless of event labels.",
371
+ })
372
+ @ManyToMany(
373
+ () => {
374
+ return Label;
375
+ },
376
+ { eager: false },
377
+ )
378
+ @JoinTable({
379
+ name: "ScheduledMaintenanceOwnerRuleEventLabel",
380
+ inverseJoinColumn: {
381
+ name: "labelId",
382
+ referencedColumnName: "_id",
383
+ },
384
+ joinColumn: {
385
+ name: "scheduledMaintenanceOwnerRuleId",
386
+ referencedColumnName: "_id",
387
+ },
388
+ })
389
+ public scheduledMaintenanceLabels?: Array<Label> = undefined;
390
+
391
+ @ColumnAccessControl({
392
+ create: [
393
+ Permission.ProjectOwner,
394
+ Permission.ProjectAdmin,
395
+ Permission.CreateScheduledMaintenanceOwnerRule,
396
+ ],
397
+ read: [
398
+ Permission.ProjectOwner,
399
+ Permission.ProjectAdmin,
400
+ Permission.ProjectMember,
401
+ Permission.Viewer,
402
+ Permission.ScheduledMaintenanceManager,
403
+ Permission.ReadScheduledMaintenanceOwnerRule,
404
+ Permission.ReadAllProjectResources,
405
+ ],
406
+ update: [
407
+ Permission.ProjectOwner,
408
+ Permission.ProjectAdmin,
409
+ Permission.EditScheduledMaintenanceOwnerRule,
410
+ ],
411
+ })
412
+ @TableColumn({
413
+ required: false,
414
+ type: TableColumnType.EntityArray,
415
+ modelType: Label,
416
+ title: "Monitor Labels",
417
+ description:
418
+ "Only trigger for events on monitors that have at least one of these labels. Leave empty to match regardless of monitor labels.",
419
+ })
420
+ @ManyToMany(
421
+ () => {
422
+ return Label;
423
+ },
424
+ { eager: false },
425
+ )
426
+ @JoinTable({
427
+ name: "ScheduledMaintenanceOwnerRuleMonitorLabel",
428
+ inverseJoinColumn: {
429
+ name: "labelId",
430
+ referencedColumnName: "_id",
431
+ },
432
+ joinColumn: {
433
+ name: "scheduledMaintenanceOwnerRuleId",
434
+ referencedColumnName: "_id",
435
+ },
436
+ })
437
+ public monitorLabels?: Array<Label> = undefined;
438
+
439
+ @ColumnAccessControl({
440
+ create: [
441
+ Permission.ProjectOwner,
442
+ Permission.ProjectAdmin,
443
+ Permission.CreateScheduledMaintenanceOwnerRule,
444
+ ],
445
+ read: [
446
+ Permission.ProjectOwner,
447
+ Permission.ProjectAdmin,
448
+ Permission.ProjectMember,
449
+ Permission.Viewer,
450
+ Permission.ScheduledMaintenanceManager,
451
+ Permission.ReadScheduledMaintenanceOwnerRule,
452
+ Permission.ReadAllProjectResources,
453
+ ],
454
+ update: [
455
+ Permission.ProjectOwner,
456
+ Permission.ProjectAdmin,
457
+ Permission.EditScheduledMaintenanceOwnerRule,
458
+ ],
459
+ })
460
+ @TableColumn({
461
+ required: false,
462
+ type: TableColumnType.LongText,
463
+ title: "Title Pattern",
464
+ description:
465
+ "Regex (case-insensitive) matched against the scheduled maintenance event title. Leave empty to match any title.",
466
+ })
467
+ @Column({
468
+ type: ColumnType.LongText,
469
+ nullable: true,
470
+ length: ColumnLength.LongText,
471
+ })
472
+ public titlePattern?: string = undefined;
473
+
474
+ @ColumnAccessControl({
475
+ create: [
476
+ Permission.ProjectOwner,
477
+ Permission.ProjectAdmin,
478
+ Permission.CreateScheduledMaintenanceOwnerRule,
479
+ ],
480
+ read: [
481
+ Permission.ProjectOwner,
482
+ Permission.ProjectAdmin,
483
+ Permission.ProjectMember,
484
+ Permission.Viewer,
485
+ Permission.ScheduledMaintenanceManager,
486
+ Permission.ReadScheduledMaintenanceOwnerRule,
487
+ Permission.ReadAllProjectResources,
488
+ ],
489
+ update: [
490
+ Permission.ProjectOwner,
491
+ Permission.ProjectAdmin,
492
+ Permission.EditScheduledMaintenanceOwnerRule,
493
+ ],
494
+ })
495
+ @TableColumn({
496
+ required: false,
497
+ type: TableColumnType.LongText,
498
+ title: "Description Pattern",
499
+ description:
500
+ "Regex (case-insensitive) matched against the scheduled maintenance event description. Leave empty to match any description.",
501
+ })
502
+ @Column({
503
+ type: ColumnType.LongText,
504
+ nullable: true,
505
+ length: ColumnLength.LongText,
506
+ })
507
+ public descriptionPattern?: string = undefined;
508
+
509
+ @ColumnAccessControl({
510
+ create: [
511
+ Permission.ProjectOwner,
512
+ Permission.ProjectAdmin,
513
+ Permission.CreateScheduledMaintenanceOwnerRule,
514
+ ],
515
+ read: [
516
+ Permission.ProjectOwner,
517
+ Permission.ProjectAdmin,
518
+ Permission.ProjectMember,
519
+ Permission.Viewer,
520
+ Permission.ScheduledMaintenanceManager,
521
+ Permission.ReadScheduledMaintenanceOwnerRule,
522
+ Permission.ReadAllProjectResources,
523
+ ],
524
+ update: [
525
+ Permission.ProjectOwner,
526
+ Permission.ProjectAdmin,
527
+ Permission.EditScheduledMaintenanceOwnerRule,
528
+ ],
529
+ })
530
+ @TableColumn({
531
+ required: false,
532
+ type: TableColumnType.LongText,
533
+ title: "Monitor Name Pattern",
534
+ description:
535
+ "Regex (case-insensitive) matched against any of the event's monitor names. Leave empty to match any monitor.",
536
+ })
537
+ @Column({
538
+ type: ColumnType.LongText,
539
+ nullable: true,
540
+ length: ColumnLength.LongText,
541
+ })
542
+ public monitorNamePattern?: string = undefined;
543
+
544
+ @ColumnAccessControl({
545
+ create: [
546
+ Permission.ProjectOwner,
547
+ Permission.ProjectAdmin,
548
+ Permission.CreateScheduledMaintenanceOwnerRule,
549
+ ],
550
+ read: [
551
+ Permission.ProjectOwner,
552
+ Permission.ProjectAdmin,
553
+ Permission.ProjectMember,
554
+ Permission.Viewer,
555
+ Permission.ScheduledMaintenanceManager,
556
+ Permission.ReadScheduledMaintenanceOwnerRule,
557
+ Permission.ReadAllProjectResources,
558
+ ],
559
+ update: [
560
+ Permission.ProjectOwner,
561
+ Permission.ProjectAdmin,
562
+ Permission.EditScheduledMaintenanceOwnerRule,
563
+ ],
564
+ })
565
+ @TableColumn({
566
+ required: false,
567
+ type: TableColumnType.LongText,
568
+ title: "Monitor Description Pattern",
569
+ description:
570
+ "Regex (case-insensitive) matched against any of the event's monitor descriptions. Leave empty to match any description.",
571
+ })
572
+ @Column({
573
+ type: ColumnType.LongText,
574
+ nullable: true,
575
+ length: ColumnLength.LongText,
576
+ })
577
+ public monitorDescriptionPattern?: string = undefined;
578
+
579
+ // Action: Owner Users + Teams
580
+
581
+ @ColumnAccessControl({
582
+ create: [
583
+ Permission.ProjectOwner,
584
+ Permission.ProjectAdmin,
585
+ Permission.CreateScheduledMaintenanceOwnerRule,
586
+ ],
587
+ read: [
588
+ Permission.ProjectOwner,
589
+ Permission.ProjectAdmin,
590
+ Permission.ProjectMember,
591
+ Permission.Viewer,
592
+ Permission.ScheduledMaintenanceManager,
593
+ Permission.ReadScheduledMaintenanceOwnerRule,
594
+ Permission.ReadAllProjectResources,
595
+ ],
596
+ update: [
597
+ Permission.ProjectOwner,
598
+ Permission.ProjectAdmin,
599
+ Permission.EditScheduledMaintenanceOwnerRule,
600
+ ],
601
+ })
602
+ @TableColumn({
603
+ required: false,
604
+ type: TableColumnType.EntityArray,
605
+ modelType: User,
606
+ title: "Owner Users",
607
+ description:
608
+ "Users to add as owners on the scheduled maintenance event when this rule matches.",
609
+ })
610
+ @ManyToMany(
611
+ () => {
612
+ return User;
613
+ },
614
+ { eager: false },
615
+ )
616
+ @JoinTable({
617
+ name: "ScheduledMaintenanceOwnerRuleOwnerUser",
618
+ inverseJoinColumn: {
619
+ name: "userId",
620
+ referencedColumnName: "_id",
621
+ },
622
+ joinColumn: {
623
+ name: "scheduledMaintenanceOwnerRuleId",
624
+ referencedColumnName: "_id",
625
+ },
626
+ })
627
+ public ownerUsers?: Array<User> = undefined;
628
+
629
+ @ColumnAccessControl({
630
+ create: [
631
+ Permission.ProjectOwner,
632
+ Permission.ProjectAdmin,
633
+ Permission.CreateScheduledMaintenanceOwnerRule,
634
+ ],
635
+ read: [
636
+ Permission.ProjectOwner,
637
+ Permission.ProjectAdmin,
638
+ Permission.ProjectMember,
639
+ Permission.Viewer,
640
+ Permission.ScheduledMaintenanceManager,
641
+ Permission.ReadScheduledMaintenanceOwnerRule,
642
+ Permission.ReadAllProjectResources,
643
+ ],
644
+ update: [
645
+ Permission.ProjectOwner,
646
+ Permission.ProjectAdmin,
647
+ Permission.EditScheduledMaintenanceOwnerRule,
648
+ ],
649
+ })
650
+ @TableColumn({
651
+ required: false,
652
+ type: TableColumnType.EntityArray,
653
+ modelType: Team,
654
+ title: "Owner Teams",
655
+ description:
656
+ "Teams to add as owners on the scheduled maintenance event when this rule matches.",
657
+ })
658
+ @ManyToMany(
659
+ () => {
660
+ return Team;
661
+ },
662
+ { eager: false },
663
+ )
664
+ @JoinTable({
665
+ name: "ScheduledMaintenanceOwnerRuleOwnerTeam",
666
+ inverseJoinColumn: {
667
+ name: "teamId",
668
+ referencedColumnName: "_id",
669
+ },
670
+ joinColumn: {
671
+ name: "scheduledMaintenanceOwnerRuleId",
672
+ referencedColumnName: "_id",
673
+ },
674
+ })
675
+ public ownerTeams?: Array<Team> = undefined;
676
+
677
+ @ColumnAccessControl({
678
+ create: [
679
+ Permission.ProjectOwner,
680
+ Permission.ProjectAdmin,
681
+ Permission.CreateScheduledMaintenanceOwnerRule,
682
+ ],
683
+ read: [
684
+ Permission.ProjectOwner,
685
+ Permission.ProjectAdmin,
686
+ Permission.ProjectMember,
687
+ Permission.Viewer,
688
+ Permission.ScheduledMaintenanceManager,
689
+ Permission.ReadScheduledMaintenanceOwnerRule,
690
+ Permission.ReadAllProjectResources,
691
+ ],
692
+ update: [
693
+ Permission.ProjectOwner,
694
+ Permission.ProjectAdmin,
695
+ Permission.EditScheduledMaintenanceOwnerRule,
696
+ ],
697
+ })
698
+ @TableColumn({
699
+ required: false,
700
+ type: TableColumnType.Boolean,
701
+ title: "Inherit Owners From Monitors",
702
+ description:
703
+ "When this rule matches, also assign every owner of the event's monitors to the event.",
704
+ defaultValue: false,
705
+ isDefaultValueColumn: true,
706
+ })
707
+ @Column({
708
+ type: ColumnType.Boolean,
709
+ nullable: false,
710
+ default: false,
711
+ })
712
+ public inheritOwnersFromMonitors?: boolean = undefined;
713
+
714
+ @ColumnAccessControl({
715
+ create: [
716
+ Permission.ProjectOwner,
717
+ Permission.ProjectAdmin,
718
+ Permission.CreateScheduledMaintenanceOwnerRule,
719
+ ],
720
+ read: [
721
+ Permission.ProjectOwner,
722
+ Permission.ProjectAdmin,
723
+ Permission.ProjectMember,
724
+ Permission.Viewer,
725
+ Permission.ScheduledMaintenanceManager,
726
+ Permission.ReadScheduledMaintenanceOwnerRule,
727
+ Permission.ReadAllProjectResources,
728
+ ],
729
+ update: [],
730
+ })
731
+ @TableColumn({
732
+ manyToOneRelationColumn: "createdByUserId",
733
+ type: TableColumnType.Entity,
734
+ modelType: User,
735
+ title: "Created by User",
736
+ description:
737
+ "Relation to User who created this object (if this object was created by a User)",
738
+ })
739
+ @ManyToOne(
740
+ () => {
741
+ return User;
742
+ },
743
+ {
744
+ eager: false,
745
+ nullable: true,
746
+ onDelete: "SET NULL",
747
+ orphanedRowAction: "nullify",
748
+ },
749
+ )
750
+ @JoinColumn({ name: "createdByUserId" })
751
+ public createdByUser?: User = undefined;
752
+
753
+ @ColumnAccessControl({
754
+ create: [
755
+ Permission.ProjectOwner,
756
+ Permission.ProjectAdmin,
757
+ Permission.CreateScheduledMaintenanceOwnerRule,
758
+ ],
759
+ read: [
760
+ Permission.ProjectOwner,
761
+ Permission.ProjectAdmin,
762
+ Permission.ProjectMember,
763
+ Permission.Viewer,
764
+ Permission.ScheduledMaintenanceManager,
765
+ Permission.ReadScheduledMaintenanceOwnerRule,
766
+ Permission.ReadAllProjectResources,
767
+ ],
768
+ update: [],
769
+ })
770
+ @TableColumn({
771
+ type: TableColumnType.ObjectID,
772
+ title: "Created by User ID",
773
+ description:
774
+ "User ID who created this object (if this object was created by a User)",
775
+ })
776
+ @Column({
777
+ type: ColumnType.ObjectID,
778
+ nullable: true,
779
+ transformer: ObjectID.getDatabaseTransformer(),
780
+ })
781
+ public createdByUserId?: ObjectID = undefined;
782
+
783
+ @ColumnAccessControl({
784
+ create: [],
785
+ read: [],
786
+ update: [],
787
+ })
788
+ @TableColumn({
789
+ manyToOneRelationColumn: "deletedByUserId",
790
+ type: TableColumnType.Entity,
791
+ title: "Deleted by User",
792
+ modelType: User,
793
+ description:
794
+ "Relation to User who deleted this object (if this object was deleted by a User)",
795
+ })
796
+ @ManyToOne(
797
+ () => {
798
+ return User;
799
+ },
800
+ {
801
+ cascade: false,
802
+ eager: false,
803
+ nullable: true,
804
+ onDelete: "SET NULL",
805
+ orphanedRowAction: "nullify",
806
+ },
807
+ )
808
+ @JoinColumn({ name: "deletedByUserId" })
809
+ public deletedByUser?: User = undefined;
810
+
811
+ @ColumnAccessControl({
812
+ create: [],
813
+ read: [],
814
+ update: [],
815
+ })
816
+ @TableColumn({
817
+ type: TableColumnType.ObjectID,
818
+ title: "Deleted by User ID",
819
+ description:
820
+ "User ID who deleted this object (if this object was deleted by a User)",
821
+ })
822
+ @Column({
823
+ type: ColumnType.ObjectID,
824
+ nullable: true,
825
+ transformer: ObjectID.getDatabaseTransformer(),
826
+ })
827
+ public deletedByUserId?: ObjectID = undefined;
828
+ }