@oneuptime/common 10.3.0 → 10.4.1

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 (115) hide show
  1. package/Models/DatabaseModels/IncomingCallPolicyLabelRule.ts +522 -0
  2. package/Models/DatabaseModels/IncomingCallPolicyOwnerRule.ts +606 -0
  3. package/Models/DatabaseModels/IncomingCallPolicyOwnerTeam.ts +508 -0
  4. package/Models/DatabaseModels/IncomingCallPolicyOwnerUser.ts +507 -0
  5. package/Models/DatabaseModels/Index.ts +24 -0
  6. package/Models/DatabaseModels/OnCallDutyPolicyLabelRule.ts +522 -0
  7. package/Models/DatabaseModels/OnCallDutyPolicyOwnerRule.ts +606 -0
  8. package/Models/DatabaseModels/OnCallDutyPolicyScheduleLabelRule.ts +522 -0
  9. package/Models/DatabaseModels/OnCallDutyPolicyScheduleOwnerRule.ts +606 -0
  10. package/Models/DatabaseModels/OnCallDutyPolicyScheduleOwnerTeam.ts +508 -0
  11. package/Models/DatabaseModels/OnCallDutyPolicyScheduleOwnerUser.ts +507 -0
  12. package/Server/API/TelemetryAPI.ts +69 -0
  13. package/Server/Infrastructure/Postgres/SchemaMigrations/1778929624633-AddOnCallDutyPolicyScheduleOwners.ts +153 -0
  14. package/Server/Infrastructure/Postgres/SchemaMigrations/1778931537020-AddOnCallIncomingCallOwnersAndRules.ts +823 -0
  15. package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +4 -0
  16. package/Server/Services/IncomingCallPolicyLabelRuleEngineService.ts +197 -0
  17. package/Server/Services/IncomingCallPolicyLabelRuleService.ts +10 -0
  18. package/Server/Services/IncomingCallPolicyOwnerRuleEngineService.ts +220 -0
  19. package/Server/Services/IncomingCallPolicyOwnerRuleService.ts +10 -0
  20. package/Server/Services/IncomingCallPolicyOwnerTeamService.ts +9 -0
  21. package/Server/Services/IncomingCallPolicyOwnerUserService.ts +9 -0
  22. package/Server/Services/IncomingCallPolicyService.ts +35 -0
  23. package/Server/Services/OnCallDutyPolicyLabelRuleEngineService.ts +191 -0
  24. package/Server/Services/OnCallDutyPolicyLabelRuleService.ts +10 -0
  25. package/Server/Services/OnCallDutyPolicyOwnerRuleEngineService.ts +214 -0
  26. package/Server/Services/OnCallDutyPolicyOwnerRuleService.ts +10 -0
  27. package/Server/Services/OnCallDutyPolicyScheduleLabelRuleEngineService.ts +200 -0
  28. package/Server/Services/OnCallDutyPolicyScheduleLabelRuleService.ts +10 -0
  29. package/Server/Services/OnCallDutyPolicyScheduleOwnerRuleEngineService.ts +223 -0
  30. package/Server/Services/OnCallDutyPolicyScheduleOwnerRuleService.ts +10 -0
  31. package/Server/Services/OnCallDutyPolicyScheduleOwnerTeamService.ts +9 -0
  32. package/Server/Services/OnCallDutyPolicyScheduleOwnerUserService.ts +9 -0
  33. package/Server/Services/OnCallDutyPolicyScheduleService.ts +32 -1
  34. package/Server/Services/OnCallDutyPolicyService.ts +21 -0
  35. package/Server/Services/ProfileAggregationService.ts +119 -0
  36. package/Server/Types/Database/Permissions/QueryPermission.ts +36 -0
  37. package/Types/Monitor/MonitorStep.ts +66 -0
  38. package/Types/Permission.ts +475 -0
  39. package/build/dist/Models/DatabaseModels/IncomingCallPolicyLabelRule.js +532 -0
  40. package/build/dist/Models/DatabaseModels/IncomingCallPolicyLabelRule.js.map +1 -0
  41. package/build/dist/Models/DatabaseModels/IncomingCallPolicyOwnerRule.js +615 -0
  42. package/build/dist/Models/DatabaseModels/IncomingCallPolicyOwnerRule.js.map +1 -0
  43. package/build/dist/Models/DatabaseModels/IncomingCallPolicyOwnerTeam.js +524 -0
  44. package/build/dist/Models/DatabaseModels/IncomingCallPolicyOwnerTeam.js.map +1 -0
  45. package/build/dist/Models/DatabaseModels/IncomingCallPolicyOwnerUser.js +523 -0
  46. package/build/dist/Models/DatabaseModels/IncomingCallPolicyOwnerUser.js.map +1 -0
  47. package/build/dist/Models/DatabaseModels/Index.js +22 -0
  48. package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
  49. package/build/dist/Models/DatabaseModels/OnCallDutyPolicyLabelRule.js +532 -0
  50. package/build/dist/Models/DatabaseModels/OnCallDutyPolicyLabelRule.js.map +1 -0
  51. package/build/dist/Models/DatabaseModels/OnCallDutyPolicyOwnerRule.js +615 -0
  52. package/build/dist/Models/DatabaseModels/OnCallDutyPolicyOwnerRule.js.map +1 -0
  53. package/build/dist/Models/DatabaseModels/OnCallDutyPolicyScheduleLabelRule.js +532 -0
  54. package/build/dist/Models/DatabaseModels/OnCallDutyPolicyScheduleLabelRule.js.map +1 -0
  55. package/build/dist/Models/DatabaseModels/OnCallDutyPolicyScheduleOwnerRule.js +615 -0
  56. package/build/dist/Models/DatabaseModels/OnCallDutyPolicyScheduleOwnerRule.js.map +1 -0
  57. package/build/dist/Models/DatabaseModels/OnCallDutyPolicyScheduleOwnerTeam.js +524 -0
  58. package/build/dist/Models/DatabaseModels/OnCallDutyPolicyScheduleOwnerTeam.js.map +1 -0
  59. package/build/dist/Models/DatabaseModels/OnCallDutyPolicyScheduleOwnerUser.js +523 -0
  60. package/build/dist/Models/DatabaseModels/OnCallDutyPolicyScheduleOwnerUser.js.map +1 -0
  61. package/build/dist/Server/API/TelemetryAPI.js +34 -0
  62. package/build/dist/Server/API/TelemetryAPI.js.map +1 -1
  63. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1778929624633-AddOnCallDutyPolicyScheduleOwners.js +58 -0
  64. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1778929624633-AddOnCallDutyPolicyScheduleOwners.js.map +1 -0
  65. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1778931537020-AddOnCallIncomingCallOwnersAndRules.js +292 -0
  66. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1778931537020-AddOnCallIncomingCallOwnersAndRules.js.map +1 -0
  67. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +4 -0
  68. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
  69. package/build/dist/Server/Services/IncomingCallPolicyLabelRuleEngineService.js +158 -0
  70. package/build/dist/Server/Services/IncomingCallPolicyLabelRuleEngineService.js.map +1 -0
  71. package/build/dist/Server/Services/IncomingCallPolicyLabelRuleService.js +9 -0
  72. package/build/dist/Server/Services/IncomingCallPolicyLabelRuleService.js.map +1 -0
  73. package/build/dist/Server/Services/IncomingCallPolicyOwnerRuleEngineService.js +181 -0
  74. package/build/dist/Server/Services/IncomingCallPolicyOwnerRuleEngineService.js.map +1 -0
  75. package/build/dist/Server/Services/IncomingCallPolicyOwnerRuleService.js +9 -0
  76. package/build/dist/Server/Services/IncomingCallPolicyOwnerRuleService.js.map +1 -0
  77. package/build/dist/Server/Services/IncomingCallPolicyOwnerTeamService.js +9 -0
  78. package/build/dist/Server/Services/IncomingCallPolicyOwnerTeamService.js.map +1 -0
  79. package/build/dist/Server/Services/IncomingCallPolicyOwnerUserService.js +9 -0
  80. package/build/dist/Server/Services/IncomingCallPolicyOwnerUserService.js.map +1 -0
  81. package/build/dist/Server/Services/IncomingCallPolicyService.js +38 -0
  82. package/build/dist/Server/Services/IncomingCallPolicyService.js.map +1 -1
  83. package/build/dist/Server/Services/OnCallDutyPolicyLabelRuleEngineService.js +157 -0
  84. package/build/dist/Server/Services/OnCallDutyPolicyLabelRuleEngineService.js.map +1 -0
  85. package/build/dist/Server/Services/OnCallDutyPolicyLabelRuleService.js +9 -0
  86. package/build/dist/Server/Services/OnCallDutyPolicyLabelRuleService.js.map +1 -0
  87. package/build/dist/Server/Services/OnCallDutyPolicyOwnerRuleEngineService.js +180 -0
  88. package/build/dist/Server/Services/OnCallDutyPolicyOwnerRuleEngineService.js.map +1 -0
  89. package/build/dist/Server/Services/OnCallDutyPolicyOwnerRuleService.js +9 -0
  90. package/build/dist/Server/Services/OnCallDutyPolicyOwnerRuleService.js.map +1 -0
  91. package/build/dist/Server/Services/OnCallDutyPolicyScheduleLabelRuleEngineService.js +158 -0
  92. package/build/dist/Server/Services/OnCallDutyPolicyScheduleLabelRuleEngineService.js.map +1 -0
  93. package/build/dist/Server/Services/OnCallDutyPolicyScheduleLabelRuleService.js +9 -0
  94. package/build/dist/Server/Services/OnCallDutyPolicyScheduleLabelRuleService.js.map +1 -0
  95. package/build/dist/Server/Services/OnCallDutyPolicyScheduleOwnerRuleEngineService.js +181 -0
  96. package/build/dist/Server/Services/OnCallDutyPolicyScheduleOwnerRuleEngineService.js.map +1 -0
  97. package/build/dist/Server/Services/OnCallDutyPolicyScheduleOwnerRuleService.js +9 -0
  98. package/build/dist/Server/Services/OnCallDutyPolicyScheduleOwnerRuleService.js.map +1 -0
  99. package/build/dist/Server/Services/OnCallDutyPolicyScheduleOwnerTeamService.js +9 -0
  100. package/build/dist/Server/Services/OnCallDutyPolicyScheduleOwnerTeamService.js.map +1 -0
  101. package/build/dist/Server/Services/OnCallDutyPolicyScheduleOwnerUserService.js +9 -0
  102. package/build/dist/Server/Services/OnCallDutyPolicyScheduleOwnerUserService.js.map +1 -0
  103. package/build/dist/Server/Services/OnCallDutyPolicyScheduleService.js +21 -0
  104. package/build/dist/Server/Services/OnCallDutyPolicyScheduleService.js.map +1 -1
  105. package/build/dist/Server/Services/OnCallDutyPolicyService.js +17 -3
  106. package/build/dist/Server/Services/OnCallDutyPolicyService.js.map +1 -1
  107. package/build/dist/Server/Services/ProfileAggregationService.js +80 -0
  108. package/build/dist/Server/Services/ProfileAggregationService.js.map +1 -1
  109. package/build/dist/Server/Types/Database/Permissions/QueryPermission.js +25 -0
  110. package/build/dist/Server/Types/Database/Permissions/QueryPermission.js.map +1 -1
  111. package/build/dist/Types/Monitor/MonitorStep.js +42 -0
  112. package/build/dist/Types/Monitor/MonitorStep.js.map +1 -1
  113. package/build/dist/Types/Permission.js +415 -0
  114. package/build/dist/Types/Permission.js.map +1 -1
  115. package/package.json +1 -1
