@oneuptime/common 11.6.1 → 11.6.2

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 (397) hide show
  1. package/Models/AnalyticsModels/Index.ts +4 -0
  2. package/Models/AnalyticsModels/KubernetesCostAllocation.ts +842 -0
  3. package/Models/AnalyticsModels/NetworkFlow.ts +54 -0
  4. package/Models/AnalyticsModels/SloHistory.ts +240 -0
  5. package/Models/DatabaseModels/Index.ts +20 -0
  6. package/Models/DatabaseModels/NetworkDevice.ts +453 -6
  7. package/Models/DatabaseModels/NetworkDeviceDiscoveryScan.ts +7 -6
  8. package/Models/DatabaseModels/NetworkEndpoint.ts +753 -0
  9. package/Models/DatabaseModels/NetworkSite.ts +1155 -0
  10. package/Models/DatabaseModels/NetworkSiteAssignmentRule.ts +517 -0
  11. package/Models/DatabaseModels/NetworkSiteLink.ts +611 -0
  12. package/Models/DatabaseModels/NetworkSiteStatusTimeline.ts +520 -0
  13. package/Models/DatabaseModels/NetworkSiteType.ts +499 -0
  14. package/Models/DatabaseModels/ServiceLevelObjective.ts +1106 -0
  15. package/Models/DatabaseModels/ServiceLevelObjectiveBurnRateRule.ts +762 -0
  16. package/Models/DatabaseModels/ServiceLevelObjectiveOwnerTeam.ts +444 -0
  17. package/Models/DatabaseModels/ServiceLevelObjectiveOwnerUser.ts +443 -0
  18. package/Server/Infrastructure/Postgres/SchemaMigrations/1784757142154-AddNetworkSiteHierarchyAndEndpoints.ts +359 -0
  19. package/Server/Infrastructure/Postgres/SchemaMigrations/1784897317860-AddNetworkSiteAlerting.ts +48 -0
  20. package/Server/Infrastructure/Postgres/SchemaMigrations/1784970388777-AddNetworkDevicePollingColumns.ts +65 -0
  21. package/Server/Infrastructure/Postgres/SchemaMigrations/1784986826214-AddNetworkSiteTypeTable.ts +88 -0
  22. package/Server/Infrastructure/Postgres/SchemaMigrations/1784987015619-AddServiceLevelObjective.ts +391 -0
  23. package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +10 -0
  24. package/Server/Services/AnalyticsDatabaseService.ts +25 -9
  25. package/Server/Services/Index.ts +24 -0
  26. package/Server/Services/KubernetesCostAllocationService.ts +14 -0
  27. package/Server/Services/MetricService.ts +21 -2
  28. package/Server/Services/MonitorService.ts +22 -0
  29. package/Server/Services/NetworkDeviceService.ts +438 -2
  30. package/Server/Services/NetworkEndpointService.ts +414 -0
  31. package/Server/Services/NetworkSiteAssignmentRuleService.ts +98 -0
  32. package/Server/Services/NetworkSiteLinkService.ts +10 -0
  33. package/Server/Services/NetworkSiteService.ts +1254 -0
  34. package/Server/Services/NetworkSiteStatusTimelineService.ts +10 -0
  35. package/Server/Services/NetworkSiteTypeService.ts +10 -0
  36. package/Server/Services/ProjectService.ts +122 -2
  37. package/Server/Services/ServiceLevelObjectiveBurnRateRuleService.ts +457 -0
  38. package/Server/Services/ServiceLevelObjectiveOwnerTeamService.ts +10 -0
  39. package/Server/Services/ServiceLevelObjectiveOwnerUserService.ts +10 -0
  40. package/Server/Services/ServiceLevelObjectiveService.ts +677 -0
  41. package/Server/Services/SloHistoryService.ts +101 -0
  42. package/Server/Services/UserNotificationSettingService.ts +37 -0
  43. package/Server/Types/AnalyticsDatabase/AggregateBy.ts +9 -0
  44. package/Server/Types/Database/Permissions/OwnerTableRegistry.ts +15 -0
  45. package/Server/Utils/AnalyticsDatabase/Statement.ts +39 -3
  46. package/Server/Utils/AnalyticsDatabase/StatementGenerator.ts +87 -48
  47. package/Server/Utils/Memory.ts +9 -1
  48. package/Server/Utils/Monitor/Criteria/SnmpMonitorCriteria.ts +190 -12
  49. package/Server/Utils/Monitor/Data/OuiVendors.json +6920 -0
  50. package/Server/Utils/Monitor/DnsResolutionCache.ts +129 -0
  51. package/Server/Utils/Monitor/MonitorResource.ts +4 -30
  52. package/Server/Utils/Monitor/NetworkDeviceHydrationUtil.ts +214 -39
  53. package/Server/Utils/Monitor/NetworkDeviceMetricUtil.ts +343 -0
  54. package/Server/Utils/Monitor/NetworkDeviceWalkUtil.ts +251 -0
  55. package/Server/Utils/Monitor/NetworkInventoryUtil.ts +176 -142
  56. package/Server/Utils/Monitor/OuiLookupUtil.ts +49 -0
  57. package/Server/Utils/Monitor/SnmpInterfaceRateUtil.ts +17 -13
  58. package/Server/Utils/WhatsAppTemplateUtil.ts +7 -3
  59. package/Tests/Models/AnalyticsModels/KubernetesCostAllocation.test.ts +135 -0
  60. package/Tests/Models/NetworkSiteHierarchy.test.ts +134 -0
  61. package/Tests/Server/Services/AnalyticsDatabaseService.test.ts +239 -0
  62. package/Tests/Server/Services/KubernetesCostAllocationAggregate.test.ts +338 -0
  63. package/Tests/Server/Services/MetricServiceAggregate.test.ts +142 -0
  64. package/Tests/Server/Services/NetworkDeviceSiteAssignment.test.ts +484 -0
  65. package/Tests/Server/Services/NetworkEndpointServiceUpsert.test.ts +686 -0
  66. package/Tests/Server/Services/NetworkSiteAssignmentRuleService.test.ts +185 -0
  67. package/Tests/Server/Services/NetworkSiteService.test.ts +1354 -0
  68. package/Tests/Server/Services/ServiceLevelObjectiveBurnRateRuleService.test.ts +1313 -0
  69. package/Tests/Server/Services/ServiceLevelObjectiveService.test.ts +1988 -0
  70. package/Tests/Server/Utils/AnalyticsDatabase/Statement.test.ts +22 -0
  71. package/Tests/Server/Utils/AnalyticsDatabase/StatementGenerator.test.ts +404 -0
  72. package/Tests/Server/Utils/Encryption.test.ts +70 -0
  73. package/Tests/Server/Utils/FileAttachmentMarkdownUtil.test.ts +225 -0
  74. package/Tests/Server/Utils/JsonWebToken.test.ts +175 -0
  75. package/Tests/Server/Utils/LocalFile.test.ts +258 -0
  76. package/Tests/Server/Utils/Memory.test.ts +213 -0
  77. package/Tests/Server/Utils/Monitor/Criteria/LogMonitorCriteria.test.ts +30 -0
  78. package/Tests/Server/Utils/Monitor/Criteria/SnmpMonitorCriteria.test.ts +385 -0
  79. package/Tests/Server/Utils/Monitor/DnsResolutionCache.test.ts +194 -0
  80. package/Tests/Server/Utils/Monitor/NetworkDeviceHydrationUtil.test.ts +155 -0
  81. package/Tests/Server/Utils/Monitor/NetworkDeviceWalkUtil.test.ts +600 -0
  82. package/Tests/Server/Utils/Monitor/NetworkInventoryUtil.test.ts +151 -124
  83. package/Tests/Server/Utils/Monitor/SnmpInterfaceRateUtil.test.ts +496 -0
  84. package/Tests/Server/Utils/MonitorCriteriaDataExtractor.test.ts +175 -0
  85. package/Tests/Server/Utils/MonitorCriteriaMessageFormatter.test.ts +282 -0
  86. package/Tests/Server/Utils/OuiLookupUtil.test.ts +59 -0
  87. package/Tests/Server/Utils/SeriesResourceLabels.test.ts +117 -0
  88. package/Tests/Server/Utils/StackTraceParser.test.ts +370 -0
  89. package/Tests/Server/Utils/Stream.test.ts +87 -0
  90. package/Tests/Server/Utils/ValidateGlobalProviderProjectTeams.test.ts +221 -0
  91. package/Tests/Server/Utils/WhatsAppTemplateUtil.test.ts +199 -0
  92. package/Tests/Types/Database/CompareOperatorWireSerialization.test.ts +33 -0
  93. package/Tests/Types/Email.test.ts +198 -0
  94. package/Tests/Types/Kubernetes/KubernetesObjectParser.test.ts +177 -0
  95. package/Tests/Types/Log/LogQueryToFilter.test.ts +111 -0
  96. package/Tests/Types/Monitor/MonitorStepNetworkDeviceMonitor.test.ts +141 -1
  97. package/Tests/Types/Monitor/MonitorType.test.ts +59 -1
  98. package/Tests/Types/Monitor/NetworkDeviceAlertPack.test.ts +97 -0
  99. package/Tests/Types/Monitor/SnmpEndpointDiscovery.test.ts +151 -0
  100. package/Tests/Types/Monitor/SnmpVendorTemplate.test.ts +110 -6
  101. package/Tests/Types/NetworkSite/DefaultNetworkSiteType.test.ts +129 -0
  102. package/Tests/Types/SerializableObjectDictionary.test.ts +166 -0
  103. package/Tests/Types/Time/RangeStartAndEndDateTime.test.ts +98 -0
  104. package/Tests/Types/WebsiteRequest.test.ts +230 -0
  105. package/Tests/UI/Components/EntityFilterRoundTrip.test.tsx +103 -0
  106. package/Tests/UI/Components/ModelTable/BaseModelTableUrlState.test.tsx +612 -0
  107. package/Tests/UI/Components/ModelTable/FilterDataToQuery.test.ts +275 -0
  108. package/Tests/UI/Utils/LogExport.test.ts +159 -0
  109. package/Tests/UI/Utils/Navigation.test.ts +183 -0
  110. package/Tests/UI/Utils/TableFilterUrlState.test.ts +539 -0
  111. package/Tests/UI/Utils/TableViewUrlState.test.ts +272 -0
  112. package/Tests/Utils/Base64.test.ts +51 -0
  113. package/Tests/Utils/Boolean.test.ts +76 -0
  114. package/Tests/Utils/Crypto.test.ts +48 -0
  115. package/Tests/Utils/Dashboard/DashboardSloComponent.test.ts +259 -0
  116. package/Tests/Utils/Dashboard/ModelQueryVariableInterpolation.test.ts +162 -0
  117. package/Tests/Utils/Enum.test.ts +54 -0
  118. package/Tests/Utils/IpCanonicalUtil.test.ts +85 -0
  119. package/Tests/Utils/Metrics/MetricSeriesFingerprint.test.ts +160 -0
  120. package/Tests/Utils/Monitor/EndpointAttachmentUtil.test.ts +836 -0
  121. package/Tests/Utils/Monitor/MonitorMetricType.test.ts +218 -0
  122. package/Tests/Utils/Monitor/NetworkTopologyUtil.test.ts +447 -0
  123. package/Tests/Utils/NetworkSite/CidrMatchUtil.test.ts +440 -0
  124. package/Tests/Utils/NetworkSite/MaterializedPathUtil.test.ts +205 -0
  125. package/Tests/Utils/NetworkSite/SiteStatusRollupUtil.test.ts +221 -0
  126. package/Tests/Utils/NetworkSite/SiteUptimeUtil.test.ts +283 -0
  127. package/Tests/Utils/ObjectUtil.test.ts +30 -0
  128. package/Tests/Utils/Slo/SloStatusColor.test.ts +89 -0
  129. package/Tests/Utils/Slo/SloUtil.test.ts +1980 -0
  130. package/Tests/Utils/Slo/SloWidgetFormat.test.ts +605 -0
  131. package/Tests/Utils/TechStack.test.ts +50 -0
  132. package/Tests/Utils/Traces/CriticalPath.test.ts +178 -0
  133. package/Types/AnalyticsDatabase/AnalyticsTableName.ts +10 -0
  134. package/Types/BaseDatabase/EqualTo.ts +9 -1
  135. package/Types/BaseDatabase/EqualToOrNull.ts +9 -1
  136. package/Types/BaseDatabase/NotEqual.ts +9 -1
  137. package/Types/Dashboard/DashboardComponentType.ts +1 -0
  138. package/Types/Dashboard/DashboardComponents/ComponentArgument.ts +1 -0
  139. package/Types/Dashboard/DashboardComponents/DashboardSloComponent.ts +42 -0
  140. package/Types/Dashboard/DashboardTemplates.ts +214 -0
  141. package/Types/Email/EmailTemplateType.ts +2 -0
  142. package/Types/Kubernetes/KubernetesCostIngest.ts +79 -0
  143. package/Types/Monitor/CriteriaFilter.ts +9 -0
  144. package/Types/Monitor/MonitorStep.ts +5 -8
  145. package/Types/Monitor/MonitorStepNetworkDeviceMonitor.ts +27 -5
  146. package/Types/Monitor/MonitorType.ts +15 -5
  147. package/Types/Monitor/SnmpMonitor/ArpEntry.ts +14 -0
  148. package/Types/Monitor/SnmpMonitor/FdbEntry.ts +18 -0
  149. package/Types/Monitor/SnmpMonitor/NetworkDeviceAlertPack.ts +10 -3
  150. package/Types/Monitor/SnmpMonitor/NetworkTopology.ts +31 -5
  151. package/Types/Monitor/SnmpMonitor/SnmpMonitorResponse.ts +12 -0
  152. package/Types/Monitor/SnmpMonitor/SnmpVendorTemplate.ts +231 -3
  153. package/Types/NetworkSite/DefaultNetworkSiteType.ts +20 -0
  154. package/Types/NotificationSetting/NotificationSettingEventType.ts +4 -0
  155. package/Types/Permission.ts +449 -0
  156. package/Types/ServiceLevelObjective/SliType.ts +6 -0
  157. package/Types/ServiceLevelObjective/SloMultiMonitorMode.ts +6 -0
  158. package/Types/ServiceLevelObjective/SloStatus.ts +9 -0
  159. package/Types/ServiceLevelObjective/SloWindowType.ts +6 -0
  160. package/Types/Telemetry/ServiceType.ts +1 -0
  161. package/UI/Components/Filters/EntityFilter.tsx +16 -0
  162. package/UI/Components/Filters/FilterViewer.tsx +22 -5
  163. package/UI/Components/List/List.tsx +8 -0
  164. package/UI/Components/ModelTable/BaseModelTable.tsx +309 -106
  165. package/UI/Components/ModelTable/FilterDataToQuery.ts +172 -0
  166. package/UI/Components/Navbar/NavBar.tsx +16 -2
  167. package/UI/Components/Navbar/NavBarMenuModal.tsx +3 -3
  168. package/UI/Utils/Navigation.ts +10 -0
  169. package/UI/Utils/TableFilterUrlState.ts +204 -17
  170. package/UI/Utils/TableViewUrlState.ts +165 -0
  171. package/Utils/Dashboard/Components/DashboardSloComponent.ts +114 -0
  172. package/Utils/Dashboard/Components/Index.ts +7 -0
  173. package/Utils/IpCanonicalUtil.ts +134 -0
  174. package/Utils/Monitor/EndpointAttachmentUtil.ts +508 -0
  175. package/Utils/Monitor/NetworkTopologyUtil.ts +157 -5
  176. package/Utils/NetworkSite/CidrMatchUtil.ts +296 -0
  177. package/Utils/NetworkSite/MaterializedPathUtil.ts +115 -0
  178. package/Utils/NetworkSite/SiteStatusRollupUtil.ts +97 -0
  179. package/Utils/NetworkSite/SiteUptimeUtil.ts +111 -0
  180. package/Utils/Slo/SloStatusColor.ts +54 -0
  181. package/Utils/Slo/SloUtil.ts +637 -0
  182. package/Utils/Slo/SloWidgetFormat.ts +383 -0
  183. package/build/dist/Models/AnalyticsModels/Index.js +4 -0
  184. package/build/dist/Models/AnalyticsModels/Index.js.map +1 -1
  185. package/build/dist/Models/AnalyticsModels/KubernetesCostAllocation.js +713 -0
  186. package/build/dist/Models/AnalyticsModels/KubernetesCostAllocation.js.map +1 -0
  187. package/build/dist/Models/AnalyticsModels/NetworkFlow.js +44 -0
  188. package/build/dist/Models/AnalyticsModels/NetworkFlow.js.map +1 -1
  189. package/build/dist/Models/AnalyticsModels/SloHistory.js +215 -0
  190. package/build/dist/Models/AnalyticsModels/SloHistory.js.map +1 -0
  191. package/build/dist/Models/DatabaseModels/Index.js +20 -0
  192. package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
  193. package/build/dist/Models/DatabaseModels/NetworkDevice.js +458 -6
  194. package/build/dist/Models/DatabaseModels/NetworkDevice.js.map +1 -1
  195. package/build/dist/Models/DatabaseModels/NetworkDeviceDiscoveryScan.js +0 -6
  196. package/build/dist/Models/DatabaseModels/NetworkDeviceDiscoveryScan.js.map +1 -1
  197. package/build/dist/Models/DatabaseModels/NetworkEndpoint.js +779 -0
  198. package/build/dist/Models/DatabaseModels/NetworkEndpoint.js.map +1 -0
  199. package/build/dist/Models/DatabaseModels/NetworkSite.js +1180 -0
  200. package/build/dist/Models/DatabaseModels/NetworkSite.js.map +1 -0
  201. package/build/dist/Models/DatabaseModels/NetworkSiteAssignmentRule.js +534 -0
  202. package/build/dist/Models/DatabaseModels/NetworkSiteAssignmentRule.js.map +1 -0
  203. package/build/dist/Models/DatabaseModels/NetworkSiteLink.js +629 -0
  204. package/build/dist/Models/DatabaseModels/NetworkSiteLink.js.map +1 -0
  205. package/build/dist/Models/DatabaseModels/NetworkSiteStatusTimeline.js +538 -0
  206. package/build/dist/Models/DatabaseModels/NetworkSiteStatusTimeline.js.map +1 -0
  207. package/build/dist/Models/DatabaseModels/NetworkSiteType.js +522 -0
  208. package/build/dist/Models/DatabaseModels/NetworkSiteType.js.map +1 -0
  209. package/build/dist/Models/DatabaseModels/ServiceLevelObjective.js +1124 -0
  210. package/build/dist/Models/DatabaseModels/ServiceLevelObjective.js.map +1 -0
  211. package/build/dist/Models/DatabaseModels/ServiceLevelObjectiveBurnRateRule.js +769 -0
  212. package/build/dist/Models/DatabaseModels/ServiceLevelObjectiveBurnRateRule.js.map +1 -0
  213. package/build/dist/Models/DatabaseModels/ServiceLevelObjectiveOwnerTeam.js +460 -0
  214. package/build/dist/Models/DatabaseModels/ServiceLevelObjectiveOwnerTeam.js.map +1 -0
  215. package/build/dist/Models/DatabaseModels/ServiceLevelObjectiveOwnerUser.js +459 -0
  216. package/build/dist/Models/DatabaseModels/ServiceLevelObjectiveOwnerUser.js.map +1 -0
  217. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784757142154-AddNetworkSiteHierarchyAndEndpoints.js +130 -0
  218. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784757142154-AddNetworkSiteHierarchyAndEndpoints.js.map +1 -0
  219. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784897317860-AddNetworkSiteAlerting.js +31 -0
  220. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784897317860-AddNetworkSiteAlerting.js.map +1 -0
  221. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784970388777-AddNetworkDevicePollingColumns.js +36 -0
  222. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784970388777-AddNetworkDevicePollingColumns.js.map +1 -0
  223. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784986826214-AddNetworkSiteTypeTable.js +49 -0
  224. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784986826214-AddNetworkSiteTypeTable.js.map +1 -0
  225. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784987015619-AddServiceLevelObjective.js +140 -0
  226. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784987015619-AddServiceLevelObjective.js.map +1 -0
  227. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +10 -0
  228. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
  229. package/build/dist/Server/Services/AnalyticsDatabaseService.js +23 -6
  230. package/build/dist/Server/Services/AnalyticsDatabaseService.js.map +1 -1
  231. package/build/dist/Server/Services/Index.js +24 -0
  232. package/build/dist/Server/Services/Index.js.map +1 -1
  233. package/build/dist/Server/Services/KubernetesCostAllocationService.js +12 -0
  234. package/build/dist/Server/Services/KubernetesCostAllocationService.js.map +1 -0
  235. package/build/dist/Server/Services/MetricService.js +21 -3
  236. package/build/dist/Server/Services/MetricService.js.map +1 -1
  237. package/build/dist/Server/Services/MonitorService.js +19 -0
  238. package/build/dist/Server/Services/MonitorService.js.map +1 -1
  239. package/build/dist/Server/Services/NetworkDeviceService.js +351 -1
  240. package/build/dist/Server/Services/NetworkDeviceService.js.map +1 -1
  241. package/build/dist/Server/Services/NetworkEndpointService.js +319 -0
  242. package/build/dist/Server/Services/NetworkEndpointService.js.map +1 -0
  243. package/build/dist/Server/Services/NetworkSiteAssignmentRuleService.js +90 -0
  244. package/build/dist/Server/Services/NetworkSiteAssignmentRuleService.js.map +1 -0
  245. package/build/dist/Server/Services/NetworkSiteLinkService.js +9 -0
  246. package/build/dist/Server/Services/NetworkSiteLinkService.js.map +1 -0
  247. package/build/dist/Server/Services/NetworkSiteService.js +1038 -0
  248. package/build/dist/Server/Services/NetworkSiteService.js.map +1 -0
  249. package/build/dist/Server/Services/NetworkSiteStatusTimelineService.js +9 -0
  250. package/build/dist/Server/Services/NetworkSiteStatusTimelineService.js.map +1 -0
  251. package/build/dist/Server/Services/NetworkSiteTypeService.js +9 -0
  252. package/build/dist/Server/Services/NetworkSiteTypeService.js.map +1 -0
  253. package/build/dist/Server/Services/ProjectService.js +98 -2
  254. package/build/dist/Server/Services/ProjectService.js.map +1 -1
  255. package/build/dist/Server/Services/ServiceLevelObjectiveBurnRateRuleService.js +358 -0
  256. package/build/dist/Server/Services/ServiceLevelObjectiveBurnRateRuleService.js.map +1 -0
  257. package/build/dist/Server/Services/ServiceLevelObjectiveOwnerTeamService.js +9 -0
  258. package/build/dist/Server/Services/ServiceLevelObjectiveOwnerTeamService.js.map +1 -0
  259. package/build/dist/Server/Services/ServiceLevelObjectiveOwnerUserService.js +9 -0
  260. package/build/dist/Server/Services/ServiceLevelObjectiveOwnerUserService.js.map +1 -0
  261. package/build/dist/Server/Services/ServiceLevelObjectiveService.js +582 -0
  262. package/build/dist/Server/Services/ServiceLevelObjectiveService.js.map +1 -0
  263. package/build/dist/Server/Services/SloHistoryService.js +77 -0
  264. package/build/dist/Server/Services/SloHistoryService.js.map +1 -0
  265. package/build/dist/Server/Services/UserNotificationSettingService.js +20 -0
  266. package/build/dist/Server/Services/UserNotificationSettingService.js.map +1 -1
  267. package/build/dist/Server/Types/AnalyticsDatabase/AggregateBy.js +9 -0
  268. package/build/dist/Server/Types/AnalyticsDatabase/AggregateBy.js.map +1 -1
  269. package/build/dist/Server/Types/Database/Permissions/OwnerTableRegistry.js +15 -0
  270. package/build/dist/Server/Types/Database/Permissions/OwnerTableRegistry.js.map +1 -1
  271. package/build/dist/Server/Utils/AnalyticsDatabase/Statement.js +31 -0
  272. package/build/dist/Server/Utils/AnalyticsDatabase/Statement.js.map +1 -1
  273. package/build/dist/Server/Utils/AnalyticsDatabase/StatementGenerator.js +76 -48
  274. package/build/dist/Server/Utils/AnalyticsDatabase/StatementGenerator.js.map +1 -1
  275. package/build/dist/Server/Utils/Memory.js +9 -1
  276. package/build/dist/Server/Utils/Memory.js.map +1 -1
  277. package/build/dist/Server/Utils/Monitor/Criteria/SnmpMonitorCriteria.js +132 -10
  278. package/build/dist/Server/Utils/Monitor/Criteria/SnmpMonitorCriteria.js.map +1 -1
  279. package/build/dist/Server/Utils/Monitor/Data/OuiVendors.json +6920 -0
  280. package/build/dist/Server/Utils/Monitor/DnsResolutionCache.js +77 -0
  281. package/build/dist/Server/Utils/Monitor/DnsResolutionCache.js.map +1 -0
  282. package/build/dist/Server/Utils/Monitor/MonitorResource.js +21 -41
  283. package/build/dist/Server/Utils/Monitor/MonitorResource.js.map +1 -1
  284. package/build/dist/Server/Utils/Monitor/NetworkDeviceHydrationUtil.js +152 -40
  285. package/build/dist/Server/Utils/Monitor/NetworkDeviceHydrationUtil.js.map +1 -1
  286. package/build/dist/Server/Utils/Monitor/NetworkDeviceMetricUtil.js +262 -0
  287. package/build/dist/Server/Utils/Monitor/NetworkDeviceMetricUtil.js.map +1 -0
  288. package/build/dist/Server/Utils/Monitor/NetworkDeviceWalkUtil.js +201 -0
  289. package/build/dist/Server/Utils/Monitor/NetworkDeviceWalkUtil.js.map +1 -0
  290. package/build/dist/Server/Utils/Monitor/NetworkInventoryUtil.js +152 -120
  291. package/build/dist/Server/Utils/Monitor/NetworkInventoryUtil.js.map +1 -1
  292. package/build/dist/Server/Utils/Monitor/OuiLookupUtil.js +44 -0
  293. package/build/dist/Server/Utils/Monitor/OuiLookupUtil.js.map +1 -0
  294. package/build/dist/Server/Utils/Monitor/SnmpInterfaceRateUtil.js +10 -10
  295. package/build/dist/Server/Utils/Monitor/SnmpInterfaceRateUtil.js.map +1 -1
  296. package/build/dist/Server/Utils/WhatsAppTemplateUtil.js +5 -0
  297. package/build/dist/Server/Utils/WhatsAppTemplateUtil.js.map +1 -1
  298. package/build/dist/Types/AnalyticsDatabase/AnalyticsTableName.js +10 -0
  299. package/build/dist/Types/AnalyticsDatabase/AnalyticsTableName.js.map +1 -1
  300. package/build/dist/Types/BaseDatabase/EqualTo.js +9 -1
  301. package/build/dist/Types/BaseDatabase/EqualTo.js.map +1 -1
  302. package/build/dist/Types/BaseDatabase/EqualToOrNull.js +9 -1
  303. package/build/dist/Types/BaseDatabase/EqualToOrNull.js.map +1 -1
  304. package/build/dist/Types/BaseDatabase/NotEqual.js +9 -1
  305. package/build/dist/Types/BaseDatabase/NotEqual.js.map +1 -1
  306. package/build/dist/Types/Dashboard/DashboardComponentType.js +1 -0
  307. package/build/dist/Types/Dashboard/DashboardComponentType.js.map +1 -1
  308. package/build/dist/Types/Dashboard/DashboardComponents/ComponentArgument.js +1 -0
  309. package/build/dist/Types/Dashboard/DashboardComponents/ComponentArgument.js.map +1 -1
  310. package/build/dist/Types/Dashboard/DashboardComponents/DashboardSloComponent.js +23 -0
  311. package/build/dist/Types/Dashboard/DashboardComponents/DashboardSloComponent.js.map +1 -0
  312. package/build/dist/Types/Dashboard/DashboardTemplates.js +205 -0
  313. package/build/dist/Types/Dashboard/DashboardTemplates.js.map +1 -1
  314. package/build/dist/Types/Email/EmailTemplateType.js +1 -0
  315. package/build/dist/Types/Email/EmailTemplateType.js.map +1 -1
  316. package/build/dist/Types/Kubernetes/KubernetesCostIngest.js +21 -0
  317. package/build/dist/Types/Kubernetes/KubernetesCostIngest.js.map +1 -0
  318. package/build/dist/Types/Monitor/CriteriaFilter.js +1 -0
  319. package/build/dist/Types/Monitor/CriteriaFilter.js.map +1 -1
  320. package/build/dist/Types/Monitor/MonitorStep.js +5 -5
  321. package/build/dist/Types/Monitor/MonitorStep.js.map +1 -1
  322. package/build/dist/Types/Monitor/MonitorStepNetworkDeviceMonitor.js +8 -0
  323. package/build/dist/Types/Monitor/MonitorStepNetworkDeviceMonitor.js.map +1 -1
  324. package/build/dist/Types/Monitor/MonitorType.js +15 -5
  325. package/build/dist/Types/Monitor/MonitorType.js.map +1 -1
  326. package/build/dist/Types/Monitor/SnmpMonitor/ArpEntry.js +2 -0
  327. package/build/dist/Types/Monitor/SnmpMonitor/ArpEntry.js.map +1 -0
  328. package/build/dist/Types/Monitor/SnmpMonitor/FdbEntry.js +2 -0
  329. package/build/dist/Types/Monitor/SnmpMonitor/FdbEntry.js.map +1 -0
  330. package/build/dist/Types/Monitor/SnmpMonitor/NetworkDeviceAlertPack.js +9 -3
  331. package/build/dist/Types/Monitor/SnmpMonitor/NetworkDeviceAlertPack.js.map +1 -1
  332. package/build/dist/Types/Monitor/SnmpMonitor/SnmpVendorTemplate.js +217 -3
  333. package/build/dist/Types/Monitor/SnmpMonitor/SnmpVendorTemplate.js.map +1 -1
  334. package/build/dist/Types/NetworkSite/DefaultNetworkSiteType.js +21 -0
  335. package/build/dist/Types/NetworkSite/DefaultNetworkSiteType.js.map +1 -0
  336. package/build/dist/Types/NotificationSetting/NotificationSettingEventType.js +3 -0
  337. package/build/dist/Types/NotificationSetting/NotificationSettingEventType.js.map +1 -1
  338. package/build/dist/Types/Permission.js +409 -0
  339. package/build/dist/Types/Permission.js.map +1 -1
  340. package/build/dist/Types/ServiceLevelObjective/SliType.js +7 -0
  341. package/build/dist/Types/ServiceLevelObjective/SliType.js.map +1 -0
  342. package/build/dist/Types/ServiceLevelObjective/SloMultiMonitorMode.js +7 -0
  343. package/build/dist/Types/ServiceLevelObjective/SloMultiMonitorMode.js.map +1 -0
  344. package/build/dist/Types/ServiceLevelObjective/SloStatus.js +10 -0
  345. package/build/dist/Types/ServiceLevelObjective/SloStatus.js.map +1 -0
  346. package/build/dist/Types/ServiceLevelObjective/SloWindowType.js +7 -0
  347. package/build/dist/Types/ServiceLevelObjective/SloWindowType.js.map +1 -0
  348. package/build/dist/Types/Telemetry/ServiceType.js +1 -0
  349. package/build/dist/Types/Telemetry/ServiceType.js.map +1 -1
  350. package/build/dist/UI/Components/Filters/EntityFilter.js +15 -0
  351. package/build/dist/UI/Components/Filters/EntityFilter.js.map +1 -1
  352. package/build/dist/UI/Components/Filters/FilterViewer.js +19 -4
  353. package/build/dist/UI/Components/Filters/FilterViewer.js.map +1 -1
  354. package/build/dist/UI/Components/List/List.js +1 -1
  355. package/build/dist/UI/Components/List/List.js.map +1 -1
  356. package/build/dist/UI/Components/ModelTable/BaseModelTable.js +235 -89
  357. package/build/dist/UI/Components/ModelTable/BaseModelTable.js.map +1 -1
  358. package/build/dist/UI/Components/ModelTable/FilterDataToQuery.js +96 -0
  359. package/build/dist/UI/Components/ModelTable/FilterDataToQuery.js.map +1 -0
  360. package/build/dist/UI/Components/Navbar/NavBar.js +14 -2
  361. package/build/dist/UI/Components/Navbar/NavBar.js.map +1 -1
  362. package/build/dist/UI/Components/Navbar/NavBarMenuModal.js +3 -2
  363. package/build/dist/UI/Components/Navbar/NavBarMenuModal.js.map +1 -1
  364. package/build/dist/UI/Utils/Navigation.js +9 -0
  365. package/build/dist/UI/Utils/Navigation.js.map +1 -1
  366. package/build/dist/UI/Utils/TableFilterUrlState.js +159 -15
  367. package/build/dist/UI/Utils/TableFilterUrlState.js.map +1 -1
  368. package/build/dist/UI/Utils/TableViewUrlState.js +103 -0
  369. package/build/dist/UI/Utils/TableViewUrlState.js.map +1 -0
  370. package/build/dist/Utils/Dashboard/Components/DashboardSloComponent.js +93 -0
  371. package/build/dist/Utils/Dashboard/Components/DashboardSloComponent.js.map +1 -0
  372. package/build/dist/Utils/Dashboard/Components/Index.js +4 -0
  373. package/build/dist/Utils/Dashboard/Components/Index.js.map +1 -1
  374. package/build/dist/Utils/IpCanonicalUtil.js +110 -0
  375. package/build/dist/Utils/IpCanonicalUtil.js.map +1 -0
  376. package/build/dist/Utils/Monitor/EndpointAttachmentUtil.js +311 -0
  377. package/build/dist/Utils/Monitor/EndpointAttachmentUtil.js.map +1 -0
  378. package/build/dist/Utils/Monitor/NetworkTopologyUtil.js +98 -5
  379. package/build/dist/Utils/Monitor/NetworkTopologyUtil.js.map +1 -1
  380. package/build/dist/Utils/NetworkSite/CidrMatchUtil.js +222 -0
  381. package/build/dist/Utils/NetworkSite/CidrMatchUtil.js.map +1 -0
  382. package/build/dist/Utils/NetworkSite/MaterializedPathUtil.js +89 -0
  383. package/build/dist/Utils/NetworkSite/MaterializedPathUtil.js.map +1 -0
  384. package/build/dist/Utils/NetworkSite/SiteStatusRollupUtil.js +60 -0
  385. package/build/dist/Utils/NetworkSite/SiteStatusRollupUtil.js.map +1 -0
  386. package/build/dist/Utils/NetworkSite/SiteUptimeUtil.js +76 -0
  387. package/build/dist/Utils/NetworkSite/SiteUptimeUtil.js.map +1 -0
  388. package/build/dist/Utils/Slo/SloStatusColor.js +18 -0
  389. package/build/dist/Utils/Slo/SloStatusColor.js.map +1 -0
  390. package/build/dist/Utils/Slo/SloUtil.js +393 -0
  391. package/build/dist/Utils/Slo/SloUtil.js.map +1 -0
  392. package/build/dist/Utils/Slo/SloWidgetFormat.js +174 -0
  393. package/build/dist/Utils/Slo/SloWidgetFormat.js.map +1 -0
  394. package/package.json +2 -2
  395. package/Types/Dashboard/DashboardComponents/Index.ts +0 -7
  396. package/build/dist/Types/Dashboard/DashboardComponents/Index.js +0 -8
  397. package/build/dist/Types/Dashboard/DashboardComponents/Index.js.map +0 -1
