@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.
- package/Models/DatabaseModels/AlertEpisodeStateTimeline.ts +1 -0
- package/Models/DatabaseModels/AlertStateTimeline.ts +1 -0
- package/Models/DatabaseModels/IncidentEpisodeStateTimeline.ts +1 -0
- package/Models/DatabaseModels/IncidentStateTimeline.ts +1 -0
- package/Models/DatabaseModels/Index.ts +5 -0
- package/Models/DatabaseModels/LogDropFilter.ts +89 -0
- package/Models/DatabaseModels/NetworkDeviceDiscoveryScan.ts +13 -3
- package/Models/DatabaseModels/RecommendationDismissal.ts +463 -0
- package/Models/DatabaseModels/ScheduledMaintenanceStateTimeline.ts +1 -0
- package/Models/DatabaseModels/StatusPageGroup.ts +95 -0
- package/Models/DatabaseModels/TraceDropFilter.ts +89 -0
- package/Models/DatabaseModels/WorkflowVariable.ts +5 -1
- package/Server/API/AlertAPI.ts +32 -17
- package/Server/API/BaseAPI.ts +31 -2
- package/Server/API/BaseAnalyticsAPI.ts +36 -2
- package/Server/API/CommonAPI.ts +57 -0
- package/Server/API/IncidentAPI.ts +60 -33
- package/Server/API/IncidentEpisodeAPI.ts +31 -16
- package/Server/API/MonitorAPI.ts +30 -0
- package/Server/API/MonitorTemplateAPI.ts +8 -0
- package/Server/API/ProbeAPI.ts +196 -15
- package/Server/API/ProjectAPI.ts +79 -1
- package/Server/API/ScheduledMaintenanceAPI.ts +33 -18
- package/Server/API/StatusPageAPI.ts +74 -37
- package/Server/API/WorkspaceNotificationRuleAPI.ts +34 -4
- package/Server/Infrastructure/Postgres/SchemaMigrations/1785320000000-RepairCrossProjectIncidentReferences.ts +527 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1785329453269-AddParentGroupToStatusPageGroup.ts +31 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1785397674289-AddRecommendationDismissalTable.ts +55 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1785405581596-AddDroppedCountersToDropFilters.ts +53 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +8 -0
- package/Server/Services/AlertEpisodeService.ts +47 -0
- package/Server/Services/AlertService.ts +125 -0
- package/Server/Services/BillingService.ts +98 -0
- package/Server/Services/DatabaseService.ts +184 -20
- package/Server/Services/IncidentEpisodeService.ts +47 -0
- package/Server/Services/IncidentService.ts +123 -0
- package/Server/Services/IncidentTemplateService.ts +123 -1
- package/Server/Services/Index.ts +2 -0
- package/Server/Services/LogDropFilterService.ts +133 -0
- package/Server/Services/MonitorProbeService.ts +94 -4
- package/Server/Services/MonitorService.ts +48 -43
- package/Server/Services/NetworkDeviceDiscoveryScanService.ts +70 -0
- package/Server/Services/ProbeService.ts +66 -0
- package/Server/Services/ProjectService.ts +131 -7
- package/Server/Services/RecommendationDismissalService.ts +52 -0
- package/Server/Services/RunbookAgentJobService.ts +68 -7
- package/Server/Services/ScheduledMaintenanceService.ts +103 -0
- package/Server/Services/ScheduledMaintenanceTemplateService.ts +90 -0
- package/Server/Services/StatusPageGroupService.ts +186 -0
- package/Server/Services/TraceDropFilterService.ts +133 -0
- package/Server/Types/Workflow/Components/API/Delete.ts +12 -0
- package/Server/Types/Workflow/Components/API/Get.ts +12 -0
- package/Server/Types/Workflow/Components/API/Patch.ts +12 -0
- package/Server/Types/Workflow/Components/API/Post.ts +12 -0
- package/Server/Types/Workflow/Components/API/Put.ts +13 -0
- package/Server/Utils/Database/ProjectScopedReferenceValidator.ts +212 -0
- package/Server/Utils/DropFilterValidation.ts +127 -0
- package/Server/Utils/Errors.ts +5 -0
- package/Server/Utils/Monitor/MonitorAlert.ts +28 -1
- package/Server/Utils/Monitor/MonitorIncident.ts +31 -2
- package/Server/Utils/Telemetry/AppMetrics.ts +31 -0
- package/Tests/Models/DatabaseModels/MonitorProbeColumnAccessControl.test.ts +196 -0
- package/Tests/Models/RecommendationDismissalModel.test.ts +269 -0
- package/Tests/Server/API/BaseAPIUpdatePayloadValidation.test.ts +320 -0
- package/Tests/Server/API/BaseAnalyticsAPIUpdatePayloadValidation.test.ts +293 -0
- package/Tests/Server/API/CommonAPIAuthGuard.test.ts +164 -0
- package/Tests/Server/API/ProbeAPI.test.ts +422 -53
- package/Tests/Server/API/ProjectAPI.test.ts +180 -0
- package/Tests/Server/API/ProjectAPIExtendTrialBillingDisabled.test.ts +138 -0
- package/Tests/Server/API/ProjectScopedCustomRouteAuth.test.ts +458 -0
- package/Tests/Server/Infrastructure/ContainerBootConfiguration.test.ts +359 -0
- package/Tests/Server/Infrastructure/ProcessSignalDelivery.test.ts +427 -0
- package/Tests/Server/Services/BillingServiceExtendTrial.test.ts +439 -0
- package/Tests/Server/Services/CrossProjectReferenceWriteGuard.test.ts +810 -0
- package/Tests/Server/Services/DatabaseServiceAtomicAddToColumns.test.ts +269 -0
- package/Tests/Server/Services/DatabaseServiceEmptyUpdate.test.ts +277 -0
- package/Tests/Server/Services/DatabaseServiceSortColumnSelect.test.ts +201 -0
- package/Tests/Server/Services/DiscoveryScanClaimHookFreeSafety.test.ts +81 -23
- package/Tests/Server/Services/DropFilterSaveValidation.test.ts +398 -0
- package/Tests/Server/Services/MonitorProbeDeleteHooks.test.ts +280 -0
- package/Tests/Server/Services/MonitorProbeServiceProbeTenancy.test.ts +304 -0
- package/Tests/Server/Services/NetworkDeviceDiscoveryScanService.test.ts +262 -0
- package/Tests/Server/Services/ProjectServiceExtendTrial.test.ts +614 -0
- package/Tests/Server/Services/RecommendationDismissalService.test.ts +306 -0
- package/Tests/Server/Services/RepairCrossProjectIncidentReferencesMigration.test.ts +528 -0
- package/Tests/Server/Services/StatusPageGroupNesting.test.ts +395 -0
- package/Tests/Server/TestingUtils/Services/BillingServiceHelper.ts +26 -21
- package/Tests/Server/Types/Database/Permissions/WorkflowVariableColumnPermission.test.ts +227 -0
- package/Tests/Server/Types/Workflow/Components/ApiComponentErrorPort.test.ts +285 -0
- package/Tests/Server/Utils/Database/ProjectScopedReferenceValidator.test.ts +463 -0
- package/Tests/Server/Utils/DropFilterValidation.test.ts +269 -0
- package/Tests/Server/Utils/Telemetry/SpanUtil.test.ts +94 -0
- package/Tests/Types/DateUserTimezone.test.ts +52 -0
- package/Tests/Types/Monitor/KubernetesAlertTemplates.test.ts +177 -9
- package/Tests/Types/Monitor/MonitorStepDnsMonitor.test.ts +105 -0
- package/Tests/Types/Monitor/MonitorStepDnssecMonitor.test.ts +131 -0
- package/Tests/Types/Monitor/MonitorStepDomainMonitor.test.ts +60 -0
- package/Tests/Types/Monitor/MonitorStepExternalStatusPageMonitor.test.ts +82 -0
- package/Tests/Types/Monitor/MonitorStepInfrastructureMonitors.test.ts +268 -0
- package/Tests/Types/Monitor/MonitorStepMetricMonitor.test.ts +386 -0
- package/Tests/Types/Monitor/MonitorStepProfileMonitor.test.ts +185 -0
- package/Tests/Types/Monitor/MonitorStepSnmpMonitor.test.ts +156 -0
- package/Tests/Types/Monitor/Recommendation/MonitorRecommendationCatalog.test.ts +371 -0
- package/Tests/Types/Monitor/Recommendation/MonitorRecommendationCoverage.test.ts +901 -0
- package/Tests/Types/Monitor/Recommendation/MonitorRecommendationNotificationMode.test.ts +607 -0
- package/Tests/Types/Monitor/Recommendation/MonitorRecommendationSeverityMapper.test.ts +754 -0
- package/Tests/Types/Monitor/Recommendation/MonitorRecommendationUtil.test.ts +960 -0
- package/Tests/Types/RollingTime/RollingTimeUtil.test.ts +186 -0
- package/Tests/Types/Runbook/RunbookStepTimeout.test.ts +410 -0
- package/Tests/Types/Telemetry/DropFilterSampling.test.ts +241 -0
- package/Tests/Types/Workspace/NotificationRuleConditionUtil.test.ts +353 -0
- package/Tests/Types/Workspace/NotificationRuleUtil.test.ts +566 -0
- package/Tests/UI/Components/CodeEditor.test.tsx +174 -0
- package/Tests/UI/Components/ErrorBoundary.test.tsx +555 -24
- package/Tests/UI/Components/InfoCard.test.tsx +358 -0
- package/Tests/UI/Components/LogTimeRangePicker.test.tsx +138 -0
- package/Tests/UI/Components/Modal.test.tsx +43 -5
- package/Tests/UI/Components/ModelTable/BaseModelTableSearchLabels.test.tsx +397 -0
- package/Tests/UI/Components/ModelTable/ColumnCustomizationModal.test.tsx +427 -0
- package/Tests/UI/Components/Runbook/StepTimeoutInput.test.tsx +386 -0
- package/Tests/UI/Components/StatusPage/ResourceGroupSection.test.tsx +671 -0
- package/Tests/UI/Components/TelemetryTimeRangePicker.test.tsx +404 -0
- package/Tests/UI/Utils/DropdownAlignment.test.ts +306 -0
- package/Tests/UI/Utils/TableFilterUrlState.test.ts +292 -0
- package/Tests/Utils/Monitor/MonitorSummaryProbeUtil.test.ts +263 -0
- package/Tests/Utils/NetworkDiscovery/ScanTargetUtil.test.ts +583 -0
- package/Tests/Utils/StatusPage/GroupNestingLayout.test.ts +1072 -0
- package/Tests/Utils/StatusPage/GroupTree.test.ts +583 -0
- package/Tests/Utils/StatusPage/ResourceUptime.test.ts +411 -0
- package/Types/Date.ts +15 -6
- package/Types/Monitor/KubernetesAlertTemplates.ts +205 -0
- package/Types/Monitor/MonitorStep.ts +10 -1
- package/Types/Monitor/MonitorStepMetricMonitor.ts +46 -1
- package/Types/Monitor/Recommendation/MonitorRecommendationCatalog.ts +413 -0
- package/Types/Monitor/Recommendation/MonitorRecommendationSeverityMapper.ts +168 -0
- package/Types/Monitor/Recommendation/MonitorRecommendationTypes.ts +175 -0
- package/Types/Monitor/Recommendation/MonitorRecommendationUtil.ts +743 -0
- package/Types/Permission.ts +45 -0
- package/Types/Recommendation/RecommendationType.ts +20 -0
- package/Types/Runbook/RunbookExecutionDeadline.ts +129 -0
- package/Types/Runbook/RunbookStepTimeout.ts +202 -0
- package/Types/Telemetry/DropFilterSampling.ts +92 -0
- package/UI/Components/AI/GenerateFromAIModal.tsx +0 -2
- package/UI/Components/Accordion/Accordion.tsx +10 -2
- package/UI/Components/BulkUpdate/BulkLabelActions.tsx +0 -1
- package/UI/Components/CodeEditor/CodeEditor.tsx +34 -20
- package/UI/Components/Date/RangeStartAndEndDateView.tsx +0 -1
- package/UI/Components/EditionLabel/EditionLabel.tsx +1 -27
- package/UI/Components/Error/PageError.tsx +0 -4
- package/UI/Components/ErrorBoundary.tsx +252 -15
- package/UI/Components/InfoCard/InfoCard.tsx +58 -1
- package/UI/Components/LogsViewer/components/LogTimeRangePicker.tsx +34 -1
- package/UI/Components/Modal/Modal.tsx +16 -60
- package/UI/Components/ModelFormModal/ModelFormModal.tsx +0 -8
- package/UI/Components/ModelTable/BaseModelTable.tsx +116 -67
- package/UI/Components/ModelTable/ColumnCustomizationModal.tsx +150 -47
- package/UI/Components/Runbook/StepTimeoutInput.tsx +173 -0
- package/UI/Components/StatusPage/ResourceGroupSection.tsx +231 -0
- package/UI/Components/TelemetryViewer/components/TelemetryTimeRangePicker.tsx +34 -1
- package/UI/Utils/DropdownAlignment.ts +162 -0
- package/UI/Utils/TableFilterUrlState.ts +59 -20
- package/Utils/API.ts +106 -2
- package/Utils/Monitor/MonitorSummaryProbeUtil.ts +130 -0
- package/Utils/NetworkDiscovery/ScanTargetUtil.ts +434 -0
- package/Utils/StatusPage/GroupNestingLayout.ts +343 -0
- package/Utils/StatusPage/GroupTree.ts +307 -0
- package/Utils/StatusPage/ResourceUptime.ts +90 -17
- package/build/dist/Models/DatabaseModels/AlertEpisodeStateTimeline.js +1 -0
- package/build/dist/Models/DatabaseModels/AlertEpisodeStateTimeline.js.map +1 -1
- package/build/dist/Models/DatabaseModels/AlertStateTimeline.js +1 -0
- package/build/dist/Models/DatabaseModels/AlertStateTimeline.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncidentEpisodeStateTimeline.js +1 -0
- package/build/dist/Models/DatabaseModels/IncidentEpisodeStateTimeline.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncidentStateTimeline.js +1 -0
- package/build/dist/Models/DatabaseModels/IncidentStateTimeline.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Index.js +2 -0
- package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
- package/build/dist/Models/DatabaseModels/LogDropFilter.js +91 -0
- package/build/dist/Models/DatabaseModels/LogDropFilter.js.map +1 -1
- package/build/dist/Models/DatabaseModels/NetworkDeviceDiscoveryScan.js +14 -4
- package/build/dist/Models/DatabaseModels/NetworkDeviceDiscoveryScan.js.map +1 -1
- package/build/dist/Models/DatabaseModels/RecommendationDismissal.js +484 -0
- package/build/dist/Models/DatabaseModels/RecommendationDismissal.js.map +1 -0
- package/build/dist/Models/DatabaseModels/ScheduledMaintenanceStateTimeline.js +1 -0
- package/build/dist/Models/DatabaseModels/ScheduledMaintenanceStateTimeline.js.map +1 -1
- package/build/dist/Models/DatabaseModels/StatusPageGroup.js +94 -0
- package/build/dist/Models/DatabaseModels/StatusPageGroup.js.map +1 -1
- package/build/dist/Models/DatabaseModels/TraceDropFilter.js +91 -0
- package/build/dist/Models/DatabaseModels/TraceDropFilter.js.map +1 -1
- package/build/dist/Models/DatabaseModels/WorkflowVariable.js +5 -1
- package/build/dist/Models/DatabaseModels/WorkflowVariable.js.map +1 -1
- package/build/dist/Server/API/AlertAPI.js +22 -13
- package/build/dist/Server/API/AlertAPI.js.map +1 -1
- package/build/dist/Server/API/BaseAPI.js +22 -1
- package/build/dist/Server/API/BaseAPI.js.map +1 -1
- package/build/dist/Server/API/BaseAnalyticsAPI.js +24 -1
- package/build/dist/Server/API/BaseAnalyticsAPI.js.map +1 -1
- package/build/dist/Server/API/CommonAPI.js +42 -0
- package/build/dist/Server/API/CommonAPI.js.map +1 -1
- package/build/dist/Server/API/IncidentAPI.js +43 -26
- package/build/dist/Server/API/IncidentAPI.js.map +1 -1
- package/build/dist/Server/API/IncidentEpisodeAPI.js +21 -12
- package/build/dist/Server/API/IncidentEpisodeAPI.js.map +1 -1
- package/build/dist/Server/API/MonitorAPI.js +23 -0
- package/build/dist/Server/API/MonitorAPI.js.map +1 -1
- package/build/dist/Server/API/MonitorTemplateAPI.js +4 -0
- package/build/dist/Server/API/MonitorTemplateAPI.js.map +1 -1
- package/build/dist/Server/API/ProbeAPI.js +131 -15
- package/build/dist/Server/API/ProbeAPI.js.map +1 -1
- package/build/dist/Server/API/ProjectAPI.js +62 -3
- package/build/dist/Server/API/ProjectAPI.js.map +1 -1
- package/build/dist/Server/API/ScheduledMaintenanceAPI.js +23 -14
- package/build/dist/Server/API/ScheduledMaintenanceAPI.js.map +1 -1
- package/build/dist/Server/API/StatusPageAPI.js +61 -33
- package/build/dist/Server/API/StatusPageAPI.js.map +1 -1
- package/build/dist/Server/API/WorkspaceNotificationRuleAPI.js +26 -2
- package/build/dist/Server/API/WorkspaceNotificationRuleAPI.js.map +1 -1
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785320000000-RepairCrossProjectIncidentReferences.js +397 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785320000000-RepairCrossProjectIncidentReferences.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785329453269-AddParentGroupToStatusPageGroup.js +16 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785329453269-AddParentGroupToStatusPageGroup.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785397674289-AddRecommendationDismissalTable.js +30 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785397674289-AddRecommendationDismissalTable.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785405581596-AddDroppedCountersToDropFilters.js +34 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785405581596-AddDroppedCountersToDropFilters.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +8 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
- package/build/dist/Server/Services/AlertEpisodeService.js +39 -0
- package/build/dist/Server/Services/AlertEpisodeService.js.map +1 -1
- package/build/dist/Server/Services/AlertService.js +95 -0
- package/build/dist/Server/Services/AlertService.js.map +1 -1
- package/build/dist/Server/Services/BillingService.js +71 -0
- package/build/dist/Server/Services/BillingService.js.map +1 -1
- package/build/dist/Server/Services/DatabaseService.js +140 -17
- package/build/dist/Server/Services/DatabaseService.js.map +1 -1
- package/build/dist/Server/Services/IncidentEpisodeService.js +39 -0
- package/build/dist/Server/Services/IncidentEpisodeService.js.map +1 -1
- package/build/dist/Server/Services/IncidentService.js +100 -0
- package/build/dist/Server/Services/IncidentService.js.map +1 -1
- package/build/dist/Server/Services/IncidentTemplateService.js +97 -0
- package/build/dist/Server/Services/IncidentTemplateService.js.map +1 -1
- package/build/dist/Server/Services/Index.js +2 -0
- package/build/dist/Server/Services/Index.js.map +1 -1
- package/build/dist/Server/Services/LogDropFilterService.js +93 -0
- package/build/dist/Server/Services/LogDropFilterService.js.map +1 -1
- package/build/dist/Server/Services/MonitorProbeService.js +73 -5
- package/build/dist/Server/Services/MonitorProbeService.js.map +1 -1
- package/build/dist/Server/Services/MonitorService.js +34 -39
- package/build/dist/Server/Services/MonitorService.js.map +1 -1
- package/build/dist/Server/Services/NetworkDeviceDiscoveryScanService.js +71 -0
- package/build/dist/Server/Services/NetworkDeviceDiscoveryScanService.js.map +1 -1
- package/build/dist/Server/Services/ProbeService.js +64 -0
- package/build/dist/Server/Services/ProbeService.js.map +1 -1
- package/build/dist/Server/Services/ProjectService.js +103 -7
- package/build/dist/Server/Services/ProjectService.js.map +1 -1
- package/build/dist/Server/Services/RecommendationDismissalService.js +50 -0
- package/build/dist/Server/Services/RecommendationDismissalService.js.map +1 -0
- package/build/dist/Server/Services/RunbookAgentJobService.js +63 -5
- package/build/dist/Server/Services/RunbookAgentJobService.js.map +1 -1
- package/build/dist/Server/Services/ScheduledMaintenanceService.js +83 -0
- package/build/dist/Server/Services/ScheduledMaintenanceService.js.map +1 -1
- package/build/dist/Server/Services/ScheduledMaintenanceTemplateService.js +65 -0
- package/build/dist/Server/Services/ScheduledMaintenanceTemplateService.js.map +1 -1
- package/build/dist/Server/Services/StatusPageGroupService.js +136 -0
- package/build/dist/Server/Services/StatusPageGroupService.js.map +1 -1
- package/build/dist/Server/Services/TraceDropFilterService.js +93 -0
- package/build/dist/Server/Services/TraceDropFilterService.js.map +1 -1
- package/build/dist/Server/Types/Workflow/Components/API/Delete.js +11 -0
- package/build/dist/Server/Types/Workflow/Components/API/Delete.js.map +1 -1
- package/build/dist/Server/Types/Workflow/Components/API/Get.js +11 -0
- package/build/dist/Server/Types/Workflow/Components/API/Get.js.map +1 -1
- package/build/dist/Server/Types/Workflow/Components/API/Patch.js +11 -0
- package/build/dist/Server/Types/Workflow/Components/API/Patch.js.map +1 -1
- package/build/dist/Server/Types/Workflow/Components/API/Post.js +11 -0
- package/build/dist/Server/Types/Workflow/Components/API/Post.js.map +1 -1
- package/build/dist/Server/Types/Workflow/Components/API/Put.js +12 -0
- package/build/dist/Server/Types/Workflow/Components/API/Put.js.map +1 -1
- package/build/dist/Server/Utils/Database/ProjectScopedReferenceValidator.js +132 -0
- package/build/dist/Server/Utils/Database/ProjectScopedReferenceValidator.js.map +1 -0
- package/build/dist/Server/Utils/DropFilterValidation.js +80 -0
- package/build/dist/Server/Utils/DropFilterValidation.js.map +1 -0
- package/build/dist/Server/Utils/Errors.js +3 -0
- package/build/dist/Server/Utils/Errors.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorAlert.js +30 -12
- package/build/dist/Server/Utils/Monitor/MonitorAlert.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorIncident.js +38 -18
- package/build/dist/Server/Utils/Monitor/MonitorIncident.js.map +1 -1
- package/build/dist/Server/Utils/Telemetry/AppMetrics.js +26 -0
- package/build/dist/Server/Utils/Telemetry/AppMetrics.js.map +1 -1
- package/build/dist/Types/Date.js +14 -4
- package/build/dist/Types/Date.js.map +1 -1
- package/build/dist/Types/Monitor/KubernetesAlertTemplates.js +192 -0
- package/build/dist/Types/Monitor/KubernetesAlertTemplates.js.map +1 -1
- package/build/dist/Types/Monitor/MonitorStep.js +6 -1
- package/build/dist/Types/Monitor/MonitorStep.js.map +1 -1
- package/build/dist/Types/Monitor/MonitorStepMetricMonitor.js +32 -1
- package/build/dist/Types/Monitor/MonitorStepMetricMonitor.js.map +1 -1
- package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationCatalog.js +294 -0
- package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationCatalog.js.map +1 -0
- package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationSeverityMapper.js +110 -0
- package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationSeverityMapper.js.map +1 -0
- package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationTypes.js +58 -0
- package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationTypes.js.map +1 -0
- package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationUtil.js +451 -0
- package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationUtil.js.map +1 -0
- package/build/dist/Types/Permission.js +40 -0
- package/build/dist/Types/Permission.js.map +1 -1
- package/build/dist/Types/Recommendation/RecommendationType.js +21 -0
- package/build/dist/Types/Recommendation/RecommendationType.js.map +1 -0
- package/build/dist/Types/Runbook/RunbookExecutionDeadline.js +93 -0
- package/build/dist/Types/Runbook/RunbookExecutionDeadline.js.map +1 -0
- package/build/dist/Types/Runbook/RunbookStepTimeout.js +142 -0
- package/build/dist/Types/Runbook/RunbookStepTimeout.js.map +1 -0
- package/build/dist/Types/Telemetry/DropFilterSampling.js +75 -0
- package/build/dist/Types/Telemetry/DropFilterSampling.js.map +1 -0
- package/build/dist/UI/Components/AI/GenerateFromAIModal.js +1 -2
- package/build/dist/UI/Components/AI/GenerateFromAIModal.js.map +1 -1
- package/build/dist/UI/Components/Accordion/Accordion.js +9 -2
- package/build/dist/UI/Components/Accordion/Accordion.js.map +1 -1
- package/build/dist/UI/Components/BulkUpdate/BulkLabelActions.js +1 -1
- package/build/dist/UI/Components/BulkUpdate/BulkLabelActions.js.map +1 -1
- package/build/dist/UI/Components/CodeEditor/CodeEditor.js +27 -14
- package/build/dist/UI/Components/CodeEditor/CodeEditor.js.map +1 -1
- package/build/dist/UI/Components/Date/RangeStartAndEndDateView.js +1 -1
- package/build/dist/UI/Components/Date/RangeStartAndEndDateView.js.map +1 -1
- package/build/dist/UI/Components/EditionLabel/EditionLabel.js +2 -20
- package/build/dist/UI/Components/EditionLabel/EditionLabel.js.map +1 -1
- package/build/dist/UI/Components/Error/PageError.js +1 -3
- package/build/dist/UI/Components/Error/PageError.js.map +1 -1
- package/build/dist/UI/Components/ErrorBoundary.js +145 -11
- package/build/dist/UI/Components/ErrorBoundary.js.map +1 -1
- package/build/dist/UI/Components/InfoCard/InfoCard.js +28 -1
- package/build/dist/UI/Components/InfoCard/InfoCard.js.map +1 -1
- package/build/dist/UI/Components/LogsViewer/components/LogTimeRangePicker.js +13 -2
- package/build/dist/UI/Components/LogsViewer/components/LogTimeRangePicker.js.map +1 -1
- package/build/dist/UI/Components/Modal/Modal.js +4 -32
- package/build/dist/UI/Components/Modal/Modal.js.map +1 -1
- package/build/dist/UI/Components/ModelFormModal/ModelFormModal.js.map +1 -1
- package/build/dist/UI/Components/ModelTable/BaseModelTable.js +69 -33
- package/build/dist/UI/Components/ModelTable/BaseModelTable.js.map +1 -1
- package/build/dist/UI/Components/ModelTable/ColumnCustomizationModal.js +73 -32
- package/build/dist/UI/Components/ModelTable/ColumnCustomizationModal.js.map +1 -1
- package/build/dist/UI/Components/Runbook/StepTimeoutInput.js +101 -0
- package/build/dist/UI/Components/Runbook/StepTimeoutInput.js.map +1 -0
- package/build/dist/UI/Components/StatusPage/ResourceGroupSection.js +73 -0
- package/build/dist/UI/Components/StatusPage/ResourceGroupSection.js.map +1 -0
- package/build/dist/UI/Components/TelemetryViewer/components/TelemetryTimeRangePicker.js +13 -2
- package/build/dist/UI/Components/TelemetryViewer/components/TelemetryTimeRangePicker.js.map +1 -1
- package/build/dist/UI/Utils/DropdownAlignment.js +98 -0
- package/build/dist/UI/Utils/DropdownAlignment.js.map +1 -0
- package/build/dist/UI/Utils/TableFilterUrlState.js +48 -15
- package/build/dist/UI/Utils/TableFilterUrlState.js.map +1 -1
- package/build/dist/Utils/API.js +39 -2
- package/build/dist/Utils/API.js.map +1 -1
- package/build/dist/Utils/Monitor/MonitorSummaryProbeUtil.js +97 -0
- package/build/dist/Utils/Monitor/MonitorSummaryProbeUtil.js.map +1 -0
- package/build/dist/Utils/NetworkDiscovery/ScanTargetUtil.js +330 -0
- package/build/dist/Utils/NetworkDiscovery/ScanTargetUtil.js.map +1 -0
- package/build/dist/Utils/StatusPage/GroupNestingLayout.js +280 -0
- package/build/dist/Utils/StatusPage/GroupNestingLayout.js.map +1 -0
- package/build/dist/Utils/StatusPage/GroupTree.js +214 -0
- package/build/dist/Utils/StatusPage/GroupTree.js.map +1 -0
- package/build/dist/Utils/StatusPage/ResourceUptime.js +60 -16
- package/build/dist/Utils/StatusPage/ResourceUptime.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
import DatabaseService from "../../../Server/Services/DatabaseService";
|
|
2
|
+
import IncidentReminderRule from "../../../Models/DatabaseModels/IncidentReminderRule";
|
|
3
|
+
import SortOrder from "../../../Types/BaseDatabase/SortOrder";
|
|
4
|
+
import { afterEach, beforeEach, describe, expect, it } from "@jest/globals";
|
|
5
|
+
|
|
6
|
+
/*
|
|
7
|
+
* A column can be ordered by without being selected in a plain SELECT, but not
|
|
8
|
+
* once a relation is also selected: the join sends the query down TypeORM's
|
|
9
|
+
* paginated path, which wraps it and orders the outer SELECT by a column the
|
|
10
|
+
* inner query only emits when that column was selected. Postgres then rejects
|
|
11
|
+
* the whole request with `column distinctAlias.<Alias>_<column> does not
|
|
12
|
+
* exist`, which surfaces as a 500 and blanks the page.
|
|
13
|
+
*
|
|
14
|
+
* It went wrong twice: the monitor overview's probe query sorting by createdAt,
|
|
15
|
+
* then the reminder countdown's three rule queries sorting by `order`.
|
|
16
|
+
* _findBy used to fill the sort column in only for callers that passed NO sort
|
|
17
|
+
* at all, so an explicit sort bypassed the safety net entirely. It now fills in
|
|
18
|
+
* every sorted column and strips the ones it added back off the results, so no
|
|
19
|
+
* call site has to know about any of this.
|
|
20
|
+
*/
|
|
21
|
+
|
|
22
|
+
type FindArgs = {
|
|
23
|
+
select?: Record<string, unknown> | undefined;
|
|
24
|
+
order?: Record<string, unknown> | undefined;
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
describe("DatabaseService._findBy selects the columns it sorts by", () => {
|
|
28
|
+
let service: DatabaseService<IncidentReminderRule>;
|
|
29
|
+
let find: jest.Mock;
|
|
30
|
+
let rowsReturnedByDatabase: Array<IncidentReminderRule>;
|
|
31
|
+
|
|
32
|
+
type MakeRowFunction = (data: {
|
|
33
|
+
order: number;
|
|
34
|
+
reminderIntervalInMinutes: number;
|
|
35
|
+
}) => IncidentReminderRule;
|
|
36
|
+
|
|
37
|
+
const makeRow: MakeRowFunction = (data: {
|
|
38
|
+
order: number;
|
|
39
|
+
reminderIntervalInMinutes: number;
|
|
40
|
+
}): IncidentReminderRule => {
|
|
41
|
+
const rule: IncidentReminderRule = new IncidentReminderRule();
|
|
42
|
+
rule.order = data.order;
|
|
43
|
+
rule.reminderIntervalInMinutes = data.reminderIntervalInMinutes;
|
|
44
|
+
return rule;
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
type FindByFunction = (data: {
|
|
48
|
+
select?: Record<string, unknown> | undefined;
|
|
49
|
+
sort?: Record<string, unknown> | undefined;
|
|
50
|
+
}) => Promise<Array<IncidentReminderRule>>;
|
|
51
|
+
|
|
52
|
+
const findBy: FindByFunction = (data: {
|
|
53
|
+
select?: Record<string, unknown> | undefined;
|
|
54
|
+
sort?: Record<string, unknown> | undefined;
|
|
55
|
+
}): Promise<Array<IncidentReminderRule>> => {
|
|
56
|
+
return service.findBy({
|
|
57
|
+
query: {},
|
|
58
|
+
limit: 10,
|
|
59
|
+
skip: 0,
|
|
60
|
+
select: data.select as any,
|
|
61
|
+
sort: data.sort as any,
|
|
62
|
+
props: { isRoot: true },
|
|
63
|
+
});
|
|
64
|
+
};
|
|
65
|
+
|
|
66
|
+
const selectPassedToDatabase: () => Record<string, unknown> = (): Record<
|
|
67
|
+
string,
|
|
68
|
+
unknown
|
|
69
|
+
> => {
|
|
70
|
+
return (find.mock.calls[0]![0] as FindArgs).select || {};
|
|
71
|
+
};
|
|
72
|
+
|
|
73
|
+
beforeEach(() => {
|
|
74
|
+
jest.restoreAllMocks();
|
|
75
|
+
|
|
76
|
+
service = new DatabaseService<IncidentReminderRule>(IncidentReminderRule);
|
|
77
|
+
|
|
78
|
+
/*
|
|
79
|
+
* The row the database hands back always carries the sorted column,
|
|
80
|
+
* because _findBy asked for it - that is the point. Whether the caller
|
|
81
|
+
* gets to see it is what these tests are about.
|
|
82
|
+
*/
|
|
83
|
+
rowsReturnedByDatabase = [
|
|
84
|
+
makeRow({ order: 1, reminderIntervalInMinutes: 15 }),
|
|
85
|
+
makeRow({ order: 2, reminderIntervalInMinutes: 30 }),
|
|
86
|
+
];
|
|
87
|
+
|
|
88
|
+
find = jest
|
|
89
|
+
.fn()
|
|
90
|
+
.mockImplementation(async (): Promise<Array<IncidentReminderRule>> => {
|
|
91
|
+
return rowsReturnedByDatabase;
|
|
92
|
+
});
|
|
93
|
+
|
|
94
|
+
jest.spyOn(service, "getRepository").mockReturnValue({ find: find } as any);
|
|
95
|
+
});
|
|
96
|
+
|
|
97
|
+
afterEach(() => {
|
|
98
|
+
jest.restoreAllMocks();
|
|
99
|
+
});
|
|
100
|
+
|
|
101
|
+
it("adds an explicitly sorted column that the caller did not select", async () => {
|
|
102
|
+
await findBy({
|
|
103
|
+
select: {
|
|
104
|
+
reminderIntervalInMinutes: true,
|
|
105
|
+
incidentSeverities: { _id: true },
|
|
106
|
+
labels: { _id: true },
|
|
107
|
+
},
|
|
108
|
+
sort: { order: SortOrder.Ascending },
|
|
109
|
+
});
|
|
110
|
+
|
|
111
|
+
expect(selectPassedToDatabase()["order"]).toBe(true);
|
|
112
|
+
});
|
|
113
|
+
|
|
114
|
+
it("hides the added column from the caller", async () => {
|
|
115
|
+
const rules: Array<IncidentReminderRule> = await findBy({
|
|
116
|
+
select: {
|
|
117
|
+
reminderIntervalInMinutes: true,
|
|
118
|
+
labels: { _id: true },
|
|
119
|
+
},
|
|
120
|
+
sort: { order: SortOrder.Ascending },
|
|
121
|
+
});
|
|
122
|
+
|
|
123
|
+
expect(rules).toHaveLength(2);
|
|
124
|
+
|
|
125
|
+
for (const rule of rules) {
|
|
126
|
+
expect(rule.order).toBeUndefined();
|
|
127
|
+
expect(rule.reminderIntervalInMinutes).toBeDefined();
|
|
128
|
+
}
|
|
129
|
+
});
|
|
130
|
+
|
|
131
|
+
it("keeps the column when the caller selected it themselves", async () => {
|
|
132
|
+
const rules: Array<IncidentReminderRule> = await findBy({
|
|
133
|
+
select: {
|
|
134
|
+
order: true,
|
|
135
|
+
reminderIntervalInMinutes: true,
|
|
136
|
+
labels: { _id: true },
|
|
137
|
+
},
|
|
138
|
+
sort: { order: SortOrder.Ascending },
|
|
139
|
+
});
|
|
140
|
+
|
|
141
|
+
expect(
|
|
142
|
+
rules.map((rule: IncidentReminderRule) => {
|
|
143
|
+
return rule.order;
|
|
144
|
+
}),
|
|
145
|
+
).toEqual([1, 2]);
|
|
146
|
+
});
|
|
147
|
+
|
|
148
|
+
it("adds every column of a multi-column sort", async () => {
|
|
149
|
+
await findBy({
|
|
150
|
+
select: { labels: { _id: true } },
|
|
151
|
+
sort: {
|
|
152
|
+
order: SortOrder.Ascending,
|
|
153
|
+
reminderIntervalInMinutes: SortOrder.Descending,
|
|
154
|
+
},
|
|
155
|
+
});
|
|
156
|
+
|
|
157
|
+
expect(selectPassedToDatabase()["order"]).toBe(true);
|
|
158
|
+
expect(selectPassedToDatabase()["reminderIntervalInMinutes"]).toBe(true);
|
|
159
|
+
});
|
|
160
|
+
|
|
161
|
+
it("does not add a relation that is being sorted on", async () => {
|
|
162
|
+
await findBy({
|
|
163
|
+
select: { reminderIntervalInMinutes: true },
|
|
164
|
+
sort: { labels: SortOrder.Ascending },
|
|
165
|
+
});
|
|
166
|
+
|
|
167
|
+
expect(selectPassedToDatabase()["labels"]).toBeUndefined();
|
|
168
|
+
});
|
|
169
|
+
|
|
170
|
+
it("leaves the caller's own select object untouched", async () => {
|
|
171
|
+
const callerSelect: Record<string, unknown> = {
|
|
172
|
+
reminderIntervalInMinutes: true,
|
|
173
|
+
labels: { _id: true },
|
|
174
|
+
};
|
|
175
|
+
|
|
176
|
+
await findBy({
|
|
177
|
+
select: callerSelect,
|
|
178
|
+
sort: { order: SortOrder.Ascending },
|
|
179
|
+
});
|
|
180
|
+
|
|
181
|
+
expect(callerSelect["order"]).toBeUndefined();
|
|
182
|
+
});
|
|
183
|
+
|
|
184
|
+
it("still fills in and hides createdAt for callers that pass no sort", async () => {
|
|
185
|
+
const rules: Array<IncidentReminderRule> = await findBy({
|
|
186
|
+
select: {
|
|
187
|
+
reminderIntervalInMinutes: true,
|
|
188
|
+
labels: { _id: true },
|
|
189
|
+
},
|
|
190
|
+
});
|
|
191
|
+
|
|
192
|
+
expect(selectPassedToDatabase()["createdAt"]).toBe(true);
|
|
193
|
+
expect((find.mock.calls[0]![0] as FindArgs).order?.["createdAt"]).toBe(
|
|
194
|
+
SortOrder.Descending,
|
|
195
|
+
);
|
|
196
|
+
|
|
197
|
+
for (const rule of rules) {
|
|
198
|
+
expect(rule.createdAt).toBeUndefined();
|
|
199
|
+
}
|
|
200
|
+
});
|
|
201
|
+
});
|
|
@@ -22,16 +22,25 @@ import { describe, expect, test } from "@jest/globals";
|
|
|
22
22
|
* Pending scan
|
|
23
23
|
*
|
|
24
24
|
* The conversion dropped NOTHING: the model declares no update workflow, no
|
|
25
|
-
* audit logging and no realtime events
|
|
26
|
-
*
|
|
27
|
-
*
|
|
28
|
-
*
|
|
29
|
-
* to its service, nothing at the call site fails — the new hook is just
|
|
25
|
+
* audit logging and no realtime events. But the fast path skips hooks
|
|
26
|
+
* UNCONDITIONALLY: if someone adds a decorator to NetworkDeviceDiscoveryScan,
|
|
27
|
+
* or an update-hook override to its service that cares about a column the
|
|
28
|
+
* claim write stamps, nothing at the call site fails — the hook is just
|
|
30
29
|
* silently never fired for the claim write. This suite turns that silent
|
|
31
30
|
* drift into a loud test failure: if any assertion here starts failing, the
|
|
32
31
|
* hookless claim writes in DiscoveryScan.ts silently skip that new hook —
|
|
33
32
|
* revisit the call site before changing the assertion.
|
|
34
33
|
*
|
|
34
|
+
* The service DOES now override onBeforeUpdate: it validates the scan target
|
|
35
|
+
* (the `cidr` column) whenever an update carries it, so a bad target cannot
|
|
36
|
+
* be written by a root caller that bypasses the create-time check. That hook
|
|
37
|
+
* is deliberately safe to skip here, and the assertions below pin exactly
|
|
38
|
+
* why rather than merely restating that it exists: the claim write stamps
|
|
39
|
+
* only `status` and `startedAt`, which the hook does not look at, and the
|
|
40
|
+
* hook is a pass-through for that payload. If the hook ever grows to
|
|
41
|
+
* validate a column the claim write touches — or the claim write grows to
|
|
42
|
+
* touch `cidr` — these fail.
|
|
43
|
+
*
|
|
35
44
|
* Pure model-metadata + class-shape tests — no Postgres, no Redis.
|
|
36
45
|
*/
|
|
37
46
|
|
|
@@ -79,26 +88,21 @@ describe("discovery-scan claim hookless write safety preconditions", () => {
|
|
|
79
88
|
});
|
|
80
89
|
});
|
|
81
90
|
|
|
82
|
-
describe("service
|
|
83
|
-
/*
|
|
84
|
-
* DatabaseService's base onBeforeUpdate/onUpdateSuccess are no-op
|
|
85
|
-
* pass-throughs; a service only gets update behavior by OVERRIDING
|
|
86
|
-
* them. Own-property checks on the concrete service prototype pin that
|
|
87
|
-
* NetworkDeviceDiscoveryScanService does not — so the fast path skips
|
|
88
|
-
* nothing. If an override appears, these fail loudly and the claim
|
|
89
|
-
* write in DiscoveryScan.ts must be re-evaluated.
|
|
90
|
-
*/
|
|
91
|
+
describe("the service's update hooks are safe for the claim write to skip", () => {
|
|
91
92
|
const updateHooks: Array<string> = ["onBeforeUpdate", "onUpdateSuccess"];
|
|
92
93
|
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
94
|
+
/*
|
|
95
|
+
* onUpdateSuccess is still un-overridden: nothing runs AFTER the write
|
|
96
|
+
* that the fast path would drop. Only onBeforeUpdate is overridden, and
|
|
97
|
+
* the tests below pin that it is inert for the claim payload.
|
|
98
|
+
*/
|
|
99
|
+
test("NetworkDeviceDiscoveryScanService does not override onUpdateSuccess", () => {
|
|
100
|
+
expect(
|
|
101
|
+
Object.prototype.hasOwnProperty.call(
|
|
102
|
+
NetworkDeviceDiscoveryScanServiceClass.prototype,
|
|
103
|
+
"onUpdateSuccess",
|
|
104
|
+
),
|
|
105
|
+
).toBe(false);
|
|
102
106
|
// The default export is an instance of the class checked above.
|
|
103
107
|
expect(NetworkDeviceDiscoveryScanService).toBeInstanceOf(
|
|
104
108
|
NetworkDeviceDiscoveryScanServiceClass,
|
|
@@ -117,5 +121,59 @@ describe("discovery-scan claim hookless write safety preconditions", () => {
|
|
|
117
121
|
).toBe(true);
|
|
118
122
|
}
|
|
119
123
|
});
|
|
124
|
+
|
|
125
|
+
/*
|
|
126
|
+
* The columns the claim write stamps and the column the onBeforeUpdate
|
|
127
|
+
* override validates must stay disjoint. This is the assertion that
|
|
128
|
+
* actually licenses the hookless claim write: if someone adds `cidr` to
|
|
129
|
+
* the claim payload, or teaches the hook to validate `status`, the
|
|
130
|
+
* overlap shows up here.
|
|
131
|
+
*/
|
|
132
|
+
test("the claim write's columns are disjoint from what onBeforeUpdate validates", () => {
|
|
133
|
+
const claimWriteColumns: Array<string> = ["status", "startedAt"];
|
|
134
|
+
const columnsValidatedByHook: Array<string> = ["cidr"];
|
|
135
|
+
|
|
136
|
+
for (const column of claimWriteColumns) {
|
|
137
|
+
expect(columnsValidatedByHook).not.toContain(column);
|
|
138
|
+
}
|
|
139
|
+
});
|
|
140
|
+
|
|
141
|
+
/*
|
|
142
|
+
* And the behavioural proof, rather than an inventory of column names:
|
|
143
|
+
* handed exactly the payload the claim write stamps, the override is a
|
|
144
|
+
* pass-through. Skipping it therefore drops nothing.
|
|
145
|
+
*/
|
|
146
|
+
test("onBeforeUpdate is a pass-through for the exact claim payload", async () => {
|
|
147
|
+
const claimUpdateBy: unknown = {
|
|
148
|
+
query: { _id: "some-scan-id" },
|
|
149
|
+
data: { status: "In Progress", startedAt: new Date(0) },
|
|
150
|
+
props: { isRoot: true },
|
|
151
|
+
limit: 1,
|
|
152
|
+
skip: 0,
|
|
153
|
+
};
|
|
154
|
+
|
|
155
|
+
const result: { updateBy: unknown } = await (
|
|
156
|
+
NetworkDeviceDiscoveryScanService as any
|
|
157
|
+
).onBeforeUpdate(claimUpdateBy);
|
|
158
|
+
|
|
159
|
+
expect(result.updateBy).toBe(claimUpdateBy);
|
|
160
|
+
});
|
|
161
|
+
|
|
162
|
+
/*
|
|
163
|
+
* Negative control: the hook is not inert in general. Without this, the
|
|
164
|
+
* pass-through test above would keep passing if the override were
|
|
165
|
+
* gutted, and the disjointness assertion would be guarding nothing.
|
|
166
|
+
*/
|
|
167
|
+
test("onBeforeUpdate does reject a bad target, so the pass-through is meaningful", async () => {
|
|
168
|
+
await expect(
|
|
169
|
+
(NetworkDeviceDiscoveryScanService as any).onBeforeUpdate({
|
|
170
|
+
query: { _id: "some-scan-id" },
|
|
171
|
+
data: { cidr: "10.22-16.0.1" },
|
|
172
|
+
props: { isRoot: true },
|
|
173
|
+
limit: 1,
|
|
174
|
+
skip: 0,
|
|
175
|
+
}),
|
|
176
|
+
).rejects.toThrow();
|
|
177
|
+
});
|
|
120
178
|
});
|
|
121
179
|
});
|