@oneuptime/common 10.0.65 → 10.0.66

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 (210) hide show
  1. package/Models/DatabaseModels/DockerHostOwnerTeam.ts +464 -0
  2. package/Models/DatabaseModels/DockerHostOwnerUser.ts +463 -0
  3. package/Models/DatabaseModels/Index.ts +24 -0
  4. package/Models/DatabaseModels/KubernetesClusterOwnerTeam.ts +464 -0
  5. package/Models/DatabaseModels/KubernetesClusterOwnerUser.ts +463 -0
  6. package/Models/DatabaseModels/KubernetesResource.ts +548 -0
  7. package/Models/DatabaseModels/MetricPipelineRule.ts +804 -0
  8. package/Models/DatabaseModels/MetricRecordingRule.ts +470 -0
  9. package/Models/DatabaseModels/Monitor.ts +2 -0
  10. package/Models/DatabaseModels/Project.ts +53 -0
  11. package/Models/DatabaseModels/Service.ts +79 -0
  12. package/Models/DatabaseModels/TraceDropFilter.ts +508 -0
  13. package/Models/DatabaseModels/TracePipeline.ts +436 -0
  14. package/Models/DatabaseModels/TracePipelineProcessor.ts +454 -0
  15. package/Models/DatabaseModels/TraceRecordingRule.ts +470 -0
  16. package/Models/DatabaseModels/TraceScrubRule.ts +546 -0
  17. package/Server/API/KubernetesResourceAPI.ts +129 -0
  18. package/Server/Infrastructure/Postgres/SchemaMigrations/1776504277320-MigrationName.ts +399 -0
  19. package/Server/Infrastructure/Postgres/SchemaMigrations/1776505976155-AddTracePipelineTables.ts +205 -0
  20. package/Server/Infrastructure/Postgres/SchemaMigrations/1776509413763-MigrationName.ts +335 -0
  21. package/Server/Infrastructure/Postgres/SchemaMigrations/1776541018853-MigrationName.ts +29 -0
  22. package/Server/Infrastructure/Postgres/SchemaMigrations/1776544084793-MigrationName.ts +53 -0
  23. package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +10 -1
  24. package/Server/Services/DockerHostOwnerTeamService.ts +10 -0
  25. package/Server/Services/DockerHostOwnerUserService.ts +10 -0
  26. package/Server/Services/KubernetesClusterOwnerTeamService.ts +10 -0
  27. package/Server/Services/KubernetesClusterOwnerUserService.ts +10 -0
  28. package/Server/Services/KubernetesResourceService.ts +351 -0
  29. package/Server/Services/MetricPipelineRuleService.ts +10 -0
  30. package/Server/Services/MetricRecordingRuleService.ts +10 -0
  31. package/Server/Services/TraceDropFilterService.ts +10 -0
  32. package/Server/Services/TracePipelineProcessorService.ts +10 -0
  33. package/Server/Services/TracePipelineService.ts +10 -0
  34. package/Server/Services/TraceRecordingRuleService.ts +10 -0
  35. package/Server/Services/TraceScrubRuleService.ts +10 -0
  36. package/Server/Utils/Monitor/Criteria/CompareCriteria.ts +71 -9
  37. package/Server/Utils/Monitor/Criteria/MetricMonitorCriteria.ts +483 -75
  38. package/Server/Utils/Monitor/MonitorCriteriaEvaluator.ts +379 -6
  39. package/Tests/Server/Utils/Monitor/Criteria/MetricMonitorCriteria.test.ts +502 -0
  40. package/Tests/Utils/MetricUnitUtil.test.ts +216 -0
  41. package/Tests/Utils/Metrics/MetricFormulaEvaluator.test.ts +269 -0
  42. package/Tests/Utils/Metrics/MetricResultUnitConverter.test.ts +231 -0
  43. package/Tests/Utils/RecordingRuleExpression.test.ts +177 -0
  44. package/Types/Kubernetes/KubernetesInventoryExtractor.ts +327 -0
  45. package/Types/Kubernetes/KubernetesObjectParser.ts +1949 -0
  46. package/Types/Metrics/MetricDownsamplingRetentionDays.ts +49 -0
  47. package/Types/Metrics/MetricFormulaConfigData.ts +4 -0
  48. package/Types/Metrics/MetricPipelineRuleFilterCondition.ts +136 -0
  49. package/Types/Metrics/MetricPipelineRuleType.ts +27 -0
  50. package/Types/Metrics/RecordingRuleDefinition.ts +180 -0
  51. package/Types/Monitor/CriteriaFilter.ts +43 -0
  52. package/Types/Monitor/MetricMonitor/MetricCriteriaContext.ts +70 -0
  53. package/Types/Permission.ts +520 -0
  54. package/Types/Trace/TraceAggregationType.ts +17 -0
  55. package/Types/Trace/TraceDropFilterAction.ts +6 -0
  56. package/Types/Trace/TracePipelineProcessorType.ts +56 -0
  57. package/Types/Trace/TraceRecordingRuleDefinition.ts +218 -0
  58. package/Types/Trace/TraceScrubAction.ts +7 -0
  59. package/Types/Trace/TraceScrubField.ts +8 -0
  60. package/Types/Trace/TraceScrubPatternType.ts +10 -0
  61. package/UI/Components/CardSelect/CardSelect.tsx +9 -1
  62. package/UI/Components/Charts/ChartGroup/ChartGroup.tsx +6 -10
  63. package/UI/Components/Forms/Fields/FormField.tsx +1 -0
  64. package/UI/Components/Forms/Types/Field.ts +1 -0
  65. package/UI/Components/Markdown.tsx/MarkdownViewer.tsx +57 -0
  66. package/UI/Components/Page/Page.tsx +6 -0
  67. package/Utils/MetricUnitUtil.ts +289 -0
  68. package/Utils/Metrics/MetricFormulaEvaluator.ts +610 -0
  69. package/Utils/Metrics/MetricResultUnitConverter.ts +91 -0
  70. package/Utils/Metrics/RecordingRuleExpression.ts +359 -0
  71. package/Utils/ValueFormatter.ts +137 -13
  72. package/build/dist/Models/DatabaseModels/DockerHostOwnerTeam.js +480 -0
  73. package/build/dist/Models/DatabaseModels/DockerHostOwnerTeam.js.map +1 -0
  74. package/build/dist/Models/DatabaseModels/DockerHostOwnerUser.js +479 -0
  75. package/build/dist/Models/DatabaseModels/DockerHostOwnerUser.js.map +1 -0
  76. package/build/dist/Models/DatabaseModels/Index.js +24 -0
  77. package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
  78. package/build/dist/Models/DatabaseModels/KubernetesClusterOwnerTeam.js +480 -0
  79. package/build/dist/Models/DatabaseModels/KubernetesClusterOwnerTeam.js.map +1 -0
  80. package/build/dist/Models/DatabaseModels/KubernetesClusterOwnerUser.js +479 -0
  81. package/build/dist/Models/DatabaseModels/KubernetesClusterOwnerUser.js.map +1 -0
  82. package/build/dist/Models/DatabaseModels/KubernetesResource.js +590 -0
  83. package/build/dist/Models/DatabaseModels/KubernetesResource.js.map +1 -0
  84. package/build/dist/Models/DatabaseModels/MetricPipelineRule.js +836 -0
  85. package/build/dist/Models/DatabaseModels/MetricPipelineRule.js.map +1 -0
  86. package/build/dist/Models/DatabaseModels/MetricRecordingRule.js +497 -0
  87. package/build/dist/Models/DatabaseModels/MetricRecordingRule.js.map +1 -0
  88. package/build/dist/Models/DatabaseModels/Monitor.js +2 -0
  89. package/build/dist/Models/DatabaseModels/Monitor.js.map +1 -1
  90. package/build/dist/Models/DatabaseModels/Project.js +53 -0
  91. package/build/dist/Models/DatabaseModels/Project.js.map +1 -1
  92. package/build/dist/Models/DatabaseModels/Service.js +79 -0
  93. package/build/dist/Models/DatabaseModels/Service.js.map +1 -1
  94. package/build/dist/Models/DatabaseModels/TraceDropFilter.js +536 -0
  95. package/build/dist/Models/DatabaseModels/TraceDropFilter.js.map +1 -0
  96. package/build/dist/Models/DatabaseModels/TracePipeline.js +462 -0
  97. package/build/dist/Models/DatabaseModels/TracePipeline.js.map +1 -0
  98. package/build/dist/Models/DatabaseModels/TracePipelineProcessor.js +476 -0
  99. package/build/dist/Models/DatabaseModels/TracePipelineProcessor.js.map +1 -0
  100. package/build/dist/Models/DatabaseModels/TraceRecordingRule.js +497 -0
  101. package/build/dist/Models/DatabaseModels/TraceRecordingRule.js.map +1 -0
  102. package/build/dist/Models/DatabaseModels/TraceScrubRule.js +575 -0
  103. package/build/dist/Models/DatabaseModels/TraceScrubRule.js.map +1 -0
  104. package/build/dist/Server/API/KubernetesResourceAPI.js +98 -0
  105. package/build/dist/Server/API/KubernetesResourceAPI.js.map +1 -0
  106. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1776504277320-MigrationName.js +144 -0
  107. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1776504277320-MigrationName.js.map +1 -0
  108. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1776505976155-AddTracePipelineTables.js +82 -0
  109. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1776505976155-AddTracePipelineTables.js.map +1 -0
  110. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1776509413763-MigrationName.js +118 -0
  111. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1776509413763-MigrationName.js.map +1 -0
  112. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1776541018853-MigrationName.js +16 -0
  113. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1776541018853-MigrationName.js.map +1 -0
  114. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1776544084793-MigrationName.js +24 -0
  115. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1776544084793-MigrationName.js.map +1 -0
  116. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +10 -0
  117. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
  118. package/build/dist/Server/Services/DockerHostOwnerTeamService.js +9 -0
  119. package/build/dist/Server/Services/DockerHostOwnerTeamService.js.map +1 -0
  120. package/build/dist/Server/Services/DockerHostOwnerUserService.js +9 -0
  121. package/build/dist/Server/Services/DockerHostOwnerUserService.js.map +1 -0
  122. package/build/dist/Server/Services/KubernetesClusterOwnerTeamService.js +9 -0
  123. package/build/dist/Server/Services/KubernetesClusterOwnerTeamService.js.map +1 -0
  124. package/build/dist/Server/Services/KubernetesClusterOwnerUserService.js +9 -0
  125. package/build/dist/Server/Services/KubernetesClusterOwnerUserService.js.map +1 -0
  126. package/build/dist/Server/Services/KubernetesResourceService.js +237 -0
  127. package/build/dist/Server/Services/KubernetesResourceService.js.map +1 -0
  128. package/build/dist/Server/Services/MetricPipelineRuleService.js +9 -0
  129. package/build/dist/Server/Services/MetricPipelineRuleService.js.map +1 -0
  130. package/build/dist/Server/Services/MetricRecordingRuleService.js +9 -0
  131. package/build/dist/Server/Services/MetricRecordingRuleService.js.map +1 -0
  132. package/build/dist/Server/Services/TraceDropFilterService.js +9 -0
  133. package/build/dist/Server/Services/TraceDropFilterService.js.map +1 -0
  134. package/build/dist/Server/Services/TracePipelineProcessorService.js +9 -0
  135. package/build/dist/Server/Services/TracePipelineProcessorService.js.map +1 -0
  136. package/build/dist/Server/Services/TracePipelineService.js +9 -0
  137. package/build/dist/Server/Services/TracePipelineService.js.map +1 -0
  138. package/build/dist/Server/Services/TraceRecordingRuleService.js +9 -0
  139. package/build/dist/Server/Services/TraceRecordingRuleService.js.map +1 -0
  140. package/build/dist/Server/Services/TraceScrubRuleService.js +9 -0
  141. package/build/dist/Server/Services/TraceScrubRuleService.js.map +1 -0
  142. package/build/dist/Server/Utils/Monitor/Criteria/CompareCriteria.js +56 -9
  143. package/build/dist/Server/Utils/Monitor/Criteria/CompareCriteria.js.map +1 -1
  144. package/build/dist/Server/Utils/Monitor/Criteria/MetricMonitorCriteria.js +335 -53
  145. package/build/dist/Server/Utils/Monitor/Criteria/MetricMonitorCriteria.js.map +1 -1
  146. package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js +277 -5
  147. package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js.map +1 -1
  148. package/build/dist/Tests/Server/Utils/Monitor/Criteria/MetricMonitorCriteria.test.js +407 -0
  149. package/build/dist/Tests/Server/Utils/Monitor/Criteria/MetricMonitorCriteria.test.js.map +1 -0
  150. package/build/dist/Tests/Utils/MetricUnitUtil.test.js +159 -0
  151. package/build/dist/Tests/Utils/MetricUnitUtil.test.js.map +1 -0
  152. package/build/dist/Tests/Utils/Metrics/MetricFormulaEvaluator.test.js +224 -0
  153. package/build/dist/Tests/Utils/Metrics/MetricFormulaEvaluator.test.js.map +1 -0
  154. package/build/dist/Tests/Utils/Metrics/MetricResultUnitConverter.test.js +180 -0
  155. package/build/dist/Tests/Utils/Metrics/MetricResultUnitConverter.test.js.map +1 -0
  156. package/build/dist/Tests/Utils/RecordingRuleExpression.test.js +142 -0
  157. package/build/dist/Tests/Utils/RecordingRuleExpression.test.js.map +1 -0
  158. package/build/dist/Types/Kubernetes/KubernetesInventoryExtractor.js +200 -0
  159. package/build/dist/Types/Kubernetes/KubernetesInventoryExtractor.js.map +1 -0
  160. package/build/dist/Types/Kubernetes/KubernetesObjectParser.js +1205 -0
  161. package/build/dist/Types/Kubernetes/KubernetesObjectParser.js.map +1 -0
  162. package/build/dist/Types/Metrics/MetricDownsamplingRetentionDays.js +32 -0
  163. package/build/dist/Types/Metrics/MetricDownsamplingRetentionDays.js.map +1 -0
  164. package/build/dist/Types/Metrics/MetricPipelineRuleFilterCondition.js +103 -0
  165. package/build/dist/Types/Metrics/MetricPipelineRuleFilterCondition.js.map +1 -0
  166. package/build/dist/Types/Metrics/MetricPipelineRuleType.js +27 -0
  167. package/build/dist/Types/Metrics/MetricPipelineRuleType.js.map +1 -0
  168. package/build/dist/Types/Metrics/RecordingRuleDefinition.js +110 -0
  169. package/build/dist/Types/Metrics/RecordingRuleDefinition.js.map +1 -0
  170. package/build/dist/Types/Monitor/CriteriaFilter.js +22 -0
  171. package/build/dist/Types/Monitor/CriteriaFilter.js.map +1 -1
  172. package/build/dist/Types/Monitor/MetricMonitor/MetricCriteriaContext.js +2 -0
  173. package/build/dist/Types/Monitor/MetricMonitor/MetricCriteriaContext.js.map +1 -0
  174. package/build/dist/Types/Permission.js +454 -0
  175. package/build/dist/Types/Permission.js.map +1 -1
  176. package/build/dist/Types/Trace/TraceAggregationType.js +18 -0
  177. package/build/dist/Types/Trace/TraceAggregationType.js.map +1 -0
  178. package/build/dist/Types/Trace/TraceDropFilterAction.js +7 -0
  179. package/build/dist/Types/Trace/TraceDropFilterAction.js.map +1 -0
  180. package/build/dist/Types/Trace/TracePipelineProcessorType.js +10 -0
  181. package/build/dist/Types/Trace/TracePipelineProcessorType.js.map +1 -0
  182. package/build/dist/Types/Trace/TraceRecordingRuleDefinition.js +145 -0
  183. package/build/dist/Types/Trace/TraceRecordingRuleDefinition.js.map +1 -0
  184. package/build/dist/Types/Trace/TraceScrubAction.js +8 -0
  185. package/build/dist/Types/Trace/TraceScrubAction.js.map +1 -0
  186. package/build/dist/Types/Trace/TraceScrubField.js +9 -0
  187. package/build/dist/Types/Trace/TraceScrubField.js.map +1 -0
  188. package/build/dist/Types/Trace/TraceScrubPatternType.js +11 -0
  189. package/build/dist/Types/Trace/TraceScrubPatternType.js.map +1 -0
  190. package/build/dist/UI/Components/CardSelect/CardSelect.js +3 -1
  191. package/build/dist/UI/Components/CardSelect/CardSelect.js.map +1 -1
  192. package/build/dist/UI/Components/Charts/ChartGroup/ChartGroup.js +6 -9
  193. package/build/dist/UI/Components/Charts/ChartGroup/ChartGroup.js.map +1 -1
  194. package/build/dist/UI/Components/Forms/Fields/FormField.js +1 -1
  195. package/build/dist/UI/Components/Forms/Fields/FormField.js.map +1 -1
  196. package/build/dist/UI/Components/Markdown.tsx/MarkdownViewer.js +30 -0
  197. package/build/dist/UI/Components/Markdown.tsx/MarkdownViewer.js.map +1 -1
  198. package/build/dist/UI/Components/Page/Page.js +1 -0
  199. package/build/dist/UI/Components/Page/Page.js.map +1 -1
  200. package/build/dist/Utils/MetricUnitUtil.js +232 -0
  201. package/build/dist/Utils/MetricUnitUtil.js.map +1 -0
  202. package/build/dist/Utils/Metrics/MetricFormulaEvaluator.js +453 -0
  203. package/build/dist/Utils/Metrics/MetricFormulaEvaluator.js.map +1 -0
  204. package/build/dist/Utils/Metrics/MetricResultUnitConverter.js +61 -0
  205. package/build/dist/Utils/Metrics/MetricResultUnitConverter.js.map +1 -0
  206. package/build/dist/Utils/Metrics/RecordingRuleExpression.js +298 -0
  207. package/build/dist/Utils/Metrics/RecordingRuleExpression.js.map +1 -0
  208. package/build/dist/Utils/ValueFormatter.js +123 -13
  209. package/build/dist/Utils/ValueFormatter.js.map +1 -1
  210. package/package.json +1 -1