@@ -0,0 +1,1106 @@
1
+ import Label from "./Label";
2
+ import Monitor from "./Monitor";
3
+ import MonitorStatus from "./MonitorStatus";
4
+ import Project from "./Project";
5
+ import User from "./User";
6
+ import BaseModel from "./DatabaseBaseModel/DatabaseBaseModel";
7
+ import Route from "../../Types/API/Route";
8
+ import ColumnAccessControl from "../../Types/Database/AccessControl/ColumnAccessControl";
9
+ import OperationalResource from "../../Types/Database/AccessControl/OperationalResource";
10
+ import TableAccessControl from "../../Types/Database/AccessControl/TableAccessControl";
11
+ import AccessControlColumn from "../../Types/Database/AccessControlColumn";
12
+ import ColumnLength from "../../Types/Database/ColumnLength";
13
+ import ColumnType from "../../Types/Database/ColumnType";
14
+ import CrudApiEndpoint from "../../Types/Database/CrudApiEndpoint";
15
+ import EnableDocumentation from "../../Types/Database/EnableDocumentation";
16
+ import EnableWorkflow from "../../Types/Database/EnableWorkflow";
17
+ import SlugifyColumn from "../../Types/Database/SlugifyColumn";
18
+ import TableColumn from "../../Types/Database/TableColumn";
19
+ import TableColumnType from "../../Types/Database/TableColumnType";
20
+ import TableMetadata from "../../Types/Database/TableMetadata";
21
+ import TenantColumn from "../../Types/Database/TenantColumn";
22
+ import IconProp from "../../Types/Icon/IconProp";
23
+ import { JSONObject } from "../../Types/JSON";
24
+ import ObjectID from "../../Types/ObjectID";
25
+ import Permission from "../../Types/Permission";
26
+ import SliType from "../../Types/ServiceLevelObjective/SliType";
27
+ import SloMultiMonitorMode from "../../Types/ServiceLevelObjective/SloMultiMonitorMode";
28
+ import SloStatus from "../../Types/ServiceLevelObjective/SloStatus";
29
+ import SloWindowType from "../../Types/ServiceLevelObjective/SloWindowType";
30
+ import {
31
+ Column,
32
+ Entity,
33
+ Index,
34
+ JoinColumn,
35
+ JoinTable,
36
+ ManyToMany,
37
+ ManyToOne,
38
+ ValueTransformer,
39
+ } from "typeorm";
40
+
41
+ /*
42
+ * Postgres returns `decimal` columns as strings; convert back to numbers so
43
+ * callers see floats. Mirrors the decimal transformer used by
44
+ * NetworkInterface.
45
+ */
46
+ const decimalTransformer: ValueTransformer = {
47
+ to: (value: number | null | undefined): number | null => {
48
+ if (value === null || value === undefined) {
49
+ return null;
50
+ }
51
+ return value;
52
+ },
53
+ from: (value: string | number | null | undefined): number | null => {
54
+ if (value === null || value === undefined) {
55
+ return null;
56
+ }
57
+ if (typeof value === "number") {
58
+ return value;
59
+ }
60
+ const parsed: number = parseFloat(value);
61
+ return isNaN(parsed) ? null : parsed;
62
+ },
63
+ };
64
+
65
+ /*
66
+ * @OperationalResource marks this as a top-level product resource that has
67
+ * ServiceLevelObjectiveOwnerUser / ServiceLevelObjectiveOwnerTeam tables. Two
68
+ * behaviors key off it and silently no-op without it:
69
+ * OwnedScopePermission.addOwnedScopeToQuery (so PermissionScope.Owned would
70
+ * degrade to Owned == All, a permission leak) and
71
+ * DatabaseService.autoOwnerOnCreate (so the creating user would never become
72
+ * an owner of the SLO they just created).
73
+ */
74
+ @OperationalResource()
75
+ @EnableDocumentation()
76
+ @AccessControlColumn("labels")
77
+ @TenantColumn("projectId")
78
+ @TableAccessControl({
79
+ create: [
80
+ Permission.ProjectOwner,
81
+ Permission.ProjectAdmin,
82
+ Permission.CreateServiceLevelObjective,
83
+ ],
84
+ read: [
85
+ Permission.ProjectOwner,
86
+ Permission.ProjectAdmin,
87
+ Permission.ProjectMember,
88
+ Permission.Viewer,
89
+ Permission.ReadServiceLevelObjective,
90
+ ],
91
+ delete: [
92
+ Permission.ProjectOwner,
93
+ Permission.ProjectAdmin,
94
+ Permission.DeleteServiceLevelObjective,
95
+ ],
96
+ update: [
97
+ Permission.ProjectOwner,
98
+ Permission.ProjectAdmin,
99
+ Permission.EditServiceLevelObjective,
100
+ ],
101
+ })
102
+ @CrudApiEndpoint(new Route("/service-level-objective"))
103
+ @SlugifyColumn("name", "slug")
104
+ @Entity({
105
+ name: "ServiceLevelObjective",
106
+ })
107
+ @EnableWorkflow({
108
+ create: true,
109
+ delete: true,
110
+ update: true,
111
+ read: true,
112
+ })
113
+ @TableMetadata({
114
+ tableName: "ServiceLevelObjective",
115
+ singularName: "Service Level Objective",
116
+ pluralName: "Service Level Objectives",
117
+ icon: IconProp.Gauge,
118
+ tableDescription:
119
+ "Define Service Level Objectives (SLOs) with targets, compliance windows and error budgets, and track how much error budget remains.",
120
+ enableRealtimeEventsOn: {
121
+ update: true,
122
+ },
123
+ })
124
+ export default class ServiceLevelObjective extends BaseModel {
125
+ @ColumnAccessControl({
126
+ create: [
127
+ Permission.ProjectOwner,
128
+ Permission.ProjectAdmin,
129
+ Permission.CreateServiceLevelObjective,
130
+ ],
131
+ read: [
132
+ Permission.ProjectOwner,
133
+ Permission.ProjectAdmin,
134
+ Permission.ProjectMember,
135
+ Permission.Viewer,
136
+ Permission.ReadServiceLevelObjective,
137
+ ],
138
+ update: [],
139
+ })
140
+ @TableColumn({
141
+ manyToOneRelationColumn: "projectId",
142
+ type: TableColumnType.Entity,
143
+ modelType: Project,
144
+ title: "Project",
145
+ description: "Relation to Project Resource in which this object belongs",
146
+ })
147
+ @ManyToOne(
148
+ () => {
149
+ return Project;
150
+ },
151
+ {
152
+ eager: false,
153
+ nullable: true,
154
+ onDelete: "CASCADE",
155
+ orphanedRowAction: "nullify",
156
+ },
157
+ )
158
+ @JoinColumn({ name: "projectId" })
159
+ public project?: Project = undefined;
160
+
161
+ @ColumnAccessControl({
162
+ create: [
163
+ Permission.ProjectOwner,
164
+ Permission.ProjectAdmin,
165
+ Permission.CreateServiceLevelObjective,
166
+ ],
167
+ read: [
168
+ Permission.ProjectOwner,
169
+ Permission.ProjectAdmin,
170
+ Permission.ProjectMember,
171
+ Permission.Viewer,
172
+ Permission.ReadServiceLevelObjective,
173
+ ],
174
+ update: [],
175
+ })
176
+ @Index()
177
+ @TableColumn({
178
+ type: TableColumnType.ObjectID,
179
+ required: true,
180
+ canReadOnRelationQuery: true,
181
+ title: "Project ID",
182
+ description: "ID of your OneUptime Project in which this object belongs",
183
+ })
184
+ @Column({
185
+ type: ColumnType.ObjectID,
186
+ nullable: false,
187
+ transformer: ObjectID.getDatabaseTransformer(),
188
+ })
189
+ public projectId?: ObjectID = undefined;
190
+
191
+ @ColumnAccessControl({
192
+ create: [
193
+ Permission.ProjectOwner,
194
+ Permission.ProjectAdmin,
195
+ Permission.CreateServiceLevelObjective,
196
+ ],
197
+ read: [
198
+ Permission.ProjectOwner,
199
+ Permission.ProjectAdmin,
200
+ Permission.ProjectMember,
201
+ Permission.Viewer,
202
+ Permission.ReadServiceLevelObjective,
203
+ ],
204
+ update: [
205
+ Permission.ProjectOwner,
206
+ Permission.ProjectAdmin,
207
+ Permission.EditServiceLevelObjective,
208
+ ],
209
+ })
210
+ @Index()
211
+ @TableColumn({
212
+ required: true,
213
+ type: TableColumnType.ShortText,
214
+ canReadOnRelationQuery: true,
215
+ title: "Name",
216
+ description: "Name of this Service Level Objective",
217
+ })
218
+ @Column({
219
+ nullable: false,
220
+ type: ColumnType.ShortText,
221
+ length: ColumnLength.ShortText,
222
+ })
223
+ public name?: string = undefined;
224
+
225
+ @ColumnAccessControl({
226
+ create: [
227
+ Permission.ProjectOwner,
228
+ Permission.ProjectAdmin,
229
+ Permission.CreateServiceLevelObjective,
230
+ ],
231
+ read: [
232
+ Permission.ProjectOwner,
233
+ Permission.ProjectAdmin,
234
+ Permission.ProjectMember,
235
+ Permission.Viewer,
236
+ Permission.ReadServiceLevelObjective,
237
+ ],
238
+ update: [
239
+ Permission.ProjectOwner,
240
+ Permission.ProjectAdmin,
241
+ Permission.EditServiceLevelObjective,
242
+ ],
243
+ })
244
+ @TableColumn({
245
+ required: false,
246
+ type: TableColumnType.LongText,
247
+ title: "Description",
248
+ description: "Description of this Service Level Objective",
249
+ canReadOnRelationQuery: true,
250
+ })
251
+ @Column({
252
+ nullable: true,
253
+ type: ColumnType.LongText,
254
+ length: ColumnLength.LongText,
255
+ })
256
+ public description?: string = undefined;
257
+
258
+ @Index()
259
+ @ColumnAccessControl({
260
+ create: [],
261
+ read: [
262
+ Permission.ProjectOwner,
263
+ Permission.ProjectAdmin,
264
+ Permission.ProjectMember,
265
+ Permission.Viewer,
266
+ Permission.ReadServiceLevelObjective,
267
+ ],
268
+ update: [],
269
+ })
270
+ @TableColumn({
271
+ required: true,
272
+ unique: true,
273
+ type: TableColumnType.Slug,
274
+ computed: true,
275
+ title: "Slug",
276
+ description: "Friendly globally unique name for your object",
277
+ })
278
+ @Column({
279
+ nullable: false,
280
+ type: ColumnType.Slug,
281
+ length: ColumnLength.Slug,
282
+ unique: true,
283
+ })
284
+ public slug?: string = undefined;
285
+
286
+ @ColumnAccessControl({
287
+ create: [
288
+ Permission.ProjectOwner,
289
+ Permission.ProjectAdmin,
290
+ Permission.CreateServiceLevelObjective,
291
+ ],
292
+ read: [
293
+ Permission.ProjectOwner,
294
+ Permission.ProjectAdmin,
295
+ Permission.ProjectMember,
296
+ Permission.Viewer,
297
+ Permission.ReadServiceLevelObjective,
298
+ ],
299
+ update: [
300
+ Permission.ProjectOwner,
301
+ Permission.ProjectAdmin,
302
+ Permission.EditServiceLevelObjective,
303
+ ],
304
+ })
305
+ @TableColumn({
306
+ required: false,
307
+ type: TableColumnType.EntityArray,
308
+ modelType: Label,
309
+ title: "Labels",
310
+ description:
311
+ "Relation to Labels Array where this object is categorized in.",
312
+ })
313
+ @ManyToMany(
314
+ () => {
315
+ return Label;
316
+ },
317
+ { eager: false },
318
+ )
319
+ @JoinTable({
320
+ name: "ServiceLevelObjectiveLabel",
321
+ inverseJoinColumn: {
322
+ name: "labelId",
323
+ referencedColumnName: "_id",
324
+ },
325
+ joinColumn: {
326
+ name: "serviceLevelObjectiveId",
327
+ referencedColumnName: "_id",
328
+ },
329
+ })
330
+ public labels?: Array<Label> = undefined;
331
+
332
+ @ColumnAccessControl({
333
+ create: [
334
+ Permission.ProjectOwner,
335
+ Permission.ProjectAdmin,
336
+ Permission.CreateServiceLevelObjective,
337
+ ],
338
+ read: [
339
+ Permission.ProjectOwner,
340
+ Permission.ProjectAdmin,
341
+ Permission.ProjectMember,
342
+ Permission.Viewer,
343
+ Permission.ReadServiceLevelObjective,
344
+ ],
345
+ update: [
346
+ Permission.ProjectOwner,
347
+ Permission.ProjectAdmin,
348
+ Permission.EditServiceLevelObjective,
349
+ ],
350
+ })
351
+ @Index()
352
+ @TableColumn({
353
+ required: true,
354
+ type: TableColumnType.Boolean,
355
+ title: "Is Enabled",
356
+ description:
357
+ "Whether this Service Level Objective is enabled. Disabled SLOs are not evaluated.",
358
+ defaultValue: true,
359
+ isDefaultValueColumn: true,
360
+ })
361
+ @Column({
362
+ type: ColumnType.Boolean,
363
+ nullable: false,
364
+ default: true,
365
+ })
366
+ public isEnabled?: boolean = undefined;
367
+
368
+ // SLI Configuration
369
+
370
+ @ColumnAccessControl({
371
+ create: [
372
+ Permission.ProjectOwner,
373
+ Permission.ProjectAdmin,
374
+ Permission.CreateServiceLevelObjective,
375
+ ],
376
+ read: [
377
+ Permission.ProjectOwner,
378
+ Permission.ProjectAdmin,
379
+ Permission.ProjectMember,
380
+ Permission.Viewer,
381
+ Permission.ReadServiceLevelObjective,
382
+ ],
383
+ update: [
384
+ Permission.ProjectOwner,
385
+ Permission.ProjectAdmin,
386
+ Permission.EditServiceLevelObjective,
387
+ ],
388
+ })
389
+ @TableColumn({
390
+ required: true,
391
+ type: TableColumnType.ShortText,
392
+ title: "SLI Type",
393
+ description:
394
+ "Type of Service Level Indicator this objective measures (Monitor Uptime or Metric)",
395
+ defaultValue: SliType.MonitorUptime,
396
+ isDefaultValueColumn: true,
397
+ canReadOnRelationQuery: true,
398
+ })
399
+ @Column({
400
+ type: ColumnType.ShortText,
401
+ nullable: false,
402
+ default: SliType.MonitorUptime,
403
+ })
404
+ public sliType?: SliType = undefined;
405
+
406
+ @ColumnAccessControl({
407
+ create: [
408
+ Permission.ProjectOwner,
409
+ Permission.ProjectAdmin,
410
+ Permission.CreateServiceLevelObjective,
411
+ ],
412
+ read: [
413
+ Permission.ProjectOwner,
414
+ Permission.ProjectAdmin,
415
+ Permission.ProjectMember,
416
+ Permission.Viewer,
417
+ Permission.ReadServiceLevelObjective,
418
+ ],
419
+ update: [
420
+ Permission.ProjectOwner,
421
+ Permission.ProjectAdmin,
422
+ Permission.EditServiceLevelObjective,
423
+ ],
424
+ })
425
+ @TableColumn({
426
+ required: true,
427
+ type: TableColumnType.ShortText,
428
+ title: "Multi Monitor Mode",
429
+ description:
430
+ "How downtime is counted when multiple monitors are attached. 'Any Monitor Down' counts time when any monitor is down. 'Monitor Seconds Average' averages downtime across monitors.",
431
+ defaultValue: SloMultiMonitorMode.AnyDown,
432
+ isDefaultValueColumn: true,
433
+ })
434
+ @Column({
435
+ type: ColumnType.ShortText,
436
+ nullable: false,
437
+ default: SloMultiMonitorMode.AnyDown,
438
+ })
439
+ public multiMonitorMode?: SloMultiMonitorMode = undefined;
440
+
441
+ @ColumnAccessControl({
442
+ create: [
443
+ Permission.ProjectOwner,
444
+ Permission.ProjectAdmin,
445
+ Permission.CreateServiceLevelObjective,
446
+ ],
447
+ read: [
448
+ Permission.ProjectOwner,
449
+ Permission.ProjectAdmin,
450
+ Permission.ProjectMember,
451
+ Permission.Viewer,
452
+ Permission.ReadServiceLevelObjective,
453
+ ],
454
+ update: [
455
+ Permission.ProjectOwner,
456
+ Permission.ProjectAdmin,
457
+ Permission.EditServiceLevelObjective,
458
+ ],
459
+ })
460
+ @TableColumn({
461
+ required: false,
462
+ type: TableColumnType.EntityArray,
463
+ modelType: Monitor,
464
+ title: "Monitors",
465
+ description:
466
+ "Monitors whose uptime is measured by this Service Level Objective (for Monitor Uptime SLIs).",
467
+ })
468
+ @ManyToMany(
469
+ () => {
470
+ return Monitor;
471
+ },
472
+ { eager: false },
473
+ )
474
+ @JoinTable({
475
+ name: "ServiceLevelObjectiveMonitor",
476
+ inverseJoinColumn: {
477
+ name: "monitorId",
478
+ referencedColumnName: "_id",
479
+ },
480
+ joinColumn: {
481
+ name: "serviceLevelObjectiveId",
482
+ referencedColumnName: "_id",
483
+ },
484
+ })
485
+ public monitors?: Array<Monitor> = undefined;
486
+
487
+ @ColumnAccessControl({
488
+ create: [
489
+ Permission.ProjectOwner,
490
+ Permission.ProjectAdmin,
491
+ Permission.CreateServiceLevelObjective,
492
+ ],
493
+ read: [
494
+ Permission.ProjectOwner,
495
+ Permission.ProjectAdmin,
496
+ Permission.ProjectMember,
497
+ Permission.Viewer,
498
+ Permission.ReadServiceLevelObjective,
499
+ ],
500
+ update: [
501
+ Permission.ProjectOwner,
502
+ Permission.ProjectAdmin,
503
+ Permission.EditServiceLevelObjective,
504
+ ],
505
+ })
506
+ @TableColumn({
507
+ required: false,
508
+ type: TableColumnType.EntityArray,
509
+ modelType: MonitorStatus,
510
+ isDefaultValueColumn: true,
511
+ computed: true,
512
+ title: "Downtime Monitor Statuses",
513
+ description:
514
+ 'List of monitor statuses that are considered as "down" for this Service Level Objective.',
515
+ })
516
+ @ManyToMany(
517
+ () => {
518
+ return MonitorStatus;
519
+ },
520
+ { eager: false },
521
+ )
522
+ @JoinTable({
523
+ name: "ServiceLevelObjectiveDownMonitorStatus",
524
+ inverseJoinColumn: {
525
+ name: "monitorStatusId",
526
+ referencedColumnName: "_id",
527
+ },
528
+ joinColumn: {
529
+ name: "serviceLevelObjectiveId",
530
+ referencedColumnName: "_id",
531
+ },
532
+ })
533
+ public downtimeMonitorStatuses?: Array<MonitorStatus> = undefined;
534
+
535
+ @ColumnAccessControl({
536
+ create: [
537
+ Permission.ProjectOwner,
538
+ Permission.ProjectAdmin,
539
+ Permission.CreateServiceLevelObjective,
540
+ ],
541
+ read: [
542
+ Permission.ProjectOwner,
543
+ Permission.ProjectAdmin,
544
+ Permission.ProjectMember,
545
+ Permission.Viewer,
546
+ Permission.ReadServiceLevelObjective,
547
+ ],
548
+ update: [
549
+ Permission.ProjectOwner,
550
+ Permission.ProjectAdmin,
551
+ Permission.EditServiceLevelObjective,
552
+ ],
553
+ })
554
+ @TableColumn({
555
+ required: false,
556
+ type: TableColumnType.JSON,
557
+ title: "Metric Query Config",
558
+ description:
559
+ "Query configuration for Metric SLIs: metric name, good-event predicate and optional attribute filters.",
560
+ })
561
+ @Column({
562
+ type: ColumnType.JSON,
563
+ nullable: true,
564
+ })
565
+ public metricQueryConfig?: JSONObject = undefined;
566
+
567
+ // Objective Configuration
568
+
569
+ @ColumnAccessControl({
570
+ create: [
571
+ Permission.ProjectOwner,
572
+ Permission.ProjectAdmin,
573
+ Permission.CreateServiceLevelObjective,
574
+ ],
575
+ read: [
576
+ Permission.ProjectOwner,
577
+ Permission.ProjectAdmin,
578
+ Permission.ProjectMember,
579
+ Permission.Viewer,
580
+ Permission.ReadServiceLevelObjective,
581
+ ],
582
+ update: [
583
+ Permission.ProjectOwner,
584
+ Permission.ProjectAdmin,
585
+ Permission.EditServiceLevelObjective,
586
+ ],
587
+ })
588
+ @TableColumn({
589
+ required: true,
590
+ type: TableColumnType.Number,
591
+ canReadOnRelationQuery: true,
592
+ title: "Target Percentage",
593
+ description:
594
+ "Target of this Service Level Objective as a percentage (e.g. 99.9). Must be less than 100.",
595
+ })
596
+ @Column({
597
+ nullable: false,
598
+ type: ColumnType.Decimal,
599
+ transformer: decimalTransformer,
600
+ })
601
+ public targetPercentage?: number = undefined;
602
+
603
+ @ColumnAccessControl({
604
+ create: [
605
+ Permission.ProjectOwner,
606
+ Permission.ProjectAdmin,
607
+ Permission.CreateServiceLevelObjective,
608
+ ],
609
+ read: [
610
+ Permission.ProjectOwner,
611
+ Permission.ProjectAdmin,
612
+ Permission.ProjectMember,
613
+ Permission.Viewer,
614
+ Permission.ReadServiceLevelObjective,
615
+ ],
616
+ update: [
617
+ Permission.ProjectOwner,
618
+ Permission.ProjectAdmin,
619
+ Permission.EditServiceLevelObjective,
620
+ ],
621
+ })
622
+ @TableColumn({
623
+ required: true,
624
+ type: TableColumnType.ShortText,
625
+ title: "Window Type",
626
+ description:
627
+ "Type of compliance window for this objective (Rolling or Calendar Month)",
628
+ defaultValue: SloWindowType.Rolling,
629
+ isDefaultValueColumn: true,
630
+ })
631
+ @Column({
632
+ type: ColumnType.ShortText,
633
+ nullable: false,
634
+ default: SloWindowType.Rolling,
635
+ })
636
+ public windowType?: SloWindowType = undefined;
637
+
638
+ @ColumnAccessControl({
639
+ create: [
640
+ Permission.ProjectOwner,
641
+ Permission.ProjectAdmin,
642
+ Permission.CreateServiceLevelObjective,
643
+ ],
644
+ read: [
645
+ Permission.ProjectOwner,
646
+ Permission.ProjectAdmin,
647
+ Permission.ProjectMember,
648
+ Permission.Viewer,
649
+ Permission.ReadServiceLevelObjective,
650
+ ],
651
+ update: [
652
+ Permission.ProjectOwner,
653
+ Permission.ProjectAdmin,
654
+ Permission.EditServiceLevelObjective,
655
+ ],
656
+ })
657
+ @TableColumn({
658
+ required: true,
659
+ type: TableColumnType.Number,
660
+ title: "Window Days",
661
+ description:
662
+ "Length of the rolling compliance window in days (e.g. 7, 28, 30 or 90). Ignored for Calendar Month windows.",
663
+ defaultValue: 30,
664
+ isDefaultValueColumn: true,
665
+ })
666
+ @Column({
667
+ type: ColumnType.Number,
668
+ nullable: false,
669
+ default: 30,
670
+ })
671
+ public windowDays?: number = undefined;
672
+
673
+ @ColumnAccessControl({
674
+ create: [
675
+ Permission.ProjectOwner,
676
+ Permission.ProjectAdmin,
677
+ Permission.CreateServiceLevelObjective,
678
+ ],
679
+ read: [
680
+ Permission.ProjectOwner,
681
+ Permission.ProjectAdmin,
682
+ Permission.ProjectMember,
683
+ Permission.Viewer,
684
+ Permission.ReadServiceLevelObjective,
685
+ ],
686
+ update: [
687
+ Permission.ProjectOwner,
688
+ Permission.ProjectAdmin,
689
+ Permission.EditServiceLevelObjective,
690
+ ],
691
+ })
692
+ @TableColumn({
693
+ required: false,
694
+ type: TableColumnType.ShortText,
695
+ title: "Timezone",
696
+ description:
697
+ "IANA timezone (e.g. America/New_York) used for Calendar Month window boundaries. Defaults to UTC when not set.",
698
+ })
699
+ @Column({
700
+ type: ColumnType.ShortText,
701
+ nullable: true,
702
+ length: ColumnLength.ShortText,
703
+ })
704
+ public timezone?: string = undefined;
705
+
706
+ @ColumnAccessControl({
707
+ create: [
708
+ Permission.ProjectOwner,
709
+ Permission.ProjectAdmin,
710
+ Permission.CreateServiceLevelObjective,
711
+ ],
712
+ read: [
713
+ Permission.ProjectOwner,
714
+ Permission.ProjectAdmin,
715
+ Permission.ProjectMember,
716
+ Permission.Viewer,
717
+ Permission.ReadServiceLevelObjective,
718
+ ],
719
+ update: [
720
+ Permission.ProjectOwner,
721
+ Permission.ProjectAdmin,
722
+ Permission.EditServiceLevelObjective,
723
+ ],
724
+ })
725
+ @TableColumn({
726
+ required: true,
727
+ type: TableColumnType.Number,
728
+ title: "At-Risk Threshold (%)",
729
+ description:
730
+ "Percentage of remaining error budget at which the SLO status changes to At Risk. For example, 20 means the status becomes At Risk when less than 20% of the error budget remains.",
731
+ defaultValue: 20,
732
+ isDefaultValueColumn: true,
733
+ })
734
+ @Column({
735
+ type: ColumnType.Number,
736
+ nullable: false,
737
+ default: 20,
738
+ })
739
+ public atRiskThresholdPercentage?: number = undefined;
740
+
741
+ /*
742
+ * Worker-owned state. These columns are computed by the SLO evaluation
743
+ * worker and cannot be created or updated through the API.
744
+ */
745
+
746
+ @ColumnAccessControl({
747
+ create: [],
748
+ read: [
749
+ Permission.ProjectOwner,
750
+ Permission.ProjectAdmin,
751
+ Permission.ProjectMember,
752
+ Permission.Viewer,
753
+ Permission.ReadServiceLevelObjective,
754
+ ],
755
+ update: [],
756
+ })
757
+ @TableColumn({
758
+ required: false,
759
+ type: TableColumnType.Number,
760
+ title: "Current SLI Percentage",
761
+ description:
762
+ "Current Service Level Indicator over the compliance window, as a percentage. Computed by the worker.",
763
+ })
764
+ @Column({
765
+ nullable: true,
766
+ type: ColumnType.Decimal,
767
+ transformer: decimalTransformer,
768
+ })
769
+ public currentSliPercentage?: number = undefined;
770
+
771
+ @ColumnAccessControl({
772
+ create: [],
773
+ read: [
774
+ Permission.ProjectOwner,
775
+ Permission.ProjectAdmin,
776
+ Permission.ProjectMember,
777
+ Permission.Viewer,
778
+ Permission.ReadServiceLevelObjective,
779
+ ],
780
+ update: [],
781
+ })
782
+ @TableColumn({
783
+ required: false,
784
+ type: TableColumnType.Number,
785
+ title: "Error Budget Remaining (%)",
786
+ description:
787
+ "Percentage of the error budget that remains. Can be negative when the budget is exhausted. Computed by the worker.",
788
+ })
789
+ @Column({
790
+ nullable: true,
791
+ type: ColumnType.Decimal,
792
+ transformer: decimalTransformer,
793
+ })
794
+ public errorBudgetRemainingPercentage?: number = undefined;
795
+
796
+ @ColumnAccessControl({
797
+ create: [],
798
+ read: [
799
+ Permission.ProjectOwner,
800
+ Permission.ProjectAdmin,
801
+ Permission.ProjectMember,
802
+ Permission.Viewer,
803
+ Permission.ReadServiceLevelObjective,
804
+ ],
805
+ update: [],
806
+ })
807
+ @TableColumn({
808
+ required: false,
809
+ type: TableColumnType.Number,
810
+ title: "Error Budget Remaining (Seconds)",
811
+ description:
812
+ "Seconds of error budget that remain. Can be negative when the budget is exhausted. Computed by the worker.",
813
+ })
814
+ @Column({
815
+ type: ColumnType.Number,
816
+ nullable: true,
817
+ })
818
+ public errorBudgetRemainingSeconds?: number = undefined;
819
+
820
+ @ColumnAccessControl({
821
+ create: [],
822
+ read: [
823
+ Permission.ProjectOwner,
824
+ Permission.ProjectAdmin,
825
+ Permission.ProjectMember,
826
+ Permission.Viewer,
827
+ Permission.ReadServiceLevelObjective,
828
+ ],
829
+ update: [],
830
+ })
831
+ @TableColumn({
832
+ required: false,
833
+ type: TableColumnType.Number,
834
+ title: "Error Budget Total (Seconds)",
835
+ description:
836
+ "Total seconds of error budget for the compliance window. Computed by the worker.",
837
+ })
838
+ @Column({
839
+ type: ColumnType.Number,
840
+ nullable: true,
841
+ })
842
+ public errorBudgetTotalSeconds?: number = undefined;
843
+
844
+ @ColumnAccessControl({
845
+ create: [],
846
+ read: [
847
+ Permission.ProjectOwner,
848
+ Permission.ProjectAdmin,
849
+ Permission.ProjectMember,
850
+ Permission.Viewer,
851
+ Permission.ReadServiceLevelObjective,
852
+ ],
853
+ update: [],
854
+ })
855
+ @TableColumn({
856
+ required: false,
857
+ type: TableColumnType.Number,
858
+ title: "Current Burn Rate",
859
+ description:
860
+ "Rate at which the error budget is currently being consumed. A burn rate of 1 exhausts the budget exactly at the end of the window. Computed by the worker.",
861
+ })
862
+ @Column({
863
+ nullable: true,
864
+ type: ColumnType.Decimal,
865
+ transformer: decimalTransformer,
866
+ })
867
+ public currentBurnRate?: number = undefined;
868
+
869
+ @ColumnAccessControl({
870
+ create: [],
871
+ read: [
872
+ Permission.ProjectOwner,
873
+ Permission.ProjectAdmin,
874
+ Permission.ProjectMember,
875
+ Permission.Viewer,
876
+ Permission.ReadServiceLevelObjective,
877
+ ],
878
+ update: [],
879
+ })
880
+ @Index()
881
+ @TableColumn({
882
+ type: TableColumnType.ShortText,
883
+ required: true,
884
+ title: "SLO Status",
885
+ description:
886
+ "Current status of this Service Level Objective (Healthy, At Risk, Budget Exhausted, Misconfigured, Paused). Computed by the worker.",
887
+ defaultValue: SloStatus.Healthy,
888
+ isDefaultValueColumn: true,
889
+ })
890
+ @Column({
891
+ type: ColumnType.ShortText,
892
+ nullable: false,
893
+ default: SloStatus.Healthy,
894
+ })
895
+ public sloStatus?: SloStatus = undefined;
896
+
897
+ @ColumnAccessControl({
898
+ create: [],
899
+ read: [
900
+ Permission.ProjectOwner,
901
+ Permission.ProjectAdmin,
902
+ Permission.ProjectMember,
903
+ Permission.Viewer,
904
+ Permission.ReadServiceLevelObjective,
905
+ ],
906
+ update: [],
907
+ })
908
+ @TableColumn({
909
+ type: TableColumnType.Date,
910
+ required: false,
911
+ title: "Status Change Notification Sent At",
912
+ description:
913
+ "The last time a status-change notification was sent to owners. Computed by the worker.",
914
+ })
915
+ @Column({
916
+ type: ColumnType.Date,
917
+ nullable: true,
918
+ })
919
+ public statusChangeNotificationSentAt?: Date = undefined;
920
+
921
+ @ColumnAccessControl({
922
+ create: [],
923
+ read: [
924
+ Permission.ProjectOwner,
925
+ Permission.ProjectAdmin,
926
+ Permission.ProjectMember,
927
+ Permission.Viewer,
928
+ Permission.ReadServiceLevelObjective,
929
+ ],
930
+ update: [],
931
+ })
932
+ @TableColumn({
933
+ type: TableColumnType.Date,
934
+ required: false,
935
+ title: "Last Evaluated At",
936
+ description:
937
+ "The last time this Service Level Objective was evaluated. Computed by the worker.",
938
+ })
939
+ @Column({
940
+ type: ColumnType.Date,
941
+ nullable: true,
942
+ })
943
+ public lastEvaluatedAt?: Date = undefined;
944
+
945
+ @ColumnAccessControl({
946
+ create: [],
947
+ read: [
948
+ Permission.ProjectOwner,
949
+ Permission.ProjectAdmin,
950
+ Permission.ProjectMember,
951
+ Permission.Viewer,
952
+ Permission.ReadServiceLevelObjective,
953
+ ],
954
+ update: [],
955
+ })
956
+ @Index()
957
+ @TableColumn({
958
+ type: TableColumnType.Date,
959
+ required: false,
960
+ title: "Next Evaluation At",
961
+ description:
962
+ "When this Service Level Objective is next due for evaluation. Computed by the worker.",
963
+ })
964
+ @Column({
965
+ type: ColumnType.Date,
966
+ nullable: true,
967
+ })
968
+ public nextEvaluationAt?: Date = undefined;
969
+
970
+ @ColumnAccessControl({
971
+ create: [],
972
+ read: [
973
+ Permission.ProjectOwner,
974
+ Permission.ProjectAdmin,
975
+ Permission.ProjectMember,
976
+ Permission.Viewer,
977
+ Permission.ReadServiceLevelObjective,
978
+ ],
979
+ update: [],
980
+ })
981
+ @TableColumn({
982
+ type: TableColumnType.Date,
983
+ required: false,
984
+ title: "Last Accumulated Bucket End At",
985
+ description:
986
+ "Accumulation cursor for Metric SLIs: end of the last bucket whose good/total counts were persisted. Computed by the worker.",
987
+ })
988
+ @Column({
989
+ type: ColumnType.Date,
990
+ nullable: true,
991
+ })
992
+ public lastAccumulatedBucketEndAt?: Date = undefined;
993
+
994
+ // Created By / Deleted By User Relations
995
+
996
+ @ColumnAccessControl({
997
+ create: [
998
+ Permission.ProjectOwner,
999
+ Permission.ProjectAdmin,
1000
+ Permission.CreateServiceLevelObjective,
1001
+ ],
1002
+ read: [
1003
+ Permission.ProjectOwner,
1004
+ Permission.ProjectAdmin,
1005
+ Permission.ProjectMember,
1006
+ Permission.Viewer,
1007
+ Permission.ReadServiceLevelObjective,
1008
+ ],
1009
+ update: [],
1010
+ })
1011
+ @TableColumn({
1012
+ manyToOneRelationColumn: "createdByUserId",
1013
+ type: TableColumnType.Entity,
1014
+ modelType: User,
1015
+ title: "Created by User",
1016
+ description:
1017
+ "Relation to User who created this object (if this object was created by a User)",
1018
+ })
1019
+ @ManyToOne(
1020
+ () => {
1021
+ return User;
1022
+ },
1023
+ {
1024
+ eager: false,
1025
+ nullable: true,
1026
+ onDelete: "SET NULL",
1027
+ orphanedRowAction: "nullify",
1028
+ },
1029
+ )
1030
+ @JoinColumn({ name: "createdByUserId" })
1031
+ public createdByUser?: User = undefined;
1032
+
1033
+ @ColumnAccessControl({
1034
+ create: [
1035
+ Permission.ProjectOwner,
1036
+ Permission.ProjectAdmin,
1037
+ Permission.CreateServiceLevelObjective,
1038
+ ],
1039
+ read: [
1040
+ Permission.ProjectOwner,
1041
+ Permission.ProjectAdmin,
1042
+ Permission.ProjectMember,
1043
+ Permission.Viewer,
1044
+ Permission.ReadServiceLevelObjective,
1045
+ ],
1046
+ update: [],
1047
+ })
1048
+ @TableColumn({
1049
+ type: TableColumnType.ObjectID,
1050
+ title: "Created by User ID",
1051
+ description:
1052
+ "User ID who created this object (if this object was created by a User)",
1053
+ })
1054
+ @Column({
1055
+ type: ColumnType.ObjectID,
1056
+ nullable: true,
1057
+ transformer: ObjectID.getDatabaseTransformer(),
1058
+ })
1059
+ public createdByUserId?: ObjectID = undefined;
1060
+
1061
+ @ColumnAccessControl({
1062
+ create: [],
1063
+ read: [],
1064
+ update: [],
1065
+ })
1066
+ @TableColumn({
1067
+ manyToOneRelationColumn: "deletedByUserId",
1068
+ type: TableColumnType.Entity,
1069
+ title: "Deleted by User",
1070
+ modelType: User,
1071
+ description:
1072
+ "Relation to User who deleted this object (if this object was deleted by a User)",
1073
+ })
1074
+ @ManyToOne(
1075
+ () => {
1076
+ return User;
1077
+ },
1078
+ {
1079
+ cascade: false,
1080
+ eager: false,
1081
+ nullable: true,
1082
+ onDelete: "SET NULL",
1083
+ orphanedRowAction: "nullify",
1084
+ },
1085
+ )
1086
+ @JoinColumn({ name: "deletedByUserId" })
1087
+ public deletedByUser?: User = undefined;
1088
+
1089
+ @ColumnAccessControl({
1090
+ create: [],
1091
+ read: [],
1092
+ update: [],
1093
+ })
1094
+ @TableColumn({
1095
+ type: TableColumnType.ObjectID,
1096
+ title: "Deleted by User ID",
1097
+ description:
1098
+ "User ID who deleted this object (if this object was deleted by a User)",
1099
+ })
1100
+ @Column({
1101
+ type: ColumnType.ObjectID,
1102
+ nullable: true,
1103
+ transformer: ObjectID.getDatabaseTransformer(),
1104
+ })
1105
+ public deletedByUserId?: ObjectID = undefined;
1106
+ }