@oneuptime/common 10.0.96 → 10.0.98

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 (131) hide show
  1. package/Models/AnalyticsModels/Log.ts +6 -0
  2. package/Models/AnalyticsModels/Metric.ts +6 -0
  3. package/Models/AnalyticsModels/Profile.ts +6 -0
  4. package/Models/AnalyticsModels/Span.ts +6 -0
  5. package/Models/DatabaseModels/Alert.ts +52 -0
  6. package/Models/DatabaseModels/DockerHost.ts +3 -10
  7. package/Models/DatabaseModels/Host.ts +1015 -0
  8. package/Models/DatabaseModels/HostOwnerTeam.ts +462 -0
  9. package/Models/DatabaseModels/HostOwnerUser.ts +461 -0
  10. package/Models/DatabaseModels/Incident.ts +52 -0
  11. package/Models/DatabaseModels/Index.ts +6 -0
  12. package/Models/DatabaseModels/KubernetesCluster.ts +0 -7
  13. package/Server/Infrastructure/Postgres/SchemaMigrations/1778006035712-AddHostTables.ts +201 -0
  14. package/Server/Infrastructure/Postgres/SchemaMigrations/1778013317872-AddHostIpAddresses.ts +15 -0
  15. package/Server/Infrastructure/Postgres/SchemaMigrations/1778066346303-WidenHostOsVersionToLongText.ts +42 -0
  16. package/Server/Infrastructure/Postgres/SchemaMigrations/1778070278986-MigrationName.ts +79 -0
  17. package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +8 -0
  18. package/Server/Services/DockerHostService.ts +18 -5
  19. package/Server/Services/HostOwnerTeamService.ts +10 -0
  20. package/Server/Services/HostOwnerUserService.ts +10 -0
  21. package/Server/Services/HostService.ts +251 -0
  22. package/Server/Services/LogAggregationService.ts +10 -3
  23. package/Server/Services/MetricService.ts +200 -0
  24. package/Server/Services/TraceAggregationService.ts +8 -3
  25. package/Server/Utils/AnalyticsDatabase/StatementGenerator.ts +46 -18
  26. package/Server/Utils/Monitor/MonitorAlert.ts +37 -0
  27. package/Server/Utils/Monitor/MonitorIncident.ts +37 -0
  28. package/Tests/Server/Services/LogAggregationService.test.ts +25 -0
  29. package/Tests/Server/Utils/AnalyticsDatabase/StatementGenerator.test.ts +145 -0
  30. package/Types/Metrics/MetricQueryConfigData.ts +9 -0
  31. package/Types/Permission.ts +134 -0
  32. package/UI/Components/Charts/Area/AreaChart.tsx +1 -1
  33. package/UI/Components/Charts/Bar/BarChart.tsx +1 -1
  34. package/UI/Components/Charts/ChartLibrary/AreaChart/AreaChart.tsx +17 -8
  35. package/UI/Components/Charts/ChartLibrary/BarChart/BarChart.tsx +11 -6
  36. package/UI/Components/Charts/ChartLibrary/LineChart/LineChart.tsx +17 -8
  37. package/UI/Components/Charts/Line/LineChart.tsx +1 -1
  38. package/UI/Components/ExpandableText/ExpandableText.tsx +29 -7
  39. package/UI/Components/JSONTable/JSONTable.tsx +27 -1
  40. package/UI/Components/LogsViewer/LogsViewer.tsx +3 -0
  41. package/UI/Components/LogsViewer/components/LogDetailsPanel.tsx +109 -23
  42. package/UI/Components/LogsViewer/components/LogSearchBar.tsx +11 -4
  43. package/UI/Components/Navbar/NavBarMenu.tsx +17 -2
  44. package/UI/Components/TelemetryViewer/components/TelemetrySearchBar.tsx +10 -3
  45. package/Utils/ValueFormatter.ts +57 -3
  46. package/build/dist/Models/AnalyticsModels/Log.js +6 -0
  47. package/build/dist/Models/AnalyticsModels/Log.js.map +1 -1
  48. package/build/dist/Models/AnalyticsModels/Metric.js +6 -0
  49. package/build/dist/Models/AnalyticsModels/Metric.js.map +1 -1
  50. package/build/dist/Models/AnalyticsModels/Profile.js +6 -0
  51. package/build/dist/Models/AnalyticsModels/Profile.js.map +1 -1
  52. package/build/dist/Models/AnalyticsModels/Span.js +6 -0
  53. package/build/dist/Models/AnalyticsModels/Span.js.map +1 -1
  54. package/build/dist/Models/DatabaseModels/Alert.js +51 -0
  55. package/build/dist/Models/DatabaseModels/Alert.js.map +1 -1
  56. package/build/dist/Models/DatabaseModels/DockerHost.js +3 -10
  57. package/build/dist/Models/DatabaseModels/DockerHost.js.map +1 -1
  58. package/build/dist/Models/DatabaseModels/Host.js +1041 -0
  59. package/build/dist/Models/DatabaseModels/Host.js.map +1 -0
  60. package/build/dist/Models/DatabaseModels/HostOwnerTeam.js +480 -0
  61. package/build/dist/Models/DatabaseModels/HostOwnerTeam.js.map +1 -0
  62. package/build/dist/Models/DatabaseModels/HostOwnerUser.js +479 -0
  63. package/build/dist/Models/DatabaseModels/HostOwnerUser.js.map +1 -0
  64. package/build/dist/Models/DatabaseModels/Incident.js +51 -0
  65. package/build/dist/Models/DatabaseModels/Incident.js.map +1 -1
  66. package/build/dist/Models/DatabaseModels/Index.js +6 -0
  67. package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
  68. package/build/dist/Models/DatabaseModels/KubernetesCluster.js +0 -7
  69. package/build/dist/Models/DatabaseModels/KubernetesCluster.js.map +1 -1
  70. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1778006035712-AddHostTables.js +76 -0
  71. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1778006035712-AddHostTables.js.map +1 -0
  72. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1778013317872-AddHostIpAddresses.js +12 -0
  73. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1778013317872-AddHostIpAddresses.js.map +1 -0
  74. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1778066346303-WidenHostOsVersionToLongText.js +31 -0
  75. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1778066346303-WidenHostOsVersionToLongText.js.map +1 -0
  76. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1778070278986-MigrationName.js +34 -0
  77. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1778070278986-MigrationName.js.map +1 -0
  78. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +8 -0
  79. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
  80. package/build/dist/Server/Services/DockerHostService.js +12 -5
  81. package/build/dist/Server/Services/DockerHostService.js.map +1 -1
  82. package/build/dist/Server/Services/HostOwnerTeamService.js +9 -0
  83. package/build/dist/Server/Services/HostOwnerTeamService.js.map +1 -0
  84. package/build/dist/Server/Services/HostOwnerUserService.js +9 -0
  85. package/build/dist/Server/Services/HostOwnerUserService.js.map +1 -0
  86. package/build/dist/Server/Services/HostService.js +214 -0
  87. package/build/dist/Server/Services/HostService.js.map +1 -0
  88. package/build/dist/Server/Services/LogAggregationService.js +10 -3
  89. package/build/dist/Server/Services/LogAggregationService.js.map +1 -1
  90. package/build/dist/Server/Services/MetricService.js +160 -0
  91. package/build/dist/Server/Services/MetricService.js.map +1 -1
  92. package/build/dist/Server/Services/TraceAggregationService.js +8 -3
  93. package/build/dist/Server/Services/TraceAggregationService.js.map +1 -1
  94. package/build/dist/Server/Utils/AnalyticsDatabase/StatementGenerator.js +46 -18
  95. package/build/dist/Server/Utils/AnalyticsDatabase/StatementGenerator.js.map +1 -1
  96. package/build/dist/Server/Utils/Monitor/MonitorAlert.js +32 -0
  97. package/build/dist/Server/Utils/Monitor/MonitorAlert.js.map +1 -1
  98. package/build/dist/Server/Utils/Monitor/MonitorIncident.js +32 -0
  99. package/build/dist/Server/Utils/Monitor/MonitorIncident.js.map +1 -1
  100. package/build/dist/Tests/Server/Services/LogAggregationService.test.js +13 -0
  101. package/build/dist/Tests/Server/Services/LogAggregationService.test.js.map +1 -1
  102. package/build/dist/Tests/Server/Utils/AnalyticsDatabase/StatementGenerator.test.js +123 -0
  103. package/build/dist/Tests/Server/Utils/AnalyticsDatabase/StatementGenerator.test.js.map +1 -1
  104. package/build/dist/Types/Permission.js +120 -0
  105. package/build/dist/Types/Permission.js.map +1 -1
  106. package/build/dist/UI/Components/Charts/Area/AreaChart.js +1 -1
  107. package/build/dist/UI/Components/Charts/Bar/BarChart.js +1 -1
  108. package/build/dist/UI/Components/Charts/ChartLibrary/AreaChart/AreaChart.js +15 -7
  109. package/build/dist/UI/Components/Charts/ChartLibrary/AreaChart/AreaChart.js.map +1 -1
  110. package/build/dist/UI/Components/Charts/ChartLibrary/BarChart/BarChart.js +10 -6
  111. package/build/dist/UI/Components/Charts/ChartLibrary/BarChart/BarChart.js.map +1 -1
  112. package/build/dist/UI/Components/Charts/ChartLibrary/LineChart/LineChart.js +16 -8
  113. package/build/dist/UI/Components/Charts/ChartLibrary/LineChart/LineChart.js.map +1 -1
  114. package/build/dist/UI/Components/Charts/Line/LineChart.js +1 -1
  115. package/build/dist/UI/Components/ExpandableText/ExpandableText.js +10 -5
  116. package/build/dist/UI/Components/ExpandableText/ExpandableText.js.map +1 -1
  117. package/build/dist/UI/Components/JSONTable/JSONTable.js +8 -1
  118. package/build/dist/UI/Components/JSONTable/JSONTable.js.map +1 -1
  119. package/build/dist/UI/Components/LogsViewer/LogsViewer.js +1 -1
  120. package/build/dist/UI/Components/LogsViewer/LogsViewer.js.map +1 -1
  121. package/build/dist/UI/Components/LogsViewer/components/LogDetailsPanel.js +40 -14
  122. package/build/dist/UI/Components/LogsViewer/components/LogDetailsPanel.js.map +1 -1
  123. package/build/dist/UI/Components/LogsViewer/components/LogSearchBar.js +10 -4
  124. package/build/dist/UI/Components/LogsViewer/components/LogSearchBar.js.map +1 -1
  125. package/build/dist/UI/Components/Navbar/NavBarMenu.js +15 -2
  126. package/build/dist/UI/Components/Navbar/NavBarMenu.js.map +1 -1
  127. package/build/dist/UI/Components/TelemetryViewer/components/TelemetrySearchBar.js +10 -3
  128. package/build/dist/UI/Components/TelemetryViewer/components/TelemetrySearchBar.js.map +1 -1
  129. package/build/dist/Utils/ValueFormatter.js +47 -3
  130. package/build/dist/Utils/ValueFormatter.js.map +1 -1
  131. package/package.json +1 -1
