@oneuptime/common 11.7.3 → 11.7.4

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 (365) hide show
  1. package/Models/DatabaseModels/AlertEpisodeStateTimeline.ts +1 -0
  2. package/Models/DatabaseModels/AlertStateTimeline.ts +1 -0
  3. package/Models/DatabaseModels/IncidentEpisodeStateTimeline.ts +1 -0
  4. package/Models/DatabaseModels/IncidentStateTimeline.ts +1 -0
  5. package/Models/DatabaseModels/Index.ts +5 -0
  6. package/Models/DatabaseModels/LogDropFilter.ts +89 -0
  7. package/Models/DatabaseModels/NetworkDeviceDiscoveryScan.ts +13 -3
  8. package/Models/DatabaseModels/RecommendationDismissal.ts +463 -0
  9. package/Models/DatabaseModels/ScheduledMaintenanceStateTimeline.ts +1 -0
  10. package/Models/DatabaseModels/StatusPageGroup.ts +95 -0
  11. package/Models/DatabaseModels/TraceDropFilter.ts +89 -0
  12. package/Models/DatabaseModels/WorkflowVariable.ts +5 -1
  13. package/Server/API/AlertAPI.ts +32 -17
  14. package/Server/API/BaseAPI.ts +31 -2
  15. package/Server/API/BaseAnalyticsAPI.ts +36 -2
  16. package/Server/API/CommonAPI.ts +57 -0
  17. package/Server/API/IncidentAPI.ts +60 -33
  18. package/Server/API/IncidentEpisodeAPI.ts +31 -16
  19. package/Server/API/MonitorAPI.ts +30 -0
  20. package/Server/API/MonitorTemplateAPI.ts +8 -0
  21. package/Server/API/ProbeAPI.ts +196 -15
  22. package/Server/API/ProjectAPI.ts +79 -1
  23. package/Server/API/ScheduledMaintenanceAPI.ts +33 -18
  24. package/Server/API/StatusPageAPI.ts +74 -37
  25. package/Server/API/WorkspaceNotificationRuleAPI.ts +34 -4
  26. package/Server/Infrastructure/Postgres/SchemaMigrations/1785320000000-RepairCrossProjectIncidentReferences.ts +527 -0
  27. package/Server/Infrastructure/Postgres/SchemaMigrations/1785329453269-AddParentGroupToStatusPageGroup.ts +31 -0
  28. package/Server/Infrastructure/Postgres/SchemaMigrations/1785397674289-AddRecommendationDismissalTable.ts +55 -0
  29. package/Server/Infrastructure/Postgres/SchemaMigrations/1785405581596-AddDroppedCountersToDropFilters.ts +53 -0
  30. package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +8 -0
  31. package/Server/Services/AlertEpisodeService.ts +47 -0
  32. package/Server/Services/AlertService.ts +125 -0
  33. package/Server/Services/BillingService.ts +98 -0
  34. package/Server/Services/DatabaseService.ts +184 -20
  35. package/Server/Services/IncidentEpisodeService.ts +47 -0
  36. package/Server/Services/IncidentService.ts +123 -0
  37. package/Server/Services/IncidentTemplateService.ts +123 -1
  38. package/Server/Services/Index.ts +2 -0
  39. package/Server/Services/LogDropFilterService.ts +133 -0
  40. package/Server/Services/MonitorProbeService.ts +94 -4
  41. package/Server/Services/MonitorService.ts +48 -43
  42. package/Server/Services/NetworkDeviceDiscoveryScanService.ts +70 -0
  43. package/Server/Services/ProbeService.ts +66 -0
  44. package/Server/Services/ProjectService.ts +131 -7
  45. package/Server/Services/RecommendationDismissalService.ts +52 -0
  46. package/Server/Services/RunbookAgentJobService.ts +68 -7
  47. package/Server/Services/ScheduledMaintenanceService.ts +103 -0
  48. package/Server/Services/ScheduledMaintenanceTemplateService.ts +90 -0
  49. package/Server/Services/StatusPageGroupService.ts +186 -0
  50. package/Server/Services/TraceDropFilterService.ts +133 -0
  51. package/Server/Types/Workflow/Components/API/Delete.ts +12 -0
  52. package/Server/Types/Workflow/Components/API/Get.ts +12 -0
  53. package/Server/Types/Workflow/Components/API/Patch.ts +12 -0
  54. package/Server/Types/Workflow/Components/API/Post.ts +12 -0
  55. package/Server/Types/Workflow/Components/API/Put.ts +13 -0
  56. package/Server/Utils/Database/ProjectScopedReferenceValidator.ts +212 -0
  57. package/Server/Utils/DropFilterValidation.ts +127 -0
  58. package/Server/Utils/Errors.ts +5 -0
  59. package/Server/Utils/Monitor/MonitorAlert.ts +28 -1
  60. package/Server/Utils/Monitor/MonitorIncident.ts +31 -2
  61. package/Server/Utils/Telemetry/AppMetrics.ts +31 -0
  62. package/Tests/Models/DatabaseModels/MonitorProbeColumnAccessControl.test.ts +196 -0
  63. package/Tests/Models/RecommendationDismissalModel.test.ts +269 -0
  64. package/Tests/Server/API/BaseAPIUpdatePayloadValidation.test.ts +320 -0
  65. package/Tests/Server/API/BaseAnalyticsAPIUpdatePayloadValidation.test.ts +293 -0
  66. package/Tests/Server/API/CommonAPIAuthGuard.test.ts +164 -0
  67. package/Tests/Server/API/ProbeAPI.test.ts +422 -53
  68. package/Tests/Server/API/ProjectAPI.test.ts +180 -0
  69. package/Tests/Server/API/ProjectAPIExtendTrialBillingDisabled.test.ts +138 -0
  70. package/Tests/Server/API/ProjectScopedCustomRouteAuth.test.ts +458 -0
  71. package/Tests/Server/Infrastructure/ContainerBootConfiguration.test.ts +359 -0
  72. package/Tests/Server/Infrastructure/ProcessSignalDelivery.test.ts +427 -0
  73. package/Tests/Server/Services/BillingServiceExtendTrial.test.ts +439 -0
  74. package/Tests/Server/Services/CrossProjectReferenceWriteGuard.test.ts +810 -0
  75. package/Tests/Server/Services/DatabaseServiceAtomicAddToColumns.test.ts +269 -0
  76. package/Tests/Server/Services/DatabaseServiceEmptyUpdate.test.ts +277 -0
  77. package/Tests/Server/Services/DatabaseServiceSortColumnSelect.test.ts +201 -0
  78. package/Tests/Server/Services/DiscoveryScanClaimHookFreeSafety.test.ts +81 -23
  79. package/Tests/Server/Services/DropFilterSaveValidation.test.ts +398 -0
  80. package/Tests/Server/Services/MonitorProbeDeleteHooks.test.ts +280 -0
  81. package/Tests/Server/Services/MonitorProbeServiceProbeTenancy.test.ts +304 -0
  82. package/Tests/Server/Services/NetworkDeviceDiscoveryScanService.test.ts +262 -0
  83. package/Tests/Server/Services/ProjectServiceExtendTrial.test.ts +614 -0
  84. package/Tests/Server/Services/RecommendationDismissalService.test.ts +306 -0
  85. package/Tests/Server/Services/RepairCrossProjectIncidentReferencesMigration.test.ts +528 -0
  86. package/Tests/Server/Services/StatusPageGroupNesting.test.ts +395 -0
  87. package/Tests/Server/TestingUtils/Services/BillingServiceHelper.ts +26 -21
  88. package/Tests/Server/Types/Database/Permissions/WorkflowVariableColumnPermission.test.ts +227 -0
  89. package/Tests/Server/Types/Workflow/Components/ApiComponentErrorPort.test.ts +285 -0
  90. package/Tests/Server/Utils/Database/ProjectScopedReferenceValidator.test.ts +463 -0
  91. package/Tests/Server/Utils/DropFilterValidation.test.ts +269 -0
  92. package/Tests/Server/Utils/Telemetry/SpanUtil.test.ts +94 -0
  93. package/Tests/Types/DateUserTimezone.test.ts +52 -0
  94. package/Tests/Types/Monitor/KubernetesAlertTemplates.test.ts +177 -9
  95. package/Tests/Types/Monitor/MonitorStepDnsMonitor.test.ts +105 -0
  96. package/Tests/Types/Monitor/MonitorStepDnssecMonitor.test.ts +131 -0
  97. package/Tests/Types/Monitor/MonitorStepDomainMonitor.test.ts +60 -0
  98. package/Tests/Types/Monitor/MonitorStepExternalStatusPageMonitor.test.ts +82 -0
  99. package/Tests/Types/Monitor/MonitorStepInfrastructureMonitors.test.ts +268 -0
  100. package/Tests/Types/Monitor/MonitorStepMetricMonitor.test.ts +386 -0
  101. package/Tests/Types/Monitor/MonitorStepProfileMonitor.test.ts +185 -0
  102. package/Tests/Types/Monitor/MonitorStepSnmpMonitor.test.ts +156 -0
  103. package/Tests/Types/Monitor/Recommendation/MonitorRecommendationCatalog.test.ts +371 -0
  104. package/Tests/Types/Monitor/Recommendation/MonitorRecommendationCoverage.test.ts +901 -0
  105. package/Tests/Types/Monitor/Recommendation/MonitorRecommendationNotificationMode.test.ts +607 -0
  106. package/Tests/Types/Monitor/Recommendation/MonitorRecommendationSeverityMapper.test.ts +754 -0
  107. package/Tests/Types/Monitor/Recommendation/MonitorRecommendationUtil.test.ts +960 -0
  108. package/Tests/Types/RollingTime/RollingTimeUtil.test.ts +186 -0
  109. package/Tests/Types/Runbook/RunbookStepTimeout.test.ts +410 -0
  110. package/Tests/Types/Telemetry/DropFilterSampling.test.ts +241 -0
  111. package/Tests/Types/Workspace/NotificationRuleConditionUtil.test.ts +353 -0
  112. package/Tests/Types/Workspace/NotificationRuleUtil.test.ts +566 -0
  113. package/Tests/UI/Components/CodeEditor.test.tsx +174 -0
  114. package/Tests/UI/Components/ErrorBoundary.test.tsx +555 -24
  115. package/Tests/UI/Components/InfoCard.test.tsx +358 -0
  116. package/Tests/UI/Components/LogTimeRangePicker.test.tsx +138 -0
  117. package/Tests/UI/Components/Modal.test.tsx +43 -5
  118. package/Tests/UI/Components/ModelTable/BaseModelTableSearchLabels.test.tsx +397 -0
  119. package/Tests/UI/Components/ModelTable/ColumnCustomizationModal.test.tsx +427 -0
  120. package/Tests/UI/Components/Runbook/StepTimeoutInput.test.tsx +386 -0
  121. package/Tests/UI/Components/StatusPage/ResourceGroupSection.test.tsx +671 -0
  122. package/Tests/UI/Components/TelemetryTimeRangePicker.test.tsx +404 -0
  123. package/Tests/UI/Utils/DropdownAlignment.test.ts +306 -0
  124. package/Tests/UI/Utils/TableFilterUrlState.test.ts +292 -0
  125. package/Tests/Utils/Monitor/MonitorSummaryProbeUtil.test.ts +263 -0
  126. package/Tests/Utils/NetworkDiscovery/ScanTargetUtil.test.ts +583 -0
  127. package/Tests/Utils/StatusPage/GroupNestingLayout.test.ts +1072 -0
  128. package/Tests/Utils/StatusPage/GroupTree.test.ts +583 -0
  129. package/Tests/Utils/StatusPage/ResourceUptime.test.ts +411 -0
  130. package/Types/Date.ts +15 -6
  131. package/Types/Monitor/KubernetesAlertTemplates.ts +205 -0
  132. package/Types/Monitor/MonitorStep.ts +10 -1
  133. package/Types/Monitor/MonitorStepMetricMonitor.ts +46 -1
  134. package/Types/Monitor/Recommendation/MonitorRecommendationCatalog.ts +413 -0
  135. package/Types/Monitor/Recommendation/MonitorRecommendationSeverityMapper.ts +168 -0
  136. package/Types/Monitor/Recommendation/MonitorRecommendationTypes.ts +175 -0
  137. package/Types/Monitor/Recommendation/MonitorRecommendationUtil.ts +743 -0
  138. package/Types/Permission.ts +45 -0
  139. package/Types/Recommendation/RecommendationType.ts +20 -0
  140. package/Types/Runbook/RunbookExecutionDeadline.ts +129 -0
  141. package/Types/Runbook/RunbookStepTimeout.ts +202 -0
  142. package/Types/Telemetry/DropFilterSampling.ts +92 -0
  143. package/UI/Components/AI/GenerateFromAIModal.tsx +0 -2
  144. package/UI/Components/Accordion/Accordion.tsx +10 -2
  145. package/UI/Components/BulkUpdate/BulkLabelActions.tsx +0 -1
  146. package/UI/Components/CodeEditor/CodeEditor.tsx +34 -20
  147. package/UI/Components/Date/RangeStartAndEndDateView.tsx +0 -1
  148. package/UI/Components/EditionLabel/EditionLabel.tsx +1 -27
  149. package/UI/Components/Error/PageError.tsx +0 -4
  150. package/UI/Components/ErrorBoundary.tsx +252 -15
  151. package/UI/Components/InfoCard/InfoCard.tsx +58 -1
  152. package/UI/Components/LogsViewer/components/LogTimeRangePicker.tsx +34 -1
  153. package/UI/Components/Modal/Modal.tsx +16 -60
  154. package/UI/Components/ModelFormModal/ModelFormModal.tsx +0 -8
  155. package/UI/Components/ModelTable/BaseModelTable.tsx +116 -67
  156. package/UI/Components/ModelTable/ColumnCustomizationModal.tsx +150 -47
  157. package/UI/Components/Runbook/StepTimeoutInput.tsx +173 -0
  158. package/UI/Components/StatusPage/ResourceGroupSection.tsx +231 -0
  159. package/UI/Components/TelemetryViewer/components/TelemetryTimeRangePicker.tsx +34 -1
  160. package/UI/Utils/DropdownAlignment.ts +162 -0
  161. package/UI/Utils/TableFilterUrlState.ts +59 -20
  162. package/Utils/API.ts +106 -2
  163. package/Utils/Monitor/MonitorSummaryProbeUtil.ts +130 -0
  164. package/Utils/NetworkDiscovery/ScanTargetUtil.ts +434 -0
  165. package/Utils/StatusPage/GroupNestingLayout.ts +343 -0
  166. package/Utils/StatusPage/GroupTree.ts +307 -0
  167. package/Utils/StatusPage/ResourceUptime.ts +90 -17
  168. package/build/dist/Models/DatabaseModels/AlertEpisodeStateTimeline.js +1 -0
  169. package/build/dist/Models/DatabaseModels/AlertEpisodeStateTimeline.js.map +1 -1
  170. package/build/dist/Models/DatabaseModels/AlertStateTimeline.js +1 -0
  171. package/build/dist/Models/DatabaseModels/AlertStateTimeline.js.map +1 -1
  172. package/build/dist/Models/DatabaseModels/IncidentEpisodeStateTimeline.js +1 -0
  173. package/build/dist/Models/DatabaseModels/IncidentEpisodeStateTimeline.js.map +1 -1
  174. package/build/dist/Models/DatabaseModels/IncidentStateTimeline.js +1 -0
  175. package/build/dist/Models/DatabaseModels/IncidentStateTimeline.js.map +1 -1
  176. package/build/dist/Models/DatabaseModels/Index.js +2 -0
  177. package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
  178. package/build/dist/Models/DatabaseModels/LogDropFilter.js +91 -0
  179. package/build/dist/Models/DatabaseModels/LogDropFilter.js.map +1 -1
  180. package/build/dist/Models/DatabaseModels/NetworkDeviceDiscoveryScan.js +14 -4
  181. package/build/dist/Models/DatabaseModels/NetworkDeviceDiscoveryScan.js.map +1 -1
  182. package/build/dist/Models/DatabaseModels/RecommendationDismissal.js +484 -0
  183. package/build/dist/Models/DatabaseModels/RecommendationDismissal.js.map +1 -0
  184. package/build/dist/Models/DatabaseModels/ScheduledMaintenanceStateTimeline.js +1 -0
  185. package/build/dist/Models/DatabaseModels/ScheduledMaintenanceStateTimeline.js.map +1 -1
  186. package/build/dist/Models/DatabaseModels/StatusPageGroup.js +94 -0
  187. package/build/dist/Models/DatabaseModels/StatusPageGroup.js.map +1 -1
  188. package/build/dist/Models/DatabaseModels/TraceDropFilter.js +91 -0
  189. package/build/dist/Models/DatabaseModels/TraceDropFilter.js.map +1 -1
  190. package/build/dist/Models/DatabaseModels/WorkflowVariable.js +5 -1
  191. package/build/dist/Models/DatabaseModels/WorkflowVariable.js.map +1 -1
  192. package/build/dist/Server/API/AlertAPI.js +22 -13
  193. package/build/dist/Server/API/AlertAPI.js.map +1 -1
  194. package/build/dist/Server/API/BaseAPI.js +22 -1
  195. package/build/dist/Server/API/BaseAPI.js.map +1 -1
  196. package/build/dist/Server/API/BaseAnalyticsAPI.js +24 -1
  197. package/build/dist/Server/API/BaseAnalyticsAPI.js.map +1 -1
  198. package/build/dist/Server/API/CommonAPI.js +42 -0
  199. package/build/dist/Server/API/CommonAPI.js.map +1 -1
  200. package/build/dist/Server/API/IncidentAPI.js +43 -26
  201. package/build/dist/Server/API/IncidentAPI.js.map +1 -1
  202. package/build/dist/Server/API/IncidentEpisodeAPI.js +21 -12
  203. package/build/dist/Server/API/IncidentEpisodeAPI.js.map +1 -1
  204. package/build/dist/Server/API/MonitorAPI.js +23 -0
  205. package/build/dist/Server/API/MonitorAPI.js.map +1 -1
  206. package/build/dist/Server/API/MonitorTemplateAPI.js +4 -0
  207. package/build/dist/Server/API/MonitorTemplateAPI.js.map +1 -1
  208. package/build/dist/Server/API/ProbeAPI.js +131 -15
  209. package/build/dist/Server/API/ProbeAPI.js.map +1 -1
  210. package/build/dist/Server/API/ProjectAPI.js +62 -3
  211. package/build/dist/Server/API/ProjectAPI.js.map +1 -1
  212. package/build/dist/Server/API/ScheduledMaintenanceAPI.js +23 -14
  213. package/build/dist/Server/API/ScheduledMaintenanceAPI.js.map +1 -1
  214. package/build/dist/Server/API/StatusPageAPI.js +61 -33
  215. package/build/dist/Server/API/StatusPageAPI.js.map +1 -1
  216. package/build/dist/Server/API/WorkspaceNotificationRuleAPI.js +26 -2
  217. package/build/dist/Server/API/WorkspaceNotificationRuleAPI.js.map +1 -1
  218. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785320000000-RepairCrossProjectIncidentReferences.js +397 -0
  219. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785320000000-RepairCrossProjectIncidentReferences.js.map +1 -0
  220. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785329453269-AddParentGroupToStatusPageGroup.js +16 -0
  221. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785329453269-AddParentGroupToStatusPageGroup.js.map +1 -0
  222. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785397674289-AddRecommendationDismissalTable.js +30 -0
  223. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785397674289-AddRecommendationDismissalTable.js.map +1 -0
  224. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785405581596-AddDroppedCountersToDropFilters.js +34 -0
  225. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785405581596-AddDroppedCountersToDropFilters.js.map +1 -0
  226. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +8 -0
  227. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
  228. package/build/dist/Server/Services/AlertEpisodeService.js +39 -0
  229. package/build/dist/Server/Services/AlertEpisodeService.js.map +1 -1
  230. package/build/dist/Server/Services/AlertService.js +95 -0
  231. package/build/dist/Server/Services/AlertService.js.map +1 -1
  232. package/build/dist/Server/Services/BillingService.js +71 -0
  233. package/build/dist/Server/Services/BillingService.js.map +1 -1
  234. package/build/dist/Server/Services/DatabaseService.js +140 -17
  235. package/build/dist/Server/Services/DatabaseService.js.map +1 -1
  236. package/build/dist/Server/Services/IncidentEpisodeService.js +39 -0
  237. package/build/dist/Server/Services/IncidentEpisodeService.js.map +1 -1
  238. package/build/dist/Server/Services/IncidentService.js +100 -0
  239. package/build/dist/Server/Services/IncidentService.js.map +1 -1
  240. package/build/dist/Server/Services/IncidentTemplateService.js +97 -0
  241. package/build/dist/Server/Services/IncidentTemplateService.js.map +1 -1
  242. package/build/dist/Server/Services/Index.js +2 -0
  243. package/build/dist/Server/Services/Index.js.map +1 -1
  244. package/build/dist/Server/Services/LogDropFilterService.js +93 -0
  245. package/build/dist/Server/Services/LogDropFilterService.js.map +1 -1
  246. package/build/dist/Server/Services/MonitorProbeService.js +73 -5
  247. package/build/dist/Server/Services/MonitorProbeService.js.map +1 -1
  248. package/build/dist/Server/Services/MonitorService.js +34 -39
  249. package/build/dist/Server/Services/MonitorService.js.map +1 -1
  250. package/build/dist/Server/Services/NetworkDeviceDiscoveryScanService.js +71 -0
  251. package/build/dist/Server/Services/NetworkDeviceDiscoveryScanService.js.map +1 -1
  252. package/build/dist/Server/Services/ProbeService.js +64 -0
  253. package/build/dist/Server/Services/ProbeService.js.map +1 -1
  254. package/build/dist/Server/Services/ProjectService.js +103 -7
  255. package/build/dist/Server/Services/ProjectService.js.map +1 -1
  256. package/build/dist/Server/Services/RecommendationDismissalService.js +50 -0
  257. package/build/dist/Server/Services/RecommendationDismissalService.js.map +1 -0
  258. package/build/dist/Server/Services/RunbookAgentJobService.js +63 -5
  259. package/build/dist/Server/Services/RunbookAgentJobService.js.map +1 -1
  260. package/build/dist/Server/Services/ScheduledMaintenanceService.js +83 -0
  261. package/build/dist/Server/Services/ScheduledMaintenanceService.js.map +1 -1
  262. package/build/dist/Server/Services/ScheduledMaintenanceTemplateService.js +65 -0
  263. package/build/dist/Server/Services/ScheduledMaintenanceTemplateService.js.map +1 -1
  264. package/build/dist/Server/Services/StatusPageGroupService.js +136 -0
  265. package/build/dist/Server/Services/StatusPageGroupService.js.map +1 -1
  266. package/build/dist/Server/Services/TraceDropFilterService.js +93 -0
  267. package/build/dist/Server/Services/TraceDropFilterService.js.map +1 -1
  268. package/build/dist/Server/Types/Workflow/Components/API/Delete.js +11 -0
  269. package/build/dist/Server/Types/Workflow/Components/API/Delete.js.map +1 -1
  270. package/build/dist/Server/Types/Workflow/Components/API/Get.js +11 -0
  271. package/build/dist/Server/Types/Workflow/Components/API/Get.js.map +1 -1
  272. package/build/dist/Server/Types/Workflow/Components/API/Patch.js +11 -0
  273. package/build/dist/Server/Types/Workflow/Components/API/Patch.js.map +1 -1
  274. package/build/dist/Server/Types/Workflow/Components/API/Post.js +11 -0
  275. package/build/dist/Server/Types/Workflow/Components/API/Post.js.map +1 -1
  276. package/build/dist/Server/Types/Workflow/Components/API/Put.js +12 -0
  277. package/build/dist/Server/Types/Workflow/Components/API/Put.js.map +1 -1
  278. package/build/dist/Server/Utils/Database/ProjectScopedReferenceValidator.js +132 -0
  279. package/build/dist/Server/Utils/Database/ProjectScopedReferenceValidator.js.map +1 -0
  280. package/build/dist/Server/Utils/DropFilterValidation.js +80 -0
  281. package/build/dist/Server/Utils/DropFilterValidation.js.map +1 -0
  282. package/build/dist/Server/Utils/Errors.js +3 -0
  283. package/build/dist/Server/Utils/Errors.js.map +1 -1
  284. package/build/dist/Server/Utils/Monitor/MonitorAlert.js +30 -12
  285. package/build/dist/Server/Utils/Monitor/MonitorAlert.js.map +1 -1
  286. package/build/dist/Server/Utils/Monitor/MonitorIncident.js +38 -18
  287. package/build/dist/Server/Utils/Monitor/MonitorIncident.js.map +1 -1
  288. package/build/dist/Server/Utils/Telemetry/AppMetrics.js +26 -0
  289. package/build/dist/Server/Utils/Telemetry/AppMetrics.js.map +1 -1
  290. package/build/dist/Types/Date.js +14 -4
  291. package/build/dist/Types/Date.js.map +1 -1
  292. package/build/dist/Types/Monitor/KubernetesAlertTemplates.js +192 -0
  293. package/build/dist/Types/Monitor/KubernetesAlertTemplates.js.map +1 -1
  294. package/build/dist/Types/Monitor/MonitorStep.js +6 -1
  295. package/build/dist/Types/Monitor/MonitorStep.js.map +1 -1
  296. package/build/dist/Types/Monitor/MonitorStepMetricMonitor.js +32 -1
  297. package/build/dist/Types/Monitor/MonitorStepMetricMonitor.js.map +1 -1
  298. package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationCatalog.js +294 -0
  299. package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationCatalog.js.map +1 -0
  300. package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationSeverityMapper.js +110 -0
  301. package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationSeverityMapper.js.map +1 -0
  302. package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationTypes.js +58 -0
  303. package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationTypes.js.map +1 -0
  304. package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationUtil.js +451 -0
  305. package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationUtil.js.map +1 -0
  306. package/build/dist/Types/Permission.js +40 -0
  307. package/build/dist/Types/Permission.js.map +1 -1
  308. package/build/dist/Types/Recommendation/RecommendationType.js +21 -0
  309. package/build/dist/Types/Recommendation/RecommendationType.js.map +1 -0
  310. package/build/dist/Types/Runbook/RunbookExecutionDeadline.js +93 -0
  311. package/build/dist/Types/Runbook/RunbookExecutionDeadline.js.map +1 -0
  312. package/build/dist/Types/Runbook/RunbookStepTimeout.js +142 -0
  313. package/build/dist/Types/Runbook/RunbookStepTimeout.js.map +1 -0
  314. package/build/dist/Types/Telemetry/DropFilterSampling.js +75 -0
  315. package/build/dist/Types/Telemetry/DropFilterSampling.js.map +1 -0
  316. package/build/dist/UI/Components/AI/GenerateFromAIModal.js +1 -2
  317. package/build/dist/UI/Components/AI/GenerateFromAIModal.js.map +1 -1
  318. package/build/dist/UI/Components/Accordion/Accordion.js +9 -2
  319. package/build/dist/UI/Components/Accordion/Accordion.js.map +1 -1
  320. package/build/dist/UI/Components/BulkUpdate/BulkLabelActions.js +1 -1
  321. package/build/dist/UI/Components/BulkUpdate/BulkLabelActions.js.map +1 -1
  322. package/build/dist/UI/Components/CodeEditor/CodeEditor.js +27 -14
  323. package/build/dist/UI/Components/CodeEditor/CodeEditor.js.map +1 -1
  324. package/build/dist/UI/Components/Date/RangeStartAndEndDateView.js +1 -1
  325. package/build/dist/UI/Components/Date/RangeStartAndEndDateView.js.map +1 -1
  326. package/build/dist/UI/Components/EditionLabel/EditionLabel.js +2 -20
  327. package/build/dist/UI/Components/EditionLabel/EditionLabel.js.map +1 -1
  328. package/build/dist/UI/Components/Error/PageError.js +1 -3
  329. package/build/dist/UI/Components/Error/PageError.js.map +1 -1
  330. package/build/dist/UI/Components/ErrorBoundary.js +145 -11
  331. package/build/dist/UI/Components/ErrorBoundary.js.map +1 -1
  332. package/build/dist/UI/Components/InfoCard/InfoCard.js +28 -1
  333. package/build/dist/UI/Components/InfoCard/InfoCard.js.map +1 -1
  334. package/build/dist/UI/Components/LogsViewer/components/LogTimeRangePicker.js +13 -2
  335. package/build/dist/UI/Components/LogsViewer/components/LogTimeRangePicker.js.map +1 -1
  336. package/build/dist/UI/Components/Modal/Modal.js +4 -32
  337. package/build/dist/UI/Components/Modal/Modal.js.map +1 -1
  338. package/build/dist/UI/Components/ModelFormModal/ModelFormModal.js.map +1 -1
  339. package/build/dist/UI/Components/ModelTable/BaseModelTable.js +69 -33
  340. package/build/dist/UI/Components/ModelTable/BaseModelTable.js.map +1 -1
  341. package/build/dist/UI/Components/ModelTable/ColumnCustomizationModal.js +73 -32
  342. package/build/dist/UI/Components/ModelTable/ColumnCustomizationModal.js.map +1 -1
  343. package/build/dist/UI/Components/Runbook/StepTimeoutInput.js +101 -0
  344. package/build/dist/UI/Components/Runbook/StepTimeoutInput.js.map +1 -0
  345. package/build/dist/UI/Components/StatusPage/ResourceGroupSection.js +73 -0
  346. package/build/dist/UI/Components/StatusPage/ResourceGroupSection.js.map +1 -0
  347. package/build/dist/UI/Components/TelemetryViewer/components/TelemetryTimeRangePicker.js +13 -2
  348. package/build/dist/UI/Components/TelemetryViewer/components/TelemetryTimeRangePicker.js.map +1 -1
  349. package/build/dist/UI/Utils/DropdownAlignment.js +98 -0
  350. package/build/dist/UI/Utils/DropdownAlignment.js.map +1 -0
  351. package/build/dist/UI/Utils/TableFilterUrlState.js +48 -15
  352. package/build/dist/UI/Utils/TableFilterUrlState.js.map +1 -1
  353. package/build/dist/Utils/API.js +39 -2
  354. package/build/dist/Utils/API.js.map +1 -1
  355. package/build/dist/Utils/Monitor/MonitorSummaryProbeUtil.js +97 -0
  356. package/build/dist/Utils/Monitor/MonitorSummaryProbeUtil.js.map +1 -0
  357. package/build/dist/Utils/NetworkDiscovery/ScanTargetUtil.js +330 -0
  358. package/build/dist/Utils/NetworkDiscovery/ScanTargetUtil.js.map +1 -0
  359. package/build/dist/Utils/StatusPage/GroupNestingLayout.js +280 -0
  360. package/build/dist/Utils/StatusPage/GroupNestingLayout.js.map +1 -0
  361. package/build/dist/Utils/StatusPage/GroupTree.js +214 -0
  362. package/build/dist/Utils/StatusPage/GroupTree.js.map +1 -0
  363. package/build/dist/Utils/StatusPage/ResourceUptime.js +60 -16
  364. package/build/dist/Utils/StatusPage/ResourceUptime.js.map +1 -1
  365. package/package.json +1 -1
