@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,306 @@
|
|
|
1
|
+
import RecommendationDismissal from "../../../Models/DatabaseModels/RecommendationDismissal";
|
|
2
|
+
import RecommendationDismissalService from "../../../Server/Services/RecommendationDismissalService";
|
|
3
|
+
import CreateBy from "../../../Server/Types/Database/CreateBy";
|
|
4
|
+
import { OnCreate } from "../../../Server/Types/Database/Hooks";
|
|
5
|
+
import BadDataException from "../../../Types/Exception/BadDataException";
|
|
6
|
+
import ObjectID from "../../../Types/ObjectID";
|
|
7
|
+
import RecommendationType from "../../../Types/Recommendation/RecommendationType";
|
|
8
|
+
import { describe, expect, test } from "@jest/globals";
|
|
9
|
+
|
|
10
|
+
/*
|
|
11
|
+
* onBeforeCreate is the only validation a RecommendationDismissal row ever
|
|
12
|
+
* gets, and it exists because the failure it prevents is completely silent.
|
|
13
|
+
*
|
|
14
|
+
* `recommendationType` is a plain ShortText column, not a Postgres enum, so
|
|
15
|
+
* the database accepts any string. The Recommendations page then filters
|
|
16
|
+
* dismissals by the exact enum value: a row written as "monitor", "Monitors"
|
|
17
|
+
* or "" is stored happily, returns 200 to the browser, and matches nothing.
|
|
18
|
+
* The user clicks Dismiss, the card disappears from React state, and on the
|
|
19
|
+
* next page load it is back — with no error in the UI, no error in the logs,
|
|
20
|
+
* and a real row in the table proving "it saved". The same is true of a
|
|
21
|
+
* missing recommendationId: a dismissal that names no recommendation hides
|
|
22
|
+
* nothing.
|
|
23
|
+
*
|
|
24
|
+
* So these tests are not about tidy input. They pin the one boundary where
|
|
25
|
+
* that class of bug is still cheap to catch, and they pin it against the
|
|
26
|
+
* RecommendationType enum itself rather than a copied literal, so a future
|
|
27
|
+
* recommendation kind is accepted without anyone having to remember to come
|
|
28
|
+
* back here.
|
|
29
|
+
*/
|
|
30
|
+
|
|
31
|
+
const PROJECT_ID: ObjectID = new ObjectID(
|
|
32
|
+
"22222222-2222-4222-8222-222222222222",
|
|
33
|
+
);
|
|
34
|
+
const RESOURCE_ID: ObjectID = new ObjectID(
|
|
35
|
+
"11111111-1111-4111-8111-111111111111",
|
|
36
|
+
);
|
|
37
|
+
const RECOMMENDATION_ID: string = "Kubernetes:k8s-hpa-at-max-replicas";
|
|
38
|
+
|
|
39
|
+
interface DismissalFields {
|
|
40
|
+
recommendationType?: string | undefined;
|
|
41
|
+
recommendationId?: string | undefined;
|
|
42
|
+
resourceType?: string | undefined;
|
|
43
|
+
resourceId?: ObjectID | undefined;
|
|
44
|
+
dismissalReason?: string | undefined;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/*
|
|
48
|
+
* A dismissal exactly as the side-over posts it, minus whichever field the
|
|
49
|
+
* test under way is trying to break. Fields are only assigned when supplied,
|
|
50
|
+
* so "field omitted" and "field set to empty string" stay distinguishable.
|
|
51
|
+
*/
|
|
52
|
+
function makeCreateBy(
|
|
53
|
+
fields: DismissalFields,
|
|
54
|
+
): CreateBy<RecommendationDismissal> {
|
|
55
|
+
const dismissal: RecommendationDismissal = new RecommendationDismissal();
|
|
56
|
+
dismissal.projectId = PROJECT_ID;
|
|
57
|
+
|
|
58
|
+
if (fields.recommendationType !== undefined) {
|
|
59
|
+
dismissal.recommendationType = fields.recommendationType;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
if (fields.recommendationId !== undefined) {
|
|
63
|
+
dismissal.recommendationId = fields.recommendationId;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
if (fields.resourceType !== undefined) {
|
|
67
|
+
dismissal.resourceType = fields.resourceType;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
if (fields.resourceId !== undefined) {
|
|
71
|
+
dismissal.resourceId = fields.resourceId;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
if (fields.dismissalReason !== undefined) {
|
|
75
|
+
dismissal.dismissalReason = fields.dismissalReason;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
return {
|
|
79
|
+
data: dismissal,
|
|
80
|
+
props: { isRoot: true },
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
/*
|
|
85
|
+
* onBeforeCreate is protected; the established way service tests in this
|
|
86
|
+
* directory reach a hook is an `as any` cast on the exported singleton (see
|
|
87
|
+
* StatusPageGroupNesting and NetworkSiteAssignmentRuleService).
|
|
88
|
+
*/
|
|
89
|
+
function onBeforeCreate(
|
|
90
|
+
createBy: CreateBy<RecommendationDismissal>,
|
|
91
|
+
): Promise<OnCreate<RecommendationDismissal>> {
|
|
92
|
+
return (RecommendationDismissalService as any).onBeforeCreate(createBy);
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
function validCreateBy(): CreateBy<RecommendationDismissal> {
|
|
96
|
+
return makeCreateBy({
|
|
97
|
+
recommendationType: RecommendationType.Monitor,
|
|
98
|
+
recommendationId: RECOMMENDATION_ID,
|
|
99
|
+
resourceType: "Kubernetes",
|
|
100
|
+
resourceId: RESOURCE_ID,
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
describe("RecommendationDismissalService.onBeforeCreate — recommendationType", () => {
|
|
105
|
+
test("rejects a dismissal that names no recommendation type", async () => {
|
|
106
|
+
await expect(
|
|
107
|
+
onBeforeCreate(makeCreateBy({ recommendationId: RECOMMENDATION_ID })),
|
|
108
|
+
).rejects.toThrow(BadDataException);
|
|
109
|
+
});
|
|
110
|
+
|
|
111
|
+
test("rejects an empty-string recommendation type", async () => {
|
|
112
|
+
/*
|
|
113
|
+
* An empty string survives the `Object.values(...).includes()` check only
|
|
114
|
+
* if the falsy guard above it is removed, which is exactly the kind of
|
|
115
|
+
* refactor that looks harmless. An empty type matches no filter, so the
|
|
116
|
+
* row is invisible the moment it is written.
|
|
117
|
+
*/
|
|
118
|
+
await expect(
|
|
119
|
+
onBeforeCreate(
|
|
120
|
+
makeCreateBy({
|
|
121
|
+
recommendationType: "",
|
|
122
|
+
recommendationId: RECOMMENDATION_ID,
|
|
123
|
+
}),
|
|
124
|
+
),
|
|
125
|
+
).rejects.toThrow(BadDataException);
|
|
126
|
+
});
|
|
127
|
+
|
|
128
|
+
test("rejects a lowercase 'monitor' — the typo that produces invisible rows", async () => {
|
|
129
|
+
/*
|
|
130
|
+
* The realistic failure. Nothing about "monitor" looks wrong in a request
|
|
131
|
+
* body or a log line, the insert succeeds, and the dismissal is then
|
|
132
|
+
* unreachable forever because the page compares against the enum value
|
|
133
|
+
* "Monitor". Without a case-sensitive check here there is no layer left
|
|
134
|
+
* that would ever notice.
|
|
135
|
+
*/
|
|
136
|
+
await expect(
|
|
137
|
+
onBeforeCreate(
|
|
138
|
+
makeCreateBy({
|
|
139
|
+
recommendationType: "monitor",
|
|
140
|
+
recommendationId: RECOMMENDATION_ID,
|
|
141
|
+
}),
|
|
142
|
+
),
|
|
143
|
+
).rejects.toThrow(BadDataException);
|
|
144
|
+
});
|
|
145
|
+
|
|
146
|
+
test("rejects a recommendation type that is not in the enum at all", async () => {
|
|
147
|
+
await expect(
|
|
148
|
+
onBeforeCreate(
|
|
149
|
+
makeCreateBy({
|
|
150
|
+
recommendationType: "Dashboard",
|
|
151
|
+
recommendationId: RECOMMENDATION_ID,
|
|
152
|
+
}),
|
|
153
|
+
),
|
|
154
|
+
).rejects.toThrow(BadDataException);
|
|
155
|
+
});
|
|
156
|
+
|
|
157
|
+
test("names the accepted types in the error, so the caller can see the typo", async () => {
|
|
158
|
+
/*
|
|
159
|
+
* The message is the only diagnostic the API caller gets. Listing the
|
|
160
|
+
* valid values turns "400 Bad Request" into something a developer can act
|
|
161
|
+
* on without reading the server source.
|
|
162
|
+
*/
|
|
163
|
+
let thrown: unknown = null;
|
|
164
|
+
|
|
165
|
+
try {
|
|
166
|
+
await onBeforeCreate(
|
|
167
|
+
makeCreateBy({
|
|
168
|
+
recommendationType: "monitor",
|
|
169
|
+
recommendationId: RECOMMENDATION_ID,
|
|
170
|
+
}),
|
|
171
|
+
);
|
|
172
|
+
} catch (error: unknown) {
|
|
173
|
+
thrown = error;
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
expect(thrown).toBeInstanceOf(BadDataException);
|
|
177
|
+
expect((thrown as BadDataException).message).toContain("monitor");
|
|
178
|
+
expect((thrown as BadDataException).message).toContain(
|
|
179
|
+
RecommendationType.Monitor,
|
|
180
|
+
);
|
|
181
|
+
});
|
|
182
|
+
|
|
183
|
+
test("accepts every member of the RecommendationType enum", async () => {
|
|
184
|
+
/*
|
|
185
|
+
* Guards the generalisation this branch is built on: a second
|
|
186
|
+
* recommendation kind (dashboards, cost savings) is meant to need no
|
|
187
|
+
* schema change and no service change. If the validation is ever
|
|
188
|
+
* rewritten to hardcode "Monitor", the next enum member starts throwing
|
|
189
|
+
* on dismiss and this test fails instead of the feature.
|
|
190
|
+
*/
|
|
191
|
+
for (const recommendationType of Object.values(RecommendationType)) {
|
|
192
|
+
const createBy: CreateBy<RecommendationDismissal> = makeCreateBy({
|
|
193
|
+
recommendationType: recommendationType,
|
|
194
|
+
recommendationId: RECOMMENDATION_ID,
|
|
195
|
+
});
|
|
196
|
+
|
|
197
|
+
const result: OnCreate<RecommendationDismissal> =
|
|
198
|
+
await onBeforeCreate(createBy);
|
|
199
|
+
|
|
200
|
+
expect(result.createBy.data.recommendationType).toBe(recommendationType);
|
|
201
|
+
}
|
|
202
|
+
});
|
|
203
|
+
});
|
|
204
|
+
|
|
205
|
+
describe("RecommendationDismissalService.onBeforeCreate — recommendationId", () => {
|
|
206
|
+
test("rejects a dismissal that names no recommendation", async () => {
|
|
207
|
+
/*
|
|
208
|
+
* A row with a valid type but no id hides nothing at all — it is a
|
|
209
|
+
* permanent no-op that still occupies the unique-column slot for its
|
|
210
|
+
* (project, type, resource) triple.
|
|
211
|
+
*/
|
|
212
|
+
await expect(
|
|
213
|
+
onBeforeCreate(
|
|
214
|
+
makeCreateBy({ recommendationType: RecommendationType.Monitor }),
|
|
215
|
+
),
|
|
216
|
+
).rejects.toThrow(BadDataException);
|
|
217
|
+
});
|
|
218
|
+
|
|
219
|
+
test("rejects an empty-string recommendation id", async () => {
|
|
220
|
+
await expect(
|
|
221
|
+
onBeforeCreate(
|
|
222
|
+
makeCreateBy({
|
|
223
|
+
recommendationType: RecommendationType.Monitor,
|
|
224
|
+
recommendationId: "",
|
|
225
|
+
}),
|
|
226
|
+
),
|
|
227
|
+
).rejects.toThrow(BadDataException);
|
|
228
|
+
});
|
|
229
|
+
|
|
230
|
+
test("checks the type before the id, so a typo'd type is reported as such", async () => {
|
|
231
|
+
/*
|
|
232
|
+
* Both fields wrong must surface the type error. Reporting "Recommendation
|
|
233
|
+
* ID is required" for a request that carried an id would send whoever is
|
|
234
|
+
* debugging it in the wrong direction entirely.
|
|
235
|
+
*/
|
|
236
|
+
let thrown: unknown = null;
|
|
237
|
+
|
|
238
|
+
try {
|
|
239
|
+
await onBeforeCreate(makeCreateBy({ recommendationType: "monitor" }));
|
|
240
|
+
} catch (error: unknown) {
|
|
241
|
+
thrown = error;
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
expect(thrown).toBeInstanceOf(BadDataException);
|
|
245
|
+
expect((thrown as BadDataException).message).toContain("monitor");
|
|
246
|
+
});
|
|
247
|
+
});
|
|
248
|
+
|
|
249
|
+
describe("RecommendationDismissalService.onBeforeCreate — valid row", () => {
|
|
250
|
+
test("returns the same createBy it was given, unmodified", async () => {
|
|
251
|
+
/*
|
|
252
|
+
* The hook validates and nothing else. Anything it silently rewrote —
|
|
253
|
+
* trimming, case-normalising, defaulting a resourceType — would make the
|
|
254
|
+
* stored row differ from what the UI later looks for, which is the same
|
|
255
|
+
* invisible-dismissal bug arriving from the other direction. Identity is
|
|
256
|
+
* asserted, not just equality, because DatabaseService goes on to insert
|
|
257
|
+
* whatever object comes back out of here.
|
|
258
|
+
*/
|
|
259
|
+
const createBy: CreateBy<RecommendationDismissal> = validCreateBy();
|
|
260
|
+
const model: RecommendationDismissal = createBy.data;
|
|
261
|
+
|
|
262
|
+
const result: OnCreate<RecommendationDismissal> =
|
|
263
|
+
await onBeforeCreate(createBy);
|
|
264
|
+
|
|
265
|
+
expect(result.createBy).toBe(createBy);
|
|
266
|
+
expect(result.createBy.data).toBe(model);
|
|
267
|
+
expect(result.carryForward).toBeNull();
|
|
268
|
+
|
|
269
|
+
expect(model.recommendationType).toBe(RecommendationType.Monitor);
|
|
270
|
+
expect(model.recommendationId).toBe(RECOMMENDATION_ID);
|
|
271
|
+
expect(model.resourceType).toBe("Kubernetes");
|
|
272
|
+
expect(model.resourceId).toBe(RESOURCE_ID);
|
|
273
|
+
expect(model.projectId).toBe(PROJECT_ID);
|
|
274
|
+
});
|
|
275
|
+
|
|
276
|
+
test("accepts a dismissal that is not scoped to any resource", async () => {
|
|
277
|
+
/*
|
|
278
|
+
* resourceType and resourceId are nullable on purpose: a future
|
|
279
|
+
* project-wide recommendation has no resource to point at. The validation
|
|
280
|
+
* must not quietly grow a requirement the schema does not have.
|
|
281
|
+
*/
|
|
282
|
+
const result: OnCreate<RecommendationDismissal> = await onBeforeCreate(
|
|
283
|
+
makeCreateBy({
|
|
284
|
+
recommendationType: RecommendationType.Monitor,
|
|
285
|
+
recommendationId: "project-wide-recommendation",
|
|
286
|
+
}),
|
|
287
|
+
);
|
|
288
|
+
|
|
289
|
+
expect(result.createBy.data.resourceType).toBeUndefined();
|
|
290
|
+
expect(result.createBy.data.resourceId).toBeUndefined();
|
|
291
|
+
});
|
|
292
|
+
|
|
293
|
+
test("accepts an optional dismissal reason and leaves it untouched", async () => {
|
|
294
|
+
const reason: string = "We alert on this from Prometheus already.";
|
|
295
|
+
|
|
296
|
+
const result: OnCreate<RecommendationDismissal> = await onBeforeCreate(
|
|
297
|
+
makeCreateBy({
|
|
298
|
+
recommendationType: RecommendationType.Monitor,
|
|
299
|
+
recommendationId: RECOMMENDATION_ID,
|
|
300
|
+
dismissalReason: reason,
|
|
301
|
+
}),
|
|
302
|
+
);
|
|
303
|
+
|
|
304
|
+
expect(result.createBy.data.dismissalReason).toBe(reason);
|
|
305
|
+
});
|
|
306
|
+
});
|