@oneuptime/common 11.6.1 → 11.7.0

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 (420) 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 +243 -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 +1115 -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/1785066759532-MigrationName.ts +30 -0
  24. package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +12 -0
  25. package/Server/Services/AnalyticsDatabaseService.ts +25 -9
  26. package/Server/Services/Index.ts +24 -0
  27. package/Server/Services/KubernetesCostAllocationService.ts +14 -0
  28. package/Server/Services/MetricService.ts +21 -2
  29. package/Server/Services/MonitorService.ts +22 -0
  30. package/Server/Services/NetworkDeviceService.ts +438 -2
  31. package/Server/Services/NetworkEndpointService.ts +414 -0
  32. package/Server/Services/NetworkSiteAssignmentRuleService.ts +98 -0
  33. package/Server/Services/NetworkSiteLinkService.ts +10 -0
  34. package/Server/Services/NetworkSiteService.ts +1254 -0
  35. package/Server/Services/NetworkSiteStatusTimelineService.ts +10 -0
  36. package/Server/Services/NetworkSiteTypeService.ts +10 -0
  37. package/Server/Services/ProjectService.ts +122 -2
  38. package/Server/Services/ServiceLevelObjectiveBurnRateRuleService.ts +457 -0
  39. package/Server/Services/ServiceLevelObjectiveOwnerTeamService.ts +10 -0
  40. package/Server/Services/ServiceLevelObjectiveOwnerUserService.ts +10 -0
  41. package/Server/Services/ServiceLevelObjectiveService.ts +685 -0
  42. package/Server/Services/SloHistoryService.ts +101 -0
  43. package/Server/Services/UserNotificationSettingService.ts +37 -0
  44. package/Server/Types/AnalyticsDatabase/AggregateBy.ts +9 -0
  45. package/Server/Types/Database/Permissions/OwnerTableRegistry.ts +15 -0
  46. package/Server/Utils/AnalyticsDatabase/Statement.ts +39 -3
  47. package/Server/Utils/AnalyticsDatabase/StatementGenerator.ts +87 -48
  48. package/Server/Utils/Memory.ts +9 -1
  49. package/Server/Utils/Monitor/Criteria/SnmpMonitorCriteria.ts +190 -12
  50. package/Server/Utils/Monitor/Data/OuiVendors.json +6920 -0
  51. package/Server/Utils/Monitor/DnsResolutionCache.ts +129 -0
  52. package/Server/Utils/Monitor/MonitorResource.ts +4 -30
  53. package/Server/Utils/Monitor/NetworkDeviceHydrationUtil.ts +214 -39
  54. package/Server/Utils/Monitor/NetworkDeviceMetricUtil.ts +343 -0
  55. package/Server/Utils/Monitor/NetworkDeviceWalkUtil.ts +251 -0
  56. package/Server/Utils/Monitor/NetworkInventoryUtil.ts +176 -142
  57. package/Server/Utils/Monitor/OuiLookupUtil.ts +49 -0
  58. package/Server/Utils/Monitor/SnmpInterfaceRateUtil.ts +17 -13
  59. package/Server/Utils/WhatsAppTemplateUtil.ts +7 -3
  60. package/Tests/Models/AnalyticsModels/KubernetesCostAllocation.test.ts +135 -0
  61. package/Tests/Models/NetworkSiteHierarchy.test.ts +134 -0
  62. package/Tests/Server/Services/AnalyticsDatabaseService.test.ts +239 -0
  63. package/Tests/Server/Services/KubernetesCostAllocationAggregate.test.ts +338 -0
  64. package/Tests/Server/Services/MetricServiceAggregate.test.ts +142 -0
  65. package/Tests/Server/Services/NetworkDeviceSiteAssignment.test.ts +484 -0
  66. package/Tests/Server/Services/NetworkEndpointServiceUpsert.test.ts +686 -0
  67. package/Tests/Server/Services/NetworkSiteAssignmentRuleService.test.ts +185 -0
  68. package/Tests/Server/Services/NetworkSiteService.test.ts +1354 -0
  69. package/Tests/Server/Services/ServiceLevelObjectiveBurnRateRuleService.test.ts +1313 -0
  70. package/Tests/Server/Services/ServiceLevelObjectiveService.test.ts +1988 -0
  71. package/Tests/Server/Utils/AnalyticsDatabase/Statement.test.ts +22 -0
  72. package/Tests/Server/Utils/AnalyticsDatabase/StatementGenerator.test.ts +404 -0
  73. package/Tests/Server/Utils/Encryption.test.ts +70 -0
  74. package/Tests/Server/Utils/FileAttachmentMarkdownUtil.test.ts +225 -0
  75. package/Tests/Server/Utils/JsonWebToken.test.ts +175 -0
  76. package/Tests/Server/Utils/LocalFile.test.ts +258 -0
  77. package/Tests/Server/Utils/Memory.test.ts +213 -0
  78. package/Tests/Server/Utils/Monitor/Criteria/LogMonitorCriteria.test.ts +30 -0
  79. package/Tests/Server/Utils/Monitor/Criteria/SnmpMonitorCriteria.test.ts +385 -0
  80. package/Tests/Server/Utils/Monitor/DnsResolutionCache.test.ts +194 -0
  81. package/Tests/Server/Utils/Monitor/NetworkDeviceHydrationUtil.test.ts +155 -0
  82. package/Tests/Server/Utils/Monitor/NetworkDeviceWalkUtil.test.ts +600 -0
  83. package/Tests/Server/Utils/Monitor/NetworkInventoryUtil.test.ts +151 -124
  84. package/Tests/Server/Utils/Monitor/SnmpInterfaceRateUtil.test.ts +496 -0
  85. package/Tests/Server/Utils/MonitorCriteriaDataExtractor.test.ts +175 -0
  86. package/Tests/Server/Utils/MonitorCriteriaMessageFormatter.test.ts +282 -0
  87. package/Tests/Server/Utils/OuiLookupUtil.test.ts +59 -0
  88. package/Tests/Server/Utils/SeriesResourceLabels.test.ts +117 -0
  89. package/Tests/Server/Utils/StackTraceParser.test.ts +370 -0
  90. package/Tests/Server/Utils/Stream.test.ts +87 -0
  91. package/Tests/Server/Utils/ValidateGlobalProviderProjectTeams.test.ts +221 -0
  92. package/Tests/Server/Utils/WhatsAppTemplateUtil.test.ts +199 -0
  93. package/Tests/Types/Database/CompareOperatorWireSerialization.test.ts +33 -0
  94. package/Tests/Types/Email.test.ts +198 -0
  95. package/Tests/Types/Kubernetes/KubernetesObjectParser.test.ts +177 -0
  96. package/Tests/Types/Log/LogQueryToFilter.test.ts +111 -0
  97. package/Tests/Types/Monitor/MonitorCriteria.test.ts +155 -0
  98. package/Tests/Types/Monitor/MonitorCriteriaInstance.test.ts +465 -0
  99. package/Tests/Types/Monitor/MonitorStep.test.ts +183 -0
  100. package/Tests/Types/Monitor/MonitorStepNetworkDeviceMonitor.test.ts +141 -1
  101. package/Tests/Types/Monitor/MonitorSteps.test.ts +183 -0
  102. package/Tests/Types/Monitor/MonitorType.test.ts +59 -1
  103. package/Tests/Types/Monitor/NetworkDeviceAlertPack.test.ts +97 -0
  104. package/Tests/Types/Monitor/SnmpEndpointDiscovery.test.ts +151 -0
  105. package/Tests/Types/Monitor/SnmpVendorTemplate.test.ts +110 -6
  106. package/Tests/Types/NetworkSite/DefaultNetworkSiteType.test.ts +129 -0
  107. package/Tests/Types/SerializableObjectDictionary.test.ts +166 -0
  108. package/Tests/Types/Time/RangeStartAndEndDateTime.test.ts +98 -0
  109. package/Tests/Types/WebsiteRequest.test.ts +230 -0
  110. package/Tests/UI/Components/EntityFilterRoundTrip.test.tsx +103 -0
  111. package/Tests/UI/Components/ModelTable/BaseModelTableUrlState.test.tsx +612 -0
  112. package/Tests/UI/Components/ModelTable/FilterDataToQuery.test.ts +275 -0
  113. package/Tests/UI/Utils/LogExport.test.ts +159 -0
  114. package/Tests/UI/Utils/Navigation.test.ts +183 -0
  115. package/Tests/UI/Utils/TableFilterUrlState.test.ts +539 -0
  116. package/Tests/UI/Utils/TableViewUrlState.test.ts +272 -0
  117. package/Tests/Utils/Base64.test.ts +51 -0
  118. package/Tests/Utils/Boolean.test.ts +76 -0
  119. package/Tests/Utils/Crypto.test.ts +48 -0
  120. package/Tests/Utils/Dashboard/DashboardSloComponent.test.ts +259 -0
  121. package/Tests/Utils/Dashboard/ModelQueryVariableInterpolation.test.ts +162 -0
  122. package/Tests/Utils/Enum.test.ts +54 -0
  123. package/Tests/Utils/IpCanonicalUtil.test.ts +85 -0
  124. package/Tests/Utils/Memory.test.ts +44 -0
  125. package/Tests/Utils/Metrics/MetricSeriesFingerprint.test.ts +160 -0
  126. package/Tests/Utils/Monitor/EndpointAttachmentUtil.test.ts +836 -0
  127. package/Tests/Utils/Monitor/MonitorMetricType.test.ts +218 -0
  128. package/Tests/Utils/Monitor/NetworkTopologyUtil.test.ts +447 -0
  129. package/Tests/Utils/NetworkSite/CidrMatchUtil.test.ts +440 -0
  130. package/Tests/Utils/NetworkSite/MaterializedPathUtil.test.ts +205 -0
  131. package/Tests/Utils/NetworkSite/SiteStatusRollupUtil.test.ts +221 -0
  132. package/Tests/Utils/NetworkSite/SiteUptimeUtil.test.ts +283 -0
  133. package/Tests/Utils/ObjectUtil.test.ts +30 -0
  134. package/Tests/Utils/Slo/SloBurnRateRuleState.test.ts +124 -0
  135. package/Tests/Utils/Slo/SloDuration.test.ts +148 -0
  136. package/Tests/Utils/Slo/SloHealth.test.ts +334 -0
  137. package/Tests/Utils/Slo/SloStatusColor.test.ts +89 -0
  138. package/Tests/Utils/Slo/SloUtil.test.ts +1980 -0
  139. package/Tests/Utils/Slo/SloWidgetFormat.test.ts +605 -0
  140. package/Tests/Utils/TechStack.test.ts +50 -0
  141. package/Tests/Utils/Traces/CriticalPath.test.ts +178 -0
  142. package/Types/AnalyticsDatabase/AnalyticsTableName.ts +10 -0
  143. package/Types/BaseDatabase/EqualTo.ts +9 -1
  144. package/Types/BaseDatabase/EqualToOrNull.ts +9 -1
  145. package/Types/BaseDatabase/NotEqual.ts +9 -1
  146. package/Types/Dashboard/DashboardComponentType.ts +1 -0
  147. package/Types/Dashboard/DashboardComponents/ComponentArgument.ts +1 -0
  148. package/Types/Dashboard/DashboardComponents/DashboardSloComponent.ts +42 -0
  149. package/Types/Dashboard/DashboardTemplates.ts +214 -0
  150. package/Types/Email/EmailTemplateType.ts +2 -0
  151. package/Types/Kubernetes/KubernetesCostIngest.ts +79 -0
  152. package/Types/Monitor/CriteriaFilter.ts +9 -0
  153. package/Types/Monitor/MonitorStep.ts +5 -8
  154. package/Types/Monitor/MonitorStepNetworkDeviceMonitor.ts +27 -5
  155. package/Types/Monitor/MonitorType.ts +15 -5
  156. package/Types/Monitor/SnmpMonitor/ArpEntry.ts +14 -0
  157. package/Types/Monitor/SnmpMonitor/FdbEntry.ts +18 -0
  158. package/Types/Monitor/SnmpMonitor/NetworkDeviceAlertPack.ts +10 -3
  159. package/Types/Monitor/SnmpMonitor/NetworkTopology.ts +31 -5
  160. package/Types/Monitor/SnmpMonitor/SnmpMonitorResponse.ts +12 -0
  161. package/Types/Monitor/SnmpMonitor/SnmpVendorTemplate.ts +231 -3
  162. package/Types/NetworkSite/DefaultNetworkSiteType.ts +20 -0
  163. package/Types/NotificationSetting/NotificationSettingEventType.ts +4 -0
  164. package/Types/Permission.ts +449 -0
  165. package/Types/ServiceLevelObjective/SliType.ts +6 -0
  166. package/Types/ServiceLevelObjective/SloMultiMonitorMode.ts +6 -0
  167. package/Types/ServiceLevelObjective/SloStatus.ts +9 -0
  168. package/Types/ServiceLevelObjective/SloWindowType.ts +6 -0
  169. package/Types/Telemetry/ServiceType.ts +1 -0
  170. package/UI/Components/Filters/EntityFilter.tsx +16 -0
  171. package/UI/Components/Filters/FilterViewer.tsx +22 -5
  172. package/UI/Components/List/List.tsx +8 -0
  173. package/UI/Components/ModelTable/BaseModelTable.tsx +309 -106
  174. package/UI/Components/ModelTable/FilterDataToQuery.ts +172 -0
  175. package/UI/Components/Navbar/NavBar.tsx +16 -2
  176. package/UI/Components/Navbar/NavBarMenuModal.tsx +3 -3
  177. package/UI/Utils/Navigation.ts +10 -0
  178. package/UI/Utils/TableFilterUrlState.ts +204 -17
  179. package/UI/Utils/TableViewUrlState.ts +165 -0
  180. package/Utils/Dashboard/Components/DashboardSloComponent.ts +114 -0
  181. package/Utils/Dashboard/Components/Index.ts +7 -0
  182. package/Utils/IpCanonicalUtil.ts +134 -0
  183. package/Utils/Monitor/EndpointAttachmentUtil.ts +508 -0
  184. package/Utils/Monitor/NetworkTopologyUtil.ts +157 -5
  185. package/Utils/NetworkSite/CidrMatchUtil.ts +296 -0
  186. package/Utils/NetworkSite/MaterializedPathUtil.ts +115 -0
  187. package/Utils/NetworkSite/SiteStatusRollupUtil.ts +97 -0
  188. package/Utils/NetworkSite/SiteUptimeUtil.ts +111 -0
  189. package/Utils/Slo/SloBurnRateRuleState.ts +91 -0
  190. package/Utils/Slo/SloDuration.ts +165 -0
  191. package/Utils/Slo/SloEvaluation.ts +22 -0
  192. package/Utils/Slo/SloHealth.ts +302 -0
  193. package/Utils/Slo/SloStatusColor.ts +54 -0
  194. package/Utils/Slo/SloUtil.ts +637 -0
  195. package/Utils/Slo/SloWidgetFormat.ts +383 -0
  196. package/build/dist/Models/AnalyticsModels/Index.js +4 -0
  197. package/build/dist/Models/AnalyticsModels/Index.js.map +1 -1
  198. package/build/dist/Models/AnalyticsModels/KubernetesCostAllocation.js +713 -0
  199. package/build/dist/Models/AnalyticsModels/KubernetesCostAllocation.js.map +1 -0
  200. package/build/dist/Models/AnalyticsModels/NetworkFlow.js +44 -0
  201. package/build/dist/Models/AnalyticsModels/NetworkFlow.js.map +1 -1
  202. package/build/dist/Models/AnalyticsModels/SloHistory.js +218 -0
  203. package/build/dist/Models/AnalyticsModels/SloHistory.js.map +1 -0
  204. package/build/dist/Models/DatabaseModels/Index.js +20 -0
  205. package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
  206. package/build/dist/Models/DatabaseModels/NetworkDevice.js +458 -6
  207. package/build/dist/Models/DatabaseModels/NetworkDevice.js.map +1 -1
  208. package/build/dist/Models/DatabaseModels/NetworkDeviceDiscoveryScan.js +0 -6
  209. package/build/dist/Models/DatabaseModels/NetworkDeviceDiscoveryScan.js.map +1 -1
  210. package/build/dist/Models/DatabaseModels/NetworkEndpoint.js +779 -0
  211. package/build/dist/Models/DatabaseModels/NetworkEndpoint.js.map +1 -0
  212. package/build/dist/Models/DatabaseModels/NetworkSite.js +1180 -0
  213. package/build/dist/Models/DatabaseModels/NetworkSite.js.map +1 -0
  214. package/build/dist/Models/DatabaseModels/NetworkSiteAssignmentRule.js +534 -0
  215. package/build/dist/Models/DatabaseModels/NetworkSiteAssignmentRule.js.map +1 -0
  216. package/build/dist/Models/DatabaseModels/NetworkSiteLink.js +629 -0
  217. package/build/dist/Models/DatabaseModels/NetworkSiteLink.js.map +1 -0
  218. package/build/dist/Models/DatabaseModels/NetworkSiteStatusTimeline.js +538 -0
  219. package/build/dist/Models/DatabaseModels/NetworkSiteStatusTimeline.js.map +1 -0
  220. package/build/dist/Models/DatabaseModels/NetworkSiteType.js +522 -0
  221. package/build/dist/Models/DatabaseModels/NetworkSiteType.js.map +1 -0
  222. package/build/dist/Models/DatabaseModels/ServiceLevelObjective.js +1134 -0
  223. package/build/dist/Models/DatabaseModels/ServiceLevelObjective.js.map +1 -0
  224. package/build/dist/Models/DatabaseModels/ServiceLevelObjectiveBurnRateRule.js +769 -0
  225. package/build/dist/Models/DatabaseModels/ServiceLevelObjectiveBurnRateRule.js.map +1 -0
  226. package/build/dist/Models/DatabaseModels/ServiceLevelObjectiveOwnerTeam.js +460 -0
  227. package/build/dist/Models/DatabaseModels/ServiceLevelObjectiveOwnerTeam.js.map +1 -0
  228. package/build/dist/Models/DatabaseModels/ServiceLevelObjectiveOwnerUser.js +459 -0
  229. package/build/dist/Models/DatabaseModels/ServiceLevelObjectiveOwnerUser.js.map +1 -0
  230. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784757142154-AddNetworkSiteHierarchyAndEndpoints.js +130 -0
  231. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784757142154-AddNetworkSiteHierarchyAndEndpoints.js.map +1 -0
  232. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784897317860-AddNetworkSiteAlerting.js +31 -0
  233. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784897317860-AddNetworkSiteAlerting.js.map +1 -0
  234. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784970388777-AddNetworkDevicePollingColumns.js +36 -0
  235. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784970388777-AddNetworkDevicePollingColumns.js.map +1 -0
  236. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784986826214-AddNetworkSiteTypeTable.js +49 -0
  237. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784986826214-AddNetworkSiteTypeTable.js.map +1 -0
  238. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784987015619-AddServiceLevelObjective.js +140 -0
  239. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784987015619-AddServiceLevelObjective.js.map +1 -0
  240. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785066759532-MigrationName.js +21 -0
  241. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785066759532-MigrationName.js.map +1 -0
  242. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +12 -0
  243. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
  244. package/build/dist/Server/Services/AnalyticsDatabaseService.js +23 -6
  245. package/build/dist/Server/Services/AnalyticsDatabaseService.js.map +1 -1
  246. package/build/dist/Server/Services/Index.js +24 -0
  247. package/build/dist/Server/Services/Index.js.map +1 -1
  248. package/build/dist/Server/Services/KubernetesCostAllocationService.js +12 -0
  249. package/build/dist/Server/Services/KubernetesCostAllocationService.js.map +1 -0
  250. package/build/dist/Server/Services/MetricService.js +21 -3
  251. package/build/dist/Server/Services/MetricService.js.map +1 -1
  252. package/build/dist/Server/Services/MonitorService.js +19 -0
  253. package/build/dist/Server/Services/MonitorService.js.map +1 -1
  254. package/build/dist/Server/Services/NetworkDeviceService.js +351 -1
  255. package/build/dist/Server/Services/NetworkDeviceService.js.map +1 -1
  256. package/build/dist/Server/Services/NetworkEndpointService.js +319 -0
  257. package/build/dist/Server/Services/NetworkEndpointService.js.map +1 -0
  258. package/build/dist/Server/Services/NetworkSiteAssignmentRuleService.js +90 -0
  259. package/build/dist/Server/Services/NetworkSiteAssignmentRuleService.js.map +1 -0
  260. package/build/dist/Server/Services/NetworkSiteLinkService.js +9 -0
  261. package/build/dist/Server/Services/NetworkSiteLinkService.js.map +1 -0
  262. package/build/dist/Server/Services/NetworkSiteService.js +1038 -0
  263. package/build/dist/Server/Services/NetworkSiteService.js.map +1 -0
  264. package/build/dist/Server/Services/NetworkSiteStatusTimelineService.js +9 -0
  265. package/build/dist/Server/Services/NetworkSiteStatusTimelineService.js.map +1 -0
  266. package/build/dist/Server/Services/NetworkSiteTypeService.js +9 -0
  267. package/build/dist/Server/Services/NetworkSiteTypeService.js.map +1 -0
  268. package/build/dist/Server/Services/ProjectService.js +98 -2
  269. package/build/dist/Server/Services/ProjectService.js.map +1 -1
  270. package/build/dist/Server/Services/ServiceLevelObjectiveBurnRateRuleService.js +358 -0
  271. package/build/dist/Server/Services/ServiceLevelObjectiveBurnRateRuleService.js.map +1 -0
  272. package/build/dist/Server/Services/ServiceLevelObjectiveOwnerTeamService.js +9 -0
  273. package/build/dist/Server/Services/ServiceLevelObjectiveOwnerTeamService.js.map +1 -0
  274. package/build/dist/Server/Services/ServiceLevelObjectiveOwnerUserService.js +9 -0
  275. package/build/dist/Server/Services/ServiceLevelObjectiveOwnerUserService.js.map +1 -0
  276. package/build/dist/Server/Services/ServiceLevelObjectiveService.js +588 -0
  277. package/build/dist/Server/Services/ServiceLevelObjectiveService.js.map +1 -0
  278. package/build/dist/Server/Services/SloHistoryService.js +77 -0
  279. package/build/dist/Server/Services/SloHistoryService.js.map +1 -0
  280. package/build/dist/Server/Services/UserNotificationSettingService.js +20 -0
  281. package/build/dist/Server/Services/UserNotificationSettingService.js.map +1 -1
  282. package/build/dist/Server/Types/AnalyticsDatabase/AggregateBy.js +9 -0
  283. package/build/dist/Server/Types/AnalyticsDatabase/AggregateBy.js.map +1 -1
  284. package/build/dist/Server/Types/Database/Permissions/OwnerTableRegistry.js +15 -0
  285. package/build/dist/Server/Types/Database/Permissions/OwnerTableRegistry.js.map +1 -1
  286. package/build/dist/Server/Utils/AnalyticsDatabase/Statement.js +31 -0
  287. package/build/dist/Server/Utils/AnalyticsDatabase/Statement.js.map +1 -1
  288. package/build/dist/Server/Utils/AnalyticsDatabase/StatementGenerator.js +76 -48
  289. package/build/dist/Server/Utils/AnalyticsDatabase/StatementGenerator.js.map +1 -1
  290. package/build/dist/Server/Utils/Memory.js +9 -1
  291. package/build/dist/Server/Utils/Memory.js.map +1 -1
  292. package/build/dist/Server/Utils/Monitor/Criteria/SnmpMonitorCriteria.js +132 -10
  293. package/build/dist/Server/Utils/Monitor/Criteria/SnmpMonitorCriteria.js.map +1 -1
  294. package/build/dist/Server/Utils/Monitor/Data/OuiVendors.json +6920 -0
  295. package/build/dist/Server/Utils/Monitor/DnsResolutionCache.js +77 -0
  296. package/build/dist/Server/Utils/Monitor/DnsResolutionCache.js.map +1 -0
  297. package/build/dist/Server/Utils/Monitor/MonitorResource.js +21 -41
  298. package/build/dist/Server/Utils/Monitor/MonitorResource.js.map +1 -1
  299. package/build/dist/Server/Utils/Monitor/NetworkDeviceHydrationUtil.js +152 -40
  300. package/build/dist/Server/Utils/Monitor/NetworkDeviceHydrationUtil.js.map +1 -1
  301. package/build/dist/Server/Utils/Monitor/NetworkDeviceMetricUtil.js +262 -0
  302. package/build/dist/Server/Utils/Monitor/NetworkDeviceMetricUtil.js.map +1 -0
  303. package/build/dist/Server/Utils/Monitor/NetworkDeviceWalkUtil.js +201 -0
  304. package/build/dist/Server/Utils/Monitor/NetworkDeviceWalkUtil.js.map +1 -0
  305. package/build/dist/Server/Utils/Monitor/NetworkInventoryUtil.js +152 -120
  306. package/build/dist/Server/Utils/Monitor/NetworkInventoryUtil.js.map +1 -1
  307. package/build/dist/Server/Utils/Monitor/OuiLookupUtil.js +44 -0
  308. package/build/dist/Server/Utils/Monitor/OuiLookupUtil.js.map +1 -0
  309. package/build/dist/Server/Utils/Monitor/SnmpInterfaceRateUtil.js +10 -10
  310. package/build/dist/Server/Utils/Monitor/SnmpInterfaceRateUtil.js.map +1 -1
  311. package/build/dist/Server/Utils/WhatsAppTemplateUtil.js +5 -0
  312. package/build/dist/Server/Utils/WhatsAppTemplateUtil.js.map +1 -1
  313. package/build/dist/Types/AnalyticsDatabase/AnalyticsTableName.js +10 -0
  314. package/build/dist/Types/AnalyticsDatabase/AnalyticsTableName.js.map +1 -1
  315. package/build/dist/Types/BaseDatabase/EqualTo.js +9 -1
  316. package/build/dist/Types/BaseDatabase/EqualTo.js.map +1 -1
  317. package/build/dist/Types/BaseDatabase/EqualToOrNull.js +9 -1
  318. package/build/dist/Types/BaseDatabase/EqualToOrNull.js.map +1 -1
  319. package/build/dist/Types/BaseDatabase/NotEqual.js +9 -1
  320. package/build/dist/Types/BaseDatabase/NotEqual.js.map +1 -1
  321. package/build/dist/Types/Dashboard/DashboardComponentType.js +1 -0
  322. package/build/dist/Types/Dashboard/DashboardComponentType.js.map +1 -1
  323. package/build/dist/Types/Dashboard/DashboardComponents/ComponentArgument.js +1 -0
  324. package/build/dist/Types/Dashboard/DashboardComponents/ComponentArgument.js.map +1 -1
  325. package/build/dist/Types/Dashboard/DashboardComponents/DashboardSloComponent.js +23 -0
  326. package/build/dist/Types/Dashboard/DashboardComponents/DashboardSloComponent.js.map +1 -0
  327. package/build/dist/Types/Dashboard/DashboardTemplates.js +205 -0
  328. package/build/dist/Types/Dashboard/DashboardTemplates.js.map +1 -1
  329. package/build/dist/Types/Email/EmailTemplateType.js +1 -0
  330. package/build/dist/Types/Email/EmailTemplateType.js.map +1 -1
  331. package/build/dist/Types/Kubernetes/KubernetesCostIngest.js +21 -0
  332. package/build/dist/Types/Kubernetes/KubernetesCostIngest.js.map +1 -0
  333. package/build/dist/Types/Monitor/CriteriaFilter.js +1 -0
  334. package/build/dist/Types/Monitor/CriteriaFilter.js.map +1 -1
  335. package/build/dist/Types/Monitor/MonitorStep.js +5 -5
  336. package/build/dist/Types/Monitor/MonitorStep.js.map +1 -1
  337. package/build/dist/Types/Monitor/MonitorStepNetworkDeviceMonitor.js +8 -0
  338. package/build/dist/Types/Monitor/MonitorStepNetworkDeviceMonitor.js.map +1 -1
  339. package/build/dist/Types/Monitor/MonitorType.js +15 -5
  340. package/build/dist/Types/Monitor/MonitorType.js.map +1 -1
  341. package/build/dist/Types/Monitor/SnmpMonitor/ArpEntry.js +2 -0
  342. package/build/dist/Types/Monitor/SnmpMonitor/ArpEntry.js.map +1 -0
  343. package/build/dist/Types/Monitor/SnmpMonitor/FdbEntry.js +2 -0
  344. package/build/dist/Types/Monitor/SnmpMonitor/FdbEntry.js.map +1 -0
  345. package/build/dist/Types/Monitor/SnmpMonitor/NetworkDeviceAlertPack.js +9 -3
  346. package/build/dist/Types/Monitor/SnmpMonitor/NetworkDeviceAlertPack.js.map +1 -1
  347. package/build/dist/Types/Monitor/SnmpMonitor/SnmpVendorTemplate.js +217 -3
  348. package/build/dist/Types/Monitor/SnmpMonitor/SnmpVendorTemplate.js.map +1 -1
  349. package/build/dist/Types/NetworkSite/DefaultNetworkSiteType.js +21 -0
  350. package/build/dist/Types/NetworkSite/DefaultNetworkSiteType.js.map +1 -0
  351. package/build/dist/Types/NotificationSetting/NotificationSettingEventType.js +3 -0
  352. package/build/dist/Types/NotificationSetting/NotificationSettingEventType.js.map +1 -1
  353. package/build/dist/Types/Permission.js +409 -0
  354. package/build/dist/Types/Permission.js.map +1 -1
  355. package/build/dist/Types/ServiceLevelObjective/SliType.js +7 -0
  356. package/build/dist/Types/ServiceLevelObjective/SliType.js.map +1 -0
  357. package/build/dist/Types/ServiceLevelObjective/SloMultiMonitorMode.js +7 -0
  358. package/build/dist/Types/ServiceLevelObjective/SloMultiMonitorMode.js.map +1 -0
  359. package/build/dist/Types/ServiceLevelObjective/SloStatus.js +10 -0
  360. package/build/dist/Types/ServiceLevelObjective/SloStatus.js.map +1 -0
  361. package/build/dist/Types/ServiceLevelObjective/SloWindowType.js +7 -0
  362. package/build/dist/Types/ServiceLevelObjective/SloWindowType.js.map +1 -0
  363. package/build/dist/Types/Telemetry/ServiceType.js +1 -0
  364. package/build/dist/Types/Telemetry/ServiceType.js.map +1 -1
  365. package/build/dist/UI/Components/Filters/EntityFilter.js +15 -0
  366. package/build/dist/UI/Components/Filters/EntityFilter.js.map +1 -1
  367. package/build/dist/UI/Components/Filters/FilterViewer.js +19 -4
  368. package/build/dist/UI/Components/Filters/FilterViewer.js.map +1 -1
  369. package/build/dist/UI/Components/List/List.js +1 -1
  370. package/build/dist/UI/Components/List/List.js.map +1 -1
  371. package/build/dist/UI/Components/ModelTable/BaseModelTable.js +235 -89
  372. package/build/dist/UI/Components/ModelTable/BaseModelTable.js.map +1 -1
  373. package/build/dist/UI/Components/ModelTable/FilterDataToQuery.js +96 -0
  374. package/build/dist/UI/Components/ModelTable/FilterDataToQuery.js.map +1 -0
  375. package/build/dist/UI/Components/Navbar/NavBar.js +14 -2
  376. package/build/dist/UI/Components/Navbar/NavBar.js.map +1 -1
  377. package/build/dist/UI/Components/Navbar/NavBarMenuModal.js +3 -2
  378. package/build/dist/UI/Components/Navbar/NavBarMenuModal.js.map +1 -1
  379. package/build/dist/UI/Utils/Navigation.js +9 -0
  380. package/build/dist/UI/Utils/Navigation.js.map +1 -1
  381. package/build/dist/UI/Utils/TableFilterUrlState.js +159 -15
  382. package/build/dist/UI/Utils/TableFilterUrlState.js.map +1 -1
  383. package/build/dist/UI/Utils/TableViewUrlState.js +103 -0
  384. package/build/dist/UI/Utils/TableViewUrlState.js.map +1 -0
  385. package/build/dist/Utils/Dashboard/Components/DashboardSloComponent.js +93 -0
  386. package/build/dist/Utils/Dashboard/Components/DashboardSloComponent.js.map +1 -0
  387. package/build/dist/Utils/Dashboard/Components/Index.js +4 -0
  388. package/build/dist/Utils/Dashboard/Components/Index.js.map +1 -1
  389. package/build/dist/Utils/IpCanonicalUtil.js +110 -0
  390. package/build/dist/Utils/IpCanonicalUtil.js.map +1 -0
  391. package/build/dist/Utils/Monitor/EndpointAttachmentUtil.js +311 -0
  392. package/build/dist/Utils/Monitor/EndpointAttachmentUtil.js.map +1 -0
  393. package/build/dist/Utils/Monitor/NetworkTopologyUtil.js +98 -5
  394. package/build/dist/Utils/Monitor/NetworkTopologyUtil.js.map +1 -1
  395. package/build/dist/Utils/NetworkSite/CidrMatchUtil.js +222 -0
  396. package/build/dist/Utils/NetworkSite/CidrMatchUtil.js.map +1 -0
  397. package/build/dist/Utils/NetworkSite/MaterializedPathUtil.js +89 -0
  398. package/build/dist/Utils/NetworkSite/MaterializedPathUtil.js.map +1 -0
  399. package/build/dist/Utils/NetworkSite/SiteStatusRollupUtil.js +60 -0
  400. package/build/dist/Utils/NetworkSite/SiteStatusRollupUtil.js.map +1 -0
  401. package/build/dist/Utils/NetworkSite/SiteUptimeUtil.js +76 -0
  402. package/build/dist/Utils/NetworkSite/SiteUptimeUtil.js.map +1 -0
  403. package/build/dist/Utils/Slo/SloBurnRateRuleState.js +35 -0
  404. package/build/dist/Utils/Slo/SloBurnRateRuleState.js.map +1 -0
  405. package/build/dist/Utils/Slo/SloDuration.js +87 -0
  406. package/build/dist/Utils/Slo/SloDuration.js.map +1 -0
  407. package/build/dist/Utils/Slo/SloEvaluation.js +21 -0
  408. package/build/dist/Utils/Slo/SloEvaluation.js.map +1 -0
  409. package/build/dist/Utils/Slo/SloHealth.js +179 -0
  410. package/build/dist/Utils/Slo/SloHealth.js.map +1 -0
  411. package/build/dist/Utils/Slo/SloStatusColor.js +18 -0
  412. package/build/dist/Utils/Slo/SloStatusColor.js.map +1 -0
  413. package/build/dist/Utils/Slo/SloUtil.js +393 -0
  414. package/build/dist/Utils/Slo/SloUtil.js.map +1 -0
  415. package/build/dist/Utils/Slo/SloWidgetFormat.js +174 -0
  416. package/build/dist/Utils/Slo/SloWidgetFormat.js.map +1 -0
  417. package/package.json +2 -2
  418. package/Types/Dashboard/DashboardComponents/Index.ts +0 -7
  419. package/build/dist/Types/Dashboard/DashboardComponents/Index.js +0 -8
  420. package/build/dist/Types/Dashboard/DashboardComponents/Index.js.map +0 -1
