@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,470 @@
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 RecordingRuleDefinition from "../../Types/Metrics/RecordingRuleDefinition";
20
+ import { PlanType } from "../../Types/Billing/SubscriptionPlan";
21
+ import { Column, Entity, Index, JoinColumn, ManyToOne } from "typeorm";
22
+
23
+ @EnableDocumentation()
24
+ @TableBillingAccessControl({
25
+ create: PlanType.Free,
26
+ read: PlanType.Free,
27
+ update: PlanType.Free,
28
+ delete: PlanType.Free,
29
+ })
30
+ @TenantColumn("projectId")
31
+ @CrudApiEndpoint(new Route("/metric-recording-rule"))
32
+ @Entity({
33
+ name: "MetricRecordingRule",
34
+ })
35
+ @TableMetadata({
36
+ tableName: "MetricRecordingRule",
37
+ singularName: "Metric Recording Rule",
38
+ pluralName: "Metric Recording Rules",
39
+ icon: IconProp.Calculator,
40
+ tableDescription:
41
+ "Derived metrics computed on a schedule from an expression over other metrics. Results are written back into the metric store as a new series.",
42
+ })
43
+ @TableAccessControl({
44
+ create: [
45
+ Permission.ProjectOwner,
46
+ Permission.ProjectAdmin,
47
+ Permission.CreateProjectMetricRecordingRule,
48
+ ],
49
+ read: [
50
+ Permission.ProjectOwner,
51
+ Permission.ProjectAdmin,
52
+ Permission.ProjectMember,
53
+ Permission.Viewer,
54
+ Permission.TelemetryManager,
55
+ Permission.ReadProjectMetricRecordingRule,
56
+ Permission.ReadAllProjectResources,
57
+ ],
58
+ delete: [
59
+ Permission.ProjectOwner,
60
+ Permission.ProjectAdmin,
61
+ Permission.DeleteProjectMetricRecordingRule,
62
+ ],
63
+ update: [
64
+ Permission.ProjectOwner,
65
+ Permission.ProjectAdmin,
66
+ Permission.EditProjectMetricRecordingRule,
67
+ ],
68
+ })
69
+ export default class MetricRecordingRule extends BaseModel {
70
+ @ColumnAccessControl({
71
+ create: [
72
+ Permission.ProjectOwner,
73
+ Permission.ProjectAdmin,
74
+ Permission.CreateProjectMetricRecordingRule,
75
+ ],
76
+ read: [
77
+ Permission.ProjectOwner,
78
+ Permission.ProjectAdmin,
79
+ Permission.ProjectMember,
80
+ Permission.Viewer,
81
+ Permission.TelemetryManager,
82
+ Permission.ReadProjectMetricRecordingRule,
83
+ Permission.ReadAllProjectResources,
84
+ ],
85
+ update: [],
86
+ })
87
+ @TableColumn({
88
+ manyToOneRelationColumn: "projectId",
89
+ type: TableColumnType.Entity,
90
+ modelType: Project,
91
+ title: "Project",
92
+ description: "Relation to the project this recording rule belongs to.",
93
+ })
94
+ @ManyToOne(
95
+ () => {
96
+ return Project;
97
+ },
98
+ {
99
+ eager: false,
100
+ nullable: true,
101
+ onDelete: "CASCADE",
102
+ orphanedRowAction: "nullify",
103
+ },
104
+ )
105
+ @JoinColumn({ name: "projectId" })
106
+ public project?: Project = undefined;
107
+
108
+ @ColumnAccessControl({
109
+ create: [
110
+ Permission.ProjectOwner,
111
+ Permission.ProjectAdmin,
112
+ Permission.CreateProjectMetricRecordingRule,
113
+ ],
114
+ read: [
115
+ Permission.ProjectOwner,
116
+ Permission.ProjectAdmin,
117
+ Permission.ProjectMember,
118
+ Permission.Viewer,
119
+ Permission.TelemetryManager,
120
+ Permission.ReadProjectMetricRecordingRule,
121
+ Permission.ReadAllProjectResources,
122
+ ],
123
+ update: [],
124
+ })
125
+ @Index()
126
+ @TableColumn({
127
+ type: TableColumnType.ObjectID,
128
+ required: true,
129
+ canReadOnRelationQuery: true,
130
+ title: "Project ID",
131
+ description: "ID of the project this recording rule belongs to.",
132
+ })
133
+ @Column({
134
+ type: ColumnType.ObjectID,
135
+ nullable: false,
136
+ transformer: ObjectID.getDatabaseTransformer(),
137
+ })
138
+ public projectId?: ObjectID = undefined;
139
+
140
+ @ColumnAccessControl({
141
+ create: [
142
+ Permission.ProjectOwner,
143
+ Permission.ProjectAdmin,
144
+ Permission.CreateProjectMetricRecordingRule,
145
+ ],
146
+ read: [
147
+ Permission.ProjectOwner,
148
+ Permission.ProjectAdmin,
149
+ Permission.ProjectMember,
150
+ Permission.Viewer,
151
+ Permission.TelemetryManager,
152
+ Permission.ReadProjectMetricRecordingRule,
153
+ Permission.ReadAllProjectResources,
154
+ ],
155
+ update: [
156
+ Permission.ProjectOwner,
157
+ Permission.ProjectAdmin,
158
+ Permission.EditProjectMetricRecordingRule,
159
+ ],
160
+ })
161
+ @TableColumn({
162
+ required: true,
163
+ type: TableColumnType.Name,
164
+ canReadOnRelationQuery: true,
165
+ title: "Name",
166
+ description: "Friendly name for this rule.",
167
+ })
168
+ @Column({
169
+ nullable: false,
170
+ type: ColumnType.Name,
171
+ length: ColumnLength.Name,
172
+ })
173
+ public name?: string = undefined;
174
+
175
+ @ColumnAccessControl({
176
+ create: [
177
+ Permission.ProjectOwner,
178
+ Permission.ProjectAdmin,
179
+ Permission.CreateProjectMetricRecordingRule,
180
+ ],
181
+ read: [
182
+ Permission.ProjectOwner,
183
+ Permission.ProjectAdmin,
184
+ Permission.ProjectMember,
185
+ Permission.Viewer,
186
+ Permission.TelemetryManager,
187
+ Permission.ReadProjectMetricRecordingRule,
188
+ Permission.ReadAllProjectResources,
189
+ ],
190
+ update: [
191
+ Permission.ProjectOwner,
192
+ Permission.ProjectAdmin,
193
+ Permission.EditProjectMetricRecordingRule,
194
+ ],
195
+ })
196
+ @TableColumn({
197
+ required: false,
198
+ type: TableColumnType.LongText,
199
+ canReadOnRelationQuery: true,
200
+ title: "Description",
201
+ description: "What this recording rule computes and why.",
202
+ })
203
+ @Column({
204
+ nullable: true,
205
+ type: ColumnType.LongText,
206
+ length: ColumnLength.LongText,
207
+ })
208
+ public description?: string = undefined;
209
+
210
+ @ColumnAccessControl({
211
+ create: [
212
+ Permission.ProjectOwner,
213
+ Permission.ProjectAdmin,
214
+ Permission.CreateProjectMetricRecordingRule,
215
+ ],
216
+ read: [
217
+ Permission.ProjectOwner,
218
+ Permission.ProjectAdmin,
219
+ Permission.ProjectMember,
220
+ Permission.Viewer,
221
+ Permission.TelemetryManager,
222
+ Permission.ReadProjectMetricRecordingRule,
223
+ Permission.ReadAllProjectResources,
224
+ ],
225
+ update: [
226
+ Permission.ProjectOwner,
227
+ Permission.ProjectAdmin,
228
+ Permission.EditProjectMetricRecordingRule,
229
+ ],
230
+ })
231
+ @TableColumn({
232
+ required: true,
233
+ type: TableColumnType.ShortText,
234
+ canReadOnRelationQuery: true,
235
+ title: "Output Metric Name",
236
+ description:
237
+ "Name of the new metric this rule writes (e.g. http.error_rate). Must be unique per project.",
238
+ })
239
+ @Column({
240
+ nullable: false,
241
+ type: ColumnType.ShortText,
242
+ length: ColumnLength.ShortText,
243
+ })
244
+ public outputMetricName?: string = undefined;
245
+
246
+ @ColumnAccessControl({
247
+ create: [
248
+ Permission.ProjectOwner,
249
+ Permission.ProjectAdmin,
250
+ Permission.CreateProjectMetricRecordingRule,
251
+ ],
252
+ read: [
253
+ Permission.ProjectOwner,
254
+ Permission.ProjectAdmin,
255
+ Permission.ProjectMember,
256
+ Permission.Viewer,
257
+ Permission.TelemetryManager,
258
+ Permission.ReadProjectMetricRecordingRule,
259
+ Permission.ReadAllProjectResources,
260
+ ],
261
+ update: [
262
+ Permission.ProjectOwner,
263
+ Permission.ProjectAdmin,
264
+ Permission.EditProjectMetricRecordingRule,
265
+ ],
266
+ })
267
+ @TableColumn({
268
+ required: true,
269
+ type: TableColumnType.JSON,
270
+ title: "Definition",
271
+ description:
272
+ "Sources (aliased input metrics), arithmetic expression, and optional group-by attribute.",
273
+ })
274
+ @Column({
275
+ type: ColumnType.JSON,
276
+ nullable: false,
277
+ })
278
+ public definition?: RecordingRuleDefinition = undefined;
279
+
280
+ @ColumnAccessControl({
281
+ create: [
282
+ Permission.ProjectOwner,
283
+ Permission.ProjectAdmin,
284
+ Permission.CreateProjectMetricRecordingRule,
285
+ ],
286
+ read: [
287
+ Permission.ProjectOwner,
288
+ Permission.ProjectAdmin,
289
+ Permission.ProjectMember,
290
+ Permission.Viewer,
291
+ Permission.TelemetryManager,
292
+ Permission.ReadProjectMetricRecordingRule,
293
+ Permission.ReadAllProjectResources,
294
+ ],
295
+ update: [
296
+ Permission.ProjectOwner,
297
+ Permission.ProjectAdmin,
298
+ Permission.EditProjectMetricRecordingRule,
299
+ ],
300
+ })
301
+ @Index()
302
+ @TableColumn({
303
+ required: true,
304
+ type: TableColumnType.Boolean,
305
+ canReadOnRelationQuery: true,
306
+ title: "Enabled",
307
+ description: "Whether this rule is evaluated by the recording rule cron.",
308
+ defaultValue: true,
309
+ })
310
+ @Column({
311
+ nullable: false,
312
+ type: ColumnType.Boolean,
313
+ default: true,
314
+ })
315
+ public isEnabled?: boolean = undefined;
316
+
317
+ @ColumnAccessControl({
318
+ create: [
319
+ Permission.ProjectOwner,
320
+ Permission.ProjectAdmin,
321
+ Permission.CreateProjectMetricRecordingRule,
322
+ ],
323
+ read: [
324
+ Permission.ProjectOwner,
325
+ Permission.ProjectAdmin,
326
+ Permission.ProjectMember,
327
+ Permission.Viewer,
328
+ Permission.TelemetryManager,
329
+ Permission.ReadProjectMetricRecordingRule,
330
+ Permission.ReadAllProjectResources,
331
+ ],
332
+ update: [
333
+ Permission.ProjectOwner,
334
+ Permission.ProjectAdmin,
335
+ Permission.EditProjectMetricRecordingRule,
336
+ ],
337
+ })
338
+ @TableColumn({
339
+ title: "Sort Order",
340
+ required: false,
341
+ type: TableColumnType.Number,
342
+ canReadOnRelationQuery: true,
343
+ description: "Evaluation order when multiple rules exist.",
344
+ defaultValue: 0,
345
+ })
346
+ @Column({
347
+ type: ColumnType.Number,
348
+ nullable: false,
349
+ default: 0,
350
+ })
351
+ public sortOrder?: number = undefined;
352
+
353
+ @ColumnAccessControl({
354
+ create: [],
355
+ read: [
356
+ Permission.ProjectOwner,
357
+ Permission.ProjectAdmin,
358
+ Permission.ProjectMember,
359
+ Permission.Viewer,
360
+ Permission.TelemetryManager,
361
+ Permission.ReadProjectMetricRecordingRule,
362
+ Permission.ReadAllProjectResources,
363
+ ],
364
+ update: [],
365
+ })
366
+ @TableColumn({
367
+ manyToOneRelationColumn: "createdByUserId",
368
+ type: TableColumnType.Entity,
369
+ modelType: User,
370
+ title: "Created By User",
371
+ description: "Relation to the user who created this rule.",
372
+ })
373
+ @ManyToOne(
374
+ () => {
375
+ return User;
376
+ },
377
+ {
378
+ eager: false,
379
+ nullable: true,
380
+ onDelete: "SET NULL",
381
+ orphanedRowAction: "nullify",
382
+ },
383
+ )
384
+ @JoinColumn({ name: "createdByUserId" })
385
+ public createdByUser?: User = undefined;
386
+
387
+ @ColumnAccessControl({
388
+ create: [],
389
+ read: [
390
+ Permission.ProjectOwner,
391
+ Permission.ProjectAdmin,
392
+ Permission.ProjectMember,
393
+ Permission.Viewer,
394
+ Permission.TelemetryManager,
395
+ Permission.ReadProjectMetricRecordingRule,
396
+ Permission.ReadAllProjectResources,
397
+ ],
398
+ update: [],
399
+ })
400
+ @TableColumn({
401
+ type: TableColumnType.ObjectID,
402
+ title: "Created By User ID",
403
+ description: "ID of the user who created this rule.",
404
+ })
405
+ @Column({
406
+ type: ColumnType.ObjectID,
407
+ nullable: true,
408
+ transformer: ObjectID.getDatabaseTransformer(),
409
+ })
410
+ public createdByUserId?: ObjectID = undefined;
411
+
412
+ @ColumnAccessControl({
413
+ create: [],
414
+ read: [
415
+ Permission.ProjectOwner,
416
+ Permission.ProjectAdmin,
417
+ Permission.ProjectMember,
418
+ Permission.Viewer,
419
+ Permission.TelemetryManager,
420
+ Permission.ReadProjectMetricRecordingRule,
421
+ Permission.ReadAllProjectResources,
422
+ ],
423
+ update: [],
424
+ })
425
+ @TableColumn({
426
+ manyToOneRelationColumn: "deletedByUserId",
427
+ type: TableColumnType.Entity,
428
+ modelType: User,
429
+ title: "Deleted By User",
430
+ description: "Relation to the user who deleted this rule.",
431
+ })
432
+ @ManyToOne(
433
+ () => {
434
+ return User;
435
+ },
436
+ {
437
+ eager: false,
438
+ nullable: true,
439
+ onDelete: "SET NULL",
440
+ orphanedRowAction: "nullify",
441
+ },
442
+ )
443
+ @JoinColumn({ name: "deletedByUserId" })
444
+ public deletedByUser?: User = undefined;
445
+
446
+ @ColumnAccessControl({
447
+ create: [],
448
+ read: [
449
+ Permission.ProjectOwner,
450
+ Permission.ProjectAdmin,
451
+ Permission.ProjectMember,
452
+ Permission.Viewer,
453
+ Permission.TelemetryManager,
454
+ Permission.ReadProjectMetricRecordingRule,
455
+ Permission.ReadAllProjectResources,
456
+ ],
457
+ update: [],
458
+ })
459
+ @TableColumn({
460
+ type: TableColumnType.ObjectID,
461
+ title: "Deleted By User ID",
462
+ description: "ID of the user who deleted this rule.",
463
+ })
464
+ @Column({
465
+ type: ColumnType.ObjectID,
466
+ nullable: true,
467
+ transformer: ObjectID.getDatabaseTransformer(),
468
+ })
469
+ public deletedByUserId?: ObjectID = undefined;
470
+ }
@@ -477,6 +477,7 @@ export default class Monitor extends BaseModel {
477
477
  title: "Monitor Type",
478
478
  description: "What is the type of this monitor? Website? API? etc.",
479
479
  example: "API",
480
+ canReadOnRelationQuery: true,
480
481
  })