@@ -0,0 +1,1015 @@
1
+ import DockerHost from "./DockerHost";
2
+ import KubernetesCluster from "./KubernetesCluster";
3
+ import Label from "./Label";
4
+ import Project from "./Project";
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 AccessControlColumn from "../../Types/Database/AccessControlColumn";
11
+ import ColumnLength from "../../Types/Database/ColumnLength";
12
+ import ColumnType from "../../Types/Database/ColumnType";
13
+ import CrudApiEndpoint from "../../Types/Database/CrudApiEndpoint";
14
+ import EnableDocumentation from "../../Types/Database/EnableDocumentation";
15
+ import SlugifyColumn from "../../Types/Database/SlugifyColumn";
16
+ import TableColumn from "../../Types/Database/TableColumn";
17
+ import TableColumnType from "../../Types/Database/TableColumnType";
18
+ import TableMetadata from "../../Types/Database/TableMetadata";
19
+ import TenantColumn from "../../Types/Database/TenantColumn";
20
+ import UniqueColumnBy from "../../Types/Database/UniqueColumnBy";
21
+ import IconProp from "../../Types/Icon/IconProp";
22
+ import ObjectID from "../../Types/ObjectID";
23
+ import Permission from "../../Types/Permission";
24
+ import {
25
+ Column,
26
+ Entity,
27
+ Index,
28
+ JoinColumn,
29
+ JoinTable,
30
+ ManyToMany,
31
+ ManyToOne,
32
+ } from "typeorm";
33
+
34
+ @AccessControlColumn("labels")
35
+ @EnableDocumentation()
36
+ @TenantColumn("projectId")
37
+ @TableAccessControl({
38
+ create: [
39
+ Permission.ProjectOwner,
40
+ Permission.ProjectAdmin,
41
+ Permission.ProjectMember,
42
+ Permission.SettingsManager,
43
+ Permission.CreateHost,
44
+ ],
45
+ read: [
46
+ Permission.ProjectOwner,
47
+ Permission.ProjectAdmin,
48
+ Permission.ProjectMember,
49
+ Permission.Viewer,
50
+ Permission.SettingsManager,
51
+ Permission.ReadHost,
52
+ Permission.ReadAllProjectResources,
53
+ ],
54
+ delete: [
55
+ Permission.ProjectOwner,
56
+ Permission.ProjectAdmin,
57
+ Permission.ProjectMember,
58
+ Permission.SettingsManager,
59
+ Permission.DeleteHost,
60
+ ],
61
+ update: [
62
+ Permission.ProjectOwner,
63
+ Permission.ProjectAdmin,
64
+ Permission.ProjectMember,
65
+ Permission.SettingsManager,
66
+ Permission.EditHost,
67
+ ],
68
+ })
69
+ @CrudApiEndpoint(new Route("/host"))
70
+ @SlugifyColumn("name", "slug")
71
+ @TableMetadata({
72
+ tableName: "Host",
73
+ singularName: "Host",
74
+ pluralName: "Hosts",
75
+ icon: IconProp.Server,
76
+ tableDescription:
77
+ "Hosts that are being monitored in this project. Each host is auto-discovered when an OTel Collector reports the host.name resource attribute, or can be manually registered.",
78
+ })
79
+ @Entity({
80
+ name: "Host",
81
+ })
82
+ export default class Host extends BaseModel {
83
+ @ColumnAccessControl({
84
+ create: [
85
+ Permission.ProjectOwner,
86
+ Permission.ProjectAdmin,
87
+ Permission.ProjectMember,
88
+ Permission.SettingsManager,
89
+ Permission.CreateHost,
90
+ ],
91
+ read: [
92
+ Permission.ProjectOwner,
93
+ Permission.ProjectAdmin,
94
+ Permission.ProjectMember,
95
+ Permission.Viewer,
96
+ Permission.SettingsManager,
97
+ Permission.ReadHost,
98
+ Permission.ReadAllProjectResources,
99
+ ],
100
+ update: [],
101
+ })
102
+ @TableColumn({
103
+ manyToOneRelationColumn: "projectId",
104
+ type: TableColumnType.Entity,
105
+ modelType: Project,
106
+ title: "Project",
107
+ description: "Relation to Project Resource in which this object belongs",
108
+ })
109
+ @ManyToOne(
110
+ () => {
111
+ return Project;
112
+ },
113
+ {
114
+ eager: false,
115
+ nullable: true,
116
+ onDelete: "CASCADE",
117
+ orphanedRowAction: "nullify",
118
+ },
119
+ )
120
+ @JoinColumn({ name: "projectId" })
121
+ public project?: Project = undefined;
122
+
123
+ @ColumnAccessControl({
124
+ create: [
125
+ Permission.ProjectOwner,
126
+ Permission.ProjectAdmin,
127
+ Permission.ProjectMember,
128
+ Permission.SettingsManager,
129
+ Permission.CreateHost,
130
+ ],
131
+ read: [
132
+ Permission.ProjectOwner,
133
+ Permission.ProjectAdmin,
134
+ Permission.ProjectMember,
135
+ Permission.Viewer,
136
+ Permission.SettingsManager,
137
+ Permission.ReadHost,
138
+ Permission.ReadAllProjectResources,
139
+ ],
140
+ update: [],
141
+ })
142
+ @Index()
143
+ @TableColumn({
144
+ type: TableColumnType.ObjectID,
145
+ required: true,
146
+ canReadOnRelationQuery: true,
147
+ title: "Project ID",
148
+ description: "ID of your OneUptime Project in which this object belongs",
149
+ })
150
+ @Column({
151
+ type: ColumnType.ObjectID,
152
+ nullable: false,
153
+ transformer: ObjectID.getDatabaseTransformer(),
154
+ })
155
+ public projectId?: ObjectID = undefined;
156
+
157
+ @ColumnAccessControl({
158
+ create: [
159
+ Permission.ProjectOwner,
160
+ Permission.ProjectAdmin,
161
+ Permission.ProjectMember,
162
+ Permission.SettingsManager,
163
+ Permission.CreateHost,
164
+ ],
165
+ read: [
166
+ Permission.ProjectOwner,
167
+ Permission.ProjectAdmin,
168
+ Permission.ProjectMember,
169
+ Permission.Viewer,
170
+ Permission.SettingsManager,
171
+ Permission.ReadHost,
172
+ Permission.ReadAllProjectResources,
173
+ ],
174
+ update: [
175
+ Permission.ProjectOwner,
176
+ Permission.ProjectAdmin,
177
+ Permission.ProjectMember,
178
+ Permission.SettingsManager,
179
+ Permission.EditHost,
180
+ ],
181
+ })
182
+ @TableColumn({
183
+ required: true,
184
+ type: TableColumnType.ShortText,
185
+ canReadOnRelationQuery: true,
186
+ title: "Name",
187
+ description: "Friendly name for this host",
188
+ example: "production-host-1",
189
+ })
190
+ @Column({
191
+ nullable: false,
192
+ type: ColumnType.ShortText,
193
+ length: ColumnLength.ShortText,
194
+ })
195
+ @UniqueColumnBy("projectId")
196
+ public name?: string = undefined;
197
+
198
+ @ColumnAccessControl({
199
+ create: [],
200
+ read: [
201
+ Permission.ProjectOwner,
202
+ Permission.ProjectAdmin,
203
+ Permission.ProjectMember,
204
+ Permission.Viewer,
205
+ Permission.SettingsManager,
206
+ Permission.ReadHost,
207
+ Permission.ReadAllProjectResources,
208
+ ],
209
+ update: [],
210
+ })
211
+ @TableColumn({
212
+ required: true,
213
+ unique: true,
214
+ type: TableColumnType.Slug,
215
+ computed: true,
216
+ title: "Slug",
217
+ description: "Friendly globally unique name for your object",
218
+ })
219
+ @Column({
220
+ nullable: false,
221
+ type: ColumnType.Slug,
222
+ length: ColumnLength.Slug,
223
+ })
224
+ public slug?: string = undefined;
225
+
226
+ @ColumnAccessControl({
227
+ create: [
228
+ Permission.ProjectOwner,
229
+ Permission.ProjectAdmin,
230
+ Permission.ProjectMember,
231
+ Permission.SettingsManager,
232
+ Permission.CreateHost,
233
+ ],
234
+ read: [
235
+ Permission.ProjectOwner,
236
+ Permission.ProjectAdmin,
237
+ Permission.ProjectMember,
238
+ Permission.Viewer,
239
+ Permission.SettingsManager,
240
+ Permission.ReadHost,
241
+ Permission.ReadAllProjectResources,
242
+ ],
243
+ update: [
244
+ Permission.ProjectOwner,
245
+ Permission.ProjectAdmin,
246
+ Permission.ProjectMember,
247
+ Permission.SettingsManager,
248
+ Permission.EditHost,
249
+ ],
250
+ })
251
+ @TableColumn({
252
+ required: false,
253
+ type: TableColumnType.LongText,
254
+ canReadOnRelationQuery: true,
255
+ title: "Description",
256
+ description: "Friendly description for this host",
257
+ example: "Production host running in US East region",
258
+ })
259
+ @Column({
260
+ nullable: true,
261
+ type: ColumnType.LongText,
262
+ length: ColumnLength.LongText,
263
+ })
264
+ public description?: string = undefined;
265
+
266
+ @ColumnAccessControl({
267
+ create: [
268
+ Permission.ProjectOwner,
269
+ Permission.ProjectAdmin,
270
+ Permission.ProjectMember,
271
+ Permission.SettingsManager,
272
+ Permission.CreateHost,
273
+ ],
274
+ read: [
275
+ Permission.ProjectOwner,
276
+ Permission.ProjectAdmin,
277
+ Permission.ProjectMember,
278
+ Permission.Viewer,
279
+ Permission.SettingsManager,
280
+ Permission.ReadHost,
281
+ Permission.ReadAllProjectResources,
282
+ ],
283
+ update: [
284
+ Permission.ProjectOwner,
285
+ Permission.ProjectAdmin,
286
+ Permission.ProjectMember,
287
+ Permission.SettingsManager,
288
+ Permission.EditHost,
289
+ ],
290
+ })
291
+ @Index()
292
+ @TableColumn({
293
+ required: true,
294
+ type: TableColumnType.ShortText,
295
+ canReadOnRelationQuery: true,
296
+ title: "Host Identifier",
297
+ description:
298
+ "Unique identifier for this host, sourced from the host.name OTel resource attribute",
299
+ example: "host-prod-1",
300
+ })
301
+ @Column({
302
+ nullable: false,
303
+ type: ColumnType.ShortText,
304
+ length: ColumnLength.ShortText,
305
+ })
306
+ @UniqueColumnBy("projectId")
307
+ public hostIdentifier?: string = undefined;
308
+
309
+ @ColumnAccessControl({
310
+ create: [],
311
+ read: [
312
+ Permission.ProjectOwner,
313
+ Permission.ProjectAdmin,
314
+ Permission.ProjectMember,
315
+ Permission.Viewer,
316
+ Permission.SettingsManager,
317
+ Permission.ReadHost,
318
+ Permission.ReadAllProjectResources,
319
+ ],
320
+ update: [
321
+ Permission.ProjectOwner,
322
+ Permission.ProjectAdmin,
323
+ Permission.EditHost,
324
+ ],
325
+ })
326
+ @TableColumn({
327
+ required: false,
328
+ type: TableColumnType.ShortText,
329
+ canReadOnRelationQuery: true,
330
+ title: "OTel Collector Status",
331
+ description:
332
+ "Connection status of the OTel Collector reporting on this host (connected or disconnected)",
333
+ example: "connected",
334
+ })
335
+ @Column({
336
+ nullable: true,
337
+ type: ColumnType.ShortText,
338
+ length: ColumnLength.ShortText,
339
+ default: "disconnected",
340
+ })
341
+ public otelCollectorStatus?: string = undefined;
342
+
343
+ @ColumnAccessControl({
344
+ create: [],
345
+ read: [
346
+ Permission.ProjectOwner,
347
+ Permission.ProjectAdmin,
348
+ Permission.ProjectMember,
349
+ Permission.Viewer,
350
+ Permission.SettingsManager,
351
+ Permission.ReadHost,
352
+ Permission.ReadAllProjectResources,
353
+ ],
354
+ update: [
355
+ Permission.ProjectOwner,
356
+ Permission.ProjectAdmin,
357
+ Permission.EditHost,
358
+ ],
359
+ })
360
+ @TableColumn({
361
+ required: false,
362
+ type: TableColumnType.Date,
363
+ canReadOnRelationQuery: true,
364
+ title: "Last Seen At",
365
+ description: "When telemetry was last received from this host",
366
+ })
367
+ @Column({
368
+ nullable: true,
369
+ type: ColumnType.Date,
370
+ })
371
+ public lastSeenAt?: Date = undefined;
372
+
373
+ @ColumnAccessControl({
374
+ create: [],
375
+ read: [
376
+ Permission.ProjectOwner,
377
+ Permission.ProjectAdmin,
378
+ Permission.ProjectMember,
379
+ Permission.Viewer,
380
+ Permission.SettingsManager,
381
+ Permission.ReadHost,
382
+ Permission.ReadAllProjectResources,
383
+ ],
384
+ update: [
385
+ Permission.ProjectOwner,
386
+ Permission.ProjectAdmin,
387
+ Permission.EditHost,
388
+ ],
389
+ })
390
+ @TableColumn({
391
+ required: false,
392
+ type: TableColumnType.ShortText,
393
+ canReadOnRelationQuery: true,
394
+ title: "OS Type",
395
+ description: "Operating system type of the host",
396
+ example: "linux",
397
+ })
398
+ @Column({
399
+ nullable: true,
400
+ type: ColumnType.ShortText,
401
+ length: ColumnLength.ShortText,
402
+ })
403
+ public osType?: string = undefined;
404
+
405
+ @ColumnAccessControl({
406
+ create: [],
407
+ read: [
408
+ Permission.ProjectOwner,
409
+ Permission.ProjectAdmin,
410
+ Permission.ProjectMember,
411
+ Permission.Viewer,
412
+ Permission.SettingsManager,
413
+ Permission.ReadHost,
414
+ Permission.ReadAllProjectResources,
415
+ ],
416
+ update: [
417
+ Permission.ProjectOwner,
418
+ Permission.ProjectAdmin,
419
+ Permission.EditHost,
420
+ ],
421
+ })
422
+ @TableColumn({
423
+ required: false,
424
+ type: TableColumnType.LongText,
425
+ canReadOnRelationQuery: true,
426
+ title: "OS Version",
427
+ description: "Operating system version of the host",
428
+ example: "Ubuntu 22.04",
429
+ })
430
+ @Column({
431
+ nullable: true,
432
+ type: ColumnType.LongText,
433
+ length: ColumnLength.LongText,
434
+ })
435
+ public osVersion?: string = undefined;
436
+
437
+ @ColumnAccessControl({
438
+ create: [],
439
+ read: [
440
+ Permission.ProjectOwner,
441
+ Permission.ProjectAdmin,
442
+ Permission.ProjectMember,
443
+ Permission.Viewer,
444
+ Permission.SettingsManager,
445
+ Permission.ReadHost,
446
+ Permission.ReadAllProjectResources,
447
+ ],
448
+ update: [
449
+ Permission.ProjectOwner,
450
+ Permission.ProjectAdmin,
451
+ Permission.EditHost,
452
+ ],
453
+ })
454
+ @TableColumn({
455
+ required: false,
456
+ type: TableColumnType.ShortText,
457
+ canReadOnRelationQuery: true,
458
+ title: "Host ID",
459
+ description:
460
+ "Stable host identifier reported by the OTel host.id resource attribute",
461
+ example: "ec2-instance-id-or-machine-id",
462
+ })
463
+ @Column({
464
+ nullable: true,
465
+ type: ColumnType.ShortText,
466
+ length: ColumnLength.ShortText,
467
+ })
468
+ public hostId?: string = undefined;
469
+
470
+ @ColumnAccessControl({
471
+ create: [],
472
+ read: [
473
+ Permission.ProjectOwner,
474
+ Permission.ProjectAdmin,
475
+ Permission.ProjectMember,
476
+ Permission.Viewer,
477
+ Permission.SettingsManager,
478
+ Permission.ReadHost,
479
+ Permission.ReadAllProjectResources,
480
+ ],
481
+ update: [
482
+ Permission.ProjectOwner,
483
+ Permission.ProjectAdmin,
484
+ Permission.EditHost,
485
+ ],
486
+ })
487
+ @TableColumn({
488
+ required: false,
489
+ type: TableColumnType.ShortText,
490
+ canReadOnRelationQuery: true,
491
+ title: "Host Architecture",
492
+ description: "CPU architecture from the OTel host.arch resource attribute",
493
+ example: "amd64",
494
+ })
495
+ @Column({
496
+ nullable: true,
497
+ type: ColumnType.ShortText,
498
+ length: ColumnLength.ShortText,
499
+ })
500
+ public hostArch?: string = undefined;
501
+
502
+ @ColumnAccessControl({
503
+ create: [],
504
+ read: [
505
+ Permission.ProjectOwner,
506
+ Permission.ProjectAdmin,
507
+ Permission.ProjectMember,
508
+ Permission.Viewer,
509
+ Permission.SettingsManager,
510
+ Permission.ReadHost,
511
+ Permission.ReadAllProjectResources,
512
+ ],
513
+ update: [
514
+ Permission.ProjectOwner,
515
+ Permission.ProjectAdmin,
516
+ Permission.EditHost,
517
+ ],
518
+ })
519
+ @TableColumn({
520
+ required: false,
521
+ type: TableColumnType.ShortText,
522
+ canReadOnRelationQuery: true,
523
+ title: "Host Type",
524
+ description:
525
+ "Cloud-instance class reported by the OTel host.type resource attribute",
526
+ example: "t3.medium",
527
+ })
528
+ @Column({
529
+ nullable: true,
530
+ type: ColumnType.ShortText,
531
+ length: ColumnLength.ShortText,
532
+ })
533
+ public hostType?: string = undefined;
534
+
535
+ @ColumnAccessControl({
536
+ create: [],
537
+ read: [
538
+ Permission.ProjectOwner,
539
+ Permission.ProjectAdmin,
540
+ Permission.ProjectMember,
541
+ Permission.Viewer,
542
+ Permission.SettingsManager,
543
+ Permission.ReadHost,
544
+ Permission.ReadAllProjectResources,
545
+ ],
546
+ update: [
547
+ Permission.ProjectOwner,
548
+ Permission.ProjectAdmin,
549
+ Permission.EditHost,
550
+ ],
551
+ })
552
+ @TableColumn({
553
+ required: false,
554
+ type: TableColumnType.LongText,
555
+ canReadOnRelationQuery: true,
556
+ title: "Host IP Addresses",
557
+ description:
558
+ "Comma-separated list of IP addresses reported by the OTel host.ip resource attribute. The first non-loopback IPv4 is used for display.",
559
+ example: "192.168.1.42, 10.0.0.5",
560
+ })
561
+ @Column({
562
+ nullable: true,
563
+ type: ColumnType.LongText,
564
+ length: ColumnLength.LongText,
565
+ })
566
+ public hostIpAddresses?: string = undefined;
567
+
568
+ @ColumnAccessControl({
569
+ create: [],
570
+ read: [
571
+ Permission.ProjectOwner,
572
+ Permission.ProjectAdmin,
573
+ Permission.ProjectMember,
574
+ Permission.Viewer,
575
+ Permission.SettingsManager,
576
+ Permission.ReadHost,
577
+ Permission.ReadAllProjectResources,
578
+ ],
579
+ update: [
580
+ Permission.ProjectOwner,
581
+ Permission.ProjectAdmin,
582
+ Permission.EditHost,
583
+ ],
584
+ })
585
+ @TableColumn({
586
+ required: false,
587
+ type: TableColumnType.Number,
588
+ canReadOnRelationQuery: true,
589
+ title: "CPU Cores",
590
+ description:
591
+ "Logical CPU core count, sourced from system.cpu.logical.count metric",
592
+ })
593
+ @Column({
594
+ type: ColumnType.Number,
595
+ nullable: true,
596
+ })
597
+ public cpuCores?: number = undefined;
598
+
599
+ @ColumnAccessControl({
600
+ create: [],
601
+ read: [
602
+ Permission.ProjectOwner,
603
+ Permission.ProjectAdmin,
604
+ Permission.ProjectMember,
605
+ Permission.Viewer,
606
+ Permission.SettingsManager,
607
+ Permission.ReadHost,
608
+ Permission.ReadAllProjectResources,
609
+ ],
610
+ update: [
611
+ Permission.ProjectOwner,
612
+ Permission.ProjectAdmin,
613
+ Permission.EditHost,
614
+ ],
615
+ })
616
+ @TableColumn({
617
+ required: false,
618
+ type: TableColumnType.BigNumber,
619
+ canReadOnRelationQuery: true,
620
+ title: "Total Memory (Bytes)",
621
+ description:
622
+ "Total physical memory in bytes, sourced from system.memory.usage metric (sum of all states).",
623
+ })
624
+ @Column({
625
+ type: ColumnType.BigNumber,
626
+ nullable: true,
627
+ transformer: {
628
+ to: (value: number | undefined): string | undefined => {
629
+ if (value === undefined || value === null) {
630
+ return undefined;
631
+ }
632
+ return value.toString();
633
+ },
634
+ from: (value: string | undefined): number | undefined => {
635
+ if (value === undefined || value === null) {
636
+ return undefined;
637
+ }
638
+ return Number(value);
639
+ },
640
+ },
641
+ })
642
+ public totalMemoryBytes?: number = undefined;
643
+
644
+ @ColumnAccessControl({
645
+ create: [],
646
+ read: [
647
+ Permission.ProjectOwner,
648
+ Permission.ProjectAdmin,
649
+ Permission.ProjectMember,
650
+ Permission.Viewer,
651
+ Permission.SettingsManager,
652
+ Permission.ReadHost,
653
+ Permission.ReadAllProjectResources,
654
+ ],
655
+ update: [
656
+ Permission.ProjectOwner,
657
+ Permission.ProjectAdmin,
658
+ Permission.EditHost,
659
+ ],
660
+ })
661
+ @TableColumn({
662
+ required: false,
663
+ type: TableColumnType.Number,
664
+ canReadOnRelationQuery: true,
665
+ title: "Process Count",
666
+ description: "Most recent process count from system.processes.count metric",
667
+ })
668
+ @Column({
669
+ type: ColumnType.Number,
670
+ nullable: true,
671
+ })
672
+ public processCount?: number = undefined;
673
+
674
+ @ColumnAccessControl({
675
+ create: [],
676
+ read: [
677
+ Permission.ProjectOwner,
678
+ Permission.ProjectAdmin,
679
+ Permission.ProjectMember,
680
+ Permission.Viewer,
681
+ Permission.SettingsManager,
682
+ Permission.ReadHost,
683
+ Permission.ReadAllProjectResources,
684
+ ],
685
+ update: [
686
+ Permission.ProjectOwner,
687
+ Permission.ProjectAdmin,
688
+ Permission.EditHost,
689
+ ],
690
+ })
691
+ @TableColumn({
692
+ required: false,
693
+ type: TableColumnType.ShortText,
694
+ canReadOnRelationQuery: true,
695
+ title: "Container Runtime",
696
+ description:
697
+ "Container runtime detected on this host, if any (e.g. docker, containerd)",
698
+ example: "docker",
699
+ })
700
+ @Column({
701
+ nullable: true,
702
+ type: ColumnType.ShortText,
703
+ length: ColumnLength.ShortText,
704
+ })
705
+ public containerRuntime?: string = undefined;
706
+
707
+ @ColumnAccessControl({
708
+ create: [],
709
+ read: [
710
+ Permission.ProjectOwner,
711
+ Permission.ProjectAdmin,
712
+ Permission.ProjectMember,
713
+ Permission.Viewer,
714
+ Permission.SettingsManager,
715
+ Permission.ReadHost,
716
+ Permission.ReadAllProjectResources,
717
+ ],
718
+ update: [],
719
+ })
720
+ @TableColumn({
721
+ manyToOneRelationColumn: "dockerHostId",
722
+ type: TableColumnType.Entity,
723
+ modelType: DockerHost,
724
+ title: "Docker Host",
725
+ description:
726
+ "Optional link to the DockerHost record for this same host when it is also running the Docker runtime",
727
+ })
728
+ @ManyToOne(
729
+ () => {
730
+ return DockerHost;
731
+ },
732
+ {
733
+ eager: false,
734
+ nullable: true,
735
+ onDelete: "SET NULL",
736
+ orphanedRowAction: "nullify",
737
+ },
738
+ )
739
+ @JoinColumn({ name: "dockerHostId" })
740
+ public dockerHost?: DockerHost = undefined;
741
+
742
+ @ColumnAccessControl({
743
+ create: [],
744
+ read: [
745
+ Permission.ProjectOwner,
746
+ Permission.ProjectAdmin,
747
+ Permission.ProjectMember,
748
+ Permission.Viewer,
749
+ Permission.SettingsManager,
750
+ Permission.ReadHost,
751
+ Permission.ReadAllProjectResources,
752
+ ],
753
+ update: [],
754
+ })
755
+ @TableColumn({
756
+ type: TableColumnType.ObjectID,
757
+ title: "Docker Host ID",
758
+ description:
759
+ "Optional FK to the DockerHost record for this same host when it is also running the Docker runtime",
760
+ })
761
+ @Column({
762
+ type: ColumnType.ObjectID,
763
+ nullable: true,
764
+ transformer: ObjectID.getDatabaseTransformer(),
765
+ })
766
+ public dockerHostId?: ObjectID = undefined;
767
+
768
+ @ColumnAccessControl({
769
+ create: [],
770
+ read: [
771
+ Permission.ProjectOwner,
772
+ Permission.ProjectAdmin,
773
+ Permission.ProjectMember,
774
+ Permission.Viewer,
775
+ Permission.SettingsManager,
776
+ Permission.ReadHost,
777
+ Permission.ReadAllProjectResources,
778
+ ],
779
+ update: [],
780
+ })
781
+ @TableColumn({
782
+ manyToOneRelationColumn: "kubernetesClusterId",
783
+ type: TableColumnType.Entity,
784
+ modelType: KubernetesCluster,
785
+ title: "Kubernetes Cluster",
786
+ description:
787
+ "Optional link to the KubernetesCluster this host belongs to (typically a node) when k8s.cluster.name is reported",
788
+ })
789
+ @ManyToOne(
790
+ () => {
791
+ return KubernetesCluster;
792
+ },
793
+ {
794
+ eager: false,
795
+ nullable: true,
796
+ onDelete: "SET NULL",
797
+ orphanedRowAction: "nullify",
798
+ },
799
+ )
800
+ @JoinColumn({ name: "kubernetesClusterId" })
801
+ public kubernetesCluster?: KubernetesCluster = undefined;
802
+
803
+ @ColumnAccessControl({
804
+ create: [],
805
+ read: [
806
+ Permission.ProjectOwner,
807
+ Permission.ProjectAdmin,
808
+ Permission.ProjectMember,
809
+ Permission.Viewer,
810
+ Permission.SettingsManager,
811
+ Permission.ReadHost,
812
+ Permission.ReadAllProjectResources,
813
+ ],
814
+ update: [],
815
+ })
816
+ @TableColumn({
817
+ type: TableColumnType.ObjectID,
818
+ title: "Kubernetes Cluster ID",
819
+ description:
820
+ "Optional FK to the KubernetesCluster this host belongs to when k8s.cluster.name is reported",
821
+ })
822
+ @Column({
823
+ type: ColumnType.ObjectID,
824
+ nullable: true,
825
+ transformer: ObjectID.getDatabaseTransformer(),
826
+ })
827
+ public kubernetesClusterId?: ObjectID = undefined;
828
+
829
+ @ColumnAccessControl({
830
+ create: [
831
+ Permission.ProjectOwner,
832
+ Permission.ProjectAdmin,
833
+ Permission.ProjectMember,
834
+ Permission.SettingsManager,
835
+ Permission.CreateHost,
836
+ ],
837
+ read: [
838
+ Permission.ProjectOwner,
839
+ Permission.ProjectAdmin,
840
+ Permission.ProjectMember,
841
+ Permission.Viewer,
842
+ Permission.SettingsManager,
843
+ Permission.ReadHost,
844
+ Permission.ReadAllProjectResources,
845
+ ],
846
+ update: [],
847
+ })
848
+ @TableColumn({
849
+ manyToOneRelationColumn: "createdByUserId",
850
+ type: TableColumnType.Entity,
851
+ modelType: User,
852
+ title: "Created by User",
853
+ description:
854
+ "Relation to User who created this object (if this object was created by a User)",
855
+ })
856
+ @ManyToOne(
857
+ () => {
858
+ return User;
859
+ },
860
+ {
861
+ eager: false,
862
+ nullable: true,
863
+ onDelete: "SET NULL",
864
+ orphanedRowAction: "nullify",
865
+ },
866
+ )
867
+ @JoinColumn({ name: "createdByUserId" })
868
+ public createdByUser?: User = undefined;
869
+
870
+ @ColumnAccessControl({
871
+ create: [
872
+ Permission.ProjectOwner,
873
+ Permission.ProjectAdmin,
874
+ Permission.ProjectMember,
875
+ Permission.SettingsManager,
876
+ Permission.CreateHost,
877
+ ],
878
+ read: [
879
+ Permission.ProjectOwner,
880
+ Permission.ProjectAdmin,
881
+ Permission.ProjectMember,
882
+ Permission.Viewer,
883
+ Permission.SettingsManager,
884
+ Permission.ReadHost,
885
+ Permission.ReadAllProjectResources,
886
+ ],
887
+ update: [],
888
+ })
889
+ @TableColumn({
890
+ type: TableColumnType.ObjectID,
891
+ title: "Created by User ID",
892
+ description:
893
+ "User ID who created this object (if this object was created by a User)",
894
+ })
895
+ @Column({
896
+ type: ColumnType.ObjectID,
897
+ nullable: true,
898
+ transformer: ObjectID.getDatabaseTransformer(),
899
+ })
900
+ public createdByUserId?: ObjectID = undefined;
901
+
902
+ @ColumnAccessControl({
903
+ create: [],
904
+ read: [
905
+ Permission.ProjectOwner,
906
+ Permission.ProjectAdmin,
907
+ Permission.ProjectMember,
908
+ Permission.Viewer,
909
+ Permission.SettingsManager,
910
+ Permission.ReadHost,
911
+ Permission.ReadAllProjectResources,
912
+ ],
913
+ update: [],
914
+ })
915
+ @TableColumn({
916
+ manyToOneRelationColumn: "deletedByUserId",
917
+ type: TableColumnType.Entity,
918
+ title: "Deleted by User",
919
+ modelType: User,
920
+ description:
921
+ "Relation to User who deleted this object (if this object was deleted by a User)",
922
+ })
923
+ @ManyToOne(
924
+ () => {
925
+ return User;
926
+ },
927
+ {
928
+ cascade: false,
929
+ eager: false,
930
+ nullable: true,
931
+ onDelete: "SET NULL",
932
+ orphanedRowAction: "nullify",
933
+ },
934
+ )
935
+ @JoinColumn({ name: "deletedByUserId" })
936
+ public deletedByUser?: User = undefined;
937
+
938
+ @ColumnAccessControl({
939
+ create: [],
940
+ read: [
941
+ Permission.ProjectOwner,
942
+ Permission.ProjectAdmin,
943
+ Permission.ProjectMember,
944
+ Permission.Viewer,
945
+ Permission.SettingsManager,
946
+ Permission.ReadHost,
947
+ Permission.ReadAllProjectResources,
948
+ ],
949
+ update: [],
950
+ })
951
+ @TableColumn({
952
+ type: TableColumnType.ObjectID,
953
+ title: "Deleted by User ID",
954
+ description:
955
+ "User ID who deleted this object (if this object was deleted by a User)",
956
+ })
957
+ @Column({
958
+ type: ColumnType.ObjectID,
959
+ nullable: true,
960
+ transformer: ObjectID.getDatabaseTransformer(),
961
+ })
962
+ public deletedByUserId?: ObjectID = undefined;
963
+
964
+ @ColumnAccessControl({
965
+ create: [
966
+ Permission.ProjectOwner,
967
+ Permission.ProjectAdmin,
968
+ Permission.ProjectMember,
969
+ Permission.SettingsManager,
970
+ Permission.CreateHost,
971
+ ],
972
+ read: [
973
+ Permission.ProjectOwner,
974
+ Permission.ProjectAdmin,
975
+ Permission.ProjectMember,
976
+ Permission.Viewer,
977
+ Permission.SettingsManager,
978
+ Permission.ReadHost,
979
+ Permission.ReadAllProjectResources,
980
+ ],
981
+ update: [
982
+ Permission.ProjectOwner,
983
+ Permission.ProjectAdmin,
984
+ Permission.ProjectMember,
985
+ Permission.SettingsManager,
986
+ Permission.EditHost,
987
+ ],
988
+ })
989
+ @TableColumn({
990
+ required: false,
991
+ type: TableColumnType.EntityArray,
992
+ modelType: Label,
993
+ title: "Labels",
994
+ description:
995
+ "Relation to Labels Array where this object is categorized in.",
996
+ })
997
+ @ManyToMany(
998
+ () => {
999
+ return Label;
1000
+ },
1001
+ { eager: false },
1002
+ )
1003
+ @JoinTable({
1004
+ name: "HostLabel",
1005
+ inverseJoinColumn: {
1006
+ name: "labelId",
1007
+ referencedColumnName: "_id",
1008
+ },
1009
+ joinColumn: {
1010
+ name: "hostId",
1011
+ referencedColumnName: "_id",
1012
+ },
1013
+ })
1014
+ public labels?: Array<Label> = undefined;
1015
+ }