@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
|
@@ -204,6 +204,9 @@ import EnterpriseLicenseInstance from "./EnterpriseLicenseInstance";
|
|
|
204
204
|
import OpenSourceDeployment from "./OpenSourceDeployment";
|
|
205
205
|
import Reseller from "./Reseller";
|
|
206
206
|
import ResellerPlan from "./ResellerPlan";
|
|
207
|
+
|
|
208
|
+
import RecommendationDismissal from "./RecommendationDismissal";
|
|
209
|
+
|
|
207
210
|
// ScheduledMaintenances
|
|
208
211
|
import ScheduledMaintenance from "./ScheduledMaintenance";
|
|
209
212
|
import ScheduledMaintenanceCustomField from "./ScheduledMaintenanceCustomField";
|
|
@@ -684,6 +687,8 @@ const AllModelTypes: Array<{
|
|
|
684
687
|
Reseller,
|
|
685
688
|
ResellerPlan,
|
|
686
689
|
|
|
690
|
+
RecommendationDismissal,
|
|
691
|
+
|
|
687
692
|
PromoCode,
|
|
688
693
|
EnterpriseLicense,
|
|
689
694
|
EnterpriseLicenseInstance,
|
|
@@ -398,6 +398,95 @@ export default class LogDropFilter extends BaseModel {
|
|
|
398
398
|
})
|
|
399
399
|
public sortOrder?: number = undefined;
|
|
400
400
|
|
|
401
|
+
/*
|
|
402
|
+
* Ingest-owned counters. A drop filter used to discard logs with no
|
|
403
|
+
* record anywhere — no log line, no metric, no counter — so neither the
|
|
404
|
+
* customer nor support could tell a filter from a broken pipeline. These
|
|
405
|
+
* two columns are the customer-visible half of that fix (the operator
|
|
406
|
+
* half is the `oneuptime.telemetry.ingest.dropped.count` metric).
|
|
407
|
+
*
|
|
408
|
+
* Written only by the ingest path, via a throttled atomic UPDATE that
|
|
409
|
+
* batches many dropped records into one statement — never once per log.
|
|
410
|
+
* See App/FeatureSet/Telemetry/Utils/DropFilterDropRecorder.ts.
|
|
411
|
+
*/
|
|
412
|
+
@ColumnAccessControl({
|
|
413
|
+
create: [],
|
|
414
|
+
read: [
|
|
415
|
+
Permission.ProjectOwner,
|
|
416
|
+
Permission.ProjectAdmin,
|
|
417
|
+
Permission.ProjectMember,
|
|
418
|
+
Permission.Viewer,
|
|
419
|
+
Permission.TelemetryAdmin,
|
|
420
|
+
Permission.TelemetryMember,
|
|
421
|
+
Permission.TelemetryViewer,
|
|
422
|
+
Permission.ReadProjectLogDropFilter,
|
|
423
|
+
],
|
|
424
|
+
update: [],
|
|
425
|
+
})
|
|
426
|
+
@TableColumn({
|
|
427
|
+
title: "Dropped Count",
|
|
428
|
+
required: false,
|
|
429
|
+
type: TableColumnType.BigPositiveNumber,
|
|
430
|
+
canReadOnRelationQuery: true,
|
|
431
|
+
description:
|
|
432
|
+
"Total number of logs this filter has discarded since it was created.",
|
|
433
|
+
defaultValue: 0,
|
|
434
|
+
})
|
|
435
|
+
@Column({
|
|
436
|
+
type: ColumnType.BigPositiveNumber,
|
|
437
|
+
nullable: false,
|
|
438
|
+
default: 0,
|
|
439
|
+
transformer: {
|
|
440
|
+
to: (value: number | null | undefined): string | null => {
|
|
441
|
+
if (value === null || value === undefined) {
|
|
442
|
+
return null;
|
|
443
|
+
}
|
|
444
|
+
return Math.trunc(value).toString();
|
|
445
|
+
},
|
|
446
|
+
/*
|
|
447
|
+
* Postgres bigint comes back from the driver as a string. The UI
|
|
448
|
+
* renders this as a number, so normalize here rather than making
|
|
449
|
+
* every reader remember.
|
|
450
|
+
*/
|
|
451
|
+
from: (value: string | null | undefined): number | null => {
|
|
452
|
+
if (value === null || value === undefined) {
|
|
453
|
+
return null;
|
|
454
|
+
}
|
|
455
|
+
const parsed: number = parseInt(value, 10);
|
|
456
|
+
return isNaN(parsed) ? null : parsed;
|
|
457
|
+
},
|
|
458
|
+
},
|
|
459
|
+
})
|
|
460
|
+
public droppedCount?: number = undefined;
|
|
461
|
+
|
|
462
|
+
@ColumnAccessControl({
|
|
463
|
+
create: [],
|
|
464
|
+
read: [
|
|
465
|
+
Permission.ProjectOwner,
|
|
466
|
+
Permission.ProjectAdmin,
|
|
467
|
+
Permission.ProjectMember,
|
|
468
|
+
Permission.Viewer,
|
|
469
|
+
Permission.TelemetryAdmin,
|
|
470
|
+
Permission.TelemetryMember,
|
|
471
|
+
Permission.TelemetryViewer,
|
|
472
|
+
Permission.ReadProjectLogDropFilter,
|
|
473
|
+
],
|
|
474
|
+
update: [],
|
|
475
|
+
})
|
|
476
|
+
@TableColumn({
|
|
477
|
+
title: "Last Dropped At",
|
|
478
|
+
required: false,
|
|
479
|
+
type: TableColumnType.Date,
|
|
480
|
+
canReadOnRelationQuery: true,
|
|
481
|
+
description:
|
|
482
|
+
"When this filter most recently discarded a log. Null means it has never matched anything.",
|
|
483
|
+
})
|
|
484
|
+
@Column({
|
|
485
|
+
type: ColumnType.Date,
|
|
486
|
+
nullable: true,
|
|
487
|
+
})
|
|
488
|
+
public lastDroppedAt?: Date = undefined;
|
|
489
|
+
|
|
401
490
|
@ColumnAccessControl({
|
|
402
491
|
create: [],
|
|
403
492
|
read: [
|
|
@@ -77,7 +77,7 @@ export interface DiscoveredNetworkDevice {
|
|
|
77
77
|
pluralName: "Network Device Discovery Scans",
|
|
78
78
|
icon: IconProp.Search,
|
|
79
79
|
tableDescription:
|
|
80
|
-
"
|
|
80
|
+
"Network discovery scans that sweep an address space — a CIDR subnet or an octet range — via SNMP from a probe and report devices found, so they can be imported as Network Devices.",
|
|
81
81
|
})
|
|
82
82
|
@Entity({
|
|
83
83
|
name: "NetworkDeviceDiscoveryScan",
|
|
@@ -260,12 +260,22 @@ export default class NetworkDeviceDiscoveryScan extends BaseModel {
|
|
|
260
260
|
],
|
|
261
261
|
update: [],
|
|
262
262
|
})
|
|
263
|
+
/*
|
|
264
|
+
* The address space this scan sweeps. Two notations are accepted (see
|
|
265
|
+
* Common/Utils/NetworkDiscovery/ScanTargetUtil): CIDR, and octet ranges
|
|
266
|
+
* where any octet may be an inclusive low-high range.
|
|
267
|
+
*
|
|
268
|
+
* The column keeps the name `cidr` it was created with: it is part of the
|
|
269
|
+
* public API surface and the probe payload, and renaming it would break both
|
|
270
|
+
* for a purely cosmetic gain.
|
|
271
|
+
*/
|
|
263
272
|
@TableColumn({
|
|
264
273
|
required: true,
|
|
265
274
|
type: TableColumnType.ShortText,
|
|
266
275
|
canReadOnRelationQuery: true,
|
|
267
|
-
title: "
|
|
268
|
-
description:
|
|
276
|
+
title: "Scan Target",
|
|
277
|
+
description:
|
|
278
|
+
"Address space to scan, either in CIDR notation (192.168.1.0/24) or octet-range notation where any octet may be an inclusive low-high range (10.16-22.0-255.51-66)",
|
|
269
279
|
example: "192.168.1.0/24",
|
|
270
280
|
})
|
|
271
281
|
@Column({
|
|
@@ -0,0 +1,463 @@
|
|
|
1
|
+
import Project from "./Project";
|
|
2
|
+
import User from "./User";
|
|
3
|
+
import BaseModel from "./DatabaseBaseModel/DatabaseBaseModel";
|
|
4
|
+
import Route from "../../Types/API/Route";
|
|
5
|
+
import ColumnAccessControl from "../../Types/Database/AccessControl/ColumnAccessControl";
|
|
6
|
+
import TableAccessControl from "../../Types/Database/AccessControl/TableAccessControl";
|
|
7
|
+
import ColumnLength from "../../Types/Database/ColumnLength";
|
|
8
|
+
import ColumnType from "../../Types/Database/ColumnType";
|
|
9
|
+
import CrudApiEndpoint from "../../Types/Database/CrudApiEndpoint";
|
|
10
|
+
import EnableDocumentation from "../../Types/Database/EnableDocumentation";
|
|
11
|
+
import TableColumn from "../../Types/Database/TableColumn";
|
|
12
|
+
import TableColumnType from "../../Types/Database/TableColumnType";
|
|
13
|
+
import TableMetadata from "../../Types/Database/TableMetadata";
|
|
14
|
+
import TenantColumn from "../../Types/Database/TenantColumn";
|
|
15
|
+
import UniqueColumnBy from "../../Types/Database/UniqueColumnBy";
|
|
16
|
+
import IconProp from "../../Types/Icon/IconProp";
|
|
17
|
+
import ObjectID from "../../Types/ObjectID";
|
|
18
|
+
import Permission from "../../Types/Permission";
|
|
19
|
+
import { Column, Entity, Index, JoinColumn, ManyToOne } from "typeorm";
|
|
20
|
+
|
|
21
|
+
/*
|
|
22
|
+
* One recommendation a project has decided it does not want, on one resource.
|
|
23
|
+
*
|
|
24
|
+
* Recommendations themselves are computed, not stored: the catalog derives them
|
|
25
|
+
* from telemetry every time the page loads. That makes "no thanks" the only
|
|
26
|
+
* piece of state worth persisting, and it has to be persisted — a dismissal
|
|
27
|
+
* held in React state comes back on the next page load, and a dismissal held in
|
|
28
|
+
* localStorage comes back for the next engineer on the team. Both make the
|
|
29
|
+
* recommendation list something people learn to ignore.
|
|
30
|
+
*
|
|
31
|
+
* The row is deliberately NOT scoped to a monitor or to any other created
|
|
32
|
+
* object. It is scoped to (recommendationType, resourceType, resourceId,
|
|
33
|
+
* recommendationId), which is enough to answer "hide this card here" for every
|
|
34
|
+
* present and future recommendation kind. `resourceId` is a plain ObjectID
|
|
35
|
+
* column with no relation because the resource it points at is polymorphic —
|
|
36
|
+
* a KubernetesCluster, a Host, a DockerHost and five others, with no shared
|
|
37
|
+
* parent table to point a foreign key at. The cost of that is orphan rows when
|
|
38
|
+
* a resource is deleted; they are a handful of bytes each, they are invisible
|
|
39
|
+
* (nothing queries them once the resource is gone), and the alternative is
|
|
40
|
+
* eight nullable FK columns.
|
|
41
|
+
*
|
|
42
|
+
* Un-dismissing is a DELETE, not a flag. Deletes in this codebase are hard
|
|
43
|
+
* deletes (see DatabaseService._deleteBy), so a re-dismissal after a restore
|
|
44
|
+
* is a clean insert and the `@UniqueColumnBy` guard below stays accurate.
|
|
45
|
+
*/
|
|
46
|
+
@EnableDocumentation()
|
|
47
|
+
@TenantColumn("projectId")
|
|
48
|
+
@TableAccessControl({
|
|
49
|
+
create: [
|
|
50
|
+
Permission.ProjectOwner,
|
|
51
|
+
Permission.ProjectAdmin,
|
|
52
|
+
Permission.ProjectMember,
|
|
53
|
+
Permission.CreateRecommendationDismissal,
|
|
54
|
+
],
|
|
55
|
+
read: [
|
|
56
|
+
Permission.ProjectOwner,
|
|
57
|
+
Permission.ProjectAdmin,
|
|
58
|
+
Permission.ProjectMember,
|
|
59
|
+
Permission.Viewer,
|
|
60
|
+
Permission.ReadRecommendationDismissal,
|
|
61
|
+
],
|
|
62
|
+
delete: [
|
|
63
|
+
Permission.ProjectOwner,
|
|
64
|
+
Permission.ProjectAdmin,
|
|
65
|
+
Permission.ProjectMember,
|
|
66
|
+
Permission.DeleteRecommendationDismissal,
|
|
67
|
+
],
|
|
68
|
+
update: [
|
|
69
|
+
Permission.ProjectOwner,
|
|
70
|
+
Permission.ProjectAdmin,
|
|
71
|
+
Permission.ProjectMember,
|
|
72
|
+
Permission.EditRecommendationDismissal,
|
|
73
|
+
],
|
|
74
|
+
})
|
|
75
|
+
@CrudApiEndpoint(new Route("/recommendation-dismissal"))
|
|
76
|
+
@TableMetadata({
|
|
77
|
+
tableName: "RecommendationDismissal",
|
|
78
|
+
singularName: "Recommendation Dismissal",
|
|
79
|
+
pluralName: "Recommendation Dismissals",
|
|
80
|
+
icon: IconProp.EyeSlash,
|
|
81
|
+
tableDescription:
|
|
82
|
+
"Recommendations your team has dismissed. Dismissing hides a recommendation for everyone on the project until it is restored; it never deletes anything that was already created from it.",
|
|
83
|
+
})
|
|
84
|
+
@Entity({
|
|
85
|
+
name: "RecommendationDismissal",
|
|
86
|
+
})
|
|
87
|
+
/*
|
|
88
|
+
* Every read is "give me the dismissals for this one resource", which is
|
|
89
|
+
* exactly this index. It is deliberately not unique — uniqueness is enforced
|
|
90
|
+
* at the application layer by `@UniqueColumnBy` below, which (unlike a Postgres
|
|
91
|
+
* unique index) treats a NULL `resourceId` as a value rather than as "always
|
|
92
|
+
* distinct". A future project-wide recommendation kind will have no resourceId,
|
|
93
|
+
* and it still must not be dismissable twice.
|
|
94
|
+
*/
|
|
95
|
+
@Index(["projectId", "recommendationType", "resourceType", "resourceId"])
|
|
96
|
+
export default class RecommendationDismissal extends BaseModel {
|
|
97
|
+
@ColumnAccessControl({
|
|
98
|
+
create: [
|
|
99
|
+
Permission.ProjectOwner,
|
|
100
|
+
Permission.ProjectAdmin,
|
|
101
|
+
Permission.ProjectMember,
|
|
102
|
+
Permission.CreateRecommendationDismissal,
|
|
103
|
+
],
|
|
104
|
+
read: [
|
|
105
|
+
Permission.ProjectOwner,
|
|
106
|
+
Permission.ProjectAdmin,
|
|
107
|
+
Permission.ProjectMember,
|
|
108
|
+
Permission.Viewer,
|
|
109
|
+
Permission.ReadRecommendationDismissal,
|
|
110
|
+
],
|
|
111
|
+
update: [],
|
|
112
|
+
})
|
|
113
|
+
@TableColumn({
|
|
114
|
+
manyToOneRelationColumn: "projectId",
|
|
115
|
+
type: TableColumnType.Entity,
|
|
116
|
+
modelType: Project,
|
|
117
|
+
title: "Project",
|
|
118
|
+
description: "Relation to Project Resource in which this object belongs",
|
|
119
|
+
})
|
|
120
|
+
@ManyToOne(
|
|
121
|
+
() => {
|
|
122
|
+
return Project;
|
|
123
|
+
},
|
|
124
|
+
{
|
|
125
|
+
eager: false,
|
|
126
|
+
nullable: true,
|
|
127
|
+
onDelete: "CASCADE",
|
|
128
|
+
orphanedRowAction: "nullify",
|
|
129
|
+
},
|
|
130
|
+
)
|
|
131
|
+
@JoinColumn({ name: "projectId" })
|
|
132
|
+
public project?: Project = undefined;
|
|
133
|
+
|
|
134
|
+
@ColumnAccessControl({
|
|
135
|
+
create: [
|
|
136
|
+
Permission.ProjectOwner,
|
|
137
|
+
Permission.ProjectAdmin,
|
|
138
|
+
Permission.ProjectMember,
|
|
139
|
+
Permission.CreateRecommendationDismissal,
|
|
140
|
+
],
|
|
141
|
+
read: [
|
|
142
|
+
Permission.ProjectOwner,
|
|
143
|
+
Permission.ProjectAdmin,
|
|
144
|
+
Permission.ProjectMember,
|
|
145
|
+
Permission.Viewer,
|
|
146
|
+
Permission.ReadRecommendationDismissal,
|
|
147
|
+
],
|
|
148
|
+
update: [],
|
|
149
|
+
})
|
|
150
|
+
@Index()
|
|
151
|
+
@TableColumn({
|
|
152
|
+
type: TableColumnType.ObjectID,
|
|
153
|
+
required: true,
|
|
154
|
+
canReadOnRelationQuery: true,
|
|
155
|
+
title: "Project ID",
|
|
156
|
+
description: "ID of your OneUptime Project in which this object belongs",
|
|
157
|
+
})
|
|
158
|
+
@Column({
|
|
159
|
+
type: ColumnType.ObjectID,
|
|
160
|
+
nullable: false,
|
|
161
|
+
transformer: ObjectID.getDatabaseTransformer(),
|
|
162
|
+
})
|
|
163
|
+
public projectId?: ObjectID = undefined;
|
|
164
|
+
|
|
165
|
+
@ColumnAccessControl({
|
|
166
|
+
create: [
|
|
167
|
+
Permission.ProjectOwner,
|
|
168
|
+
Permission.ProjectAdmin,
|
|
169
|
+
Permission.ProjectMember,
|
|
170
|
+
Permission.CreateRecommendationDismissal,
|
|
171
|
+
],
|
|
172
|
+
read: [
|
|
173
|
+
Permission.ProjectOwner,
|
|
174
|
+
Permission.ProjectAdmin,
|
|
175
|
+
Permission.ProjectMember,
|
|
176
|
+
Permission.Viewer,
|
|
177
|
+
Permission.ReadRecommendationDismissal,
|
|
178
|
+
],
|
|
179
|
+
update: [],
|
|
180
|
+
})
|
|
181
|
+
@TableColumn({
|
|
182
|
+
required: true,
|
|
183
|
+
type: TableColumnType.ShortText,
|
|
184
|
+
canReadOnRelationQuery: true,
|
|
185
|
+
title: "Recommendation Type",
|
|
186
|
+
description:
|
|
187
|
+
"Which family of recommendation this dismissal belongs to. See the RecommendationType enum.",
|
|
188
|
+
example: "Monitor",
|
|
189
|
+
})
|
|
190
|
+
@Column({
|
|
191
|
+
nullable: false,
|
|
192
|
+
type: ColumnType.ShortText,
|
|
193
|
+
length: ColumnLength.ShortText,
|
|
194
|
+
})
|
|
195
|
+
public recommendationType?: string = undefined;
|
|
196
|
+
|
|
197
|
+
@ColumnAccessControl({
|
|
198
|
+
create: [
|
|
199
|
+
Permission.ProjectOwner,
|
|
200
|
+
Permission.ProjectAdmin,
|
|
201
|
+
Permission.ProjectMember,
|
|
202
|
+
Permission.CreateRecommendationDismissal,
|
|
203
|
+
],
|
|
204
|
+
read: [
|
|
205
|
+
Permission.ProjectOwner,
|
|
206
|
+
Permission.ProjectAdmin,
|
|
207
|
+
Permission.ProjectMember,
|
|
208
|
+
Permission.Viewer,
|
|
209
|
+
Permission.ReadRecommendationDismissal,
|
|
210
|
+
],
|
|
211
|
+
update: [],
|
|
212
|
+
})
|
|
213
|
+
@TableColumn({
|
|
214
|
+
required: true,
|
|
215
|
+
type: TableColumnType.ShortText,
|
|
216
|
+
canReadOnRelationQuery: true,
|
|
217
|
+
title: "Recommendation ID",
|
|
218
|
+
description:
|
|
219
|
+
"The catalog-wide id of the dismissed recommendation, for example Kubernetes:k8s-hpa-at-max-replicas.",
|
|
220
|
+
example: "Kubernetes:k8s-hpa-at-max-replicas",
|
|
221
|
+
})
|
|
222
|
+
@Column({
|
|
223
|
+
nullable: false,
|
|
224
|
+
type: ColumnType.ShortText,
|
|
225
|
+
length: ColumnLength.ShortText,
|
|
226
|
+
})
|
|
227
|
+
/*
|
|
228
|
+
* Application-level uniqueness. A second dismissal of the same
|
|
229
|
+
* recommendation on the same resource is always a double click or a stale
|
|
230
|
+
* tab, never something the user meant.
|
|
231
|
+
*/
|
|
232
|
+
@UniqueColumnBy([
|
|
233
|
+
"projectId",
|
|
234
|
+
"recommendationType",
|
|
235
|
+
"resourceType",
|
|
236
|
+
"resourceId",
|
|
237
|
+
])
|
|
238
|
+
public recommendationId?: string = undefined;
|
|
239
|
+
|
|
240
|
+
@ColumnAccessControl({
|
|
241
|
+
create: [
|
|
242
|
+
Permission.ProjectOwner,
|
|
243
|
+
Permission.ProjectAdmin,
|
|
244
|
+
Permission.ProjectMember,
|
|
245
|
+
Permission.CreateRecommendationDismissal,
|
|
246
|
+
],
|
|
247
|
+
read: [
|
|
248
|
+
Permission.ProjectOwner,
|
|
249
|
+
Permission.ProjectAdmin,
|
|
250
|
+
Permission.ProjectMember,
|
|
251
|
+
Permission.Viewer,
|
|
252
|
+
Permission.ReadRecommendationDismissal,
|
|
253
|
+
],
|
|
254
|
+
update: [],
|
|
255
|
+
})
|
|
256
|
+
@TableColumn({
|
|
257
|
+
required: false,
|
|
258
|
+
type: TableColumnType.ShortText,
|
|
259
|
+
canReadOnRelationQuery: true,
|
|
260
|
+
title: "Resource Type",
|
|
261
|
+
description:
|
|
262
|
+
"The kind of resource this recommendation was shown on, for example Kubernetes or Docker. Empty for recommendations that are not scoped to a resource.",
|
|
263
|
+
example: "Kubernetes",
|
|
264
|
+
})
|
|
265
|
+
@Column({
|
|
266
|
+
nullable: true,
|
|
267
|
+
type: ColumnType.ShortText,
|
|
268
|
+
length: ColumnLength.ShortText,
|
|
269
|
+
})
|
|
270
|
+
public resourceType?: string = undefined;
|
|
271
|
+
|
|
272
|
+
@ColumnAccessControl({
|
|
273
|
+
create: [
|
|
274
|
+
Permission.ProjectOwner,
|
|
275
|
+
Permission.ProjectAdmin,
|
|
276
|
+
Permission.ProjectMember,
|
|
277
|
+
Permission.CreateRecommendationDismissal,
|
|
278
|
+
],
|
|
279
|
+
read: [
|
|
280
|
+
Permission.ProjectOwner,
|
|
281
|
+
Permission.ProjectAdmin,
|
|
282
|
+
Permission.ProjectMember,
|
|
283
|
+
Permission.Viewer,
|
|
284
|
+
Permission.ReadRecommendationDismissal,
|
|
285
|
+
],
|
|
286
|
+
update: [],
|
|
287
|
+
})
|
|
288
|
+
@TableColumn({
|
|
289
|
+
required: false,
|
|
290
|
+
type: TableColumnType.ObjectID,
|
|
291
|
+
canReadOnRelationQuery: true,
|
|
292
|
+
title: "Resource ID",
|
|
293
|
+
description:
|
|
294
|
+
"ID of the resource this recommendation was shown on. Polymorphic — it points at whichever table Resource Type names — so it carries no foreign key.",
|
|
295
|
+
})
|
|
296
|
+
@Column({
|
|
297
|
+
type: ColumnType.ObjectID,
|
|
298
|
+
nullable: true,
|
|
299
|
+
transformer: ObjectID.getDatabaseTransformer(),
|
|
300
|
+
})
|
|
301
|
+
public resourceId?: ObjectID = undefined;
|
|
302
|
+
|
|
303
|
+
@ColumnAccessControl({
|
|
304
|
+
create: [
|
|
305
|
+
Permission.ProjectOwner,
|
|
306
|
+
Permission.ProjectAdmin,
|
|
307
|
+
Permission.ProjectMember,
|
|
308
|
+
Permission.CreateRecommendationDismissal,
|
|
309
|
+
],
|
|
310
|
+
read: [
|
|
311
|
+
Permission.ProjectOwner,
|
|
312
|
+
Permission.ProjectAdmin,
|
|
313
|
+
Permission.ProjectMember,
|
|
314
|
+
Permission.Viewer,
|
|
315
|
+
Permission.ReadRecommendationDismissal,
|
|
316
|
+
],
|
|
317
|
+
update: [
|
|
318
|
+
Permission.ProjectOwner,
|
|
319
|
+
Permission.ProjectAdmin,
|
|
320
|
+
Permission.ProjectMember,
|
|
321
|
+
Permission.EditRecommendationDismissal,
|
|
322
|
+
],
|
|
323
|
+
})
|
|
324
|
+
@TableColumn({
|
|
325
|
+
required: false,
|
|
326
|
+
type: TableColumnType.LongText,
|
|
327
|
+
title: "Dismissal Reason",
|
|
328
|
+
description:
|
|
329
|
+
"Optional note explaining why this recommendation was dismissed, shown to whoever finds it in the dismissed list later.",
|
|
330
|
+
example: "We alert on this from Prometheus already.",
|
|
331
|
+
})
|
|
332
|
+
@Column({
|
|
333
|
+
nullable: true,
|
|
334
|
+
type: ColumnType.LongText,
|
|
335
|
+
length: ColumnLength.LongText,
|
|
336
|
+
})
|
|
337
|
+
public dismissalReason?: string = undefined;
|
|
338
|
+
|
|
339
|
+
@ColumnAccessControl({
|
|
340
|
+
create: [
|
|
341
|
+
Permission.ProjectOwner,
|
|
342
|
+
Permission.ProjectAdmin,
|
|
343
|
+
Permission.ProjectMember,
|
|
344
|
+
Permission.CreateRecommendationDismissal,
|
|
345
|
+
],
|
|
346
|
+
read: [
|
|
347
|
+
Permission.ProjectOwner,
|
|
348
|
+
Permission.ProjectAdmin,
|
|
349
|
+
Permission.ProjectMember,
|
|
350
|
+
Permission.Viewer,
|
|
351
|
+
Permission.ReadRecommendationDismissal,
|
|
352
|
+
],
|
|
353
|
+
update: [],
|
|
354
|
+
})
|
|
355
|
+
@TableColumn({
|
|
356
|
+
manyToOneRelationColumn: "createdByUserId",
|
|
357
|
+
type: TableColumnType.Entity,
|
|
358
|
+
modelType: User,
|
|
359
|
+
title: "Created by User",
|
|
360
|
+
description:
|
|
361
|
+
"Relation to User who created this object (if this object was created by a User)",
|
|
362
|
+
})
|
|
363
|
+
@ManyToOne(
|
|
364
|
+
() => {
|
|
365
|
+
return User;
|
|
366
|
+
},
|
|
367
|
+
{
|
|
368
|
+
eager: false,
|
|
369
|
+
nullable: true,
|
|
370
|
+
onDelete: "SET NULL",
|
|
371
|
+
orphanedRowAction: "nullify",
|
|
372
|
+
},
|
|
373
|
+
)
|
|
374
|
+
@JoinColumn({ name: "createdByUserId" })
|
|
375
|
+
public createdByUser?: User = undefined;
|
|
376
|
+
|
|
377
|
+
@ColumnAccessControl({
|
|
378
|
+
create: [
|
|
379
|
+
Permission.ProjectOwner,
|
|
380
|
+
Permission.ProjectAdmin,
|
|
381
|
+
Permission.ProjectMember,
|
|
382
|
+
Permission.CreateRecommendationDismissal,
|
|
383
|
+
],
|
|
384
|
+
read: [
|
|
385
|
+
Permission.ProjectOwner,
|
|
386
|
+
Permission.ProjectAdmin,
|
|
387
|
+
Permission.ProjectMember,
|
|
388
|
+
Permission.Viewer,
|
|
389
|
+
Permission.ReadRecommendationDismissal,
|
|
390
|
+
],
|
|
391
|
+
update: [],
|
|
392
|
+
})
|
|
393
|
+
@TableColumn({
|
|
394
|
+
type: TableColumnType.ObjectID,
|
|
395
|
+
title: "Created by User ID",
|
|
396
|
+
description:
|
|
397
|
+
"User ID who created this object (if this object was created by a User)",
|
|
398
|
+
})
|
|
399
|
+
@Column({
|
|
400
|
+
type: ColumnType.ObjectID,
|
|
401
|
+
nullable: true,
|
|
402
|
+
transformer: ObjectID.getDatabaseTransformer(),
|
|
403
|
+
})
|
|
404
|
+
public createdByUserId?: ObjectID = undefined;
|
|
405
|
+
|
|
406
|
+
@ColumnAccessControl({
|
|
407
|
+
create: [],
|
|
408
|
+
read: [
|
|
409
|
+
Permission.ProjectOwner,
|
|
410
|
+
Permission.ProjectAdmin,
|
|
411
|
+
Permission.ProjectMember,
|
|
412
|
+
Permission.Viewer,
|
|
413
|
+
Permission.ReadRecommendationDismissal,
|
|
414
|
+
],
|
|
415
|
+
update: [],
|
|
416
|
+
})
|
|
417
|
+
@TableColumn({
|
|
418
|
+
manyToOneRelationColumn: "deletedByUserId",
|
|
419
|
+
type: TableColumnType.Entity,
|
|
420
|
+
title: "Deleted by User",
|
|
421
|
+
modelType: User,
|
|
422
|
+
description:
|
|
423
|
+
"Relation to User who deleted this object (if this object was deleted by a User)",
|
|
424
|
+
})
|
|
425
|
+
@ManyToOne(
|
|
426
|
+
() => {
|
|
427
|
+
return User;
|
|
428
|
+
},
|
|
429
|
+
{
|
|
430
|
+
cascade: false,
|
|
431
|
+
eager: false,
|
|
432
|
+
nullable: true,
|
|
433
|
+
onDelete: "SET NULL",
|
|
434
|
+
orphanedRowAction: "nullify",
|
|
435
|
+
},
|
|
436
|
+
)
|
|
437
|
+
@JoinColumn({ name: "deletedByUserId" })
|
|
438
|
+
public deletedByUser?: User = undefined;
|
|
439
|
+
|
|
440
|
+
@ColumnAccessControl({
|
|
441
|
+
create: [],
|
|
442
|
+
read: [
|
|
443
|
+
Permission.ProjectOwner,
|
|
444
|
+
Permission.ProjectAdmin,
|
|
445
|
+
Permission.ProjectMember,
|
|
446
|
+
Permission.Viewer,
|
|
447
|
+
Permission.ReadRecommendationDismissal,
|
|
448
|
+
],
|
|
449
|
+
update: [],
|
|
450
|
+
})
|
|
451
|
+
@TableColumn({
|
|
452
|
+
type: TableColumnType.ObjectID,
|
|
453
|
+
title: "Deleted by User ID",
|
|
454
|
+
description:
|
|
455
|
+
"User ID who deleted this object (if this object was deleted by a User)",
|
|
456
|
+
})
|
|
457
|
+
@Column({
|
|
458
|
+
type: ColumnType.ObjectID,
|
|
459
|
+
nullable: true,
|
|
460
|
+
transformer: ObjectID.getDatabaseTransformer(),
|
|
461
|
+
})
|
|
462
|
+
public deletedByUserId?: ObjectID = undefined;
|
|
463
|
+
}
|