@@ -0,0 +1,507 @@
1
+ import OnCallDutyPolicySchedule from "./OnCallDutyPolicySchedule";
2
+ import Project from "./Project";
3
+ import User from "./User";
4
+ import BaseModel from "./DatabaseBaseModel/DatabaseBaseModel";
5
+ import Route from "../../Types/API/Route";
6
+ import { PlanType } from "../../Types/Billing/SubscriptionPlan";
7
+ import ColumnAccessControl from "../../Types/Database/AccessControl/ColumnAccessControl";
8
+ import TableAccessControl from "../../Types/Database/AccessControl/TableAccessControl";
9
+ import TableBillingAccessControl from "../../Types/Database/AccessControl/TableBillingAccessControl";
10
+ import ColumnType from "../../Types/Database/ColumnType";
11
+ import CrudApiEndpoint from "../../Types/Database/CrudApiEndpoint";
12
+ import EnableDocumentation from "../../Types/Database/EnableDocumentation";
13
+ import EnableWorkflow from "../../Types/Database/EnableWorkflow";
14
+ import TableColumn from "../../Types/Database/TableColumn";
15
+ import TableColumnType from "../../Types/Database/TableColumnType";
16
+ import TableMetadata from "../../Types/Database/TableMetadata";
17
+ import TenantColumn from "../../Types/Database/TenantColumn";
18
+ import IconProp from "../../Types/Icon/IconProp";
19
+ import ObjectID from "../../Types/ObjectID";
20
+ import Permission from "../../Types/Permission";
21
+ import { Column, Entity, Index, JoinColumn, ManyToOne } from "typeorm";
22
+
23
+ @EnableDocumentation()
24
+ @TenantColumn("projectId")
25
+ @TableBillingAccessControl({
26
+ create: PlanType.Growth,
27
+ read: PlanType.Free,
28
+ update: PlanType.Growth,
29
+ delete: PlanType.Free,
30
+ })
31
+ @TableAccessControl({
32
+ create: [
33
+ Permission.ProjectOwner,
34
+ Permission.ProjectAdmin,
35
+ Permission.ProjectMember,
36
+ Permission.OnCallAdmin,
37
+ Permission.OnCallMember,
38
+ Permission.CreateOnCallDutyPolicyScheduleOwnerUser,
39
+ ],
40
+ read: [
41
+ Permission.ProjectOwner,
42
+ Permission.ProjectAdmin,
43
+ Permission.ProjectMember,
44
+ Permission.Viewer,
45
+ Permission.OnCallAdmin,
46
+ Permission.OnCallMember,
47
+ Permission.OnCallViewer,
48
+ Permission.ReadOnCallDutyPolicyScheduleOwnerUser,
49
+ Permission.ReadAllProjectResources,
50
+ ],
51
+ delete: [
52
+ Permission.ProjectOwner,
53
+ Permission.ProjectAdmin,
54
+ Permission.ProjectMember,
55
+ Permission.OnCallAdmin,
56
+ Permission.OnCallMember,
57
+ Permission.DeleteOnCallDutyPolicyScheduleOwnerUser,
58
+ ],
59
+ update: [
60
+ Permission.ProjectOwner,
61
+ Permission.ProjectAdmin,
62
+ Permission.ProjectMember,
63
+ Permission.OnCallAdmin,
64
+ Permission.OnCallMember,
65
+ Permission.EditOnCallDutyPolicyScheduleOwnerUser,
66
+ ],
67
+ })
68
+ @EnableWorkflow({
69
+ create: true,
70
+ delete: true,
71
+ update: true,
72
+ read: true,
73
+ })
74
+ @CrudApiEndpoint(new Route("/on-call-duty-policy-schedule-owner-user"))
75
+ @TableMetadata({
76
+ tableName: "OnCallDutyPolicyScheduleOwnerUser",
77
+ singularName: "On-Call Schedule User Owner",
78
+ pluralName: "On-Call Schedule User Owners",
79
+ icon: IconProp.Calendar,
80
+ tableDescription: "Add users as owners to your on-call schedules.",
81
+ })
82
+ @Entity({
83
+ name: "OnCallDutyPolicyScheduleOwnerUser",
84
+ })
85
+ @Index(["onCallDutyPolicyScheduleId", "userId", "projectId"])
86
+ export default class OnCallDutyPolicyScheduleOwnerUser extends BaseModel {
87
+ @ColumnAccessControl({
88
+ create: [
89
+ Permission.ProjectOwner,
90
+ Permission.ProjectAdmin,
91
+ Permission.ProjectMember,
92
+ Permission.OnCallAdmin,
93
+ Permission.OnCallMember,
94
+ Permission.CreateOnCallDutyPolicyScheduleOwnerUser,
95
+ ],
96
+ read: [
97
+ Permission.ProjectOwner,
98
+ Permission.ProjectAdmin,
99
+ Permission.ProjectMember,
100
+ Permission.Viewer,
101
+ Permission.OnCallAdmin,
102
+ Permission.OnCallMember,
103
+ Permission.OnCallViewer,
104
+ Permission.ReadOnCallDutyPolicyScheduleOwnerUser,
105
+ Permission.ReadAllProjectResources,
106
+ ],
107
+ update: [],
108
+ })
109
+ @TableColumn({
110
+ manyToOneRelationColumn: "projectId",
111
+ type: TableColumnType.Entity,
112
+ modelType: Project,
113
+ title: "Project",
114
+ description: "Relation to Project Resource in which this object belongs",
115
+ })
116
+ @ManyToOne(
117
+ () => {
118
+ return Project;
119
+ },
120
+ {
121
+ eager: false,
122
+ nullable: false,
123
+ onDelete: "CASCADE",
124
+ orphanedRowAction: "nullify",
125
+ },
126
+ )
127
+ @JoinColumn({ name: "projectId" })
128
+ public project?: Project = undefined;
129
+
130
+ @ColumnAccessControl({
131
+ create: [
132
+ Permission.ProjectOwner,
133
+ Permission.ProjectAdmin,
134
+ Permission.ProjectMember,
135
+ Permission.OnCallAdmin,
136
+ Permission.OnCallMember,
137
+ Permission.CreateOnCallDutyPolicyScheduleOwnerUser,
138
+ ],
139
+ read: [
140
+ Permission.ProjectOwner,
141
+ Permission.ProjectAdmin,
142
+ Permission.ProjectMember,
143
+ Permission.Viewer,
144
+ Permission.OnCallAdmin,
145
+ Permission.OnCallMember,
146
+ Permission.OnCallViewer,
147
+ Permission.ReadOnCallDutyPolicyScheduleOwnerUser,
148
+ Permission.ReadAllProjectResources,
149
+ ],
150
+ update: [],
151
+ })
152
+ @Index()
153
+ @TableColumn({
154
+ type: TableColumnType.ObjectID,
155
+ required: true,
156
+ canReadOnRelationQuery: true,
157
+ title: "Project ID",
158
+ description: "ID of your OneUptime Project in which this object belongs",
159
+ })
160
+ @Column({
161
+ type: ColumnType.ObjectID,
162
+ nullable: false,
163
+ transformer: ObjectID.getDatabaseTransformer(),
164
+ })
165
+ public projectId?: ObjectID = undefined;
166
+
167
+ @ColumnAccessControl({
168
+ create: [
169
+ Permission.ProjectOwner,
170
+ Permission.ProjectAdmin,
171
+ Permission.ProjectMember,
172
+ Permission.OnCallAdmin,
173
+ Permission.OnCallMember,
174
+ Permission.CreateOnCallDutyPolicyScheduleOwnerUser,
175
+ ],
176
+ read: [
177
+ Permission.ProjectOwner,
178
+ Permission.ProjectAdmin,
179
+ Permission.ProjectMember,
180
+ Permission.Viewer,
181
+ Permission.OnCallAdmin,
182
+ Permission.OnCallMember,
183
+ Permission.OnCallViewer,
184
+ Permission.ReadOnCallDutyPolicyScheduleOwnerUser,
185
+ Permission.ReadAllProjectResources,
186
+ ],
187
+ update: [],
188
+ })
189
+ @TableColumn({
190
+ manyToOneRelationColumn: "userId",
191
+ type: TableColumnType.Entity,
192
+ modelType: User,
193
+ title: "User",
194
+ description:
195
+ "User that is the owner. This user will receive notifications. ",
196
+ })
197
+ @ManyToOne(
198
+ () => {
199
+ return User;
200
+ },
201
+ {
202
+ eager: false,
203
+ nullable: true,
204
+ onDelete: "CASCADE",
205
+ orphanedRowAction: "nullify",
206
+ },
207
+ )
208
+ @JoinColumn({ name: "userId" })
209
+ public user?: User = undefined;
210
+
211
+ @ColumnAccessControl({
212
+ create: [
213
+ Permission.ProjectOwner,
214
+ Permission.ProjectAdmin,
215
+ Permission.ProjectMember,
216
+ Permission.OnCallAdmin,
217
+ Permission.OnCallMember,
218
+ Permission.CreateOnCallDutyPolicyScheduleOwnerUser,
219
+ ],
220
+ read: [
221
+ Permission.ProjectOwner,
222
+ Permission.ProjectAdmin,
223
+ Permission.ProjectMember,
224
+ Permission.Viewer,
225
+ Permission.OnCallAdmin,
226
+ Permission.OnCallMember,
227
+ Permission.OnCallViewer,
228
+ Permission.ReadOnCallDutyPolicyScheduleOwnerUser,
229
+ Permission.ReadAllProjectResources,
230
+ ],
231
+ update: [],
232
+ })
233
+ @Index()
234
+ @TableColumn({
235
+ type: TableColumnType.ObjectID,
236
+ required: true,
237
+ canReadOnRelationQuery: true,
238
+ title: "User ID",
239
+ description: "ID of your OneUptime User in which this object belongs",
240
+ })
241
+ @Column({
242
+ type: ColumnType.ObjectID,
243
+ nullable: false,
244
+ transformer: ObjectID.getDatabaseTransformer(),
245
+ })
246
+ public userId?: ObjectID = undefined;
247
+
248
+ @ColumnAccessControl({
249
+ create: [
250
+ Permission.ProjectOwner,
251
+ Permission.ProjectAdmin,
252
+ Permission.ProjectMember,
253
+ Permission.OnCallAdmin,
254
+ Permission.OnCallMember,
255
+ Permission.CreateOnCallDutyPolicyScheduleOwnerUser,
256
+ ],
257
+ read: [
258
+ Permission.ProjectOwner,
259
+ Permission.ProjectAdmin,
260
+ Permission.ProjectMember,
261
+ Permission.Viewer,
262
+ Permission.OnCallAdmin,
263
+ Permission.OnCallMember,
264
+ Permission.OnCallViewer,
265
+ Permission.ReadOnCallDutyPolicyScheduleOwnerUser,
266
+ Permission.ReadAllProjectResources,
267
+ ],
268
+ update: [],
269
+ })
270
+ @TableColumn({
271
+ manyToOneRelationColumn: "onCallDutyPolicyScheduleId",
272
+ type: TableColumnType.Entity,
273
+ modelType: OnCallDutyPolicySchedule,
274
+ title: "On-Call Schedule",
275
+ description:
276
+ "Relation to On-Call Schedule Resource in which this object belongs",
277
+ })
278
+ @ManyToOne(
279
+ () => {
280
+ return OnCallDutyPolicySchedule;
281
+ },
282
+ {
283
+ eager: false,
284
+ nullable: true,
285
+ onDelete: "CASCADE",
286
+ orphanedRowAction: "nullify",
287
+ },
288
+ )
289
+ @JoinColumn({ name: "onCallDutyPolicyScheduleId" })
290
+ public onCallDutyPolicySchedule?: OnCallDutyPolicySchedule = undefined;
291
+
292
+ @ColumnAccessControl({
293
+ create: [
294
+ Permission.ProjectOwner,
295
+ Permission.ProjectAdmin,
296
+ Permission.ProjectMember,
297
+ Permission.OnCallAdmin,
298
+ Permission.OnCallMember,
299
+ Permission.CreateOnCallDutyPolicyScheduleOwnerUser,
300
+ ],
301
+ read: [
302
+ Permission.ProjectOwner,
303
+ Permission.ProjectAdmin,
304
+ Permission.ProjectMember,
305
+ Permission.Viewer,
306
+ Permission.OnCallAdmin,
307
+ Permission.OnCallMember,
308
+ Permission.OnCallViewer,
309
+ Permission.ReadOnCallDutyPolicyScheduleOwnerUser,
310
+ Permission.ReadAllProjectResources,
311
+ ],
312
+ update: [],
313
+ })
314
+ @Index()
315
+ @TableColumn({
316
+ type: TableColumnType.ObjectID,
317
+ required: true,
318
+ canReadOnRelationQuery: true,
319
+ title: "On-Call Schedule ID",
320
+ description:
321
+ "ID of your OneUptime On-Call Schedule in which this object belongs",
322
+ })
323
+ @Column({
324
+ type: ColumnType.ObjectID,
325
+ nullable: false,
326
+ transformer: ObjectID.getDatabaseTransformer(),
327
+ })
328
+ public onCallDutyPolicyScheduleId?: ObjectID = undefined;
329
+
330
+ @ColumnAccessControl({
331
+ create: [
332
+ Permission.ProjectOwner,
333
+ Permission.ProjectAdmin,
334
+ Permission.ProjectMember,
335
+ Permission.OnCallAdmin,
336
+ Permission.OnCallMember,
337
+ Permission.CreateOnCallDutyPolicyScheduleOwnerUser,
338
+ ],
339
+ read: [
340
+ Permission.ProjectOwner,
341
+ Permission.ProjectAdmin,
342
+ Permission.ProjectMember,
343
+ Permission.Viewer,
344
+ Permission.OnCallAdmin,
345
+ Permission.OnCallMember,
346
+ Permission.OnCallViewer,
347
+ Permission.ReadOnCallDutyPolicyScheduleOwnerUser,
348
+ Permission.ReadAllProjectResources,
349
+ ],
350
+ update: [],
351
+ })
352
+ @TableColumn({
353
+ manyToOneRelationColumn: "createdByUserId",
354
+ type: TableColumnType.Entity,
355
+ modelType: User,
356
+ title: "Created by User",
357
+ description:
358
+ "Relation to User who created this object (if this object was created by a User)",
359
+ })
360
+ @ManyToOne(
361
+ () => {
362
+ return User;
363
+ },
364
+ {
365
+ eager: false,
366
+ nullable: true,
367
+ onDelete: "SET NULL",
368
+ orphanedRowAction: "nullify",
369
+ },
370
+ )
371
+ @JoinColumn({ name: "createdByUserId" })
372
+ public createdByUser?: User = undefined;
373
+
374
+ @ColumnAccessControl({
375
+ create: [
376
+ Permission.ProjectOwner,
377
+ Permission.ProjectAdmin,
378
+ Permission.ProjectMember,
379
+ Permission.OnCallAdmin,
380
+ Permission.OnCallMember,
381
+ Permission.CreateOnCallDutyPolicyScheduleOwnerUser,
382
+ ],
383
+ read: [
384
+ Permission.ProjectOwner,
385
+ Permission.ProjectAdmin,
386
+ Permission.ProjectMember,
387
+ Permission.Viewer,
388
+ Permission.OnCallAdmin,
389
+ Permission.OnCallMember,
390
+ Permission.OnCallViewer,
391
+ Permission.ReadOnCallDutyPolicyScheduleOwnerUser,
392
+ Permission.ReadAllProjectResources,
393
+ ],
394
+ update: [],
395
+ })
396
+ @TableColumn({
397
+ type: TableColumnType.ObjectID,
398
+ title: "Created by User ID",
399
+ description:
400
+ "User ID who created this object (if this object was created by a User)",
401
+ })
402
+ @Column({
403
+ type: ColumnType.ObjectID,
404
+ nullable: true,
405
+ transformer: ObjectID.getDatabaseTransformer(),
406
+ })
407
+ public createdByUserId?: ObjectID = undefined;
408
+
409
+ @ColumnAccessControl({
410
+ create: [],
411
+ read: [
412
+ Permission.ProjectOwner,
413
+ Permission.ProjectAdmin,
414
+ Permission.ProjectMember,
415
+ Permission.Viewer,
416
+ Permission.OnCallAdmin,
417
+ Permission.OnCallMember,
418
+ Permission.OnCallViewer,
419
+ Permission.ReadOnCallDutyPolicyScheduleOwnerUser,
420
+ Permission.ReadAllProjectResources,
421
+ ],
422
+ update: [],
423
+ })
424
+ @TableColumn({
425
+ manyToOneRelationColumn: "deletedByUserId",
426
+ type: TableColumnType.Entity,
427
+ title: "Deleted by User",
428
+ modelType: User,
429
+ description:
430
+ "Relation to User who deleted this object (if this object was deleted by a User)",
431
+ })
432
+ @ManyToOne(
433
+ () => {
434
+ return User;
435
+ },
436
+ {
437
+ cascade: false,
438
+ eager: false,
439
+ nullable: true,
440
+ onDelete: "SET NULL",
441
+ orphanedRowAction: "nullify",
442
+ },
443
+ )
444
+ @JoinColumn({ name: "deletedByUserId" })
445
+ public deletedByUser?: User = undefined;
446
+
447
+ @ColumnAccessControl({
448
+ create: [],
449
+ read: [
450
+ Permission.ProjectOwner,
451
+ Permission.ProjectAdmin,
452
+ Permission.ProjectMember,
453
+ Permission.Viewer,
454
+ Permission.OnCallAdmin,
455
+ Permission.OnCallMember,
456
+ Permission.OnCallViewer,
457
+ Permission.ReadOnCallDutyPolicyScheduleOwnerUser,
458
+ Permission.ReadAllProjectResources,
459
+ ],
460
+ update: [],
461
+ })
462
+ @TableColumn({
463
+ type: TableColumnType.ObjectID,
464
+ title: "Deleted by User ID",
465
+ description:
466
+ "User ID who deleted this object (if this object was deleted by a User)",
467
+ })
468
+ @Column({
469
+ type: ColumnType.ObjectID,
470
+ nullable: true,
471
+ transformer: ObjectID.getDatabaseTransformer(),
472
+ })
473
+ public deletedByUserId?: ObjectID = undefined;
474
+
475
+ @ColumnAccessControl({
476
+ create: [],
477
+ read: [
478
+ Permission.ProjectOwner,
479
+ Permission.ProjectAdmin,
480
+ Permission.ProjectMember,
481
+ Permission.Viewer,
482
+ Permission.OnCallAdmin,
483
+ Permission.OnCallMember,
484
+ Permission.OnCallViewer,
485
+ Permission.ReadOnCallDutyPolicyScheduleOwnerUser,
486
+ Permission.ReadAllProjectResources,
487
+ ],
488
+ update: [],
489
+ })
490
+ @Index()
491
+ @TableColumn({
492
+ type: TableColumnType.Boolean,
493
+ computed: true,
494
+ hideColumnInDocumentation: true,
495
+ required: true,
496
+ isDefaultValueColumn: true,
497
+ title: "Are Owners Notified",
498
+ description: "Are owners notified of this resource ownership?",
499
+ defaultValue: false,
500
+ })
501
+ @Column({
502
+ type: ColumnType.Boolean,
503
+ nullable: false,
504
+ default: false,
505
+ })
506
+ public isOwnerNotified?: boolean = undefined;
507
+ }
@@ -40,6 +40,8 @@ import ProfileAggregationService, {
40
40
  ProfileFlamegraphNode,
41
41
  DiffFlamegraphRequest,
42
42
  DiffFlamegraphNode,
43
+ ServiceActivityRequest,
44
+ ServiceActivityItem,
43
45
  } from "../Services/ProfileAggregationService";
