@oneuptime/common 10.0.31 → 10.0.33

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 (130) hide show
  1. package/Models/AnalyticsModels/ExceptionInstance.ts +29 -4
  2. package/Models/AnalyticsModels/Log.ts +110 -4
  3. package/Models/AnalyticsModels/Metric.ts +16 -9
  4. package/Models/AnalyticsModels/MonitorLog.ts +4 -2
  5. package/Models/AnalyticsModels/Span.ts +79 -6
  6. package/Models/DatabaseModels/Index.ts +8 -0
  7. package/Models/DatabaseModels/LogDropFilter.ts +480 -0
  8. package/Models/DatabaseModels/LogPipeline.ts +412 -0
  9. package/Models/DatabaseModels/LogPipelineProcessor.ts +430 -0
  10. package/Models/DatabaseModels/LogScrubRule.ts +516 -0
  11. package/Server/API/TelemetryAPI.ts +261 -0
  12. package/Server/Infrastructure/Postgres/SchemaMigrations/1773402621107-MigrationName.ts +131 -0
  13. package/Server/Infrastructure/Postgres/SchemaMigrations/1773414578773-MigrationName.ts +79 -0
  14. package/Server/Infrastructure/Postgres/SchemaMigrations/1773500000000-MigrationName.ts +41 -0
  15. package/Server/Infrastructure/Postgres/SchemaMigrations/1773676206197-MigrationName.ts +57 -0
  16. package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +4 -0
  17. package/Server/Services/AnalyticsDatabaseService.ts +61 -0
  18. package/Server/Services/LogAggregationService.ts +238 -1
  19. package/Server/Services/LogDropFilterService.ts +10 -0
  20. package/Server/Services/LogPipelineProcessorService.ts +10 -0
  21. package/Server/Services/LogPipelineService.ts +10 -0
  22. package/Server/Services/LogScrubRuleService.ts +10 -0
  23. package/Server/Services/TelemetryAttributeService.ts +4 -6
  24. package/Server/Utils/AnalyticsDatabase/Statement.ts +15 -1
  25. package/Server/Utils/AnalyticsDatabase/StatementGenerator.ts +126 -11
  26. package/Tests/Server/Services/LogAggregationService.test.ts +3 -2
  27. package/Types/AnalyticsDatabase/AnalyticsTableName.ts +9 -0
  28. package/Types/AnalyticsDatabase/TableColumnType.ts +4 -0
  29. package/Types/Date.ts +22 -0
  30. package/Types/Log/LogDropFilterAction.ts +6 -0
  31. package/Types/Log/LogPipelineProcessorType.ts +44 -0
  32. package/Types/Log/LogScrubAction.ts +7 -0
  33. package/Types/Log/LogScrubPatternType.ts +10 -0
  34. package/Types/Permission.ts +174 -0
  35. package/UI/Components/LogsViewer/LogsViewer.tsx +152 -4
  36. package/UI/Components/LogsViewer/components/KeyboardShortcutsHelp.tsx +92 -0
  37. package/UI/Components/LogsViewer/components/LogDetailsPanel.tsx +332 -117
  38. package/UI/Components/LogsViewer/components/LogSearchBar.tsx +294 -274
  39. package/UI/Components/LogsViewer/components/LogsAnalyticsView.tsx +513 -234
  40. package/UI/Components/LogsViewer/components/LogsFilterCard.tsx +37 -29
  41. package/UI/Components/LogsViewer/components/LogsTable.tsx +6 -1
  42. package/UI/Components/LogsViewer/components/LogsViewerToolbar.tsx +106 -0
  43. package/UI/Utils/LogExport.ts +160 -0
  44. package/build/dist/Models/AnalyticsModels/ExceptionInstance.js +28 -4
  45. package/build/dist/Models/AnalyticsModels/ExceptionInstance.js.map +1 -1
  46. package/build/dist/Models/AnalyticsModels/Log.js +97 -4
  47. package/build/dist/Models/AnalyticsModels/Log.js.map +1 -1
  48. package/build/dist/Models/AnalyticsModels/Metric.js +16 -9
  49. package/build/dist/Models/AnalyticsModels/Metric.js.map +1 -1
  50. package/build/dist/Models/AnalyticsModels/MonitorLog.js +4 -2
  51. package/build/dist/Models/AnalyticsModels/MonitorLog.js.map +1 -1
  52. package/build/dist/Models/AnalyticsModels/Span.js +73 -6
  53. package/build/dist/Models/AnalyticsModels/Span.js.map +1 -1
  54. package/build/dist/Models/DatabaseModels/Index.js +8 -0
  55. package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
  56. package/build/dist/Models/DatabaseModels/LogDropFilter.js +508 -0
  57. package/build/dist/Models/DatabaseModels/LogDropFilter.js.map +1 -0
  58. package/build/dist/Models/DatabaseModels/LogPipeline.js +438 -0
  59. package/build/dist/Models/DatabaseModels/LogPipeline.js.map +1 -0
  60. package/build/dist/Models/DatabaseModels/LogPipelineProcessor.js +452 -0
  61. package/build/dist/Models/DatabaseModels/LogPipelineProcessor.js.map +1 -0
  62. package/build/dist/Models/DatabaseModels/LogScrubRule.js +545 -0
  63. package/build/dist/Models/DatabaseModels/LogScrubRule.js.map +1 -0
  64. package/build/dist/Server/API/TelemetryAPI.js +155 -0
  65. package/build/dist/Server/API/TelemetryAPI.js.map +1 -1
  66. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1773402621107-MigrationName.js +52 -0
  67. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1773402621107-MigrationName.js.map +1 -0
  68. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1773414578773-MigrationName.js +34 -0
  69. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1773414578773-MigrationName.js.map +1 -0
  70. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1773500000000-MigrationName.js +22 -0
  71. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1773500000000-MigrationName.js.map +1 -0
  72. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1773676206197-MigrationName.js +26 -0
  73. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1773676206197-MigrationName.js.map +1 -0
  74. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +4 -0
  75. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
  76. package/build/dist/Server/Services/AnalyticsDatabaseService.js +30 -0
  77. package/build/dist/Server/Services/AnalyticsDatabaseService.js.map +1 -1
  78. package/build/dist/Server/Services/LogAggregationService.js +188 -1
  79. package/build/dist/Server/Services/LogAggregationService.js.map +1 -1
  80. package/build/dist/Server/Services/LogDropFilterService.js +9 -0
  81. package/build/dist/Server/Services/LogDropFilterService.js.map +1 -0
  82. package/build/dist/Server/Services/LogPipelineProcessorService.js +9 -0
  83. package/build/dist/Server/Services/LogPipelineProcessorService.js.map +1 -0
  84. package/build/dist/Server/Services/LogPipelineService.js +9 -0
  85. package/build/dist/Server/Services/LogPipelineService.js.map +1 -0
  86. package/build/dist/Server/Services/LogScrubRuleService.js +9 -0
  87. package/build/dist/Server/Services/LogScrubRuleService.js.map +1 -0
  88. package/build/dist/Server/Services/TelemetryAttributeService.js +4 -6
  89. package/build/dist/Server/Services/TelemetryAttributeService.js.map +1 -1
  90. package/build/dist/Server/Utils/AnalyticsDatabase/Statement.js +13 -1
  91. package/build/dist/Server/Utils/AnalyticsDatabase/Statement.js.map +1 -1
  92. package/build/dist/Server/Utils/AnalyticsDatabase/StatementGenerator.js +89 -2
  93. package/build/dist/Server/Utils/AnalyticsDatabase/StatementGenerator.js.map +1 -1
  94. package/build/dist/Tests/Server/Services/LogAggregationService.test.js +3 -2
  95. package/build/dist/Tests/Server/Services/LogAggregationService.test.js.map +1 -1
  96. package/build/dist/Types/AnalyticsDatabase/AnalyticsTableName.js +10 -0
  97. package/build/dist/Types/AnalyticsDatabase/AnalyticsTableName.js.map +1 -0
  98. package/build/dist/Types/AnalyticsDatabase/TableColumnType.js +4 -0
  99. package/build/dist/Types/AnalyticsDatabase/TableColumnType.js.map +1 -1
  100. package/build/dist/Types/Date.js +16 -0
  101. package/build/dist/Types/Date.js.map +1 -1
  102. package/build/dist/Types/Log/LogDropFilterAction.js +7 -0
  103. package/build/dist/Types/Log/LogDropFilterAction.js.map +1 -0
  104. package/build/dist/Types/Log/LogPipelineProcessorType.js +9 -0
  105. package/build/dist/Types/Log/LogPipelineProcessorType.js.map +1 -0
  106. package/build/dist/Types/Log/LogScrubAction.js +8 -0
  107. package/build/dist/Types/Log/LogScrubAction.js.map +1 -0
  108. package/build/dist/Types/Log/LogScrubPatternType.js +11 -0
  109. package/build/dist/Types/Log/LogScrubPatternType.js.map +1 -0
  110. package/build/dist/Types/Permission.js +152 -0
  111. package/build/dist/Types/Permission.js.map +1 -1
  112. package/build/dist/UI/Components/LogsViewer/LogsViewer.js +124 -11
  113. package/build/dist/UI/Components/LogsViewer/LogsViewer.js.map +1 -1
  114. package/build/dist/UI/Components/LogsViewer/components/KeyboardShortcutsHelp.js +36 -0
  115. package/build/dist/UI/Components/LogsViewer/components/KeyboardShortcutsHelp.js.map +1 -0
  116. package/build/dist/UI/Components/LogsViewer/components/LogDetailsPanel.js +114 -4
  117. package/build/dist/UI/Components/LogsViewer/components/LogDetailsPanel.js.map +1 -1
  118. package/build/dist/UI/Components/LogsViewer/components/LogSearchBar.js +17 -5
  119. package/build/dist/UI/Components/LogsViewer/components/LogSearchBar.js.map +1 -1
  120. package/build/dist/UI/Components/LogsViewer/components/LogsAnalyticsView.js +229 -122
  121. package/build/dist/UI/Components/LogsViewer/components/LogsAnalyticsView.js.map +1 -1
  122. package/build/dist/UI/Components/LogsViewer/components/LogsFilterCard.js +5 -4
  123. package/build/dist/UI/Components/LogsViewer/components/LogsFilterCard.js.map +1 -1
  124. package/build/dist/UI/Components/LogsViewer/components/LogsTable.js +4 -1
  125. package/build/dist/UI/Components/LogsViewer/components/LogsTable.js.map +1 -1
  126. package/build/dist/UI/Components/LogsViewer/components/LogsViewerToolbar.js +28 -0
  127. package/build/dist/UI/Components/LogsViewer/components/LogsViewerToolbar.js.map +1 -1
  128. package/build/dist/UI/Utils/LogExport.js +129 -0
  129. package/build/dist/UI/Utils/LogExport.js.map +1 -0
  130. package/package.json +1 -1