@@ -0,0 +1,588 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var __metadata = (this && this.__metadata) || function (k, v) {
8
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
+ };
10
+ import Model from "../../Models/DatabaseModels/ServiceLevelObjective";
11
+ import ServiceLevelObjectiveBurnRateRule from "../../Models/DatabaseModels/ServiceLevelObjectiveBurnRateRule";
12
+ import URL from "../../Types/API/URL";
13
+ import SortOrder from "../../Types/BaseDatabase/SortOrder";
14
+ import LIMIT_MAX, { LIMIT_PER_PROJECT } from "../../Types/Database/LimitMax";
15
+ import OneUptimeDate from "../../Types/Date";
16
+ import BadDataException from "../../Types/Exception/BadDataException";
17
+ import ObjectID from "../../Types/ObjectID";
18
+ import SloWindowType from "../../Types/ServiceLevelObjective/SloWindowType";
19
+ import DatabaseConfig from "../DatabaseConfig";
20
+ import QueryHelper from "../Types/Database/QueryHelper";
21
+ import logger from "../Utils/Logger";
22
+ import CaptureSpan from "../Utils/Telemetry/CaptureSpan";
23
+ import AlertSeverityService from "./AlertSeverityService";
24
+ import DatabaseService from "./DatabaseService";
25
+ import MonitorStatusService from "./MonitorStatusService";
26
+ import ProjectService from "./ProjectService";
27
+ import ServiceLevelObjectiveBurnRateRuleService from "./ServiceLevelObjectiveBurnRateRuleService";
28
+ import ServiceLevelObjectiveOwnerTeamService from "./ServiceLevelObjectiveOwnerTeamService";
29
+ import ServiceLevelObjectiveOwnerUserService from "./ServiceLevelObjectiveOwnerUserService";
30
+ import TeamMemberService from "./TeamMemberService";
31
+ export class Service extends DatabaseService {
32
+ constructor() {
33
+ super(Model);
34
+ }
35
+ async onBeforeCreate(createBy) {
36
+ if (!createBy.data.projectId) {
37
+ throw new BadDataException("projectId is required");
38
+ }
39
+ /*
40
+ * Numeric columns arrive as strings from the dashboard: the "Target (%)"
41
+ * form field is a `<input type="number">`, whose onChange hands Formik
42
+ * `e.target.value` (a string), ModelForm copies it verbatim and
43
+ * BaseModel.fromJSON does not coerce Number/Decimal columns. So every
44
+ * validator here coerces first and writes the coerced number back onto the
45
+ * payload, which also keeps Postgres from ever receiving a string.
46
+ */
47
+ createBy.data.targetPercentage = this.validateTargetPercentage(createBy.data.targetPercentage);
48
+ /*
49
+ * Validate windowDays whenever it is supplied, regardless of windowType.
50
+ * A CalendarMonth SLO ignores the column today, but it is persisted, and
51
+ * switching that SLO to Rolling later (in an update that does not carry
52
+ * windowDays) would otherwise start evaluating against an out-of-range
53
+ * window. Validating on the way in also keeps create and update symmetric
54
+ * — onBeforeUpdate validates unconditionally, so a value accepted here
55
+ * but rejected there would make the column permanently un-updatable.
56
+ */
57
+ if (createBy.data.windowDays !== undefined &&
58
+ createBy.data.windowDays !== null) {
59
+ createBy.data.windowDays = this.validateWindowDays(createBy.data.windowDays);
60
+ }
61
+ if (createBy.data.atRiskThresholdPercentage !== undefined &&
62
+ createBy.data.atRiskThresholdPercentage !== null) {
63
+ createBy.data.atRiskThresholdPercentage =
64
+ this.validateAtRiskThresholdPercentage(createBy.data.atRiskThresholdPercentage);
65
+ }
66
+ /*
67
+ * Default the downtime statuses to all non-operational monitor statuses
68
+ * of the project (StatusPageService pattern).
69
+ */
70
+ if (!createBy.data.downtimeMonitorStatuses) {
71
+ const monitorStatuses = await MonitorStatusService.findBy({
72
+ query: {
73
+ projectId: createBy.data.projectId,
74
+ },
75
+ select: {
76
+ _id: true,
77
+ isOperationalState: true,
78
+ },
79
+ props: {
80
+ isRoot: true,
81
+ },
82
+ skip: 0,
83
+ limit: LIMIT_PER_PROJECT,
84
+ });
85
+ const nonOperationalStatuses = monitorStatuses.filter((monitorStatus) => {
86
+ return !monitorStatus.isOperationalState;
87
+ });
88
+ createBy.data.downtimeMonitorStatuses = nonOperationalStatuses;
89
+ }
90
+ return {
91
+ createBy,
92
+ carryForward: null,
93
+ };
94
+ }
95
+ async onCreateSuccess(_onCreate, createdItem) {
96
+ var _a, _b, _c, _d;
97
+ /*
98
+ * Stamp nextEvaluationAt = now so the evaluation worker picks this SLO up
99
+ * on its next tick. Done here (isRoot update) instead of onBeforeCreate
100
+ * because the column is worker-owned (`create: []` access control) — a
101
+ * non-root dashboard create would fail the column permission check if the
102
+ * hook injected it into the create payload.
103
+ */
104
+ try {
105
+ await this.updateOneById({
106
+ id: createdItem.id,
107
+ data: {
108
+ nextEvaluationAt: OneUptimeDate.getCurrentDate(),
109
+ },
110
+ props: {
111
+ isRoot: true,
112
+ },
113
+ });
114
+ }
115
+ catch (err) {
116
+ logger.error(`Error setting nextEvaluationAt for SLO ${(_a = createdItem.id) === null || _a === void 0 ? void 0 : _a.toString()}: ${err}`, { projectId: (_b = createdItem.projectId) === null || _b === void 0 ? void 0 : _b.toString() });
117
+ }
118
+ // Seed the two canonical multi-window burn rate rules. Non-fatal.
119
+ try {
120
+ await this.seedDefaultBurnRateRules(createdItem);
121
+ }
122
+ catch (err) {
123
+ logger.error(`Error seeding default burn rate rules for SLO ${(_c = createdItem.id) === null || _c === void 0 ? void 0 : _c.toString()}: ${err}`, { projectId: (_d = createdItem.projectId) === null || _d === void 0 ? void 0 : _d.toString() });
124
+ }
125
+ return createdItem;
126
+ }
127
+ async onBeforeUpdate(updateBy) {
128
+ /*
129
+ * Same string-arrival path as onBeforeCreate — coerce, validate, and write
130
+ * the number back onto the update payload.
131
+ */
132
+ const newTargetPercentage = updateBy.data
133
+ .targetPercentage;
134
+ if (newTargetPercentage !== undefined && newTargetPercentage !== null) {
135
+ updateBy.data.targetPercentage =
136
+ this.validateTargetPercentage(newTargetPercentage);
137
+ }
138
+ const newWindowDays = updateBy.data.windowDays;
139
+ if (newWindowDays !== undefined && newWindowDays !== null) {
140
+ updateBy.data.windowDays = this.validateWindowDays(newWindowDays);
141
+ }
142
+ const newAtRiskThresholdPercentage = updateBy.data
143
+ .atRiskThresholdPercentage;
144
+ if (newAtRiskThresholdPercentage !== undefined &&
145
+ newAtRiskThresholdPercentage !== null) {
146
+ updateBy.data.atRiskThresholdPercentage =
147
+ this.validateAtRiskThresholdPercentage(newAtRiskThresholdPercentage);
148
+ }
149
+ return {
150
+ updateBy,
151
+ carryForward: null,
152
+ };
153
+ }
154
+ async onUpdateSuccess(onUpdate, updatedItemIds) {
155
+ /*
156
+ * When an SLO is disabled, resolve its open burn-rate alerts — the
157
+ * evaluation worker skips disabled SLOs, so nothing else would ever
158
+ * resolve them (and their on-call escalations would stay open forever).
159
+ */
160
+ if (onUpdate.updateBy.data.isEnabled === false) {
161
+ for (const updatedItemId of updatedItemIds) {
162
+ try {
163
+ const slo = await this.findOneById({
164
+ id: updatedItemId,
165
+ select: {
166
+ projectId: true,
167
+ },
168
+ props: {
169
+ isRoot: true,
170
+ },
171
+ });
172
+ if (!slo || !slo.projectId) {
173
+ continue;
174
+ }
175
+ await this.resolveOpenBurnRateAlertsForSlo({
176
+ sloId: updatedItemId,
177
+ projectId: slo.projectId,
178
+ });
179
+ }
180
+ catch (err) {
181
+ logger.error(`Error resolving open burn rate alerts for disabled SLO ${updatedItemId.toString()}: ${err}`);
182
+ }
183
+ }
184
+ }
185
+ /*
186
+ * If the objective's math inputs changed, force a re-evaluation on the
187
+ * worker's next tick.
188
+ */
189
+ const isEvaluationConfigUpdated = onUpdate.updateBy.data.targetPercentage !== undefined ||
190
+ onUpdate.updateBy.data.windowDays !== undefined ||
191
+ onUpdate.updateBy.data.windowType !== undefined ||
192
+ onUpdate.updateBy.data.monitors !== undefined;
193
+ if (isEvaluationConfigUpdated) {
194
+ for (const updatedItemId of updatedItemIds) {
195
+ try {
196
+ await this.updateOneById({
197
+ id: updatedItemId,
198
+ data: {
199
+ nextEvaluationAt: OneUptimeDate.getCurrentDate(),
200
+ },
201
+ props: {
202
+ isRoot: true,
203
+ },
204
+ });
205
+ }
206
+ catch (err) {
207
+ logger.error(`Error forcing re-evaluation of SLO ${updatedItemId.toString()}: ${err}`);
208
+ }
209
+ }
210
+ }
211
+ return onUpdate;
212
+ }
213
+ async onBeforeDelete(deleteBy) {
214
+ var _a, _b;
215
+ const itemsToDelete = await this.findBy({
216
+ query: deleteBy.query,
217
+ limit: LIMIT_MAX,
218
+ skip: 0,
219
+ select: {
220
+ _id: true,
221
+ projectId: true,
222
+ },
223
+ props: {
224
+ isRoot: true,
225
+ },
226
+ });
227
+ for (const item of itemsToDelete) {
228
+ if (!item.id || !item.projectId) {
229
+ continue;
230
+ }
231
+ try {
232
+ await this.resolveOpenBurnRateAlertsForSlo({
233
+ sloId: item.id,
234
+ projectId: item.projectId,
235
+ });
236
+ }
237
+ catch (err) {
238
+ logger.error(`Error resolving open burn rate alerts for SLO ${(_a = item.id) === null || _a === void 0 ? void 0 : _a.toString()} before delete: ${err}`, { projectId: (_b = item.projectId) === null || _b === void 0 ? void 0 : _b.toString() });
239
+ }
240
+ }
241
+ return {
242
+ deleteBy,
243
+ carryForward: {
244
+ itemsToDelete: itemsToDelete,
245
+ },
246
+ };
247
+ }
248
+ /*
249
+ * Resolve every open Alert fired by any of this SLO's burn rate rules.
250
+ * Called when the SLO is disabled or deleted.
251
+ */
252
+ async resolveOpenBurnRateAlertsForSlo(data) {
253
+ var _a, _b, _c;
254
+ const burnRateRules = await ServiceLevelObjectiveBurnRateRuleService.findBy({
255
+ query: {
256
+ serviceLevelObjectiveId: data.sloId,
257
+ projectId: data.projectId,
258
+ },
259
+ select: {
260
+ _id: true,
261
+ },
262
+ skip: 0,
263
+ limit: LIMIT_PER_PROJECT,
264
+ props: {
265
+ isRoot: true,
266
+ },
267
+ });
268
+ for (const rule of burnRateRules) {
269
+ if (!rule.id) {
270
+ continue;
271
+ }
272
+ try {
273
+ await ServiceLevelObjectiveBurnRateRuleService.resolveOpenAlertsForRule({
274
+ serviceLevelObjectiveId: data.sloId,
275
+ burnRateRuleId: rule.id,
276
+ projectId: data.projectId,
277
+ rootCause: "Alert auto-resolved because the Service Level Objective was disabled or deleted.",
278
+ });
279
+ }
280
+ catch (err) {
281
+ logger.error(`Error resolving open alerts for burn rate rule ${(_a = rule.id) === null || _a === void 0 ? void 0 : _a.toString()} of SLO ${(_b = data.sloId) === null || _b === void 0 ? void 0 : _b.toString()}: ${err}`, { projectId: (_c = data.projectId) === null || _c === void 0 ? void 0 : _c.toString() });
282
+ }
283
+ }
284
+ }
285
+ /*
286
+ * All enabled SLOs in active projects that are due for evaluation
287
+ * (nextEvaluationAt in the past, or never evaluated). Selects every config
288
+ * and state column the evaluation worker needs.
289
+ */
290
+ async getDueSlos() {
291
+ return await this.findAllBy({
292
+ query: {
293
+ isEnabled: true,
294
+ nextEvaluationAt: QueryHelper.lessThanEqualToOrNull(OneUptimeDate.getCurrentDate()),
295
+ project: Object.assign({}, ProjectService.getActiveProjectStatusQuery()),
296
+ },
297
+ select: {
298
+ _id: true,
299
+ projectId: true,
300
+ name: true,
301
+ isEnabled: true,
302
+ sliType: true,
303
+ multiMonitorMode: true,
304
+ monitors: {
305
+ _id: true,
306
+ },
307
+ downtimeMonitorStatuses: {
308
+ _id: true,
309
+ },
310
+ metricQueryConfig: true,
311
+ targetPercentage: true,
312
+ windowType: true,
313
+ windowDays: true,
314
+ timezone: true,
315
+ atRiskThresholdPercentage: true,
316
+ currentSliPercentage: true,
317
+ errorBudgetRemainingPercentage: true,
318
+ errorBudgetRemainingSeconds: true,
319
+ errorBudgetTotalSeconds: true,
320
+ currentBurnRate: true,
321
+ sloStatus: true,
322
+ statusChangeNotificationSentAt: true,
323
+ lastEvaluatedAt: true,
324
+ nextEvaluationAt: true,
325
+ lastAccumulatedBucketEndAt: true,
326
+ },
327
+ sort: {
328
+ nextEvaluationAt: SortOrder.Ascending,
329
+ },
330
+ props: {
331
+ isRoot: true,
332
+ },
333
+ });
334
+ }
335
+ async findOwners(serviceLevelObjectiveId) {
336
+ if (!serviceLevelObjectiveId) {
337
+ throw new BadDataException("serviceLevelObjectiveId is required");
338
+ }
339
+ const ownerUsers = await ServiceLevelObjectiveOwnerUserService.findBy({
340
+ query: {
341
+ serviceLevelObjectiveId: serviceLevelObjectiveId,
342
+ },
343
+ select: {
344
+ _id: true,
345
+ user: {
346
+ _id: true,
347
+ email: true,
348
+ name: true,
349
+ timezone: true,
350
+ },
351
+ },
352
+ props: {
353
+ isRoot: true,
354
+ },
355
+ limit: LIMIT_PER_PROJECT,
356
+ skip: 0,
357
+ });
358
+ const ownerTeams = await ServiceLevelObjectiveOwnerTeamService.findBy({
359
+ query: {
360
+ serviceLevelObjectiveId: serviceLevelObjectiveId,
361
+ },
362
+ select: {
363
+ _id: true,
364
+ teamId: true,
365
+ },
366
+ skip: 0,
367
+ limit: LIMIT_PER_PROJECT,
368
+ props: {
369
+ isRoot: true,
370
+ },
371
+ });
372
+ const users = ownerUsers.map((ownerUser) => {
373
+ return ownerUser.user;
374
+ }) || [];
375
+ if (ownerTeams.length > 0) {
376
+ const teamIds = ownerTeams.map((ownerTeam) => {
377
+ return ownerTeam.teamId;
378
+ }) || [];
379
+ const teamUsers = await TeamMemberService.getUsersInTeams(teamIds);
380
+ for (const teamUser of teamUsers) {
381
+ // check if the user is already added.
382
+ const isUserAlreadyAdded = users.find((user) => {
383
+ return user.id.toString() === teamUser.id.toString();
384
+ });
385
+ if (!isUserAlreadyAdded) {
386
+ users.push(teamUser);
387
+ }
388
+ }
389
+ }
390
+ return users;
391
+ }
392
+ async getSloLinkInDashboard(projectId, serviceLevelObjectiveId) {
393
+ const dashboardUrl = await DatabaseConfig.getDashboardUrl();
394
+ return URL.fromString(dashboardUrl.toString()).addRoute(`/${projectId.toString()}/slos/${serviceLevelObjectiveId.toString()}`);
395
+ }
396
+ /*
397
+ * Seed the two canonical Google-SRE multi-window burn rate rules, with
398
+ * thresholds scaled to the SLO's compliance window. The textbook constants
399
+ * (14.4x over 1h/5m, 6x over 6h/30m) are derived from spending 2% / 5% of a
400
+ * 30-day budget: threshold = budgetFraction * windowHours / longWindowHours.
401
+ * A 30-day window reproduces exactly 14.4 and 6; shorter or longer windows
402
+ * stay correctly calibrated.
403
+ */
404
+ async seedDefaultBurnRateRules(createdItem) {
405
+ var _a, _b;
406
+ if (!createdItem.id || !createdItem.projectId) {
407
+ return;
408
+ }
409
+ const windowHours = createdItem.windowType === SloWindowType.CalendarMonth
410
+ ? 720
411
+ : (createdItem.windowDays || 30) * 24;
412
+ /*
413
+ * Default severity: the project's lowest-order (most severe) severity.
414
+ * A failure here must not cost the SLO its burn-rate rules — the rules are
415
+ * still useful without a severity (the worker falls back to the lowest
416
+ * order severity when it creates the alert), so a transient lookup error
417
+ * degrades to "no default severity" rather than "no rules at all".
418
+ */
419
+ let severity = null;
420
+ try {
421
+ severity = await AlertSeverityService.findOneBy({
422
+ query: {
423
+ projectId: createdItem.projectId,
424
+ },
425
+ sort: {
426
+ order: SortOrder.Ascending,
427
+ },
428
+ select: {
429
+ _id: true,
430
+ },
431
+ props: {
432
+ isRoot: true,
433
+ },
434
+ });
435
+ }
436
+ catch (error) {
437
+ logger.error(`Could not look up the default alert severity for SLO ${createdItem.id.toString()}. Seeding burn rate rules without one.`);
438
+ logger.error(error);
439
+ }
440
+ const defaultRules = [
441
+ {
442
+ name: "Fast burn",
443
+ burnRateThreshold: this.roundToTwoDecimals((0.02 * windowHours) / 1),
444
+ longWindowInMinutes: 60,
445
+ shortWindowInMinutes: 5,
446
+ },
447
+ {
448
+ name: "Slow burn",
449
+ burnRateThreshold: this.roundToTwoDecimals((0.05 * windowHours) / 6),
450
+ longWindowInMinutes: 360,
451
+ shortWindowInMinutes: 30,
452
+ },
453
+ ];
454
+ for (const defaultRule of defaultRules) {
455
+ try {
456
+ const rule = new ServiceLevelObjectiveBurnRateRule();
457
+ rule.projectId = createdItem.projectId;
458
+ rule.serviceLevelObjectiveId = createdItem.id;
459
+ rule.name = defaultRule.name;
460
+ rule.isEnabled = true;
461
+ rule.burnRateThreshold = defaultRule.burnRateThreshold;
462
+ rule.longWindowInMinutes = defaultRule.longWindowInMinutes;
463
+ rule.shortWindowInMinutes = defaultRule.shortWindowInMinutes;
464
+ if (severity && severity.id) {
465
+ rule.alertSeverityId = severity.id;
466
+ }
467
+ await ServiceLevelObjectiveBurnRateRuleService.create({
468
+ data: rule,
469
+ props: {
470
+ isRoot: true,
471
+ },
472
+ });
473
+ }
474
+ catch (err) {
475
+ logger.error(`Error seeding default burn rate rule "${defaultRule.name}" for SLO ${(_a = createdItem.id) === null || _a === void 0 ? void 0 : _a.toString()}: ${err}`, { projectId: (_b = createdItem.projectId) === null || _b === void 0 ? void 0 : _b.toString() });
476
+ }
477
+ }
478
+ }
479
+ roundToTwoDecimals(value) {
480
+ return Math.round(value * 100) / 100;
481
+ }
482
+ /*
483
+ * Coerce an API-supplied numeric column to a number. HTML number inputs hand
484
+ * Formik strings, and neither ModelForm nor BaseModel.fromJSON coerces
485
+ * Number/Decimal columns, so a perfectly valid "99.9" reaches these hooks as
486
+ * a string. Anything that is not a finite numeric string or number becomes
487
+ * NaN, which every caller below rejects. Mirrors
488
+ * GlobalConfigService.normalizePercent.
489
+ */
490
+ normalizeNumericInput(value) {
491
+ if (typeof value === "string") {
492
+ const trimmed = value.trim();
493
+ return trimmed === "" ? Number.NaN : Number(trimmed);
494
+ }
495
+ if (typeof value === "number") {
496
+ return value;
497
+ }
498
+ return Number.NaN;
499
+ }
500
+ validateTargetPercentage(value) {
501
+ const targetPercentage = this.normalizeNumericInput(value);
502
+ if (!Number.isFinite(targetPercentage) ||
503
+ targetPercentage <= 0 ||
504
+ targetPercentage > 99.999) {
505
+ throw new BadDataException("SLO target must be greater than 0 and at most 99.999. A 100% target leaves no error budget.");
506
+ }
507
+ return targetPercentage;
508
+ }
509
+ validateWindowDays(value) {
510
+ const windowDays = this.normalizeNumericInput(value);
511
+ /*
512
+ * The column is a Postgres integer, so a decimal that cleared only the
513
+ * range check would fail the INSERT with a raw driver error instead of
514
+ * this message.
515
+ */
516
+ if (!Number.isInteger(windowDays) || windowDays < 1 || windowDays > 366) {
517
+ throw new BadDataException("SLO window must be a whole number of days between 1 and 366.");
518
+ }
519
+ return windowDays;
520
+ }
521
+ validateAtRiskThresholdPercentage(value) {
522
+ const atRiskThresholdPercentage = this.normalizeNumericInput(value);
523
+ // Integer column — see validateWindowDays.
524
+ if (!Number.isInteger(atRiskThresholdPercentage) ||
525
+ atRiskThresholdPercentage < 0 ||
526
+ atRiskThresholdPercentage > 100) {
527
+ throw new BadDataException("SLO at-risk threshold must be a whole percentage between 0 and 100.");
528
+ }
529
+ return atRiskThresholdPercentage;
530
+ }
531
+ }
532
+ __decorate([
533
+ CaptureSpan(),
534
+ __metadata("design:type", Function),
535
+ __metadata("design:paramtypes", [Object]),
536
+ __metadata("design:returntype", Promise)
537
+ ], Service.prototype, "onBeforeCreate", null);
538
+ __decorate([
539
+ CaptureSpan(),
540
+ __metadata("design:type", Function),
541
+ __metadata("design:paramtypes", [Object, Model]),
542
+ __metadata("design:returntype", Promise)
543
+ ], Service.prototype, "onCreateSuccess", null);
544
+ __decorate([
545
+ CaptureSpan(),
546
+ __metadata("design:type", Function),
547
+ __metadata("design:paramtypes", [Object]),
548
+ __metadata("design:returntype", Promise)
549
+ ], Service.prototype, "onBeforeUpdate", null);
550
+ __decorate([
551
+ CaptureSpan(),
552
+ __metadata("design:type", Function),
553
+ __metadata("design:paramtypes", [Object, Array]),
554
+ __metadata("design:returntype", Promise)
555
+ ], Service.prototype, "onUpdateSuccess", null);
556
+ __decorate([
557
+ CaptureSpan(),
558
+ __metadata("design:type", Function),
559
+ __metadata("design:paramtypes", [Object]),
560
+ __metadata("design:returntype", Promise)
561
+ ], Service.prototype, "onBeforeDelete", null);
562
+ __decorate([
563
+ CaptureSpan(),
564
+ __metadata("design:type", Function),
565
+ __metadata("design:paramtypes", [Object]),
566
+ __metadata("design:returntype", Promise)
567
+ ], Service.prototype, "resolveOpenBurnRateAlertsForSlo", null);
568
+ __decorate([
569
+ CaptureSpan(),
570
+ __metadata("design:type", Function),
571
+ __metadata("design:paramtypes", []),
572
+ __metadata("design:returntype", Promise)
573
+ ], Service.prototype, "getDueSlos", null);
574
+ __decorate([
575
+ CaptureSpan(),
576
+ __metadata("design:type", Function),
577
+ __metadata("design:paramtypes", [ObjectID]),
578
+ __metadata("design:returntype", Promise)
579
+ ], Service.prototype, "findOwners", null);
580
+ __decorate([
581
+ CaptureSpan(),
582
+ __metadata("design:type", Function),
583
+ __metadata("design:paramtypes", [ObjectID,
584
+ ObjectID]),
585
+ __metadata("design:returntype", Promise)
586
+ ], Service.prototype, "getSloLinkInDashboard", null);
587
+ export default new Service();
588
+ //# sourceMappingURL=ServiceLevelObjectiveService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ServiceLevelObjectiveService.js","sourceRoot":"","sources":["../../../../Server/Services/ServiceLevelObjectiveService.ts"],"names":[],"mappings":"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"}