44
46
  import PprofEncoder, {
45
47
  PprofProfile,
@@ -1360,6 +1362,73 @@ router.post(
1360
1362
  },
1361
1363
  );
1362
1364
 
1365
+ // --- Profile Service Activity Endpoint ---
1366
+
1367
+ router.post(
1368
+ "/telemetry/profiles/service-activity",
1369
+ UserMiddleware.getUserMiddleware,
1370
+ async (
1371
+ req: ExpressRequest,
1372
+ res: ExpressResponse,
1373
+ next: NextFunction,
1374
+ ): Promise<void> => {
1375
+ try {
1376
+ const databaseProps: DatabaseCommonInteractionProps =
1377
+ await CommonAPI.getDatabaseCommonInteractionProps(req);
1378
+
1379
+ if (!databaseProps?.tenantId) {
1380
+ return Response.sendErrorResponse(
1381
+ req,
1382
+ res,
1383
+ new BadDataException("Invalid Project ID"),
1384
+ );
1385
+ }
1386
+
1387
+ const body: JSONObject = req.body as JSONObject;
1388
+
1389
+ const startTime: Date = body["startTime"]
1390
+ ? OneUptimeDate.fromString(body["startTime"] as string)
1391
+ : OneUptimeDate.addRemoveHours(OneUptimeDate.getCurrentDate(), -1);
1392
+
1393
+ const endTime: Date = body["endTime"]
1394
+ ? OneUptimeDate.fromString(body["endTime"] as string)
1395
+ : OneUptimeDate.getCurrentDate();
1396
+
1397
+ const profileType: string | undefined = body["profileType"]
1398
+ ? (body["profileType"] as string)
1399
+ : undefined;
1400
+
1401
+ const profileTypes: Array<string> | undefined = Array.isArray(
1402
+ body["profileTypes"],
1403
+ )
1404
+ ? (body["profileTypes"] as Array<string>).filter(
1405
+ (t: unknown): t is string => {
1406
+ return typeof t === "string" && t.length > 0;
1407
+ },
1408
+ )
1409
+ : undefined;
1410
+
1411
+ const request: ServiceActivityRequest = {
1412
+ projectId: databaseProps.tenantId,
1413
+ startTime,
1414
+ endTime,
1415
+ ...(profileType !== undefined && { profileType }),
1416
+ ...(profileTypes !== undefined &&
1417
+ profileTypes.length > 0 && { profileTypes }),
1418
+ };
1419
+
1420
+ const activity: Array<ServiceActivityItem> =
1421
+ await ProfileAggregationService.getServiceActivity(request);
1422
+
1423
+ return Response.sendJsonObjectResponse(req, res, {
1424
+ activity: activity as unknown as JSONObject,
1425
+ });
1426
+ } catch (err: unknown) {
1427
+ next(err);
1428
+ }
1429
+ },
1430
+ );
1431
+
1363
1432
  // --- Profile pprof Export Endpoint ---
1364
1433
 
1365
1434
  router.get(