@@ -0,0 +1,480 @@
1
+ import Project from "./Project";
2
+ import User from "./User";
3
+ import BaseModel from "./DatabaseBaseModel/DatabaseBaseModel";
4
+ import Route from "../../Types/API/Route";
5
+ import ColumnAccessControl from "../../Types/Database/AccessControl/ColumnAccessControl";
6
+ import TableAccessControl from "../../Types/Database/AccessControl/TableAccessControl";
7
+ import TableBillingAccessControl from "../../Types/Database/AccessControl/TableBillingAccessControl";
8
+ import ColumnLength from "../../Types/Database/ColumnLength";
9
+ import ColumnType from "../../Types/Database/ColumnType";
10
+ import CrudApiEndpoint from "../../Types/Database/CrudApiEndpoint";
11
+ import EnableDocumentation from "../../Types/Database/EnableDocumentation";
12
+ import TableColumn from "../../Types/Database/TableColumn";
13
+ import TableColumnType from "../../Types/Database/TableColumnType";
14
+ import TableMetadata from "../../Types/Database/TableMetadata";
15
+ import TenantColumn from "../../Types/Database/TenantColumn";
16
+ import IconProp from "../../Types/Icon/IconProp";
17
+ import ObjectID from "../../Types/ObjectID";
18
+ import Permission from "../../Types/Permission";
19
+ import { PlanType } from "../../Types/Billing/SubscriptionPlan";
20
+ import { Column, Entity, Index, JoinColumn, ManyToOne } from "typeorm";
21
+
22
+ @EnableDocumentation()
23
+ @TableBillingAccessControl({
24
+ create: PlanType.Free,
25
+ read: PlanType.Free,
26
+ update: PlanType.Free,
27
+ delete: PlanType.Free,
28
+ })
29
+ @TenantColumn("projectId")
30
+ @CrudApiEndpoint(new Route("/log-drop-filter"))
31
+ @Entity({
32
+ name: "LogDropFilter",
33
+ })
34
+ @TableMetadata({
35
+ tableName: "LogDropFilter",
36
+ singularName: "Log Drop Filter",
37
+ pluralName: "Log Drop Filters",
38
+ icon: IconProp.Filter,
39
+ tableDescription:
40
+ "Configure rules to drop or sample logs before storage to reduce volume and cost.",
41
+ })
42
+ @TableAccessControl({
43
+ create: [
44
+ Permission.ProjectOwner,
45
+ Permission.ProjectAdmin,
46
+ Permission.CreateProjectLogDropFilter,
47
+ ],
48
+ read: [
49
+ Permission.ProjectOwner,
50
+ Permission.ProjectAdmin,
51
+ Permission.ProjectMember,
52
+ Permission.ReadProjectLogDropFilter,
53
+ Permission.ReadAllProjectResources,
54
+ ],
55
+ delete: [
56
+ Permission.ProjectOwner,
57
+ Permission.ProjectAdmin,
58
+ Permission.DeleteProjectLogDropFilter,
59
+ ],
60
+ update: [
61
+ Permission.ProjectOwner,
62
+ Permission.ProjectAdmin,
63
+ Permission.EditProjectLogDropFilter,
64
+ ],
65
+ })
66
+ export default class LogDropFilter extends BaseModel {
67
+ @ColumnAccessControl({
68
+ create: [
69
+ Permission.ProjectOwner,
70
+ Permission.ProjectAdmin,
71
+ Permission.CreateProjectLogDropFilter,
72
+ ],
73
+ read: [
74
+ Permission.ProjectOwner,
75
+ Permission.ProjectAdmin,
76
+ Permission.ProjectMember,
77
+ Permission.ReadProjectLogDropFilter,
78
+ Permission.ReadAllProjectResources,
79
+ ],
80
+ update: [],
81
+ })
82
+ @TableColumn({
83
+ manyToOneRelationColumn: "projectId",
84
+ type: TableColumnType.Entity,
85
+ modelType: Project,
86
+ title: "Project",
87
+ description: "Relation to the project this log drop filter belongs to.",
88
+ })
89
+ @ManyToOne(
90
+ () => {
91
+ return Project;
92
+ },
93
+ {
94
+ eager: false,
95
+ nullable: true,
96
+ onDelete: "CASCADE",
97
+ orphanedRowAction: "nullify",
98
+ },
99
+ )
100
+ @JoinColumn({ name: "projectId" })
101
+ public project?: Project = undefined;
102
+
103
+ @ColumnAccessControl({
104
+ create: [
105
+ Permission.ProjectOwner,
106
+ Permission.ProjectAdmin,
107
+ Permission.CreateProjectLogDropFilter,
108
+ ],
109
+ read: [
110
+ Permission.ProjectOwner,
111
+ Permission.ProjectAdmin,
112
+ Permission.ProjectMember,
113
+ Permission.ReadProjectLogDropFilter,
114
+ Permission.ReadAllProjectResources,
115
+ ],
116
+ update: [],
117
+ })
118
+ @Index()
119
+ @TableColumn({
120
+ type: TableColumnType.ObjectID,
121
+ required: true,
122
+ canReadOnRelationQuery: true,
123
+ title: "Project ID",
124
+ description: "ID of the project this log drop filter belongs to.",
125
+ })
126
+ @Column({
127
+ type: ColumnType.ObjectID,
128
+ nullable: false,
129
+ transformer: ObjectID.getDatabaseTransformer(),
130
+ })
131
+ public projectId?: ObjectID = undefined;
132
+
133
+ @ColumnAccessControl({
134
+ create: [
135
+ Permission.ProjectOwner,
136
+ Permission.ProjectAdmin,
137
+ Permission.CreateProjectLogDropFilter,
138
+ ],
139
+ read: [
140
+ Permission.ProjectOwner,
141
+ Permission.ProjectAdmin,
142
+ Permission.ProjectMember,
143
+ Permission.ReadProjectLogDropFilter,
144
+ Permission.ReadAllProjectResources,
145
+ ],
146
+ update: [
147
+ Permission.ProjectOwner,
148
+ Permission.ProjectAdmin,
149
+ Permission.EditProjectLogDropFilter,
150
+ ],
151
+ })
152
+ @TableColumn({
153
+ required: true,
154
+ type: TableColumnType.Name,
155
+ canReadOnRelationQuery: true,
156
+ title: "Name",
157
+ description: "Friendly name for this drop filter.",
158
+ })
159
+ @Column({
160
+ nullable: false,
161
+ type: ColumnType.Name,
162
+ length: ColumnLength.Name,
163
+ })
164
+ public name?: string = undefined;
165
+
166
+ @ColumnAccessControl({
167
+ create: [
168
+ Permission.ProjectOwner,
169
+ Permission.ProjectAdmin,
170
+ Permission.CreateProjectLogDropFilter,
171
+ ],
172
+ read: [
173
+ Permission.ProjectOwner,
174
+ Permission.ProjectAdmin,
175
+ Permission.ProjectMember,
176
+ Permission.ReadProjectLogDropFilter,
177
+ Permission.ReadAllProjectResources,
178
+ ],
179
+ update: [
180
+ Permission.ProjectOwner,
181
+ Permission.ProjectAdmin,
182
+ Permission.EditProjectLogDropFilter,
183
+ ],
184
+ })
185
+ @TableColumn({
186
+ required: false,
187
+ type: TableColumnType.LongText,
188
+ canReadOnRelationQuery: true,
189
+ title: "Description",
190
+ description: "Description of what this drop filter does.",
191
+ })
192
+ @Column({
193
+ nullable: true,
194
+ type: ColumnType.LongText,
195
+ length: ColumnLength.LongText,
196
+ })
197
+ public description?: string = undefined;
198
+
199
+ @ColumnAccessControl({
200
+ create: [
201
+ Permission.ProjectOwner,
202
+ Permission.ProjectAdmin,
203
+ Permission.CreateProjectLogDropFilter,
204
+ ],
205
+ read: [
206
+ Permission.ProjectOwner,
207
+ Permission.ProjectAdmin,
208
+ Permission.ProjectMember,
209
+ Permission.ReadProjectLogDropFilter,
210
+ Permission.ReadAllProjectResources,
211
+ ],
212
+ update: [
213
+ Permission.ProjectOwner,
214
+ Permission.ProjectAdmin,
215
+ Permission.EditProjectLogDropFilter,
216
+ ],
217
+ })
218
+ @TableColumn({
219
+ required: true,
220
+ type: TableColumnType.LongText,
221
+ canReadOnRelationQuery: true,
222
+ title: "Filter Query",
223
+ description:
224
+ "Filter expression that identifies which logs to drop or sample.",
225
+ })
226
+ @Column({
227
+ nullable: false,
228
+ type: ColumnType.LongText,
229
+ length: ColumnLength.LongText,
230
+ })
231
+ public filterQuery?: string = undefined;
232
+
233
+ @ColumnAccessControl({
234
+ create: [
235
+ Permission.ProjectOwner,
236
+ Permission.ProjectAdmin,
237
+ Permission.CreateProjectLogDropFilter,
238
+ ],
239
+ read: [
240
+ Permission.ProjectOwner,
241
+ Permission.ProjectAdmin,
242
+ Permission.ProjectMember,
243
+ Permission.ReadProjectLogDropFilter,
244
+ Permission.ReadAllProjectResources,
245
+ ],
246
+ update: [
247
+ Permission.ProjectOwner,
248
+ Permission.ProjectAdmin,
249
+ Permission.EditProjectLogDropFilter,
250
+ ],
251
+ })
252
+ @TableColumn({
253
+ required: true,
254
+ type: TableColumnType.ShortText,
255
+ canReadOnRelationQuery: true,
256
+ title: "Action",
257
+ description:
258
+ "What to do with matching logs: 'drop' to discard entirely, 'sample' to keep a percentage.",
259
+ })
260
+ @Column({
261
+ nullable: false,
262
+ type: ColumnType.ShortText,
263
+ length: ColumnLength.ShortText,
264
+ default: "drop",
265
+ })
266
+ public action?: string = undefined;
267
+
268
+ @ColumnAccessControl({
269
+ create: [
270
+ Permission.ProjectOwner,
271
+ Permission.ProjectAdmin,
272
+ Permission.CreateProjectLogDropFilter,
273
+ ],
274
+ read: [
275
+ Permission.ProjectOwner,
276
+ Permission.ProjectAdmin,
277
+ Permission.ProjectMember,
278
+ Permission.ReadProjectLogDropFilter,
279
+ Permission.ReadAllProjectResources,
280
+ ],
281
+ update: [
282
+ Permission.ProjectOwner,
283
+ Permission.ProjectAdmin,
284
+ Permission.EditProjectLogDropFilter,
285
+ ],
286
+ })
287
+ @TableColumn({
288
+ title: "Sample Percentage",
289
+ required: false,
290
+ type: TableColumnType.Number,
291
+ canReadOnRelationQuery: true,
292
+ description:
293
+ "When action is 'sample', the percentage of matching logs to keep (1-99).",
294
+ })
295
+ @Column({
296
+ type: ColumnType.Number,
297
+ nullable: true,
298
+ })
299
+ public samplePercentage?: number = undefined;
300
+
301
+ @ColumnAccessControl({
302
+ create: [
303
+ Permission.ProjectOwner,
304
+ Permission.ProjectAdmin,
305
+ Permission.CreateProjectLogDropFilter,
306
+ ],
307
+ read: [
308
+ Permission.ProjectOwner,
309
+ Permission.ProjectAdmin,
310
+ Permission.ProjectMember,
311
+ Permission.ReadProjectLogDropFilter,
312
+ Permission.ReadAllProjectResources,
313
+ ],
314
+ update: [
315
+ Permission.ProjectOwner,
316
+ Permission.ProjectAdmin,
317
+ Permission.EditProjectLogDropFilter,
318
+ ],
319
+ })
320
+ @Index()
321
+ @TableColumn({
322
+ required: true,
323
+ type: TableColumnType.Boolean,
324
+ canReadOnRelationQuery: true,
325
+ title: "Enabled",
326
+ description: "Whether this drop filter is active.",
327
+ defaultValue: true,
328
+ })
329
+ @Column({
330
+ nullable: false,
331
+ type: ColumnType.Boolean,
332
+ default: true,
333
+ })
334
+ public isEnabled?: boolean = undefined;
335
+
336
+ @ColumnAccessControl({
337
+ create: [
338
+ Permission.ProjectOwner,
339
+ Permission.ProjectAdmin,
340
+ Permission.CreateProjectLogDropFilter,
341
+ ],
342
+ read: [
343
+ Permission.ProjectOwner,
344
+ Permission.ProjectAdmin,
345
+ Permission.ProjectMember,
346
+ Permission.ReadProjectLogDropFilter,
347
+ Permission.ReadAllProjectResources,
348
+ ],
349
+ update: [
350
+ Permission.ProjectOwner,
351
+ Permission.ProjectAdmin,
352
+ Permission.EditProjectLogDropFilter,
353
+ ],
354
+ })
355
+ @TableColumn({
356
+ title: "Sort Order",
357
+ required: true,
358
+ type: TableColumnType.Number,
359
+ canReadOnRelationQuery: true,
360
+ description:
361
+ "Determines the evaluation order of this filter relative to others.",
362
+ defaultValue: 0,
363
+ })
364
+ @Column({
365
+ type: ColumnType.Number,
366
+ nullable: false,
367
+ default: 0,
368
+ })
369
+ public sortOrder?: number = undefined;
370
+
371
+ @ColumnAccessControl({
372
+ create: [],
373
+ read: [
374
+ Permission.ProjectOwner,
375
+ Permission.ProjectAdmin,
376
+ Permission.ProjectMember,
377
+ Permission.ReadProjectLogDropFilter,
378
+ Permission.ReadAllProjectResources,
379
+ ],
380
+ update: [],
381
+ })
382
+ @TableColumn({
383
+ manyToOneRelationColumn: "createdByUserId",
384
+ type: TableColumnType.Entity,
385
+ modelType: User,
386
+ title: "Created By User",
387
+ description: "Relation to the user who created this log drop filter.",
388
+ })
389
+ @ManyToOne(
390
+ () => {
391
+ return User;
392
+ },
393
+ {
394
+ eager: false,
395
+ nullable: true,
396
+ onDelete: "SET NULL",
397
+ orphanedRowAction: "nullify",
398
+ },
399
+ )
400
+ @JoinColumn({ name: "createdByUserId" })
401
+ public createdByUser?: User = undefined;
402
+
403
+ @ColumnAccessControl({
404
+ create: [],
405
+ read: [
406
+ Permission.ProjectOwner,
407
+ Permission.ProjectAdmin,
408
+ Permission.ProjectMember,
409
+ Permission.ReadProjectLogDropFilter,
410
+ Permission.ReadAllProjectResources,
411
+ ],
412
+ update: [],
413
+ })
414
+ @TableColumn({
415
+ type: TableColumnType.ObjectID,
416
+ title: "Created By User ID",
417
+ description: "ID of the user who created this log drop filter.",
418
+ })
419
+ @Column({
420
+ type: ColumnType.ObjectID,
421
+ nullable: true,
422
+ transformer: ObjectID.getDatabaseTransformer(),
423
+ })
424
+ public createdByUserId?: ObjectID = undefined;
425
+
426
+ @ColumnAccessControl({
427
+ create: [],
428
+ read: [
429
+ Permission.ProjectOwner,
430
+ Permission.ProjectAdmin,
431
+ Permission.ProjectMember,
432
+ Permission.ReadProjectLogDropFilter,
433
+ Permission.ReadAllProjectResources,
434
+ ],
435
+ update: [],
436
+ })
437
+ @TableColumn({
438
+ manyToOneRelationColumn: "deletedByUserId",
439
+ type: TableColumnType.Entity,
440
+ modelType: User,
441
+ title: "Deleted By User",
442
+ description: "Relation to the user who deleted this log drop filter.",
443
+ })
444
+ @ManyToOne(
445
+ () => {
446
+ return User;
447
+ },
448
+ {
449
+ eager: false,
450
+ nullable: true,
451
+ onDelete: "SET NULL",
452
+ orphanedRowAction: "nullify",
453
+ },
454
+ )
455
+ @JoinColumn({ name: "deletedByUserId" })
456
+ public deletedByUser?: User = undefined;
457
+
458
+ @ColumnAccessControl({
459
+ create: [],
460
+ read: [
461
+ Permission.ProjectOwner,
462
+ Permission.ProjectAdmin,
463
+ Permission.ProjectMember,
464
+ Permission.ReadProjectLogDropFilter,
465
+ Permission.ReadAllProjectResources,
466
+ ],
467
+ update: [],
468
+ })
469
+ @TableColumn({
470
+ type: TableColumnType.ObjectID,
471
+ title: "Deleted By User ID",
472
+ description: "ID of the user who deleted this log drop filter.",
473
+ })
474
+ @Column({
475
+ type: ColumnType.ObjectID,
476
+ nullable: true,
477
+ transformer: ObjectID.getDatabaseTransformer(),
478
+ })
479
+ public deletedByUserId?: ObjectID = undefined;
480
+ }