@@ -0,0 +1,548 @@
1
+ import KubernetesCluster from "./KubernetesCluster";
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 ColumnAccessControl from "../../Types/Database/AccessControl/ColumnAccessControl";
7
+ import TableAccessControl from "../../Types/Database/AccessControl/TableAccessControl";
8
+ import ColumnLength from "../../Types/Database/ColumnLength";
9
+ import ColumnType from "../../Types/Database/ColumnType";
10
+ import CrudApiEndpoint from "../../Types/Database/CrudApiEndpoint";
11
+ import TableColumn from "../../Types/Database/TableColumn";
12
+ import TableColumnType from "../../Types/Database/TableColumnType";
13
+ import TableMetadata from "../../Types/Database/TableMetadata";
14
+ import TenantColumn from "../../Types/Database/TenantColumn";
15
+ import IconProp from "../../Types/Icon/IconProp";
16
+ import { JSONObject } from "../../Types/JSON";
17
+ import ObjectID from "../../Types/ObjectID";
18
+ import Permission from "../../Types/Permission";
19
+ import { Column, Entity, Index, JoinColumn, ManyToOne } from "typeorm";
20
+
21
+ /*
22
+ * ------------------------------------------------------------------
23
+ * KubernetesResource
24
+ * ------------------------------------------------------------------
25
+ *
26
+ * Inventory snapshot of a single Kubernetes object (Pod, Node,
27
+ * Deployment, ...) in a single cluster. Populated by the OTel logs
28
+ * ingest path from the k8sobjects receiver snapshot stream
29
+ * (kubernetes-agent pulls every 5 min by default).
30
+ *
31
+ * The overview page reads aggregates from this table instead of
32
+ * groupBy-ing over 24h of ClickHouse metric/log data.
33
+ *
34
+ * Rows are upserted per snapshot and hard-deleted once lastSeenAt
35
+ * falls behind "now - 15min" for clusters that remain connected.
36
+ *
37
+ * Writes go through KubernetesResourceService under isRoot; users
38
+ * never create/update/delete rows directly.
39
+ *
40
+ * ------------------------------------------------------------------
41
+ */
42
+
43
+ const READ_PERMISSIONS: Array<Permission> = [
44
+ Permission.ProjectOwner,
45
+ Permission.ProjectAdmin,
46
+ Permission.ProjectMember,
47
+ Permission.Viewer,
48
+ Permission.SettingsManager,
49
+ Permission.ReadKubernetesCluster,
50
+ Permission.ReadAllProjectResources,
51
+ ];
52
+
53
+ @TenantColumn("projectId")
54
+ @TableAccessControl({
55
+ create: [],
56
+ read: READ_PERMISSIONS,
57
+ update: [],
58
+ delete: [],
59
+ })
60
+ @CrudApiEndpoint(new Route("/kubernetes-resource"))
61
+ @TableMetadata({
62
+ tableName: "KubernetesResource",
63
+ singularName: "Kubernetes Resource",
64
+ pluralName: "Kubernetes Resources",
65
+ icon: IconProp.Cube,
66
+ tableDescription:
67
+ "Snapshot of a Kubernetes object (pod, node, deployment, etc.) as last reported by the kubernetes-agent. Populated by the telemetry ingest pipeline; not user-editable.",
68
+ })
69
+ @Index(["projectId", "kubernetesClusterId", "kind", "namespaceKey", "name"], {
70
+ unique: true,
71
+ })
72
+ @Entity({
73
+ name: "KubernetesResource",
74
+ })
75
+ export default class KubernetesResource extends BaseModel {
76
+ @ColumnAccessControl({
77
+ create: [],
78
+ read: READ_PERMISSIONS,
79
+ update: [],
80
+ })
81
+ @TableColumn({
82
+ manyToOneRelationColumn: "projectId",
83
+ type: TableColumnType.Entity,
84
+ modelType: Project,
85
+ title: "Project",
86
+ description: "Relation to Project this resource belongs to.",
87
+ })
88
+ @ManyToOne(
89
+ () => {
90
+ return Project;
91
+ },
92
+ {
93
+ eager: false,
94
+ nullable: true,
95
+ onDelete: "CASCADE",
96
+ orphanedRowAction: "nullify",
97
+ },
98
+ )
99
+ @JoinColumn({ name: "projectId" })
100
+ public project?: Project = undefined;
101
+
102
+ @ColumnAccessControl({
103
+ create: [],
104
+ read: READ_PERMISSIONS,
105
+ update: [],
106
+ })
107
+ @Index()
108
+ @TableColumn({
109
+ type: TableColumnType.ObjectID,
110
+ required: true,
111
+ canReadOnRelationQuery: true,
112
+ title: "Project ID",
113
+ description: "ID of the Project this resource belongs to.",
114
+ })
115
+ @Column({
116
+ type: ColumnType.ObjectID,
117
+ nullable: false,
118
+ transformer: ObjectID.getDatabaseTransformer(),
119
+ })
120
+ public projectId?: ObjectID = undefined;
121
+
122
+ @ColumnAccessControl({
123
+ create: [],
124
+ read: READ_PERMISSIONS,
125
+ update: [],
126
+ })
127
+ @TableColumn({
128
+ manyToOneRelationColumn: "kubernetesClusterId",
129
+ type: TableColumnType.Entity,
130
+ modelType: KubernetesCluster,
131
+ title: "Kubernetes Cluster",
132
+ description: "Cluster this resource lives in.",
133
+ })
134
+ @ManyToOne(
135
+ () => {
136
+ return KubernetesCluster;
137
+ },
138
+ {
139
+ eager: false,
140
+ nullable: true,
141
+ onDelete: "CASCADE",
142
+ orphanedRowAction: "nullify",
143
+ },
144
+ )
145
+ @JoinColumn({ name: "kubernetesClusterId" })
146
+ public kubernetesCluster?: KubernetesCluster = undefined;
147
+
148
+ @ColumnAccessControl({
149
+ create: [],
150
+ read: READ_PERMISSIONS,
151
+ update: [],
152
+ })
153
+ @Index()
154
+ @TableColumn({
155
+ type: TableColumnType.ObjectID,
156
+ required: true,
157
+ canReadOnRelationQuery: true,
158
+ title: "Kubernetes Cluster ID",
159
+ description: "ID of the Kubernetes Cluster this resource lives in.",
160
+ })
161
+ @Column({
162
+ type: ColumnType.ObjectID,
163
+ nullable: false,
164
+ transformer: ObjectID.getDatabaseTransformer(),
165
+ })
166
+ public kubernetesClusterId?: ObjectID = undefined;
167
+
168
+ @ColumnAccessControl({
169
+ create: [],
170
+ read: READ_PERMISSIONS,
171
+ update: [],
172
+ })
173
+ @TableColumn({
174
+ required: true,
175
+ type: TableColumnType.ShortText,
176
+ canReadOnRelationQuery: true,
177
+ title: "Kind",
178
+ description:
179
+ "Kubernetes resource kind in singular PascalCase (e.g. Pod, Node, Deployment).",
180
+ })
181
+ @Column({
182
+ nullable: false,
183
+ type: ColumnType.ShortText,
184
+ length: ColumnLength.ShortText,
185
+ })
186
+ public kind?: string = undefined;
187
+
188
+ @ColumnAccessControl({
189
+ create: [],
190
+ read: READ_PERMISSIONS,
191
+ update: [],
192
+ })
193
+ @TableColumn({
194
+ required: true,
195
+ type: TableColumnType.ShortText,
196
+ canReadOnRelationQuery: true,
197
+ title: "Namespace Key",
198
+ description:
199
+ "Kubernetes namespace, or empty string for cluster-scoped resources. Kept non-null so the upsert unique index works.",
200
+ })
201
+ @Column({
202
+ nullable: false,
203
+ type: ColumnType.ShortText,
204
+ length: ColumnLength.ShortText,
205
+ default: "",
206
+ })
207
+ public namespaceKey?: string = undefined;
208
+
209
+ @ColumnAccessControl({
210
+ create: [],
211
+ read: READ_PERMISSIONS,
212
+ update: [],
213
+ })
214
+ @TableColumn({
215
+ required: true,
216
+ type: TableColumnType.ShortText,
217
+ canReadOnRelationQuery: true,
218
+ title: "Name",
219
+ description: "Kubernetes resource name (metadata.name).",
220
+ })
221
+ @Column({
222
+ nullable: false,
223
+ type: ColumnType.ShortText,
224
+ length: ColumnLength.ShortText,
225
+ })
226
+ public name?: string = undefined;
227
+
228
+ @ColumnAccessControl({
229
+ create: [],
230
+ read: READ_PERMISSIONS,
231
+ update: [],
232
+ })
233
+ @TableColumn({
234
+ required: false,
235
+ type: TableColumnType.ShortText,
236
+ canReadOnRelationQuery: true,
237
+ title: "UID",
238
+ description: "Kubernetes metadata.uid — stable identity across restarts.",
239
+ })
240
+ @Column({
241
+ nullable: true,
242
+ type: ColumnType.ShortText,
243
+ length: ColumnLength.ShortText,
244
+ })
245
+ public uid?: string = undefined;
246
+
247
+ @ColumnAccessControl({
248
+ create: [],
249
+ read: READ_PERMISSIONS,
250
+ update: [],
251
+ })
252
+ @TableColumn({
253
+ required: false,
254
+ type: TableColumnType.ShortText,
255
+ canReadOnRelationQuery: true,
256
+ title: "Phase",
257
+ description:
258
+ "Pod.status.phase (Running / Pending / Failed / Succeeded / Unknown). Null for non-Pod kinds.",
259
+ })
260
+ @Column({
261
+ nullable: true,
262
+ type: ColumnType.ShortText,
263
+ length: ColumnLength.ShortText,
264
+ })
265
+ public phase?: string = undefined;
266
+
267
+ @ColumnAccessControl({
268
+ create: [],
269
+ read: READ_PERMISSIONS,
270
+ update: [],
271
+ })
272
+ @TableColumn({
273
+ required: false,
274
+ type: TableColumnType.Boolean,
275
+ canReadOnRelationQuery: true,
276
+ title: "Is Ready",
277
+ description:
278
+ "True if Node.status.conditions[type=Ready].status == True. Null for non-Node kinds.",
279
+ })
280
+ @Column({
281
+ nullable: true,
282
+ type: ColumnType.Boolean,
283
+ })
284
+ public isReady?: boolean = undefined;
285
+
286
+ @ColumnAccessControl({
287
+ create: [],
288
+ read: READ_PERMISSIONS,
289
+ update: [],
290
+ })
291
+ @TableColumn({
292
+ required: false,
293
+ type: TableColumnType.Boolean,
294
+ canReadOnRelationQuery: true,
295
+ title: "Has Memory Pressure",
296
+ description: "Node MemoryPressure condition. Null for non-Node kinds.",
297
+ })
298
+ @Column({
299
+ nullable: true,
300
+ type: ColumnType.Boolean,
301
+ })
302
+ public hasMemoryPressure?: boolean = undefined;
303
+
304
+ @ColumnAccessControl({
305
+ create: [],
306
+ read: READ_PERMISSIONS,
307
+ update: [],
308
+ })
309
+ @TableColumn({
310
+ required: false,
311
+ type: TableColumnType.Boolean,
312
+ canReadOnRelationQuery: true,
313
+ title: "Has Disk Pressure",
314
+ description: "Node DiskPressure condition. Null for non-Node kinds.",
315
+ })
316
+ @Column({
317
+ nullable: true,
318
+ type: ColumnType.Boolean,
319
+ })
320
+ public hasDiskPressure?: boolean = undefined;
321
+
322
+ @ColumnAccessControl({
323
+ create: [],
324
+ read: READ_PERMISSIONS,
325
+ update: [],
326
+ })
327
+ @TableColumn({
328
+ required: false,
329
+ type: TableColumnType.Boolean,
330
+ canReadOnRelationQuery: true,
331
+ title: "Has PID Pressure",
332
+ description: "Node PIDPressure condition. Null for non-Node kinds.",
333
+ })
334
+ @Column({
335
+ nullable: true,
336
+ type: ColumnType.Boolean,
337
+ })
338
+ public hasPidPressure?: boolean = undefined;
339
+
340
+ @ColumnAccessControl({
341
+ create: [],
342
+ read: READ_PERMISSIONS,
343
+ update: [],
344
+ })
345
+ @TableColumn({
346
+ required: false,
347
+ type: TableColumnType.JSON,
348
+ title: "Labels",
349
+ description: "Kubernetes metadata.labels.",
350
+ })
351
+ @Column({
352
+ nullable: true,
353
+ type: ColumnType.JSON,
354
+ })
355
+ public labels?: JSONObject = undefined;
356
+
357
+ @ColumnAccessControl({
358
+ create: [],
359
+ read: READ_PERMISSIONS,
360
+ update: [],
361
+ })
362
+ @TableColumn({
363
+ required: false,
364
+ type: TableColumnType.JSON,
365
+ title: "Annotations",
366
+ description: "Kubernetes metadata.annotations.",
367
+ })
368
+ @Column({
369
+ nullable: true,
370
+ type: ColumnType.JSON,
371
+ })
372
+ public annotations?: JSONObject = undefined;
373
+
374
+ @ColumnAccessControl({
375
+ create: [],
376
+ read: READ_PERMISSIONS,
377
+ update: [],
378
+ })
379
+ @TableColumn({
380
+ required: false,
381
+ type: TableColumnType.JSON,
382
+ title: "Owner References",
383
+ description: "Kubernetes metadata.ownerReferences array.",
384
+ })
385
+ @Column({
386
+ nullable: true,
387
+ type: ColumnType.JSON,
388
+ })
389
+ public ownerReferences?: JSONObject = undefined;
390
+
391
+ @ColumnAccessControl({
392
+ create: [],
393
+ read: READ_PERMISSIONS,
394
+ update: [],
395
+ })
396
+ @TableColumn({
397
+ required: false,
398
+ type: TableColumnType.JSON,
399
+ title: "Spec",
400
+ description: "Kubernetes spec block, verbatim from the last snapshot.",
401
+ })
402
+ @Column({
403
+ nullable: true,
404
+ type: ColumnType.JSON,
405
+ })
406
+ public spec?: JSONObject = undefined;
407
+
408
+ @ColumnAccessControl({
409
+ create: [],
410
+ read: READ_PERMISSIONS,
411
+ update: [],
412
+ })
413
+ @TableColumn({
414
+ required: false,
415
+ type: TableColumnType.JSON,
416
+ title: "Status",
417
+ description: "Kubernetes status block, verbatim from the last snapshot.",
418
+ })
419
+ @Column({
420
+ nullable: true,
421
+ type: ColumnType.JSON,
422
+ })
423
+ public status?: JSONObject = undefined;
424
+
425
+ @ColumnAccessControl({
426
+ create: [],
427
+ read: READ_PERMISSIONS,
428
+ update: [],
429
+ })
430
+ @TableColumn({
431
+ required: true,
432
+ type: TableColumnType.Date,
433
+ canReadOnRelationQuery: true,
434
+ title: "Last Seen At",
435
+ description:
436
+ "Agent-observed timestamp of the most recent snapshot for this resource. Also acts as the monotonic guard for upserts.",
437
+ })
438
+ @Column({
439
+ nullable: false,
440
+ type: ColumnType.Date,
441
+ })
442
+ public lastSeenAt?: Date = undefined;
443
+
444
+ @ColumnAccessControl({
445
+ create: [],
446
+ read: READ_PERMISSIONS,
447
+ update: [],
448
+ })
449
+ @TableColumn({
450
+ required: false,
451
+ type: TableColumnType.Date,
452
+ canReadOnRelationQuery: true,
453
+ title: "Resource Creation Timestamp",
454
+ description: "Kubernetes metadata.creationTimestamp of this object.",
455
+ })
456
+ @Column({
457
+ nullable: true,
458
+ type: ColumnType.Date,
459
+ })
460
+ public resourceCreationTimestamp?: Date = undefined;
461
+
462
+ @ColumnAccessControl({
463
+ create: [],
464
+ read: READ_PERMISSIONS,
465
+ update: [],
466
+ })
467
+ @TableColumn({
468
+ manyToOneRelationColumn: "createdByUserId",
469
+ type: TableColumnType.Entity,
470
+ modelType: User,
471
+ title: "Created By User",
472
+ description:
473
+ "Not user-facing; ingest writes as isRoot so this stays null in practice.",
474
+ })
475
+ @ManyToOne(
476
+ () => {
477
+ return User;
478
+ },
479
+ {
480
+ eager: false,
481
+ nullable: true,
482
+ onDelete: "SET NULL",
483
+ orphanedRowAction: "nullify",
484
+ },
485
+ )
486
+ @JoinColumn({ name: "createdByUserId" })
487
+ public createdByUser?: User = undefined;
488
+
489
+ @ColumnAccessControl({
490
+ create: [],
491
+ read: READ_PERMISSIONS,
492
+ update: [],
493
+ })
494
+ @TableColumn({
495
+ type: TableColumnType.ObjectID,
496
+ title: "Created By User ID",
497
+ description: "ID of the user who created this row.",
498
+ })
499
+ @Column({
500
+ type: ColumnType.ObjectID,
501
+ nullable: true,
502
+ transformer: ObjectID.getDatabaseTransformer(),
503
+ })
504
+ public createdByUserId?: ObjectID = undefined;
505
+
506
+ @ColumnAccessControl({
507
+ create: [],
508
+ read: READ_PERMISSIONS,
509
+ update: [],
510
+ })
511
+ @TableColumn({
512
+ manyToOneRelationColumn: "deletedByUserId",
513
+ type: TableColumnType.Entity,
514
+ modelType: User,
515
+ title: "Deleted By User",
516
+ description: "Relation to the user who deleted this row.",
517
+ })
518
+ @ManyToOne(
519
+ () => {
520
+ return User;
521
+ },
522
+ {
523
+ eager: false,
524
+ nullable: true,
525
+ onDelete: "SET NULL",
526
+ orphanedRowAction: "nullify",
527
+ },
528
+ )
529
+ @JoinColumn({ name: "deletedByUserId" })
530
+ public deletedByUser?: User = undefined;
531
+
532
+ @ColumnAccessControl({
533
+ create: [],
534
+ read: READ_PERMISSIONS,
535
+ update: [],
536
+ })
537
+ @TableColumn({
538
+ type: TableColumnType.ObjectID,
539
+ title: "Deleted By User ID",
540
+ description: "ID of the user who deleted this row.",
541
+ })
542
+ @Column({
543
+ type: ColumnType.ObjectID,
544
+ nullable: true,
545
+ transformer: ObjectID.getDatabaseTransformer(),
546
+ })
547
+ public deletedByUserId?: ObjectID = undefined;
548
+ }