@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,546 @@
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("/trace-scrub-rule"))
31
+ @Entity({
32
+ name: "TraceScrubRule",
33
+ })
34
+ @TableMetadata({
35
+ tableName: "TraceScrubRule",
36
+ singularName: "Trace Scrub Rule",
37
+ pluralName: "Trace Scrub Rules",
38
+ icon: IconProp.ShieldCheck,
39
+ tableDescription:
40
+ "Configure rules to automatically detect and scrub sensitive data (PII) from spans at ingest time.",
41
+ })
42
+ @TableAccessControl({
43
+ create: [
44
+ Permission.ProjectOwner,
45
+ Permission.ProjectAdmin,
46
+ Permission.CreateProjectTraceScrubRule,
47
+ ],
48
+ read: [
49
+ Permission.ProjectOwner,
50
+ Permission.ProjectAdmin,
51
+ Permission.ProjectMember,
52
+ Permission.Viewer,
53
+ Permission.TelemetryManager,
54
+ Permission.ReadProjectTraceScrubRule,
55
+ Permission.ReadAllProjectResources,
56
+ ],
57
+ delete: [
58
+ Permission.ProjectOwner,
59
+ Permission.ProjectAdmin,
60
+ Permission.DeleteProjectTraceScrubRule,
61
+ ],
62
+ update: [
63
+ Permission.ProjectOwner,
64
+ Permission.ProjectAdmin,
65
+ Permission.EditProjectTraceScrubRule,
66
+ ],
67
+ })
68
+ export default class TraceScrubRule extends BaseModel {
69
+ @ColumnAccessControl({
70
+ create: [
71
+ Permission.ProjectOwner,
72
+ Permission.ProjectAdmin,
73
+ Permission.CreateProjectTraceScrubRule,
74
+ ],
75
+ read: [
76
+ Permission.ProjectOwner,
77
+ Permission.ProjectAdmin,
78
+ Permission.ProjectMember,
79
+ Permission.Viewer,
80
+ Permission.TelemetryManager,
81
+ Permission.ReadProjectTraceScrubRule,
82
+ Permission.ReadAllProjectResources,
83
+ ],
84
+ update: [],
85
+ })
86
+ @TableColumn({
87
+ manyToOneRelationColumn: "projectId",
88
+ type: TableColumnType.Entity,
89
+ modelType: Project,
90
+ title: "Project",
91
+ description: "Relation to the project this trace scrub rule belongs to.",
92
+ })
93
+ @ManyToOne(
94
+ () => {
95
+ return Project;
96
+ },
97
+ {
98
+ eager: false,
99
+ nullable: true,
100
+ onDelete: "CASCADE",
101
+ orphanedRowAction: "nullify",
102
+ },
103
+ )
104
+ @JoinColumn({ name: "projectId" })
105
+ public project?: Project = undefined;
106
+
107
+ @ColumnAccessControl({
108
+ create: [
109
+ Permission.ProjectOwner,
110
+ Permission.ProjectAdmin,
111
+ Permission.CreateProjectTraceScrubRule,
112
+ ],
113
+ read: [
114
+ Permission.ProjectOwner,
115
+ Permission.ProjectAdmin,
116
+ Permission.ProjectMember,
117
+ Permission.Viewer,
118
+ Permission.TelemetryManager,
119
+ Permission.ReadProjectTraceScrubRule,
120
+ Permission.ReadAllProjectResources,
121
+ ],
122
+ update: [],
123
+ })
124
+ @Index()
125
+ @TableColumn({
126
+ type: TableColumnType.ObjectID,
127
+ required: true,
128
+ canReadOnRelationQuery: true,
129
+ title: "Project ID",
130
+ description: "ID of the project this trace scrub rule belongs to.",
131
+ })
132
+ @Column({
133
+ type: ColumnType.ObjectID,
134
+ nullable: false,
135
+ transformer: ObjectID.getDatabaseTransformer(),
136
+ })
137
+ public projectId?: ObjectID = undefined;
138
+
139
+ @ColumnAccessControl({
140
+ create: [
141
+ Permission.ProjectOwner,
142
+ Permission.ProjectAdmin,
143
+ Permission.CreateProjectTraceScrubRule,
144
+ ],
145
+ read: [
146
+ Permission.ProjectOwner,
147
+ Permission.ProjectAdmin,
148
+ Permission.ProjectMember,
149
+ Permission.Viewer,
150
+ Permission.TelemetryManager,
151
+ Permission.ReadProjectTraceScrubRule,
152
+ Permission.ReadAllProjectResources,
153
+ ],
154
+ update: [
155
+ Permission.ProjectOwner,
156
+ Permission.ProjectAdmin,
157
+ Permission.EditProjectTraceScrubRule,
158
+ ],
159
+ })
160
+ @TableColumn({
161
+ required: true,
162
+ type: TableColumnType.Name,
163
+ canReadOnRelationQuery: true,
164
+ title: "Name",
165
+ description: "Friendly name for this scrub rule.",
166
+ })
167
+ @Column({
168
+ nullable: false,
169
+ type: ColumnType.Name,
170
+ length: ColumnLength.Name,
171
+ })
172
+ public name?: string = undefined;
173
+
174
+ @ColumnAccessControl({
175
+ create: [
176
+ Permission.ProjectOwner,
177
+ Permission.ProjectAdmin,
178
+ Permission.CreateProjectTraceScrubRule,
179
+ ],
180
+ read: [
181
+ Permission.ProjectOwner,
182
+ Permission.ProjectAdmin,
183
+ Permission.ProjectMember,
184
+ Permission.Viewer,
185
+ Permission.TelemetryManager,
186
+ Permission.ReadProjectTraceScrubRule,
187
+ Permission.ReadAllProjectResources,
188
+ ],
189
+ update: [
190
+ Permission.ProjectOwner,
191
+ Permission.ProjectAdmin,
192
+ Permission.EditProjectTraceScrubRule,
193
+ ],
194
+ })
195
+ @TableColumn({
196
+ required: false,
197
+ type: TableColumnType.LongText,
198
+ canReadOnRelationQuery: true,
199
+ title: "Description",
200
+ description: "Description of what this scrub rule does.",
201
+ })
202
+ @Column({
203
+ nullable: true,
204
+ type: ColumnType.LongText,
205
+ length: ColumnLength.LongText,
206
+ })
207
+ public description?: string = undefined;
208
+
209
+ @ColumnAccessControl({
210
+ create: [
211
+ Permission.ProjectOwner,
212
+ Permission.ProjectAdmin,
213
+ Permission.CreateProjectTraceScrubRule,
214
+ ],
215
+ read: [
216
+ Permission.ProjectOwner,
217
+ Permission.ProjectAdmin,
218
+ Permission.ProjectMember,
219
+ Permission.Viewer,
220
+ Permission.TelemetryManager,
221
+ Permission.ReadProjectTraceScrubRule,
222
+ Permission.ReadAllProjectResources,
223
+ ],
224
+ update: [
225
+ Permission.ProjectOwner,
226
+ Permission.ProjectAdmin,
227
+ Permission.EditProjectTraceScrubRule,
228
+ ],
229
+ })
230
+ @TableColumn({
231
+ required: true,
232
+ type: TableColumnType.ShortText,
233
+ canReadOnRelationQuery: true,
234
+ title: "Pattern Type",
235
+ description:
236
+ "The type of sensitive data pattern to detect: email, creditCard, ssn, phoneNumber, ipAddress, or custom.",
237
+ })
238
+ @Column({
239
+ nullable: false,
240
+ type: ColumnType.ShortText,
241
+ length: ColumnLength.ShortText,
242
+ })
243
+ public patternType?: string = undefined;
244
+
245
+ @ColumnAccessControl({
246
+ create: [
247
+ Permission.ProjectOwner,
248
+ Permission.ProjectAdmin,
249
+ Permission.CreateProjectTraceScrubRule,
250
+ ],
251
+ read: [
252
+ Permission.ProjectOwner,
253
+ Permission.ProjectAdmin,
254
+ Permission.ProjectMember,
255
+ Permission.Viewer,
256
+ Permission.TelemetryManager,
257
+ Permission.ReadProjectTraceScrubRule,
258
+ Permission.ReadAllProjectResources,
259
+ ],
260
+ update: [
261
+ Permission.ProjectOwner,
262
+ Permission.ProjectAdmin,
263
+ Permission.EditProjectTraceScrubRule,
264
+ ],
265
+ })
266
+ @TableColumn({
267
+ required: false,
268
+ type: TableColumnType.LongText,
269
+ canReadOnRelationQuery: true,
270
+ title: "Custom Regex",
271
+ description:
272
+ "A custom regular expression pattern to match. Only used when patternType is 'custom'.",
273
+ })
274
+ @Column({
275
+ nullable: true,
276
+ type: ColumnType.LongText,
277
+ length: ColumnLength.LongText,
278
+ })
279
+ public customRegex?: string = undefined;
280
+
281
+ @ColumnAccessControl({
282
+ create: [
283
+ Permission.ProjectOwner,
284
+ Permission.ProjectAdmin,
285
+ Permission.CreateProjectTraceScrubRule,
286
+ ],
287
+ read: [
288
+ Permission.ProjectOwner,
289
+ Permission.ProjectAdmin,
290
+ Permission.ProjectMember,
291
+ Permission.Viewer,
292
+ Permission.TelemetryManager,
293
+ Permission.ReadProjectTraceScrubRule,
294
+ Permission.ReadAllProjectResources,
295
+ ],
296
+ update: [
297
+ Permission.ProjectOwner,
298
+ Permission.ProjectAdmin,
299
+ Permission.EditProjectTraceScrubRule,
300
+ ],
301
+ })
302
+ @TableColumn({
303
+ required: true,
304
+ type: TableColumnType.ShortText,
305
+ canReadOnRelationQuery: true,
306
+ title: "Scrub Action",
307
+ description:
308
+ "How to scrub matched data: 'mask' partially hides it, 'hash' replaces with a hash, 'redact' removes entirely.",
309
+ })
310
+ @Column({
311
+ nullable: false,
312
+ type: ColumnType.ShortText,
313
+ length: ColumnLength.ShortText,
314
+ default: "redact",
315
+ })
316
+ public scrubAction?: string = undefined;
317
+
318
+ @ColumnAccessControl({
319
+ create: [
320
+ Permission.ProjectOwner,
321
+ Permission.ProjectAdmin,
322
+ Permission.CreateProjectTraceScrubRule,
323
+ ],
324
+ read: [
325
+ Permission.ProjectOwner,
326
+ Permission.ProjectAdmin,
327
+ Permission.ProjectMember,
328
+ Permission.Viewer,
329
+ Permission.TelemetryManager,
330
+ Permission.ReadProjectTraceScrubRule,
331
+ Permission.ReadAllProjectResources,
332
+ ],
333
+ update: [
334
+ Permission.ProjectOwner,
335
+ Permission.ProjectAdmin,
336
+ Permission.EditProjectTraceScrubRule,
337
+ ],
338
+ })
339
+ @TableColumn({
340
+ required: true,
341
+ type: TableColumnType.ShortText,
342
+ canReadOnRelationQuery: true,
343
+ title: "Fields to Scrub",
344
+ description:
345
+ "Which span fields to scrub: 'name' (span name), 'attributes' (attribute values), 'events' (span event attributes), or 'all'.",
346
+ })
347
+ @Column({
348
+ nullable: false,
349
+ type: ColumnType.ShortText,
350
+ length: ColumnLength.ShortText,
351
+ default: "all",
352
+ })
353
+ public fieldsToScrub?: string = undefined;
354
+
355
+ @ColumnAccessControl({
356
+ create: [
357
+ Permission.ProjectOwner,
358
+ Permission.ProjectAdmin,
359
+ Permission.CreateProjectTraceScrubRule,
360
+ ],
361
+ read: [
362
+ Permission.ProjectOwner,
363
+ Permission.ProjectAdmin,
364
+ Permission.ProjectMember,
365
+ Permission.Viewer,
366
+ Permission.TelemetryManager,
367
+ Permission.ReadProjectTraceScrubRule,
368
+ Permission.ReadAllProjectResources,
369
+ ],
370
+ update: [
371
+ Permission.ProjectOwner,
372
+ Permission.ProjectAdmin,
373
+ Permission.EditProjectTraceScrubRule,
374
+ ],
375
+ })
376
+ @Index()
377
+ @TableColumn({
378
+ required: true,
379
+ type: TableColumnType.Boolean,
380
+ canReadOnRelationQuery: true,
381
+ title: "Enabled",
382
+ description: "Whether this scrub rule is active.",
383
+ defaultValue: true,
384
+ })
385
+ @Column({
386
+ nullable: false,
387
+ type: ColumnType.Boolean,
388
+ default: true,
389
+ })
390
+ public isEnabled?: boolean = undefined;
391
+
392
+ @ColumnAccessControl({
393
+ create: [
394
+ Permission.ProjectOwner,
395
+ Permission.ProjectAdmin,
396
+ Permission.CreateProjectTraceScrubRule,
397
+ ],
398
+ read: [
399
+ Permission.ProjectOwner,
400
+ Permission.ProjectAdmin,
401
+ Permission.ProjectMember,
402
+ Permission.Viewer,
403
+ Permission.TelemetryManager,
404
+ Permission.ReadProjectTraceScrubRule,
405
+ Permission.ReadAllProjectResources,
406
+ ],
407
+ update: [
408
+ Permission.ProjectOwner,
409
+ Permission.ProjectAdmin,
410
+ Permission.EditProjectTraceScrubRule,
411
+ ],
412
+ })
413
+ @TableColumn({
414
+ title: "Sort Order",
415
+ required: false,
416
+ type: TableColumnType.Number,
417
+ canReadOnRelationQuery: true,
418
+ description:
419
+ "Determines the evaluation order of this rule relative to others.",
420
+ defaultValue: 0,
421
+ })
422
+ @Column({
423
+ type: ColumnType.Number,
424
+ nullable: false,
425
+ default: 0,
426
+ })
427
+ public sortOrder?: number = undefined;
428
+
429
+ @ColumnAccessControl({
430
+ create: [],
431
+ read: [
432
+ Permission.ProjectOwner,
433
+ Permission.ProjectAdmin,
434
+ Permission.ProjectMember,
435
+ Permission.Viewer,
436
+ Permission.TelemetryManager,
437
+ Permission.ReadProjectTraceScrubRule,
438
+ Permission.ReadAllProjectResources,
439
+ ],
440
+ update: [],
441
+ })
442
+ @TableColumn({
443
+ manyToOneRelationColumn: "createdByUserId",
444
+ type: TableColumnType.Entity,
445
+ modelType: User,
446
+ title: "Created By User",
447
+ description: "Relation to the user who created this trace scrub rule.",
448
+ })
449
+ @ManyToOne(
450
+ () => {
451
+ return User;
452
+ },
453
+ {
454
+ eager: false,
455
+ nullable: true,
456
+ onDelete: "SET NULL",
457
+ orphanedRowAction: "nullify",
458
+ },
459
+ )
460
+ @JoinColumn({ name: "createdByUserId" })
461
+ public createdByUser?: User = undefined;
462
+
463
+ @ColumnAccessControl({
464
+ create: [],
465
+ read: [
466
+ Permission.ProjectOwner,
467
+ Permission.ProjectAdmin,
468
+ Permission.ProjectMember,
469
+ Permission.Viewer,
470
+ Permission.TelemetryManager,
471
+ Permission.ReadProjectTraceScrubRule,
472
+ Permission.ReadAllProjectResources,
473
+ ],
474
+ update: [],
475
+ })
476
+ @TableColumn({
477
+ type: TableColumnType.ObjectID,
478
+ title: "Created By User ID",
479
+ description: "ID of the user who created this trace scrub rule.",
480
+ })
481
+ @Column({
482
+ type: ColumnType.ObjectID,
483
+ nullable: true,
484
+ transformer: ObjectID.getDatabaseTransformer(),
485
+ })
486
+ public createdByUserId?: ObjectID = undefined;
487
+
488
+ @ColumnAccessControl({
489
+ create: [],
490
+ read: [
491
+ Permission.ProjectOwner,
492
+ Permission.ProjectAdmin,
493
+ Permission.ProjectMember,
494
+ Permission.Viewer,
495
+ Permission.TelemetryManager,
496
+ Permission.ReadProjectTraceScrubRule,
497
+ Permission.ReadAllProjectResources,
498
+ ],
499
+ update: [],
500
+ })
501
+ @TableColumn({
502
+ manyToOneRelationColumn: "deletedByUserId",
503
+ type: TableColumnType.Entity,
504
+ modelType: User,
505
+ title: "Deleted By User",
506
+ description: "Relation to the user who deleted this trace scrub rule.",
507
+ })
508
+ @ManyToOne(
509
+ () => {
510
+ return User;
511
+ },
512
+ {
513
+ eager: false,
514
+ nullable: true,
515
+ onDelete: "SET NULL",
516
+ orphanedRowAction: "nullify",
517
+ },
518
+ )
519
+ @JoinColumn({ name: "deletedByUserId" })
520
+ public deletedByUser?: User = undefined;
521
+
522
+ @ColumnAccessControl({
523
+ create: [],
524
+ read: [
525
+ Permission.ProjectOwner,
526
+ Permission.ProjectAdmin,
527
+ Permission.ProjectMember,
528
+ Permission.Viewer,
529
+ Permission.TelemetryManager,
530
+ Permission.ReadProjectTraceScrubRule,
531
+ Permission.ReadAllProjectResources,
532
+ ],
533
+ update: [],
534
+ })
535
+ @TableColumn({
536
+ type: TableColumnType.ObjectID,
537
+ title: "Deleted By User ID",
538
+ description: "ID of the user who deleted this trace scrub rule.",
539
+ })
540
+ @Column({
541
+ type: ColumnType.ObjectID,
542
+ nullable: true,
543
+ transformer: ObjectID.getDatabaseTransformer(),
544
+ })
545
+ public deletedByUserId?: ObjectID = undefined;
546
+ }
@@ -0,0 +1,129 @@
1
+ import KubernetesResource from "../../Models/DatabaseModels/KubernetesResource";
2
+ import KubernetesCluster from "../../Models/DatabaseModels/KubernetesCluster";
3
+ import BadDataException from "../../Types/Exception/BadDataException";
4
+ import ObjectID from "../../Types/ObjectID";
5
+ import KubernetesResourceService, {
6
+ InventorySummary,
7
+ Service as KubernetesResourceServiceType,
8
+ } from "../Services/KubernetesResourceService";
9
+ import KubernetesClusterService from "../Services/KubernetesClusterService";
10
+ import UserMiddleware from "../Middleware/UserAuthorization";
11
+ import Response from "../Utils/Response";
12
+ import BaseAPI from "./BaseAPI";
13
+ import {
14
+ ExpressRequest,
15
+ ExpressResponse,
16
+ NextFunction,
17
+ } from "../Utils/Express";
18
+ import CommonAPI from "./CommonAPI";
19
+ import DatabaseCommonInteractionProps from "../../Types/BaseDatabase/DatabaseCommonInteractionProps";
20
+ import NotFoundException from "../../Types/Exception/NotFoundException";
21
+ import { JSONObject } from "../../Types/JSON";
22
+
23
+ /*
24
+ * ------------------------------------------------------------------
25
+ * KubernetesResourceAPI
26
+ *
27
+ * Augments the auto-generated CRUD router with a single custom
28
+ * endpoint the Kubernetes overview page uses to fetch counts and
29
+ * health summaries in one round-trip:
30
+ *
31
+ * POST /kubernetes-resource/inventory-summary/:clusterId
32
+ *
33
+ * The standard CRUD endpoints (list / get) are still registered by
34
+ * BaseAPI; the UI uses them via ModelAPI for detail-page reads.
35
+ * Write endpoints reject (@TableAccessControl create/update/delete
36
+ * = []); ingest writes go through KubernetesResourceService as root.
37
+ * ------------------------------------------------------------------
38
+ */
39
+ export default class KubernetesResourceAPI extends BaseAPI<
40
+ KubernetesResource,
41
+ KubernetesResourceServiceType
42
+ > {
43
+ public constructor() {
44
+ super(KubernetesResource, KubernetesResourceService);
45
+
46
+ this.router.post(
47
+ `${new this.entityType()
48
+ .getCrudApiPath()
49
+ ?.toString()}/inventory-summary/:clusterId`,
50
+ UserMiddleware.getUserMiddleware,
51
+ async (req: ExpressRequest, res: ExpressResponse, next: NextFunction) => {
52
+ try {
53
+ await this.getInventorySummary(req, res);
54
+ } catch (err) {
55
+ next(err);
56
+ }
57
+ },
58
+ );
59
+ }
60
+
61
+ private async getInventorySummary(
62
+ req: ExpressRequest,
63
+ res: ExpressResponse,
64
+ ): Promise<void> {
65
+ const clusterIdParam: string | undefined = req.params["clusterId"];
66
+
67
+ if (!clusterIdParam) {
68
+ throw new BadDataException("Cluster ID is required");
69
+ }
70
+
71
+ let kubernetesClusterId: ObjectID;
72
+ try {
73
+ kubernetesClusterId = new ObjectID(clusterIdParam);
74
+ } catch {
75
+ throw new BadDataException("Invalid Cluster ID");
76
+ }
77
+
78
+ const props: DatabaseCommonInteractionProps =
79
+ await CommonAPI.getDatabaseCommonInteractionProps(req);
80
+
81
+ /*
82
+ * Authorize: the caller must be able to read the parent cluster.
83
+ * findOneById applies the full ACL chain; a null return means 404
84
+ * (either the cluster doesn't exist or the caller cannot see it —
85
+ * indistinguishable on purpose).
86
+ */
87
+ const cluster: KubernetesCluster | null =
88
+ await KubernetesClusterService.findOneById({
89
+ id: kubernetesClusterId,
90
+ select: {
91
+ _id: true,
92
+ projectId: true,
93
+ },
94
+ props,
95
+ });
96
+
97
+ if (!cluster || !cluster.projectId) {
98
+ throw new NotFoundException("Kubernetes Cluster not found");
99
+ }
100
+
101
+ const summary: InventorySummary = await this.service.getInventorySummary({
102
+ projectId: cluster.projectId,
103
+ kubernetesClusterId,
104
+ });
105
+
106
+ const responseBody: JSONObject = {
107
+ countsByKind: summary.countsByKind as unknown as JSONObject,
108
+ podPhaseCounts: summary.podPhaseCounts as unknown as JSONObject,
109
+ nodeReadyCounts: summary.nodeReadyCounts as unknown as JSONObject,
110
+ nodePressureCounts: summary.nodePressureCounts as unknown as JSONObject,
111
+ // Convenience fields so the UI doesn't have to repeat COALESCE:
112
+ pvcCount: summary.countsByKind["PersistentVolumeClaim"] || 0,
113
+ pvCount: summary.countsByKind["PersistentVolume"] || 0,
114
+ nodeCount: summary.countsByKind["Node"] || 0,
115
+ podCount: summary.countsByKind["Pod"] || 0,
116
+ namespaceCount: summary.countsByKind["Namespace"] || 0,
117
+ deploymentCount: summary.countsByKind["Deployment"] || 0,
118
+ statefulSetCount: summary.countsByKind["StatefulSet"] || 0,
119
+ daemonSetCount: summary.countsByKind["DaemonSet"] || 0,
120
+ jobCount: summary.countsByKind["Job"] || 0,
121
+ cronJobCount: summary.countsByKind["CronJob"] || 0,
122
+ hpaCount: summary.countsByKind["HorizontalPodAutoscaler"] || 0,
123
+ vpaCount: summary.countsByKind["VerticalPodAutoscaler"] || 0,
124
+ containerCount: summary.containerCount,
125
+ };
126
+
127
+ return Response.sendJsonObjectResponse(req, res, responseBody);
128
+ }
129
+ }