@@ -0,0 +1,105 @@
1
+ import { JSONObject } from "../../../Types/JSON";
2
+ import DnsRecordType from "../../../Types/Monitor/DnsMonitor/DnsRecordType";
3
+ import MonitorStepDnsMonitor, {
4
+ MonitorStepDnsMonitorUtil,
5
+ } from "../../../Types/Monitor/MonitorStepDnsMonitor";
6
+
7
+ describe("MonitorStepDnsMonitorUtil", () => {
8
+ describe("getDefault", () => {
9
+ test("returns an empty query on port 53 with an A record", () => {
10
+ const def: MonitorStepDnsMonitor = MonitorStepDnsMonitorUtil.getDefault();
11
+
12
+ expect(def.queryName).toBe("");
13
+ expect(def.recordType).toBe(DnsRecordType.A);
14
+ expect(def.hostname).toBe("");
15
+ expect(def.port).toBe(53);
16
+ expect(def.timeout).toBe(5000);
17
+ expect(def.retries).toBe(3);
18
+ });
19
+ });
20
+
21
+ describe("fromJSON", () => {
22
+ test("reads through explicit values", () => {
23
+ const parsed: MonitorStepDnsMonitor = MonitorStepDnsMonitorUtil.fromJSON({
24
+ queryName: "oneuptime.com",
25
+ recordType: DnsRecordType.MX,
26
+ hostname: "8.8.8.8",
27
+ port: 5353,
28
+ timeout: 2000,
29
+ retries: 5,
30
+ });
31
+
32
+ expect(parsed.queryName).toBe("oneuptime.com");
33
+ expect(parsed.recordType).toBe(DnsRecordType.MX);
34
+ expect(parsed.hostname).toBe("8.8.8.8");
35
+ expect(parsed.port).toBe(5353);
36
+ expect(parsed.timeout).toBe(2000);
37
+ expect(parsed.retries).toBe(5);
38
+ });
39
+
40
+ test("falls back to defaults for missing or falsy fields", () => {
41
+ const parsed: MonitorStepDnsMonitor = MonitorStepDnsMonitorUtil.fromJSON(
42
+ {},
43
+ );
44
+
45
+ expect(parsed.queryName).toBe("");
46
+ expect(parsed.recordType).toBe(DnsRecordType.A);
47
+ // An empty hostname collapses to undefined (system-default resolver).
48
+ expect(parsed.hostname).toBeUndefined();
49
+ expect(parsed.port).toBe(53);
50
+ expect(parsed.timeout).toBe(5000);
51
+ expect(parsed.retries).toBe(3);
52
+ });
53
+
54
+ test("treats an empty hostname as the system default resolver", () => {
55
+ const parsed: MonitorStepDnsMonitor = MonitorStepDnsMonitorUtil.fromJSON({
56
+ queryName: "oneuptime.com",
57
+ hostname: "",
58
+ });
59
+
60
+ expect(parsed.hostname).toBeUndefined();
61
+ });
62
+ });
63
+
64
+ describe("toJSON / round-trip", () => {
65
+ test("serializes every field", () => {
66
+ const monitor: MonitorStepDnsMonitor = {
67
+ queryName: "example.com",
68
+ recordType: DnsRecordType.AAAA,
69
+ hostname: "1.1.1.1",
70
+ port: 53,
71
+ timeout: 7000,
72
+ retries: 2,
73
+ };
74
+
75
+ const json: JSONObject = MonitorStepDnsMonitorUtil.toJSON(monitor);
76
+
77
+ expect(json).toEqual({
78
+ queryName: "example.com",
79
+ recordType: DnsRecordType.AAAA,
80
+ hostname: "1.1.1.1",
81
+ port: 53,
82
+ timeout: 7000,
83
+ retries: 2,
84
+ });
85
+ });
86
+
87
+ test("fromJSON(toJSON(x)) preserves a populated monitor", () => {
88
+ const monitor: MonitorStepDnsMonitor = {
89
+ queryName: "example.com",
90
+ recordType: DnsRecordType.TXT,
91
+ hostname: "9.9.9.9",
92
+ port: 5300,
93
+ timeout: 4000,
94
+ retries: 4,
95
+ };
96
+
97
+ const roundTripped: MonitorStepDnsMonitor =
98
+ MonitorStepDnsMonitorUtil.fromJSON(
99
+ MonitorStepDnsMonitorUtil.toJSON(monitor),
100
+ );
101
+
102
+ expect(roundTripped).toEqual(monitor);
103
+ });
104
+ });
105
+ });
@@ -0,0 +1,131 @@
1
+ import { JSONObject } from "../../../Types/JSON";
2
+ import MonitorStepDnssecMonitor, {
3
+ MonitorStepDnssecMonitorUtil,
4
+ } from "../../../Types/Monitor/MonitorStepDnssecMonitor";
5
+
6
+ describe("MonitorStepDnssecMonitorUtil", () => {
7
+ describe("getDefault", () => {
8
+ test("returns three public resolvers and nameserver consistency on", () => {
9
+ const def: MonitorStepDnssecMonitor =
10
+ MonitorStepDnssecMonitorUtil.getDefault();
11
+
12
+ expect(def.domainName).toBe("");
13
+ expect(def.resolvers).toEqual(["1.1.1.1", "8.8.8.8", "9.9.9.9"]);
14
+ expect(def.checkNameserverConsistency).toBe(true);
15
+ expect(def.signatureExpiryWarningDays).toBe(7);
16
+ expect(def.timeout).toBe(10000);
17
+ expect(def.retries).toBe(3);
18
+ });
19
+ });
20
+
21
+ describe("fromJSON resolvers handling", () => {
22
+ test("keeps only non-empty string resolvers", () => {
23
+ const parsed: MonitorStepDnssecMonitor =
24
+ MonitorStepDnssecMonitorUtil.fromJSON({
25
+ domainName: "oneuptime.com",
26
+ resolvers: ["1.1.1.1", "", "8.8.4.4", 123, null],
27
+ });
28
+
29
+ expect(parsed.resolvers).toEqual(["1.1.1.1", "8.8.4.4"]);
30
+ });
31
+
32
+ test("restores default resolvers when the provided list filters down to empty", () => {
33
+ const parsed: MonitorStepDnssecMonitor =
34
+ MonitorStepDnssecMonitorUtil.fromJSON({
35
+ domainName: "oneuptime.com",
36
+ resolvers: ["", 5, null],
37
+ });
38
+
39
+ expect(parsed.resolvers).toEqual(["1.1.1.1", "8.8.8.8", "9.9.9.9"]);
40
+ });
41
+
42
+ test("restores default resolvers when resolvers is not an array", () => {
43
+ const parsed: MonitorStepDnssecMonitor =
44
+ MonitorStepDnssecMonitorUtil.fromJSON({
45
+ domainName: "oneuptime.com",
46
+ resolvers: "1.1.1.1" as unknown as Array<string>,
47
+ });
48
+
49
+ expect(parsed.resolvers).toEqual(["1.1.1.1", "8.8.8.8", "9.9.9.9"]);
50
+ });
51
+ });
52
+
53
+ describe("fromJSON checkNameserverConsistency handling", () => {
54
+ test("honors an explicit false", () => {
55
+ const parsed: MonitorStepDnssecMonitor =
56
+ MonitorStepDnssecMonitorUtil.fromJSON({
57
+ domainName: "oneuptime.com",
58
+ checkNameserverConsistency: false,
59
+ });
60
+
61
+ expect(parsed.checkNameserverConsistency).toBe(false);
62
+ });
63
+
64
+ test("defaults to true when the field is absent or non-boolean", () => {
65
+ expect(
66
+ MonitorStepDnssecMonitorUtil.fromJSON({ domainName: "oneuptime.com" })
67
+ .checkNameserverConsistency,
68
+ ).toBe(true);
69
+
70
+ expect(
71
+ MonitorStepDnssecMonitorUtil.fromJSON({
72
+ domainName: "oneuptime.com",
73
+ checkNameserverConsistency: "yes" as unknown as boolean,
74
+ }).checkNameserverConsistency,
75
+ ).toBe(true);
76
+ });
77
+ });
78
+
79
+ describe("fromJSON numeric defaults", () => {
80
+ test("falls back for falsy numeric fields", () => {
81
+ const parsed: MonitorStepDnssecMonitor =
82
+ MonitorStepDnssecMonitorUtil.fromJSON({
83
+ domainName: "oneuptime.com",
84
+ signatureExpiryWarningDays: 0,
85
+ timeout: 0,
86
+ retries: 0,
87
+ });
88
+
89
+ expect(parsed.signatureExpiryWarningDays).toBe(7);
90
+ expect(parsed.timeout).toBe(10000);
91
+ expect(parsed.retries).toBe(3);
92
+ });
93
+ });
94
+
95
+ describe("round-trip", () => {
96
+ test("fromJSON(toJSON(x)) preserves a populated monitor", () => {
97
+ const monitor: MonitorStepDnssecMonitor = {
98
+ domainName: "example.com",
99
+ resolvers: ["8.8.8.8"],
100
+ checkNameserverConsistency: false,
101
+ signatureExpiryWarningDays: 14,
102
+ timeout: 20000,
103
+ retries: 5,
104
+ };
105
+
106
+ const roundTripped: MonitorStepDnssecMonitor =
107
+ MonitorStepDnssecMonitorUtil.fromJSON(
108
+ MonitorStepDnssecMonitorUtil.toJSON(monitor),
109
+ );
110
+
111
+ expect(roundTripped).toEqual(monitor);
112
+ });
113
+
114
+ test("toJSON emits every field", () => {
115
+ const json: JSONObject = MonitorStepDnssecMonitorUtil.toJSON(
116
+ MonitorStepDnssecMonitorUtil.getDefault(),
117
+ );
118
+
119
+ expect(Object.keys(json).sort()).toEqual(
120
+ [
121
+ "checkNameserverConsistency",
122
+ "domainName",
123
+ "resolvers",
124
+ "retries",
125
+ "signatureExpiryWarningDays",
126
+ "timeout",
127
+ ].sort(),
128
+ );
129
+ });
130
+ });
131
+ });
@@ -0,0 +1,60 @@
1
+ import { JSONObject } from "../../../Types/JSON";
2
+ import MonitorStepDomainMonitor, {
3
+ MonitorStepDomainMonitorUtil,
4
+ } from "../../../Types/Monitor/MonitorStepDomainMonitor";
5
+
6
+ describe("MonitorStepDomainMonitorUtil", () => {
7
+ describe("getDefault", () => {
8
+ test("returns an empty domain with 10s timeout and 3 retries", () => {
9
+ const def: MonitorStepDomainMonitor =
10
+ MonitorStepDomainMonitorUtil.getDefault();
11
+
12
+ expect(def.domainName).toBe("");
13
+ expect(def.timeout).toBe(10000);
14
+ expect(def.retries).toBe(3);
15
+ });
16
+ });
17
+
18
+ describe("fromJSON", () => {
19
+ test("reads through explicit values", () => {
20
+ const parsed: MonitorStepDomainMonitor =
21
+ MonitorStepDomainMonitorUtil.fromJSON({
22
+ domainName: "oneuptime.com",
23
+ timeout: 3000,
24
+ retries: 7,
25
+ });
26
+
27
+ expect(parsed.domainName).toBe("oneuptime.com");
28
+ expect(parsed.timeout).toBe(3000);
29
+ expect(parsed.retries).toBe(7);
30
+ });
31
+
32
+ test("falls back to defaults for missing or falsy fields", () => {
33
+ const parsed: MonitorStepDomainMonitor =
34
+ MonitorStepDomainMonitorUtil.fromJSON({
35
+ domainName: "",
36
+ timeout: 0,
37
+ retries: 0,
38
+ });
39
+
40
+ expect(parsed.domainName).toBe("");
41
+ expect(parsed.timeout).toBe(10000);
42
+ expect(parsed.retries).toBe(3);
43
+ });
44
+ });
45
+
46
+ describe("round-trip", () => {
47
+ test("toJSON emits every field and fromJSON restores it", () => {
48
+ const monitor: MonitorStepDomainMonitor = {
49
+ domainName: "example.com",
50
+ timeout: 5000,
51
+ retries: 2,
52
+ };
53
+
54
+ const json: JSONObject = MonitorStepDomainMonitorUtil.toJSON(monitor);
55
+ expect(json).toEqual(monitor);
56
+
57
+ expect(MonitorStepDomainMonitorUtil.fromJSON(json)).toEqual(monitor);
58
+ });
59
+ });
60
+ });
@@ -0,0 +1,82 @@
1
+ import { JSONObject } from "../../../Types/JSON";
2
+ import ExternalStatusPageProviderType from "../../../Types/Monitor/ExternalStatusPageProviderType";
3
+ import MonitorStepExternalStatusPageMonitor, {
4
+ MonitorStepExternalStatusPageMonitorUtil,
5
+ } from "../../../Types/Monitor/MonitorStepExternalStatusPageMonitor";
6
+
7
+ describe("MonitorStepExternalStatusPageMonitorUtil", () => {
8
+ describe("getDefault", () => {
9
+ test("returns an auto-detected provider with no component filters", () => {
10
+ const def: MonitorStepExternalStatusPageMonitor =
11
+ MonitorStepExternalStatusPageMonitorUtil.getDefault();
12
+
13
+ expect(def.statusPageUrl).toBe("");
14
+ expect(def.provider).toBe(ExternalStatusPageProviderType.Auto);
15
+ expect(def.componentGroupName).toBeUndefined();
16
+ expect(def.componentName).toBeUndefined();
17
+ expect(def.timeout).toBe(10000);
18
+ expect(def.retries).toBe(3);
19
+ });
20
+ });
21
+
22
+ describe("fromJSON", () => {
23
+ test("reads through explicit values", () => {
24
+ const parsed: MonitorStepExternalStatusPageMonitor =
25
+ MonitorStepExternalStatusPageMonitorUtil.fromJSON({
26
+ statusPageUrl: "https://status.example.com",
27
+ provider: ExternalStatusPageProviderType.AtlassianStatuspage,
28
+ componentGroupName: "APIs",
29
+ componentName: "Ingest",
30
+ timeout: 4000,
31
+ retries: 1,
32
+ });
33
+
34
+ expect(parsed.statusPageUrl).toBe("https://status.example.com");
35
+ expect(parsed.provider).toBe(
36
+ ExternalStatusPageProviderType.AtlassianStatuspage,
37
+ );
38
+ expect(parsed.componentGroupName).toBe("APIs");
39
+ expect(parsed.componentName).toBe("Ingest");
40
+ expect(parsed.timeout).toBe(4000);
41
+ expect(parsed.retries).toBe(1);
42
+ });
43
+
44
+ test("falls back to defaults for missing or falsy fields", () => {
45
+ const parsed: MonitorStepExternalStatusPageMonitor =
46
+ MonitorStepExternalStatusPageMonitorUtil.fromJSON({
47
+ statusPageUrl: "",
48
+ componentGroupName: "",
49
+ componentName: "",
50
+ timeout: 0,
51
+ retries: 0,
52
+ });
53
+
54
+ expect(parsed.statusPageUrl).toBe("");
55
+ expect(parsed.provider).toBe(ExternalStatusPageProviderType.Auto);
56
+ expect(parsed.componentGroupName).toBeUndefined();
57
+ expect(parsed.componentName).toBeUndefined();
58
+ expect(parsed.timeout).toBe(10000);
59
+ expect(parsed.retries).toBe(3);
60
+ });
61
+ });
62
+
63
+ describe("round-trip", () => {
64
+ test("fromJSON(toJSON(x)) preserves a populated monitor", () => {
65
+ const monitor: MonitorStepExternalStatusPageMonitor = {
66
+ statusPageUrl: "https://status.incident.io/x",
67
+ provider: ExternalStatusPageProviderType.IncidentIo,
68
+ componentGroupName: "Core",
69
+ componentName: "Dashboard",
70
+ timeout: 15000,
71
+ retries: 5,
72
+ };
73
+
74
+ const json: JSONObject =
75
+ MonitorStepExternalStatusPageMonitorUtil.toJSON(monitor);
76
+ const roundTripped: MonitorStepExternalStatusPageMonitor =
77
+ MonitorStepExternalStatusPageMonitorUtil.fromJSON(json);
78
+
79
+ expect(roundTripped).toEqual(monitor);
80
+ });
81
+ });
82
+ });
@@ -0,0 +1,268 @@
1
+ import { JSONObject } from "../../../Types/JSON";
2
+ import MonitorStepCephMonitor, {
3
+ CephResourceScope,
4
+ MonitorStepCephMonitorUtil,
5
+ } from "../../../Types/Monitor/MonitorStepCephMonitor";
6
+ import MonitorStepDockerMonitor, {
7
+ MonitorStepDockerMonitorUtil,
8
+ } from "../../../Types/Monitor/MonitorStepDockerMonitor";
9
+ import MonitorStepDockerSwarmMonitor, {
10
+ MonitorStepDockerSwarmMonitorUtil,
11
+ } from "../../../Types/Monitor/MonitorStepDockerSwarmMonitor";
12
+ import MonitorStepHostMonitor, {
13
+ MonitorStepHostMonitorUtil,
14
+ } from "../../../Types/Monitor/MonitorStepHostMonitor";
15
+ import MonitorStepIoTMonitor, {
16
+ IoTResourceScope,
17
+ MonitorStepIoTMonitorUtil,
18
+ } from "../../../Types/Monitor/MonitorStepIoTMonitor";
19
+ import MonitorStepKubernetesMonitor, {
20
+ KubernetesResourceScope,
21
+ MonitorStepKubernetesMonitorUtil,
22
+ } from "../../../Types/Monitor/MonitorStepKubernetesMonitor";
23
+ import MonitorStepMetricMonitor, {
24
+ MonitorStepMetricMonitorUtil,
25
+ } from "../../../Types/Monitor/MonitorStepMetricMonitor";
26
+ import MonitorStepPodmanMonitor, {
27
+ MonitorStepPodmanMonitorUtil,
28
+ } from "../../../Types/Monitor/MonitorStepPodmanMonitor";
29
+ import MonitorStepProxmoxMonitor, {
30
+ MonitorStepProxmoxMonitorUtil,
31
+ ProxmoxResourceScope,
32
+ } from "../../../Types/Monitor/MonitorStepProxmoxMonitor";
33
+ import RollingTime from "../../../Types/RollingTime/RollingTime";
34
+
35
+ /*
36
+ * The infrastructure MonitorStep utils share one shape: getDefault() returns
37
+ * an empty-scope config on a Past1Minute rolling window with an empty metric
38
+ * view config, and fromJSON/toJSON are structural pass-throughs. This suite
39
+ * locks in that contract for each of them so a future refactor cannot quietly
40
+ * change a default or drop a field on the wire.
41
+ */
42
+
43
+ describe("Infrastructure MonitorStep utils", () => {
44
+ describe("MonitorStepMetricMonitorUtil", () => {
45
+ test("getDefault has an empty metric view config on a 1-minute window", () => {
46
+ const def: MonitorStepMetricMonitor =
47
+ MonitorStepMetricMonitorUtil.getDefault();
48
+
49
+ expect(def.metricViewConfig).toEqual({
50
+ queryConfigs: [],
51
+ formulaConfigs: [],
52
+ });
53
+ expect(def.rollingTime).toBe(RollingTime.Past1Minute);
54
+ });
55
+
56
+ test("fromJSON/toJSON are pass-through and round-trip", () => {
57
+ const monitor: MonitorStepMetricMonitor = {
58
+ metricViewConfig: { queryConfigs: [], formulaConfigs: [] },
59
+ rollingTime: RollingTime.Past1Minute,
60
+ };
61
+ const json: JSONObject = MonitorStepMetricMonitorUtil.toJSON(monitor);
62
+ expect(MonitorStepMetricMonitorUtil.fromJSON(json)).toEqual(monitor);
63
+ });
64
+ });
65
+
66
+ describe("MonitorStepHostMonitorUtil", () => {
67
+ test("getDefault has an empty host identifier", () => {
68
+ const def: MonitorStepHostMonitor =
69
+ MonitorStepHostMonitorUtil.getDefault();
70
+
71
+ expect(def.hostIdentifier).toBe("");
72
+ expect(def.rollingTime).toBe(RollingTime.Past1Minute);
73
+ });
74
+
75
+ test("round-trips through JSON", () => {
76
+ const monitor: MonitorStepHostMonitor = {
77
+ hostIdentifier: "web-1",
78
+ metricViewConfig: { queryConfigs: [], formulaConfigs: [] },
79
+ rollingTime: RollingTime.Past1Minute,
80
+ };
81
+ expect(
82
+ MonitorStepHostMonitorUtil.fromJSON(
83
+ MonitorStepHostMonitorUtil.toJSON(monitor),
84
+ ),
85
+ ).toEqual(monitor);
86
+ });
87
+ });
88
+
89
+ describe("MonitorStepDockerMonitorUtil", () => {
90
+ test("getDefault has empty container filters", () => {
91
+ const def: MonitorStepDockerMonitor =
92
+ MonitorStepDockerMonitorUtil.getDefault();
93
+
94
+ expect(def.hostIdentifier).toBe("");
95
+ expect(def.containerFilters).toEqual({});
96
+ expect(def.rollingTime).toBe(RollingTime.Past1Minute);
97
+ });
98
+
99
+ test("round-trips container filters", () => {
100
+ const monitor: MonitorStepDockerMonitor = {
101
+ hostIdentifier: "docker-host",
102
+ containerFilters: { containerName: "api", containerImage: "nginx" },
103
+ metricViewConfig: { queryConfigs: [], formulaConfigs: [] },
104
+ rollingTime: RollingTime.Past1Minute,
105
+ };
106
+ expect(
107
+ MonitorStepDockerMonitorUtil.fromJSON(
108
+ MonitorStepDockerMonitorUtil.toJSON(monitor),
109
+ ),
110
+ ).toEqual(monitor);
111
+ });
112
+ });
113
+
114
+ describe("MonitorStepPodmanMonitorUtil", () => {
115
+ test("getDefault has empty container filters", () => {
116
+ const def: MonitorStepPodmanMonitor =
117
+ MonitorStepPodmanMonitorUtil.getDefault();
118
+
119
+ expect(def.hostIdentifier).toBe("");
120
+ expect(def.containerFilters).toEqual({});
121
+ expect(def.rollingTime).toBe(RollingTime.Past1Minute);
122
+ });
123
+
124
+ test("round-trips container filters", () => {
125
+ const monitor: MonitorStepPodmanMonitor = {
126
+ hostIdentifier: "podman-host",
127
+ containerFilters: { hostName: "node-1" },
128
+ metricViewConfig: { queryConfigs: [], formulaConfigs: [] },
129
+ rollingTime: RollingTime.Past1Minute,
130
+ };
131
+ expect(
132
+ MonitorStepPodmanMonitorUtil.fromJSON(
133
+ MonitorStepPodmanMonitorUtil.toJSON(monitor),
134
+ ),
135
+ ).toEqual(monitor);
136
+ });
137
+ });
138
+
139
+ describe("MonitorStepKubernetesMonitorUtil", () => {
140
+ test("getDefault scopes to the whole cluster", () => {
141
+ const def: MonitorStepKubernetesMonitor =
142
+ MonitorStepKubernetesMonitorUtil.getDefault();
143
+
144
+ expect(def.clusterIdentifier).toBe("");
145
+ expect(def.resourceScope).toBe(KubernetesResourceScope.Cluster);
146
+ expect(def.resourceFilters).toEqual({});
147
+ });
148
+
149
+ test("round-trips a namespace-scoped monitor", () => {
150
+ const monitor: MonitorStepKubernetesMonitor = {
151
+ clusterIdentifier: "prod",
152
+ resourceScope: KubernetesResourceScope.Namespace,
153
+ resourceFilters: { namespace: "payments" },
154
+ metricViewConfig: { queryConfigs: [], formulaConfigs: [] },
155
+ rollingTime: RollingTime.Past1Minute,
156
+ };
157
+ expect(
158
+ MonitorStepKubernetesMonitorUtil.fromJSON(
159
+ MonitorStepKubernetesMonitorUtil.toJSON(monitor),
160
+ ),
161
+ ).toEqual(monitor);
162
+ });
163
+ });
164
+
165
+ describe("MonitorStepCephMonitorUtil", () => {
166
+ test("getDefault has no OSD/pool filters", () => {
167
+ const def: MonitorStepCephMonitor =
168
+ MonitorStepCephMonitorUtil.getDefault();
169
+
170
+ expect(def.clusterIdentifier).toBe("");
171
+ expect(def.resourceFilters).toEqual({});
172
+ });
173
+
174
+ test("round-trips an OSD-scoped monitor", () => {
175
+ const monitor: MonitorStepCephMonitor = {
176
+ clusterIdentifier: "ceph-1",
177
+ resourceFilters: { osdId: "osd.3", poolId: "2" },
178
+ metricViewConfig: { queryConfigs: [], formulaConfigs: [] },
179
+ rollingTime: RollingTime.Past1Minute,
180
+ };
181
+ expect(
182
+ MonitorStepCephMonitorUtil.fromJSON(
183
+ MonitorStepCephMonitorUtil.toJSON(monitor),
184
+ ),
185
+ ).toEqual(monitor);
186
+ // Scope enum sanity.
187
+ expect(CephResourceScope.Osd).toBe("OSD");
188
+ });
189
+ });
190
+
191
+ describe("MonitorStepProxmoxMonitorUtil", () => {
192
+ test("getDefault has no resource filters", () => {
193
+ const def: MonitorStepProxmoxMonitor =
194
+ MonitorStepProxmoxMonitorUtil.getDefault();
195
+
196
+ expect(def.clusterIdentifier).toBe("");
197
+ expect(def.resourceFilters).toEqual({});
198
+ });
199
+
200
+ test("round-trips a guest-scoped monitor", () => {
201
+ const monitor: MonitorStepProxmoxMonitor = {
202
+ clusterIdentifier: "pve-cluster",
203
+ resourceFilters: {
204
+ scope: ProxmoxResourceScope.Guest,
205
+ guestId: "qemu/100",
206
+ },
207
+ metricViewConfig: { queryConfigs: [], formulaConfigs: [] },
208
+ rollingTime: RollingTime.Past1Minute,
209
+ };
210
+ expect(
211
+ MonitorStepProxmoxMonitorUtil.fromJSON(
212
+ MonitorStepProxmoxMonitorUtil.toJSON(monitor),
213
+ ),
214
+ ).toEqual(monitor);
215
+ });
216
+ });
217
+
218
+ describe("MonitorStepDockerSwarmMonitorUtil", () => {
219
+ test("getDefault has no resource filters", () => {
220
+ const def: MonitorStepDockerSwarmMonitor =
221
+ MonitorStepDockerSwarmMonitorUtil.getDefault();
222
+
223
+ expect(def.clusterIdentifier).toBe("");
224
+ expect(def.resourceFilters).toEqual({});
225
+ });
226
+
227
+ test("round-trips a service-scoped monitor", () => {
228
+ const monitor: MonitorStepDockerSwarmMonitor = {
229
+ clusterIdentifier: "swarm-1",
230
+ resourceFilters: { serviceName: "web", nodeName: "node-2" },
231
+ metricViewConfig: { queryConfigs: [], formulaConfigs: [] },
232
+ rollingTime: RollingTime.Past1Minute,
233
+ };
234
+ expect(
235
+ MonitorStepDockerSwarmMonitorUtil.fromJSON(
236
+ MonitorStepDockerSwarmMonitorUtil.toJSON(monitor),
237
+ ),
238
+ ).toEqual(monitor);
239
+ });
240
+ });
241
+
242
+ describe("MonitorStepIoTMonitorUtil", () => {
243
+ test("getDefault scopes to the whole fleet", () => {
244
+ const def: MonitorStepIoTMonitor = MonitorStepIoTMonitorUtil.getDefault();
245
+
246
+ expect(def.fleetIdentifier).toBe("");
247
+ expect(def.resourceFilters).toEqual({});
248
+ });
249
+
250
+ test("round-trips a device-scoped monitor", () => {
251
+ const monitor: MonitorStepIoTMonitor = {
252
+ fleetIdentifier: "fleet-1",
253
+ resourceFilters: {
254
+ scope: IoTResourceScope.Device,
255
+ deviceId: "sensor-42",
256
+ deviceType: "temperature",
257
+ },
258
+ metricViewConfig: { queryConfigs: [], formulaConfigs: [] },
259
+ rollingTime: RollingTime.Past1Minute,
260
+ };
261
+ expect(
262
+ MonitorStepIoTMonitorUtil.fromJSON(
263
+ MonitorStepIoTMonitorUtil.toJSON(monitor),
264
+ ),
265
+ ).toEqual(monitor);
266
+ });
267
+ });
268
+ });