@oneuptime/common 12.0.22 → 12.0.24
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/DetectionRule.ts +55 -0
- package/Models/DatabaseModels/Index.ts +2 -0
- package/Models/DatabaseModels/NetworkDevice.ts +44 -0
- package/Models/DatabaseModels/NetworkDeviceAutoImportRule.ts +584 -0
- package/Models/DatabaseModels/NetworkDeviceDiscoveryScan.ts +105 -0
- package/Models/DatabaseModels/Project.ts +68 -0
- package/Models/DatabaseModels/User.ts +68 -0
- package/Server/API/TelemetryAPI.ts +29 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1789100000000-AddNetworkDeviceAutoImportRule.ts +60 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1789200000000-AddSysObjectIdPatternToAutoImportRule.ts +26 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1789300000000-AddAutoApplyVendorHealthTemplate.ts +26 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1789400000000-AddNameToNetworkDeviceDiscoveryScan.ts +28 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1789500000000-AddCampaignUtmFields.ts +49 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1789512000000-AddDetectionRuleDistinctCountColumns.ts +33 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +12 -0
- package/Server/Middleware/GzipRequestBody.ts +311 -0
- package/Server/Middleware/MultipartFormData.ts +87 -3
- package/Server/Services/DetectionRuleService.ts +73 -6
- package/Server/Services/Index.ts +207 -0
- package/Server/Services/NetworkDeviceAutoImportRuleEngineService.ts +917 -0
- package/Server/Services/NetworkDeviceAutoImportRuleService.ts +181 -0
- package/Server/Services/NetworkDeviceDiscoveryScanService.ts +59 -0
- package/Server/Services/NetworkDeviceService.ts +148 -0
- package/Server/Services/OnCallDutyPolicyEscalationRuleScheduleService.ts +65 -0
- package/Server/Services/OnCallDutyPolicyFeedService.ts +1 -1
- package/Server/Services/ProjectService.ts +29 -19
- package/Server/Services/SecurityEventService.ts +90 -13
- package/Server/Services/StatusPageResourceService.ts +223 -0
- package/Server/Services/TelemetryAttributeService.ts +17 -0
- package/Server/Services/UserService.ts +4 -6
- package/Server/Types/Markdown.ts +161 -67
- package/Server/Utils/AI/Toolbox/OnCallTools.ts +12 -4
- package/Server/Utils/AnalyticsDatabase/Statement.ts +13 -1
- package/Server/Utils/AnalyticsDatabase/StatementGenerator.ts +297 -6
- package/Server/Utils/Attribution.ts +4 -0
- package/Server/Utils/Marketing/MarketingEventUtil.ts +45 -7
- package/Server/Utils/Monitor/NetworkInventoryUtil.ts +39 -1
- package/Server/Utils/SecurityEvent/DetectionRuleEvaluator.ts +55 -3
- package/Server/Utils/SecurityEvent/Sigma/SigmaClickhouseCompiler.ts +21 -0
- package/Server/Utils/StartServer.ts +12 -32
- package/Server/Utils/Telemetry/LlmCostBudgetEvaluator.ts +101 -4
- package/Server/Utils/Telemetry/LlmMetricSpend.ts +130 -0
- package/Server/Views/Partials/AnalyticsConsent.ejs +159 -102
- package/Server/Views/Partials/Head.ejs +2 -1
- package/Tests/App/Dashboard/AdminUserNotificationMethodsPage.test.tsx +776 -38
- package/Tests/App/Dashboard/CorrelateFilterBuilder.test.tsx +359 -0
- package/Tests/App/Dashboard/CorrelateGraph.test.tsx +865 -0
- package/Tests/App/Dashboard/CorrelationGraph.test.ts +346 -0
- package/Tests/App/Dashboard/CriteriaFilterConditionDropdown.test.tsx +256 -0
- package/Tests/App/Dashboard/CriteriaFilterDefaults.test.ts +738 -0
- package/Tests/App/Dashboard/CriteriaFilterMonitorTypeChange.test.ts +1122 -0
- package/Tests/App/Dashboard/DiscoveryScanWizardValidation.test.tsx +283 -0
- package/Tests/App/Dashboard/ExternalStatusPageCriteriaFilter.test.ts +407 -0
- package/Tests/App/Dashboard/MetricSeriesInvestigateMenu.test.tsx +5 -14
- package/Tests/App/Dashboard/MonitorCriteriaActionToggles.test.tsx +426 -0
- package/Tests/App/Dashboard/MonitorStepsCriteriaAlignmentWiring.test.tsx +352 -0
- package/Tests/App/Dashboard/OnCallLayerCardOverrides.test.tsx +278 -0
- package/Tests/App/Dashboard/OnCallLayerShiftPreviewOverrides.test.ts +237 -0
- package/Tests/App/Dashboard/OnCallReadinessSurfaces.test.tsx +2 -2
- package/Tests/App/Dashboard/OnCallSchedulePreviewOverrides.test.tsx +460 -0
- package/Tests/App/Dashboard/SecurityEventAttributeUtil.test.ts +171 -0
- package/Tests/App/Dashboard/SecurityEventCorrelation.test.ts +857 -0
- package/Tests/App/Dashboard/SecurityEventDetailObservables.test.tsx +194 -0
- package/Tests/App/Dashboard/SecurityEventsDetectionRulesPage.test.tsx +124 -0
- package/Tests/App/Dashboard/SecurityEventsMonitorStepForm.test.tsx +79 -19
- package/Tests/App/Dashboard/SecurityEventsTableColumns.test.tsx +382 -0
- package/Tests/App/StatusPage/BulkAddStatusPageMonitors.test.ts +216 -0
- package/Tests/App/StatusPage/BulkAddStatusPageMonitorsModal.test.tsx +590 -11
- package/Tests/App/StatusPage/StatusPageResourceExplorer.test.tsx +757 -0
- package/Tests/Models/DiscoveryScanNameColumn.test.ts +293 -0
- package/Tests/Server/API/SecurityEventAttributesAPI.test.ts +564 -0
- package/Tests/Server/Infrastructure/Postgres/SchemaMigrationsOrdering.test.ts +120 -4
- package/Tests/Server/Middleware/GzipRequestBody.test.ts +725 -0
- package/Tests/Server/Middleware/MultipartFormData.test.ts +298 -0
- package/Tests/Server/Services/AddDetectionRuleDistinctCountColumnsMigration.test.ts +311 -0
- package/Tests/Server/Services/AutoImportScanCredentialSelect.test.ts +205 -0
- package/Tests/Server/Services/DetectionRuleService.test.ts +134 -2
- package/Tests/Server/Services/DiscoveryScanClaimHookFreeSafety.test.ts +7 -1
- package/Tests/Server/Services/FeedRetentionConsistency.test.ts +131 -0
- package/Tests/Server/Services/NetworkDeviceAutoImportRuleEngineService.test.ts +933 -0
- package/Tests/Server/Services/NetworkDeviceDiscoveryScanService.test.ts +194 -0
- package/Tests/Server/Services/NetworkDeviceMonitorStatusStamp.test.ts +800 -0
- package/Tests/Server/Services/OnCallScheduleAttachRosterRefresh.test.ts +244 -0
- package/Tests/Server/Services/SecurityEventService.test.ts +376 -0
- package/Tests/Server/Services/StatusPageResourceDuplicates.test.ts +703 -0
- package/Tests/Server/Services/TelemetryAttributeServiceSecurityEvent.test.ts +256 -0
- package/Tests/Server/Types/Workflow/Components/ComponentRegistryParity.test.ts +417 -0
- package/Tests/Server/Utils/AnalyticsDatabase/StatementGeneratorWhereOperators.test.ts +677 -0
- package/Tests/Server/Utils/Marketing/MarketingEventUtil.test.ts +43 -0
- package/Tests/Server/Utils/Monitor/Criteria/ProfileMonitorCriteria.test.ts +15 -11
- package/Tests/Server/Utils/Monitor/NetworkInventoryUtil.test.ts +97 -1
- package/Tests/Server/Utils/SecurityEvent/DetectionRuleEvaluator.test.ts +369 -8
- package/Tests/Server/Utils/SecurityEvent/SigmaClickhouseCompiler.test.ts +35 -0
- package/Tests/Server/Utils/Telemetry/LlmCostBudgetEvaluator.test.ts +368 -4
- package/Tests/Server/Utils/Telemetry/LlmMetricSpend.test.ts +245 -0
- package/Tests/Server/Views/AnalyticsConsentPartial.test.ts +48 -5
- package/Tests/Types/Code/YamlSyntax.test.ts +396 -0
- package/Tests/Types/Monitor/MetricAndProfileDefaultCriteria.test.ts +957 -0
- package/Tests/Types/Monitor/MonitorCriteriaActionValidation.test.ts +598 -0
- package/Tests/Types/Monitor/MonitorCriteriaInstance.test.ts +49 -0
- package/Tests/Types/Monitor/Recommendation/MonitorRecommendationNotificationMode.test.ts +6 -6
- package/Tests/Types/Monitor/Recommendation/MonitorRecommendationSeverityMapper.test.ts +4 -4
- package/Tests/Types/Monitor/Recommendation/MonitorRecommendationUtil.test.ts +4 -3
- package/Tests/Types/Telemetry/LlmMetricConventions.test.ts +193 -0
- package/Tests/UI/Components/AiInvestigationSettingsCard.test.tsx +0 -12
- package/Tests/UI/Components/CardModelDetailEdit.test.tsx +1 -17
- package/Tests/UI/Components/CodeEditor.test.tsx +474 -10
- package/Tests/UI/Components/Detail/YamlField.test.tsx +105 -0
- package/Tests/UI/Components/EntityDropdownLabelsBulkAdd.test.tsx +319 -0
- package/Tests/UI/Components/Forms/FormFieldYaml.test.tsx +231 -0
- package/Tests/UI/Components/Forms/Utils/FormFieldSchemaTypeUtil.test.ts +1 -0
- package/Tests/UI/Components/Forms/ValidationYAML.test.ts +234 -0
- package/Tests/UI/Components/ModelTable/AttributeColumns.test.tsx +573 -0
- package/Tests/UI/Components/ModelTable/BaseModelTableAttributeColumns.test.tsx +824 -0
- package/Tests/UI/Components/ModelTable/ColumnCustomizationModalAddableColumns.test.tsx +707 -0
- package/Tests/UI/Components/SideOver.test.tsx +1 -1
- package/Tests/UI/Components/StatusPage/ResourceGridSelection.test.tsx +294 -0
- package/Tests/UI/Components/StatusPage/ResourceListSelection.test.tsx +436 -0
- package/Tests/UI/Components/TableBulkCsvExport.test.tsx +6 -2
- package/Tests/UI/Components/Toggle.test.tsx +25 -0
- package/Tests/UI/Components/YamlEditor.test.tsx +847 -0
- package/Tests/Utils/NetworkDevice/DeviceReachabilityUtil.test.ts +252 -0
- package/Tests/Utils/NetworkDiscovery/AutoImportRuleMatcher.test.ts +516 -0
- package/Tests/Utils/NetworkDiscovery/DiscoveredDeviceBuilder.test.ts +272 -0
- package/Tests/Utils/NetworkDiscovery/DiscoveredHostUtil.test.ts +221 -0
- package/Tests/Utils/NetworkDiscovery/ScanNameUtil.test.ts +312 -0
- package/Tests/Utils/NetworkDiscovery/ScanTargetUtil.test.ts +164 -0
- package/Tests/Utils/StatusPage/ResourceExplorer.test.ts +468 -0
- package/Tests/Utils/Telemetry/LlmMetricQuery.test.ts +472 -0
- package/Types/Code/YamlSyntax.ts +396 -0
- package/Types/Exception/ExceptionCode.ts +1 -0
- package/Types/Exception/PayloadTooLargeException.ts +8 -0
- package/Types/Marketing/Attribution.ts +10 -0
- package/Types/Marketing/MarketingEvent.ts +4 -0
- package/Types/Monitor/MonitorCriteriaInstance.ts +116 -56
- package/Types/Monitor/Recommendation/MonitorRecommendationSeverityMapper.ts +2 -1
- package/Types/NetworkAutomation/RuleRunResult.ts +84 -0
- package/Types/Permission.ts +47 -0
- package/Types/SecurityEvent/DetectionFindingConstants.ts +11 -0
- package/Types/Telemetry/LlmMetricConventions.ts +124 -0
- package/UI/Components/AutocompleteTextInput/AutocompleteTextInput.tsx +3 -0
- package/UI/Components/BulkUpdate/BulkUpdateForm.tsx +10 -1
- package/UI/Components/CodeEditor/CodeEditor.tsx +241 -79
- package/UI/Components/CodeEditor/YamlEditor.tsx +369 -0
- package/UI/Components/Detail/Detail.tsx +10 -0
- package/UI/Components/EntityDropdown/EntityDropdown.tsx +33 -0
- package/UI/Components/Forms/Fields/FormField.tsx +31 -0
- package/UI/Components/Forms/Types/Field.ts +8 -0
- package/UI/Components/Forms/Types/FormFieldSchemaType.ts +1 -0
- package/UI/Components/Forms/Utils/FormFieldSchemaTypeUtil.ts +2 -0
- package/UI/Components/Forms/Validation.ts +46 -0
- package/UI/Components/Input/Input.tsx +3 -0
- package/UI/Components/ModelTable/AttributeColumns.tsx +321 -0
- package/UI/Components/ModelTable/BaseModelTable.tsx +263 -14
- package/UI/Components/ModelTable/Column.ts +8 -0
- package/UI/Components/ModelTable/ColumnCustomizationModal.tsx +310 -0
- package/UI/Components/ModelTable/ColumnPreference.ts +13 -1
- package/UI/Components/MonitorTemplateVariables/TemplateVariablesModal.tsx +2 -2
- package/UI/Components/SideOver/SideOver.tsx +5 -5
- package/UI/Components/StatusPage/ResourceGrid.tsx +82 -2
- package/UI/Components/StatusPage/ResourceList.tsx +197 -38
- package/UI/Components/Toggle/Toggle.tsx +9 -1
- package/UI/Components/Types/FieldType.ts +1 -0
- package/Utils/NetworkDevice/DeviceReachabilityUtil.ts +73 -1
- package/Utils/NetworkDiscovery/AutoImportRuleMatcher.ts +257 -0
- package/Utils/NetworkDiscovery/DiscoveredDeviceBuilder.ts +183 -0
- package/Utils/NetworkDiscovery/DiscoveredHostUtil.ts +95 -0
- package/Utils/NetworkDiscovery/DiscoveryImportEligibility.ts +66 -0
- package/Utils/NetworkDiscovery/ScanNameUtil.ts +181 -0
- package/Utils/NetworkDiscovery/ScanTargetUtil.ts +82 -0
- package/Utils/StatusPage/ResourceExplorer.ts +258 -0
- package/Utils/Telemetry/LlmMetricQuery.ts +204 -0
- package/build/dist/Models/DatabaseModels/DetectionRule.js +57 -0
- package/build/dist/Models/DatabaseModels/DetectionRule.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/NetworkDevice.js +45 -0
- package/build/dist/Models/DatabaseModels/NetworkDevice.js.map +1 -1
- package/build/dist/Models/DatabaseModels/NetworkDeviceAutoImportRule.js +609 -0
- package/build/dist/Models/DatabaseModels/NetworkDeviceAutoImportRule.js.map +1 -0
- package/build/dist/Models/DatabaseModels/NetworkDeviceDiscoveryScan.js +97 -0
- package/build/dist/Models/DatabaseModels/NetworkDeviceDiscoveryScan.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Project.js +76 -0
- package/build/dist/Models/DatabaseModels/Project.js.map +1 -1
- package/build/dist/Models/DatabaseModels/User.js +76 -0
- package/build/dist/Models/DatabaseModels/User.js.map +1 -1
- package/build/dist/Server/API/TelemetryAPI.js +17 -0
- package/build/dist/Server/API/TelemetryAPI.js.map +1 -1
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1789100000000-AddNetworkDeviceAutoImportRule.js +35 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1789100000000-AddNetworkDeviceAutoImportRule.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1789200000000-AddSysObjectIdPatternToAutoImportRule.js +19 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1789200000000-AddSysObjectIdPatternToAutoImportRule.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1789300000000-AddAutoApplyVendorHealthTemplate.js +19 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1789300000000-AddAutoApplyVendorHealthTemplate.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1789400000000-AddNameToNetworkDeviceDiscoveryScan.js +21 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1789400000000-AddNameToNetworkDeviceDiscoveryScan.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1789500000000-AddCampaignUtmFields.js +42 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1789500000000-AddCampaignUtmFields.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1789512000000-AddDetectionRuleDistinctCountColumns.js +22 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1789512000000-AddDetectionRuleDistinctCountColumns.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +12 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
- package/build/dist/Server/Middleware/GzipRequestBody.js +224 -0
- package/build/dist/Server/Middleware/GzipRequestBody.js.map +1 -0
- package/build/dist/Server/Middleware/MultipartFormData.js +71 -2
- package/build/dist/Server/Middleware/MultipartFormData.js.map +1 -1
- package/build/dist/Server/Services/DetectionRuleService.js +49 -4
- package/build/dist/Server/Services/DetectionRuleService.js.map +1 -1
- package/build/dist/Server/Services/Index.js +206 -0
- package/build/dist/Server/Services/Index.js.map +1 -1
- package/build/dist/Server/Services/NetworkDeviceAutoImportRuleEngineService.js +711 -0
- package/build/dist/Server/Services/NetworkDeviceAutoImportRuleEngineService.js.map +1 -0
- package/build/dist/Server/Services/NetworkDeviceAutoImportRuleService.js +155 -0
- package/build/dist/Server/Services/NetworkDeviceAutoImportRuleService.js.map +1 -0
- package/build/dist/Server/Services/NetworkDeviceDiscoveryScanService.js +50 -0
- package/build/dist/Server/Services/NetworkDeviceDiscoveryScanService.js.map +1 -1
- package/build/dist/Server/Services/NetworkDeviceService.js +124 -0
- package/build/dist/Server/Services/NetworkDeviceService.js.map +1 -1
- package/build/dist/Server/Services/OnCallDutyPolicyEscalationRuleScheduleService.js +68 -13
- package/build/dist/Server/Services/OnCallDutyPolicyEscalationRuleScheduleService.js.map +1 -1
- package/build/dist/Server/Services/OnCallDutyPolicyFeedService.js +1 -1
- package/build/dist/Server/Services/OnCallDutyPolicyFeedService.js.map +1 -1
- package/build/dist/Server/Services/ProjectService.js +25 -45
- package/build/dist/Server/Services/ProjectService.js.map +1 -1
- package/build/dist/Server/Services/SecurityEventService.js +57 -5
- package/build/dist/Server/Services/SecurityEventService.js.map +1 -1
- package/build/dist/Server/Services/StatusPageResourceService.js +140 -0
- package/build/dist/Server/Services/StatusPageResourceService.js.map +1 -1
- package/build/dist/Server/Services/TelemetryAttributeService.js +17 -0
- package/build/dist/Server/Services/TelemetryAttributeService.js.map +1 -1
- package/build/dist/Server/Services/UserService.js +2 -12
- package/build/dist/Server/Services/UserService.js.map +1 -1
- package/build/dist/Server/Types/Markdown.js +147 -61
- package/build/dist/Server/Types/Markdown.js.map +1 -1
- package/build/dist/Server/Utils/AI/Toolbox/OnCallTools.js +12 -4
- package/build/dist/Server/Utils/AI/Toolbox/OnCallTools.js.map +1 -1
- package/build/dist/Server/Utils/AnalyticsDatabase/Statement.js +12 -1
- package/build/dist/Server/Utils/AnalyticsDatabase/Statement.js.map +1 -1
- package/build/dist/Server/Utils/AnalyticsDatabase/StatementGenerator.js +246 -9
- package/build/dist/Server/Utils/AnalyticsDatabase/StatementGenerator.js.map +1 -1
- package/build/dist/Server/Utils/Attribution.js.map +1 -1
- package/build/dist/Server/Utils/Marketing/MarketingEventUtil.js +27 -7
- package/build/dist/Server/Utils/Marketing/MarketingEventUtil.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/NetworkInventoryUtil.js +26 -0
- package/build/dist/Server/Utils/Monitor/NetworkInventoryUtil.js.map +1 -1
- package/build/dist/Server/Utils/SecurityEvent/DetectionRuleEvaluator.js +42 -7
- package/build/dist/Server/Utils/SecurityEvent/DetectionRuleEvaluator.js.map +1 -1
- package/build/dist/Server/Utils/SecurityEvent/Sigma/SigmaClickhouseCompiler.js +18 -0
- package/build/dist/Server/Utils/SecurityEvent/Sigma/SigmaClickhouseCompiler.js.map +1 -1
- package/build/dist/Server/Utils/StartServer.js +12 -21
- package/build/dist/Server/Utils/StartServer.js.map +1 -1
- package/build/dist/Server/Utils/Telemetry/LlmCostBudgetEvaluator.js +76 -5
- package/build/dist/Server/Utils/Telemetry/LlmCostBudgetEvaluator.js.map +1 -1
- package/build/dist/Server/Utils/Telemetry/LlmMetricSpend.js +102 -0
- package/build/dist/Server/Utils/Telemetry/LlmMetricSpend.js.map +1 -0
- package/build/dist/Types/Code/YamlSyntax.js +212 -0
- package/build/dist/Types/Code/YamlSyntax.js.map +1 -0
- package/build/dist/Types/Exception/ExceptionCode.js +1 -0
- package/build/dist/Types/Exception/ExceptionCode.js.map +1 -1
- package/build/dist/Types/Exception/PayloadTooLargeException.js +8 -0
- package/build/dist/Types/Exception/PayloadTooLargeException.js.map +1 -0
- package/build/dist/Types/Marketing/Attribution.js +10 -0
- package/build/dist/Types/Marketing/Attribution.js.map +1 -1
- package/build/dist/Types/Monitor/MonitorCriteriaInstance.js +112 -51
- package/build/dist/Types/Monitor/MonitorCriteriaInstance.js.map +1 -1
- package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationSeverityMapper.js +2 -1
- package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationSeverityMapper.js.map +1 -1
- package/build/dist/Types/NetworkAutomation/RuleRunResult.js +24 -0
- package/build/dist/Types/NetworkAutomation/RuleRunResult.js.map +1 -1
- package/build/dist/Types/Permission.js +41 -0
- package/build/dist/Types/Permission.js.map +1 -1
- package/build/dist/Types/SecurityEvent/DetectionFindingConstants.js +9 -0
- package/build/dist/Types/SecurityEvent/DetectionFindingConstants.js.map +1 -1
- package/build/dist/Types/Telemetry/LlmMetricConventions.js +98 -0
- package/build/dist/Types/Telemetry/LlmMetricConventions.js.map +1 -0
- package/build/dist/UI/Components/AutocompleteTextInput/AutocompleteTextInput.js +1 -1
- package/build/dist/UI/Components/AutocompleteTextInput/AutocompleteTextInput.js.map +1 -1
- package/build/dist/UI/Components/BulkUpdate/BulkUpdateForm.js +5 -2
- package/build/dist/UI/Components/BulkUpdate/BulkUpdateForm.js.map +1 -1
- package/build/dist/UI/Components/CodeEditor/CodeEditor.js +206 -76
- package/build/dist/UI/Components/CodeEditor/CodeEditor.js.map +1 -1
- package/build/dist/UI/Components/CodeEditor/YamlEditor.js +201 -0
- package/build/dist/UI/Components/CodeEditor/YamlEditor.js.map +1 -0
- package/build/dist/UI/Components/Detail/Detail.js +9 -0
- package/build/dist/UI/Components/Detail/Detail.js.map +1 -1
- package/build/dist/UI/Components/EntityDropdown/EntityDropdown.js +16 -1
- package/build/dist/UI/Components/EntityDropdown/EntityDropdown.js.map +1 -1
- package/build/dist/UI/Components/Forms/Fields/FormField.js +14 -1
- package/build/dist/UI/Components/Forms/Fields/FormField.js.map +1 -1
- package/build/dist/UI/Components/Forms/Types/Field.js.map +1 -1
- package/build/dist/UI/Components/Forms/Types/FormFieldSchemaType.js +1 -0
- package/build/dist/UI/Components/Forms/Types/FormFieldSchemaType.js.map +1 -1
- package/build/dist/UI/Components/Forms/Utils/FormFieldSchemaTypeUtil.js +2 -0
- package/build/dist/UI/Components/Forms/Utils/FormFieldSchemaTypeUtil.js.map +1 -1
- package/build/dist/UI/Components/Forms/Validation.js +27 -0
- package/build/dist/UI/Components/Forms/Validation.js.map +1 -1
- package/build/dist/UI/Components/Input/Input.js +1 -1
- package/build/dist/UI/Components/Input/Input.js.map +1 -1
- package/build/dist/UI/Components/ModelTable/AttributeColumns.js +159 -0
- package/build/dist/UI/Components/ModelTable/AttributeColumns.js.map +1 -0
- package/build/dist/UI/Components/ModelTable/BaseModelTable.js +179 -17
- package/build/dist/UI/Components/ModelTable/BaseModelTable.js.map +1 -1
- package/build/dist/UI/Components/ModelTable/ColumnCustomizationModal.js +133 -2
- package/build/dist/UI/Components/ModelTable/ColumnCustomizationModal.js.map +1 -1
- package/build/dist/UI/Components/ModelTable/ColumnPreference.js +7 -1
- package/build/dist/UI/Components/ModelTable/ColumnPreference.js.map +1 -1
- package/build/dist/UI/Components/MonitorTemplateVariables/TemplateVariablesModal.js +2 -2
- package/build/dist/UI/Components/SideOver/SideOver.js +5 -5
- package/build/dist/UI/Components/StatusPage/ResourceGrid.js +28 -2
- package/build/dist/UI/Components/StatusPage/ResourceGrid.js.map +1 -1
- package/build/dist/UI/Components/StatusPage/ResourceList.js +87 -20
- package/build/dist/UI/Components/StatusPage/ResourceList.js.map +1 -1
- package/build/dist/UI/Components/Toggle/Toggle.js +9 -1
- package/build/dist/UI/Components/Toggle/Toggle.js.map +1 -1
- package/build/dist/UI/Components/Types/FieldType.js +1 -0
- package/build/dist/UI/Components/Types/FieldType.js.map +1 -1
- package/build/dist/Utils/NetworkDevice/DeviceReachabilityUtil.js +37 -1
- package/build/dist/Utils/NetworkDevice/DeviceReachabilityUtil.js.map +1 -1
- package/build/dist/Utils/NetworkDiscovery/AutoImportRuleMatcher.js +149 -0
- package/build/dist/Utils/NetworkDiscovery/AutoImportRuleMatcher.js.map +1 -0
- package/build/dist/Utils/NetworkDiscovery/DiscoveredDeviceBuilder.js +121 -0
- package/build/dist/Utils/NetworkDiscovery/DiscoveredDeviceBuilder.js.map +1 -0
- package/build/dist/Utils/NetworkDiscovery/DiscoveredHostUtil.js +75 -0
- package/build/dist/Utils/NetworkDiscovery/DiscoveredHostUtil.js.map +1 -0
- package/build/dist/Utils/NetworkDiscovery/DiscoveryImportEligibility.js +59 -0
- package/build/dist/Utils/NetworkDiscovery/DiscoveryImportEligibility.js.map +1 -0
- package/build/dist/Utils/NetworkDiscovery/ScanNameUtil.js +120 -0
- package/build/dist/Utils/NetworkDiscovery/ScanNameUtil.js.map +1 -0
- package/build/dist/Utils/NetworkDiscovery/ScanTargetUtil.js +60 -0
- package/build/dist/Utils/NetworkDiscovery/ScanTargetUtil.js.map +1 -1
- package/build/dist/Utils/StatusPage/ResourceExplorer.js +171 -0
- package/build/dist/Utils/StatusPage/ResourceExplorer.js.map +1 -1
- package/build/dist/Utils/Telemetry/LlmMetricQuery.js +119 -0
- package/build/dist/Utils/Telemetry/LlmMetricQuery.js.map +1 -0
- package/jest.config.json +2 -0
- package/package.json +1 -1
- package/tsconfig.json +2 -1
- package/Tests/UI/Components/Toast.test.tsx +0 -197
- package/Tests/UI/Components/ToastStacking.test.tsx +0 -198
- package/UI/Components/Toast/Toast.tsx +0 -189
- package/UI/Components/Toast/ToastInit.tsx +0 -110
- package/build/dist/UI/Components/Toast/Toast.js +0 -123
- package/build/dist/UI/Components/Toast/Toast.js.map +0 -1
- package/build/dist/UI/Components/Toast/ToastInit.js +0 -53
- package/build/dist/UI/Components/Toast/ToastInit.js.map +0 -1
|
@@ -22,6 +22,17 @@ export interface DiscoveredNetworkDevice {
|
|
|
22
22
|
ipAddress: string;
|
|
23
23
|
sysName?: string | undefined;
|
|
24
24
|
sysDescr?: string | undefined;
|
|
25
|
+
/*
|
|
26
|
+
* The rest of the SNMP system group, carried since the probe started
|
|
27
|
+
* reporting it — the same single GET fetches all six scalars, so these
|
|
28
|
+
* cost nothing extra on the wire. sysObjectId is the vendor's registered
|
|
29
|
+
* enterprise OID, which vendor-based auto-import conditions match on.
|
|
30
|
+
* Undefined on ping-only hosts and on scan rows stored by older probes.
|
|
31
|
+
*/
|
|
32
|
+
sysObjectId?: string | undefined;
|
|
33
|
+
sysLocation?: string | undefined;
|
|
34
|
+
sysContact?: string | undefined;
|
|
35
|
+
sysUpTimeSeconds?: number | undefined;
|
|
25
36
|
isAlreadyRegistered?: boolean | undefined;
|
|
26
37
|
/*
|
|
27
38
|
* False when the host answered ping but not SNMP — such hosts cannot be
|
|
@@ -239,6 +250,73 @@ export default class NetworkDeviceDiscoveryScan extends BaseModel {
|
|
|
239
250
|
})
|
|
240
251
|
public probeId?: ObjectID = undefined;
|
|
241
252
|
|
|
253
|
+
@ColumnAccessControl({
|
|
254
|
+
create: [
|
|
255
|
+
Permission.ProjectOwner,
|
|
256
|
+
Permission.ProjectAdmin,
|
|
257
|
+
Permission.ProjectMember,
|
|
258
|
+
Permission.SettingsAdmin,
|
|
259
|
+
Permission.SettingsMember,
|
|
260
|
+
Permission.CreateNetworkDeviceDiscoveryScan,
|
|
261
|
+
],
|
|
262
|
+
read: [
|
|
263
|
+
Permission.ProjectOwner,
|
|
264
|
+
Permission.ProjectAdmin,
|
|
265
|
+
Permission.ProjectMember,
|
|
266
|
+
Permission.Viewer,
|
|
267
|
+
Permission.SettingsAdmin,
|
|
268
|
+
Permission.SettingsMember,
|
|
269
|
+
Permission.SettingsViewer,
|
|
270
|
+
Permission.ReadNetworkDeviceDiscoveryScan,
|
|
271
|
+
],
|
|
272
|
+
/*
|
|
273
|
+
* Updatable, unlike everything that describes the sweep itself: changing
|
|
274
|
+
* the target or the credentials of a scan mid-flight would mean the stored
|
|
275
|
+
* row no longer described the sweep that ran, so those grant no update at
|
|
276
|
+
* all. (The recurrence pair is updatable too — it describes the NEXT run
|
|
277
|
+
* rather than the one that happened.)
|
|
278
|
+
*
|
|
279
|
+
* A name describes nothing but itself, and the whole point of it is to be
|
|
280
|
+
* fixable after the fact: a scan mislabelled "Region 1100" is worse than
|
|
281
|
+
* an unnamed one, and deleting a scan to rename it would throw away its
|
|
282
|
+
* results.
|
|
283
|
+
*/
|
|
284
|
+
update: [
|
|
285
|
+
Permission.ProjectOwner,
|
|
286
|
+
Permission.ProjectAdmin,
|
|
287
|
+
Permission.ProjectMember,
|
|
288
|
+
Permission.SettingsAdmin,
|
|
289
|
+
Permission.SettingsMember,
|
|
290
|
+
Permission.EditNetworkDeviceDiscoveryScan,
|
|
291
|
+
],
|
|
292
|
+
})
|
|
293
|
+
/*
|
|
294
|
+
* What this scan is FOR, in the operator's own words — "Router Discovery —
|
|
295
|
+
* Region 1100", "Switch Discovery — WB Units". Optional, not unique, and
|
|
296
|
+
* never used to look a scan up: it exists so the Discovery Scans list can be
|
|
297
|
+
* read at a glance instead of by matching octet ranges against a subnet plan
|
|
298
|
+
* kept somewhere else (OneUptime issue #3391).
|
|
299
|
+
*
|
|
300
|
+
* Nullable, and every scan created before this column existed is null — so
|
|
301
|
+
* every surface that renders it falls back to the scan target. See
|
|
302
|
+
* Common/Utils/NetworkDiscovery/ScanNameUtil.
|
|
303
|
+
*/
|
|
304
|
+
@TableColumn({
|
|
305
|
+
required: false,
|
|
306
|
+
type: TableColumnType.ShortText,
|
|
307
|
+
canReadOnRelationQuery: true,
|
|
308
|
+
title: "Name",
|
|
309
|
+
description:
|
|
310
|
+
"Optional name for this scan, so it can be told apart from other scans at a glance. Falls back to the scan target when empty.",
|
|
311
|
+
example: "Router Discovery - Region 1100",
|
|
312
|
+
})
|
|
313
|
+
@Column({
|
|
314
|
+
nullable: true,
|
|
315
|
+
type: ColumnType.ShortText,
|
|
316
|
+
length: ColumnLength.ShortText,
|
|
317
|
+
})
|
|
318
|
+
public name?: string = undefined;
|
|
319
|
+
|
|
242
320
|
@ColumnAccessControl({
|
|
243
321
|
create: [
|
|
244
322
|
Permission.ProjectOwner,
|
|
@@ -913,6 +991,33 @@ export default class NetworkDeviceDiscoveryScan extends BaseModel {
|
|
|
913
991
|
})
|
|
914
992
|
public nextScanAt?: Date = undefined;
|
|
915
993
|
|
|
994
|
+
@ColumnAccessControl({
|
|
995
|
+
create: [],
|
|
996
|
+
read: [
|
|
997
|
+
Permission.ProjectOwner,
|
|
998
|
+
Permission.ProjectAdmin,
|
|
999
|
+
Permission.ProjectMember,
|
|
1000
|
+
Permission.Viewer,
|
|
1001
|
+
Permission.SettingsAdmin,
|
|
1002
|
+
Permission.SettingsMember,
|
|
1003
|
+
Permission.SettingsViewer,
|
|
1004
|
+
Permission.ReadNetworkDeviceDiscoveryScan,
|
|
1005
|
+
],
|
|
1006
|
+
update: [],
|
|
1007
|
+
})
|
|
1008
|
+
@TableColumn({
|
|
1009
|
+
required: false,
|
|
1010
|
+
type: TableColumnType.Date,
|
|
1011
|
+
title: "Auto Import Processed At",
|
|
1012
|
+
description:
|
|
1013
|
+
"When auto-import rules last processed this scan's results. Managed by the server: cleared when new results arrive, stamped by the worker that evaluates the rules. NULL means the current results have not been processed yet.",
|
|
1014
|
+
})
|
|
1015
|
+
@Column({
|
|
1016
|
+
nullable: true,
|
|
1017
|
+
type: ColumnType.Date,
|
|
1018
|
+
})
|
|
1019
|
+
public autoImportProcessedAt?: Date = undefined;
|
|
1020
|
+
|
|
916
1021
|
@ColumnAccessControl({
|
|
917
1022
|
create: [
|
|
918
1023
|
Permission.ProjectOwner,
|
|
@@ -2576,6 +2576,74 @@ export default class Project extends TenantModel {
|
|
|
2576
2576
|
})
|
|
2577
2577
|
public utmContent?: string = undefined;
|
|
2578
2578
|
|
|
2579
|
+
@ColumnAccessControl({
|
|
2580
|
+
create: [Permission.User],
|
|
2581
|
+
read: [],
|
|
2582
|
+
update: [],
|
|
2583
|
+
})
|
|
2584
|
+
@TableColumn({
|
|
2585
|
+
type: TableColumnType.LongText,
|
|
2586
|
+
hideColumnInDocumentation: true,
|
|
2587
|
+
})
|
|
2588
|
+
@Column({
|
|
2589
|
+
type: ColumnType.LongText,
|
|
2590
|
+
length: ColumnLength.LongText,
|
|
2591
|
+
nullable: true,
|
|
2592
|
+
unique: false,
|
|
2593
|
+
})
|
|
2594
|
+
public utmId?: string = undefined;
|
|
2595
|
+
|
|
2596
|
+
@ColumnAccessControl({
|
|
2597
|
+
create: [Permission.User],
|
|
2598
|
+
read: [],
|
|
2599
|
+
update: [],
|
|
2600
|
+
})
|
|
2601
|
+
@TableColumn({
|
|
2602
|
+
type: TableColumnType.LongText,
|
|
2603
|
+
hideColumnInDocumentation: true,
|
|
2604
|
+
})
|
|
2605
|
+
@Column({
|
|
2606
|
+
type: ColumnType.LongText,
|
|
2607
|
+
length: ColumnLength.LongText,
|
|
2608
|
+
nullable: true,
|
|
2609
|
+
unique: false,
|
|
2610
|
+
})
|
|
2611
|
+
public utmSourcePlatform?: string = undefined;
|
|
2612
|
+
|
|
2613
|
+
@ColumnAccessControl({
|
|
2614
|
+
create: [Permission.User],
|
|
2615
|
+
read: [],
|
|
2616
|
+
update: [],
|
|
2617
|
+
})
|
|
2618
|
+
@TableColumn({
|
|
2619
|
+
type: TableColumnType.LongText,
|
|
2620
|
+
hideColumnInDocumentation: true,
|
|
2621
|
+
})
|
|
2622
|
+
@Column({
|
|
2623
|
+
type: ColumnType.LongText,
|
|
2624
|
+
length: ColumnLength.LongText,
|
|
2625
|
+
nullable: true,
|
|
2626
|
+
unique: false,
|
|
2627
|
+
})
|
|
2628
|
+
public utmCreativeFormat?: string = undefined;
|
|
2629
|
+
|
|
2630
|
+
@ColumnAccessControl({
|
|
2631
|
+
create: [Permission.User],
|
|
2632
|
+
read: [],
|
|
2633
|
+
update: [],
|
|
2634
|
+
})
|
|
2635
|
+
@TableColumn({
|
|
2636
|
+
type: TableColumnType.LongText,
|
|
2637
|
+
hideColumnInDocumentation: true,
|
|
2638
|
+
})
|
|
2639
|
+
@Column({
|
|
2640
|
+
type: ColumnType.LongText,
|
|
2641
|
+
length: ColumnLength.LongText,
|
|
2642
|
+
nullable: true,
|
|
2643
|
+
unique: false,
|
|
2644
|
+
})
|
|
2645
|
+
public utmMarketingTactic?: string = undefined;
|
|
2646
|
+
|
|
2579
2647
|
@ColumnAccessControl({
|
|
2580
2648
|
create: [Permission.User],
|
|
2581
2649
|
read: [],
|
|
@@ -634,6 +634,74 @@ class User extends UserModel {
|
|
|
634
634
|
})
|
|
635
635
|
public utmContent?: string = undefined;
|
|
636
636
|
|
|
637
|
+
@ColumnAccessControl({
|
|
638
|
+
create: [Permission.Public],
|
|
639
|
+
read: [],
|
|
640
|
+
update: [],
|
|
641
|
+
})
|
|
642
|
+
@TableColumn({
|
|
643
|
+
type: TableColumnType.LongText,
|
|
644
|
+
hideColumnInDocumentation: true,
|
|
645
|
+
})
|
|
646
|
+
@Column({
|
|
647
|
+
type: ColumnType.LongText,
|
|
648
|
+
length: ColumnLength.LongText,
|
|
649
|
+
nullable: true,
|
|
650
|
+
unique: false,
|
|
651
|
+
})
|
|
652
|
+
public utmId?: string = undefined;
|
|
653
|
+
|
|
654
|
+
@ColumnAccessControl({
|
|
655
|
+
create: [Permission.Public],
|
|
656
|
+
read: [],
|
|
657
|
+
update: [],
|
|
658
|
+
})
|
|
659
|
+
@TableColumn({
|
|
660
|
+
type: TableColumnType.LongText,
|
|
661
|
+
hideColumnInDocumentation: true,
|
|
662
|
+
})
|
|
663
|
+
@Column({
|
|
664
|
+
type: ColumnType.LongText,
|
|
665
|
+
length: ColumnLength.LongText,
|
|
666
|
+
nullable: true,
|
|
667
|
+
unique: false,
|
|
668
|
+
})
|
|
669
|
+
public utmSourcePlatform?: string = undefined;
|
|
670
|
+
|
|
671
|
+
@ColumnAccessControl({
|
|
672
|
+
create: [Permission.Public],
|
|
673
|
+
read: [],
|
|
674
|
+
update: [],
|
|
675
|
+
})
|
|
676
|
+
@TableColumn({
|
|
677
|
+
type: TableColumnType.LongText,
|
|
678
|
+
hideColumnInDocumentation: true,
|
|
679
|
+
})
|
|
680
|
+
@Column({
|
|
681
|
+
type: ColumnType.LongText,
|
|
682
|
+
length: ColumnLength.LongText,
|
|
683
|
+
nullable: true,
|
|
684
|
+
unique: false,
|
|
685
|
+
})
|
|
686
|
+
public utmCreativeFormat?: string = undefined;
|
|
687
|
+
|
|
688
|
+
@ColumnAccessControl({
|
|
689
|
+
create: [Permission.Public],
|
|
690
|
+
read: [],
|
|
691
|
+
update: [],
|
|
692
|
+
})
|
|
693
|
+
@TableColumn({
|
|
694
|
+
type: TableColumnType.LongText,
|
|
695
|
+
hideColumnInDocumentation: true,
|
|
696
|
+
})
|
|
697
|
+
@Column({
|
|
698
|
+
type: ColumnType.LongText,
|
|
699
|
+
length: ColumnLength.LongText,
|
|
700
|
+
nullable: true,
|
|
701
|
+
unique: false,
|
|
702
|
+
})
|
|
703
|
+
public utmMarketingTactic?: string = undefined;
|
|
704
|
+
|
|
637
705
|
@ColumnAccessControl({
|
|
638
706
|
create: [Permission.Public],
|
|
639
707
|
read: [],
|
|
@@ -204,6 +204,13 @@ const requireExceptionReadAccess: Array<RequestHandler> =
|
|
|
204
204
|
const requireProfileReadAccess: Array<RequestHandler> =
|
|
205
205
|
createTelemetryReadAccessGuard(Permission.ReadTelemetryServiceProfiles);
|
|
206
206
|
|
|
207
|
+
/*
|
|
208
|
+
* Mirrors the read access control declared on the SecurityEvent analytics
|
|
209
|
+
* model.
|
|
210
|
+
*/
|
|
211
|
+
const requireSecurityEventReadAccess: Array<RequestHandler> =
|
|
212
|
+
createTelemetryReadAccessGuard(Permission.ReadSecurityEvent);
|
|
213
|
+
|
|
207
214
|
router.post(
|
|
208
215
|
"/telemetry/metrics/get-attributes",
|
|
209
216
|
...requireMetricReadAccess,
|
|
@@ -268,6 +275,28 @@ router.post(
|
|
|
268
275
|
},
|
|
269
276
|
);
|
|
270
277
|
|
|
278
|
+
/*
|
|
279
|
+
* Security events flatten their whole source payload into `attributes`, so
|
|
280
|
+
* these are what backs the "add an attribute column" picker on the security
|
|
281
|
+
* events table — the keys differ per event class and per source, so there is
|
|
282
|
+
* no fixed list the UI could ship.
|
|
283
|
+
*/
|
|
284
|
+
router.post(
|
|
285
|
+
"/telemetry/security-events/get-attributes",
|
|
286
|
+
...requireSecurityEventReadAccess,
|
|
287
|
+
async (req: ExpressRequest, res: ExpressResponse, next: NextFunction) => {
|
|
288
|
+
return getAttributes(req, res, next, TelemetryType.SecurityEvent);
|
|
289
|
+
},
|
|
290
|
+
);
|
|
291
|
+
|
|
292
|
+
router.post(
|
|
293
|
+
"/telemetry/security-events/get-attribute-values",
|
|
294
|
+
...requireSecurityEventReadAccess,
|
|
295
|
+
async (req: ExpressRequest, res: ExpressResponse, next: NextFunction) => {
|
|
296
|
+
return getAttributeValues(req, res, next, TelemetryType.SecurityEvent);
|
|
297
|
+
},
|
|
298
|
+
);
|
|
299
|
+
|
|
271
300
|
type GetAttributesFunction = (
|
|
272
301
|
req: ExpressRequest,
|
|
273
302
|
res: ExpressResponse,
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { MigrationInterface, QueryRunner } from "typeorm";
|
|
2
|
+
|
|
3
|
+
/*
|
|
4
|
+
* Auto-import rules for network device discovery (issue #3378): a rule table
|
|
5
|
+
* whose conditions decide which discovered hosts become Network Devices with
|
|
6
|
+
* no manual review step, plus a processed-marker column on the scan so the
|
|
7
|
+
* worker that evaluates the rules knows which results it has already seen.
|
|
8
|
+
*/
|
|
9
|
+
export class AddNetworkDeviceAutoImportRule1789100000000
|
|
10
|
+
implements MigrationInterface
|
|
11
|
+
{
|
|
12
|
+
public name: string = "AddNetworkDeviceAutoImportRule1789100000000";
|
|
13
|
+
|
|
14
|
+
public async up(queryRunner: QueryRunner): Promise<void> {
|
|
15
|
+
await queryRunner.query(
|
|
16
|
+
`CREATE TABLE "NetworkDeviceAutoImportRule" ("_id" uuid NOT NULL DEFAULT uuid_generate_v4(), "createdAt" TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT now(), "updatedAt" TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT now(), "deletedAt" TIMESTAMP WITH TIME ZONE, "version" integer NOT NULL, "projectId" uuid NOT NULL, "name" character varying(100) NOT NULL, "description" character varying(500), "isEnabled" boolean NOT NULL DEFAULT true, "ipMatchTarget" character varying(100), "sysNamePattern" character varying(500), "sysDescrPattern" character varying(500), "includePingOnlyHosts" boolean NOT NULL DEFAULT false, "isExclusion" boolean NOT NULL DEFAULT false, "createdByUserId" uuid, "deletedByUserId" uuid, CONSTRAINT "PK_network_device_auto_import_rule_id" PRIMARY KEY ("_id"))`,
|
|
17
|
+
);
|
|
18
|
+
|
|
19
|
+
for (const column of ["projectId", "name", "isEnabled", "isExclusion"]) {
|
|
20
|
+
await queryRunner.query(
|
|
21
|
+
`CREATE INDEX "IDX_network_device_auto_import_rule_${column}" ON "NetworkDeviceAutoImportRule" ("${column}")`,
|
|
22
|
+
);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
await queryRunner.query(
|
|
26
|
+
`ALTER TABLE "NetworkDeviceAutoImportRule" ADD CONSTRAINT "FK_nd_auto_import_rule_projectId" FOREIGN KEY ("projectId") REFERENCES "Project"("_id") ON DELETE CASCADE ON UPDATE NO ACTION`,
|
|
27
|
+
);
|
|
28
|
+
await queryRunner.query(
|
|
29
|
+
`ALTER TABLE "NetworkDeviceAutoImportRule" ADD CONSTRAINT "FK_nd_auto_import_rule_createdByUserId" FOREIGN KEY ("createdByUserId") REFERENCES "User"("_id") ON DELETE SET NULL ON UPDATE NO ACTION`,
|
|
30
|
+
);
|
|
31
|
+
await queryRunner.query(
|
|
32
|
+
`ALTER TABLE "NetworkDeviceAutoImportRule" ADD CONSTRAINT "FK_nd_auto_import_rule_deletedByUserId" FOREIGN KEY ("deletedByUserId") REFERENCES "User"("_id") ON DELETE SET NULL ON UPDATE NO ACTION`,
|
|
33
|
+
);
|
|
34
|
+
|
|
35
|
+
await queryRunner.query(
|
|
36
|
+
`ALTER TABLE "NetworkDeviceDiscoveryScan" ADD "autoImportProcessedAt" TIMESTAMP WITH TIME ZONE`,
|
|
37
|
+
);
|
|
38
|
+
|
|
39
|
+
/*
|
|
40
|
+
* Backfill EVERY existing scan as already-processed, making the feature
|
|
41
|
+
* forward-only. One-shot scans stay "Completed" forever, so without this
|
|
42
|
+
* every scan ever run would sit unprocessed and the first rule a project
|
|
43
|
+
* creates would mass-import months-old results — the opposite of what an
|
|
44
|
+
* operator writing a rule about FUTURE discoveries intends. Old results
|
|
45
|
+
* remain reachable on purpose through the rule's explicit "Run Now".
|
|
46
|
+
*/
|
|
47
|
+
await queryRunner.query(
|
|
48
|
+
`UPDATE "NetworkDeviceDiscoveryScan" SET "autoImportProcessedAt" = now()`,
|
|
49
|
+
);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
public async down(queryRunner: QueryRunner): Promise<void> {
|
|
53
|
+
await queryRunner.query(
|
|
54
|
+
`ALTER TABLE "NetworkDeviceDiscoveryScan" DROP COLUMN "autoImportProcessedAt"`,
|
|
55
|
+
);
|
|
56
|
+
await queryRunner.query(
|
|
57
|
+
`DROP TABLE IF EXISTS "NetworkDeviceAutoImportRule"`,
|
|
58
|
+
);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { MigrationInterface, QueryRunner } from "typeorm";
|
|
2
|
+
|
|
3
|
+
/*
|
|
4
|
+
* Vendor-based auto-import conditions (issue #3378, phase 2): the probe now
|
|
5
|
+
* reports the full SNMP system group per discovered host (sysObjectId,
|
|
6
|
+
* sysLocation, sysContact, sysUpTimeSeconds ride inside the scan's existing
|
|
7
|
+
* discoveredDevices jsonb, so they need no column), and a rule can match on
|
|
8
|
+
* the sysObjectID — the vendor's registered enterprise OID.
|
|
9
|
+
*/
|
|
10
|
+
export class AddSysObjectIdPatternToAutoImportRule1789200000000
|
|
11
|
+
implements MigrationInterface
|
|
12
|
+
{
|
|
13
|
+
public name: string = "AddSysObjectIdPatternToAutoImportRule1789200000000";
|
|
14
|
+
|
|
15
|
+
public async up(queryRunner: QueryRunner): Promise<void> {
|
|
16
|
+
await queryRunner.query(
|
|
17
|
+
`ALTER TABLE "NetworkDeviceAutoImportRule" ADD "sysObjectIdPattern" character varying(500)`,
|
|
18
|
+
);
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
public async down(queryRunner: QueryRunner): Promise<void> {
|
|
22
|
+
await queryRunner.query(
|
|
23
|
+
`ALTER TABLE "NetworkDeviceAutoImportRule" DROP COLUMN "sysObjectIdPattern"`,
|
|
24
|
+
);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { MigrationInterface, QueryRunner } from "typeorm";
|
|
2
|
+
|
|
3
|
+
/*
|
|
4
|
+
* Vendor health template auto-apply (issue #3378, phase 3): a per-device
|
|
5
|
+
* opt-in that lets the inventory poll merge the matching vendor OID template
|
|
6
|
+
* into an empty Health OIDs list once the device's sysObjectID is known.
|
|
7
|
+
* Defaults false everywhere — existing devices keep the manual banner flow;
|
|
8
|
+
* the auto-import engine turns it on for the devices it creates.
|
|
9
|
+
*/
|
|
10
|
+
export class AddAutoApplyVendorHealthTemplate1789300000000
|
|
11
|
+
implements MigrationInterface
|
|
12
|
+
{
|
|
13
|
+
public name: string = "AddAutoApplyVendorHealthTemplate1789300000000";
|
|
14
|
+
|
|
15
|
+
public async up(queryRunner: QueryRunner): Promise<void> {
|
|
16
|
+
await queryRunner.query(
|
|
17
|
+
`ALTER TABLE "NetworkDevice" ADD "autoApplyVendorHealthTemplate" boolean NOT NULL DEFAULT false`,
|
|
18
|
+
);
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
public async down(queryRunner: QueryRunner): Promise<void> {
|
|
22
|
+
await queryRunner.query(
|
|
23
|
+
`ALTER TABLE "NetworkDevice" DROP COLUMN "autoApplyVendorHealthTemplate"`,
|
|
24
|
+
);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { MigrationInterface, QueryRunner } from "typeorm";
|
|
2
|
+
|
|
3
|
+
/*
|
|
4
|
+
* An optional operator-supplied name on a discovery scan (issue #3391), so the
|
|
5
|
+
* Discovery Scans list can be read by purpose — "Router Discovery — Region
|
|
6
|
+
* 1100" — instead of only by the raw address range it sweeps.
|
|
7
|
+
*
|
|
8
|
+
* Nullable with no default and no backfill: every scan that already exists
|
|
9
|
+
* stays unnamed, and every surface that renders the name falls back to the
|
|
10
|
+
* scan target exactly as it did before this column existed.
|
|
11
|
+
*/
|
|
12
|
+
export class AddNameToNetworkDeviceDiscoveryScan1789400000000
|
|
13
|
+
implements MigrationInterface
|
|
14
|
+
{
|
|
15
|
+
public name: string = "AddNameToNetworkDeviceDiscoveryScan1789400000000";
|
|
16
|
+
|
|
17
|
+
public async up(queryRunner: QueryRunner): Promise<void> {
|
|
18
|
+
await queryRunner.query(
|
|
19
|
+
`ALTER TABLE "NetworkDeviceDiscoveryScan" ADD "name" character varying(100)`,
|
|
20
|
+
);
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
public async down(queryRunner: QueryRunner): Promise<void> {
|
|
24
|
+
await queryRunner.query(
|
|
25
|
+
`ALTER TABLE "NetworkDeviceDiscoveryScan" DROP COLUMN "name"`,
|
|
26
|
+
);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { MigrationInterface, QueryRunner } from "typeorm";
|
|
2
|
+
|
|
3
|
+
/*
|
|
4
|
+
* GA4's second tier of campaign parameters, on the two tables that already
|
|
5
|
+
* carry the first five.
|
|
6
|
+
*
|
|
7
|
+
* `utm_id`, `utm_source_platform`, `utm_creative_format` and
|
|
8
|
+
* `utm_marketing_tactic` arrive on the landing URL from Google Ads auto-tagging
|
|
9
|
+
* and the GA4 URL builder. Until now the browser captured them nowhere and the
|
|
10
|
+
* signup door dropped them, so a campaign that distinguished its creatives
|
|
11
|
+
* only by `utm_creative_format` was reportable as one undifferentiated
|
|
12
|
+
* campaign.
|
|
13
|
+
*
|
|
14
|
+
* Nullable with no default, matching utmSource..utmContent beside them: an
|
|
15
|
+
* existing row has no campaign to backfill, and NULL says "not known" rather
|
|
16
|
+
* than claiming an empty campaign.
|
|
17
|
+
*/
|
|
18
|
+
export class AddCampaignUtmFields1789500000000 implements MigrationInterface {
|
|
19
|
+
public name: string = "AddCampaignUtmFields1789500000000";
|
|
20
|
+
|
|
21
|
+
private static readonly columns: Array<string> = [
|
|
22
|
+
"utmId",
|
|
23
|
+
"utmSourcePlatform",
|
|
24
|
+
"utmCreativeFormat",
|
|
25
|
+
"utmMarketingTactic",
|
|
26
|
+
];
|
|
27
|
+
|
|
28
|
+
private static readonly tables: Array<string> = ["User", "Project"];
|
|
29
|
+
|
|
30
|
+
public async up(queryRunner: QueryRunner): Promise<void> {
|
|
31
|
+
for (const table of AddCampaignUtmFields1789500000000.tables) {
|
|
32
|
+
for (const column of AddCampaignUtmFields1789500000000.columns) {
|
|
33
|
+
await queryRunner.query(
|
|
34
|
+
`ALTER TABLE "${table}" ADD "${column}" character varying(500)`,
|
|
35
|
+
);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
public async down(queryRunner: QueryRunner): Promise<void> {
|
|
41
|
+
for (const table of AddCampaignUtmFields1789500000000.tables) {
|
|
42
|
+
for (const column of AddCampaignUtmFields1789500000000.columns) {
|
|
43
|
+
await queryRunner.query(
|
|
44
|
+
`ALTER TABLE "${table}" DROP COLUMN "${column}"`,
|
|
45
|
+
);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { MigrationInterface, QueryRunner } from "typeorm";
|
|
2
|
+
|
|
3
|
+
/*
|
|
4
|
+
* Detection rules gain correlation semantics (issue #3398):
|
|
5
|
+
* distinctCountField switches what a rule counts — unique values of a
|
|
6
|
+
* field (distinct usernames, distinct source IPs) instead of raw matching
|
|
7
|
+
* events — and matchCountThreshold holds a rule back until a group
|
|
8
|
+
* reaches N in one evaluation window. Threshold defaults to 1 so every
|
|
9
|
+
* existing rule keeps its fire-on-any-match behavior.
|
|
10
|
+
*/
|
|
11
|
+
export class AddDetectionRuleDistinctCountColumns1789512000000
|
|
12
|
+
implements MigrationInterface
|
|
13
|
+
{
|
|
14
|
+
public name: string = "AddDetectionRuleDistinctCountColumns1789512000000";
|
|
15
|
+
|
|
16
|
+
public async up(queryRunner: QueryRunner): Promise<void> {
|
|
17
|
+
await queryRunner.query(
|
|
18
|
+
`ALTER TABLE "DetectionRule" ADD "distinctCountField" character varying(100)`,
|
|
19
|
+
);
|
|
20
|
+
await queryRunner.query(
|
|
21
|
+
`ALTER TABLE "DetectionRule" ADD "matchCountThreshold" integer NOT NULL DEFAULT '1'`,
|
|
22
|
+
);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
public async down(queryRunner: QueryRunner): Promise<void> {
|
|
26
|
+
await queryRunner.query(
|
|
27
|
+
`ALTER TABLE "DetectionRule" DROP COLUMN "matchCountThreshold"`,
|
|
28
|
+
);
|
|
29
|
+
await queryRunner.query(
|
|
30
|
+
`ALTER TABLE "DetectionRule" DROP COLUMN "distinctCountField"`,
|
|
31
|
+
);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
@@ -543,7 +543,13 @@ import { AddDetectionRuleIncidentColumns1788600000000 } from "./1788600000000-Ad
|
|
|
543
543
|
import { RemoveMarketingConversionUploadState1788700000000 } from "./1788700000000-RemoveMarketingConversionUploadState";
|
|
544
544
|
import { DropMarketingConversionAddEnterpriseLicenseEmail1788800000000 } from "./1788800000000-DropMarketingConversionAddEnterpriseLicenseEmail";
|
|
545
545
|
import { AddUserSlackAndMicrosoftTeams1789000000000 } from "./1789000000000-AddUserSlackAndMicrosoftTeams";
|
|
546
|
+
import { AddNetworkDeviceAutoImportRule1789100000000 } from "./1789100000000-AddNetworkDeviceAutoImportRule";
|
|
547
|
+
import { AddSysObjectIdPatternToAutoImportRule1789200000000 } from "./1789200000000-AddSysObjectIdPatternToAutoImportRule";
|
|
548
|
+
import { AddAutoApplyVendorHealthTemplate1789300000000 } from "./1789300000000-AddAutoApplyVendorHealthTemplate";
|
|
549
|
+
import { AddCampaignUtmFields1789500000000 } from "./1789500000000-AddCampaignUtmFields";
|
|
546
550
|
import { AddUserTwoFactorBackupCode1789100000000 } from "./1789100000000-AddUserTwoFactorBackupCode";
|
|
551
|
+
import { AddNameToNetworkDeviceDiscoveryScan1789400000000 } from "./1789400000000-AddNameToNetworkDeviceDiscoveryScan";
|
|
552
|
+
import { AddDetectionRuleDistinctCountColumns1789512000000 } from "./1789512000000-AddDetectionRuleDistinctCountColumns";
|
|
547
553
|
import { MigrationName1787142779538 } from "./1787142779538-MigrationName";
|
|
548
554
|
import { MigrationName1787156982416 } from "./1787156982416-MigrationName";
|
|
549
555
|
|
|
@@ -1095,5 +1101,11 @@ export default [
|
|
|
1095
1101
|
RemoveMarketingConversionUploadState1788700000000,
|
|
1096
1102
|
DropMarketingConversionAddEnterpriseLicenseEmail1788800000000,
|
|
1097
1103
|
AddUserSlackAndMicrosoftTeams1789000000000,
|
|
1104
|
+
AddNetworkDeviceAutoImportRule1789100000000,
|
|
1105
|
+
AddSysObjectIdPatternToAutoImportRule1789200000000,
|
|
1106
|
+
AddAutoApplyVendorHealthTemplate1789300000000,
|
|
1098
1107
|
AddUserTwoFactorBackupCode1789100000000,
|
|
1108
|
+
AddNameToNetworkDeviceDiscoveryScan1789400000000,
|
|
1109
|
+
AddCampaignUtmFields1789500000000,
|
|
1110
|
+
AddDetectionRuleDistinctCountColumns1789512000000,
|
|
1099
1111
|
];
|