481
482
  @Column({
482
483
  nullable: false,
@@ -602,6 +603,7 @@ export default class Monitor extends BaseModel {
602
603
  required: false,
603
604
  title: "Monitor Steps",
604
605
  description: "What would you like to monitor and what is the criteria?",
606
+ canReadOnRelationQuery: true,
605
607
  })
606
608
  @Column({
607
609
  type: ColumnType.JSON,
@@ -1,3 +1,4 @@
1
+ import MetricDownsamplingRetentionDays from "../../Types/Metrics/MetricDownsamplingRetentionDays";
1
2
  import Reseller from "./Reseller";
2
3
  import ResellerPlan from "./ResellerPlan";
3
4
  import User from "./User";
@@ -1991,4 +1992,56 @@ export default class Project extends TenantModel {
1991
1992
  unique: false,
1992
1993
  })
1993
1994
  public gitHubAppInstallationId?: string = undefined;
1995
+
1996
+ @ColumnAccessControl({
1997
+ create: [],
1998
+ read: [
1999
+ Permission.ProjectOwner,
2000
+ Permission.ProjectAdmin,
2001
+ Permission.ProjectMember,
2002
+ Permission.Viewer,
2003
+ Permission.ReadProject,
2004
+ Permission.ReadAllProjectResources,
2005
+ ],
2006
+ update: [Permission.ProjectOwner, Permission.ProjectAdmin],
2007
+ })
2008
+ @TableColumn({
2009
+ type: TableColumnType.Number,
2010
+ required: false,
2011
+ title: "Default Metric Cardinality Budget",
2012
+ description:
2013
+ "Project-wide default max distinct series per metric. Services without a per-service override use this value.",
2014
+ })
2015
+ @Column({
2016
+ type: ColumnType.Number,
2017
+ nullable: false,
2018
+ default: 10000,
2019
+ })
2020
+ public defaultMetricCardinalityBudget?: number = undefined;
2021
+
2022
+ @ColumnAccessControl({
2023
+ create: [],
2024
+ read: [
2025
+ Permission.ProjectOwner,
2026
+ Permission.ProjectAdmin,
2027
+ Permission.ProjectMember,
2028
+ Permission.Viewer,
2029
+ Permission.ReadProject,
2030
+ Permission.ReadAllProjectResources,
2031
+ ],
2032
+ update: [Permission.ProjectOwner, Permission.ProjectAdmin],
2033
+ })
2034
+ @TableColumn({
2035
+ type: TableColumnType.JSON,
2036
+ required: false,
2037
+ title: "Default Metric Downsampling Retention (days per tier)",
2038
+ description:
2039
+ "Project-wide default retention for each downsampling tier (raw, 1m, 5m, 1h, 1d) in days.",
2040
+ })
2041
+ @Column({
2042
+ type: ColumnType.JSON,
2043
+ nullable: true,
2044
+ })
2045
+ public defaultMetricDownsamplingRetentionDays?: MetricDownsamplingRetentionDays =
2046
+ undefined;
1994
2047
  }
@@ -23,6 +23,7 @@ import IconProp from "../../Types/Icon/IconProp";
23
23
  import ObjectID from "../../Types/ObjectID";
24
24
  import Permission from "../../Types/Permission";
25
25
  import TechStack from "../../Types/Service/TechStack";
26
+ import MetricDownsamplingRetentionDays from "../../Types/Metrics/MetricDownsamplingRetentionDays";
26
27
  import {
27
28
  Column,
28
29
  Entity,
@@ -635,4 +636,82 @@ export default class Service extends BaseModel {
635
636
  default: 15,
636
637
  })
637
638
  public retainTelemetryDataForDays?: number = undefined;
639
+
640
+ @ColumnAccessControl({
641
+ create: [
642
+ Permission.ProjectOwner,
643
+ Permission.ProjectAdmin,
644
+ Permission.ProjectMember,
645
+ Permission.SettingsManager,
646
+ Permission.CreateService,
647
+ ],
648
+ read: [
649
+ Permission.ProjectOwner,
650
+ Permission.ProjectAdmin,
651
+ Permission.ProjectMember,
652
+ Permission.Viewer,
653
+ Permission.SettingsManager,
654
+ Permission.ReadService,
655
+ Permission.ReadAllProjectResources,
656
+ ],
657
+ update: [
658
+ Permission.ProjectOwner,
659
+ Permission.ProjectAdmin,
660
+ Permission.ProjectMember,
661
+ Permission.SettingsManager,
662
+ Permission.EditService,
663
+ ],
664
+ })
665
+ @TableColumn({
666
+ type: TableColumnType.Number,
667
+ required: false,
668
+ title: "Metric Cardinality Budget",
669
+ description:
670
+ "Max number of distinct metric series this service may emit per metric. When exceeded, the highest-cardinality attribute is auto-bucketed. Null inherits the project default.",
671
+ })
672
+ @Column({
673
+ type: ColumnType.Number,
674
+ nullable: true,
675
+ unique: false,
676
+ })
677
+ public metricCardinalityBudget?: number = undefined;
678
+
679
+ @ColumnAccessControl({
680
+ create: [
681
+ Permission.ProjectOwner,
682
+ Permission.ProjectAdmin,
683
+ Permission.ProjectMember,
684
+ Permission.SettingsManager,
685
+ Permission.CreateService,
686
+ ],
687
+ read: [
688
+ Permission.ProjectOwner,
689
+ Permission.ProjectAdmin,
690
+ Permission.ProjectMember,
691
+ Permission.Viewer,
692
+ Permission.SettingsManager,
693
+ Permission.ReadService,
694
+ Permission.ReadAllProjectResources,
695
+ ],
696
+ update: [
697
+ Permission.ProjectOwner,
698
+ Permission.ProjectAdmin,
699
+ Permission.ProjectMember,
700
+ Permission.SettingsManager,
701
+ Permission.EditService,
702
+ ],
703
+ })
704
+ @TableColumn({
705
+ type: TableColumnType.JSON,
706
+ required: false,
707
+ title: "Metric Downsampling Retention (days per tier)",
708
+ description:
709
+ "Per-tier retention override (raw, 1m, 5m, 1h, 1d) in days. Null fields inherit the project default.",
710
+ })
711
+ @Column({
712
+ type: ColumnType.JSON,
713
+ nullable: true,
714
+ })
715
+ public metricDownsamplingRetentionDays?: MetricDownsamplingRetentionDays =
716
+ undefined;
638
717
  }