@oneuptime/common 11.6.1 → 11.7.0
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/AnalyticsModels/Index.ts +4 -0
- package/Models/AnalyticsModels/KubernetesCostAllocation.ts +842 -0
- package/Models/AnalyticsModels/NetworkFlow.ts +54 -0
- package/Models/AnalyticsModels/SloHistory.ts +243 -0
- package/Models/DatabaseModels/Index.ts +20 -0
- package/Models/DatabaseModels/NetworkDevice.ts +453 -6
- package/Models/DatabaseModels/NetworkDeviceDiscoveryScan.ts +7 -6
- package/Models/DatabaseModels/NetworkEndpoint.ts +753 -0
- package/Models/DatabaseModels/NetworkSite.ts +1155 -0
- package/Models/DatabaseModels/NetworkSiteAssignmentRule.ts +517 -0
- package/Models/DatabaseModels/NetworkSiteLink.ts +611 -0
- package/Models/DatabaseModels/NetworkSiteStatusTimeline.ts +520 -0
- package/Models/DatabaseModels/NetworkSiteType.ts +499 -0
- package/Models/DatabaseModels/ServiceLevelObjective.ts +1115 -0
- package/Models/DatabaseModels/ServiceLevelObjectiveBurnRateRule.ts +762 -0
- package/Models/DatabaseModels/ServiceLevelObjectiveOwnerTeam.ts +444 -0
- package/Models/DatabaseModels/ServiceLevelObjectiveOwnerUser.ts +443 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1784757142154-AddNetworkSiteHierarchyAndEndpoints.ts +359 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1784897317860-AddNetworkSiteAlerting.ts +48 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1784970388777-AddNetworkDevicePollingColumns.ts +65 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1784986826214-AddNetworkSiteTypeTable.ts +88 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1784987015619-AddServiceLevelObjective.ts +391 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1785066759532-MigrationName.ts +30 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +12 -0
- package/Server/Services/AnalyticsDatabaseService.ts +25 -9
- package/Server/Services/Index.ts +24 -0
- package/Server/Services/KubernetesCostAllocationService.ts +14 -0
- package/Server/Services/MetricService.ts +21 -2
- package/Server/Services/MonitorService.ts +22 -0
- package/Server/Services/NetworkDeviceService.ts +438 -2
- package/Server/Services/NetworkEndpointService.ts +414 -0
- package/Server/Services/NetworkSiteAssignmentRuleService.ts +98 -0
- package/Server/Services/NetworkSiteLinkService.ts +10 -0
- package/Server/Services/NetworkSiteService.ts +1254 -0
- package/Server/Services/NetworkSiteStatusTimelineService.ts +10 -0
- package/Server/Services/NetworkSiteTypeService.ts +10 -0
- package/Server/Services/ProjectService.ts +122 -2
- package/Server/Services/ServiceLevelObjectiveBurnRateRuleService.ts +457 -0
- package/Server/Services/ServiceLevelObjectiveOwnerTeamService.ts +10 -0
- package/Server/Services/ServiceLevelObjectiveOwnerUserService.ts +10 -0
- package/Server/Services/ServiceLevelObjectiveService.ts +685 -0
- package/Server/Services/SloHistoryService.ts +101 -0
- package/Server/Services/UserNotificationSettingService.ts +37 -0
- package/Server/Types/AnalyticsDatabase/AggregateBy.ts +9 -0
- package/Server/Types/Database/Permissions/OwnerTableRegistry.ts +15 -0
- package/Server/Utils/AnalyticsDatabase/Statement.ts +39 -3
- package/Server/Utils/AnalyticsDatabase/StatementGenerator.ts +87 -48
- package/Server/Utils/Memory.ts +9 -1
- package/Server/Utils/Monitor/Criteria/SnmpMonitorCriteria.ts +190 -12
- package/Server/Utils/Monitor/Data/OuiVendors.json +6920 -0
- package/Server/Utils/Monitor/DnsResolutionCache.ts +129 -0
- package/Server/Utils/Monitor/MonitorResource.ts +4 -30
- package/Server/Utils/Monitor/NetworkDeviceHydrationUtil.ts +214 -39
- package/Server/Utils/Monitor/NetworkDeviceMetricUtil.ts +343 -0
- package/Server/Utils/Monitor/NetworkDeviceWalkUtil.ts +251 -0
- package/Server/Utils/Monitor/NetworkInventoryUtil.ts +176 -142
- package/Server/Utils/Monitor/OuiLookupUtil.ts +49 -0
- package/Server/Utils/Monitor/SnmpInterfaceRateUtil.ts +17 -13
- package/Server/Utils/WhatsAppTemplateUtil.ts +7 -3
- package/Tests/Models/AnalyticsModels/KubernetesCostAllocation.test.ts +135 -0
- package/Tests/Models/NetworkSiteHierarchy.test.ts +134 -0
- package/Tests/Server/Services/AnalyticsDatabaseService.test.ts +239 -0
- package/Tests/Server/Services/KubernetesCostAllocationAggregate.test.ts +338 -0
- package/Tests/Server/Services/MetricServiceAggregate.test.ts +142 -0
- package/Tests/Server/Services/NetworkDeviceSiteAssignment.test.ts +484 -0
- package/Tests/Server/Services/NetworkEndpointServiceUpsert.test.ts +686 -0
- package/Tests/Server/Services/NetworkSiteAssignmentRuleService.test.ts +185 -0
- package/Tests/Server/Services/NetworkSiteService.test.ts +1354 -0
- package/Tests/Server/Services/ServiceLevelObjectiveBurnRateRuleService.test.ts +1313 -0
- package/Tests/Server/Services/ServiceLevelObjectiveService.test.ts +1988 -0
- package/Tests/Server/Utils/AnalyticsDatabase/Statement.test.ts +22 -0
- package/Tests/Server/Utils/AnalyticsDatabase/StatementGenerator.test.ts +404 -0
- package/Tests/Server/Utils/Encryption.test.ts +70 -0
- package/Tests/Server/Utils/FileAttachmentMarkdownUtil.test.ts +225 -0
- package/Tests/Server/Utils/JsonWebToken.test.ts +175 -0
- package/Tests/Server/Utils/LocalFile.test.ts +258 -0
- package/Tests/Server/Utils/Memory.test.ts +213 -0
- package/Tests/Server/Utils/Monitor/Criteria/LogMonitorCriteria.test.ts +30 -0
- package/Tests/Server/Utils/Monitor/Criteria/SnmpMonitorCriteria.test.ts +385 -0
- package/Tests/Server/Utils/Monitor/DnsResolutionCache.test.ts +194 -0
- package/Tests/Server/Utils/Monitor/NetworkDeviceHydrationUtil.test.ts +155 -0
- package/Tests/Server/Utils/Monitor/NetworkDeviceWalkUtil.test.ts +600 -0
- package/Tests/Server/Utils/Monitor/NetworkInventoryUtil.test.ts +151 -124
- package/Tests/Server/Utils/Monitor/SnmpInterfaceRateUtil.test.ts +496 -0
- package/Tests/Server/Utils/MonitorCriteriaDataExtractor.test.ts +175 -0
- package/Tests/Server/Utils/MonitorCriteriaMessageFormatter.test.ts +282 -0
- package/Tests/Server/Utils/OuiLookupUtil.test.ts +59 -0
- package/Tests/Server/Utils/SeriesResourceLabels.test.ts +117 -0
- package/Tests/Server/Utils/StackTraceParser.test.ts +370 -0
- package/Tests/Server/Utils/Stream.test.ts +87 -0
- package/Tests/Server/Utils/ValidateGlobalProviderProjectTeams.test.ts +221 -0
- package/Tests/Server/Utils/WhatsAppTemplateUtil.test.ts +199 -0
- package/Tests/Types/Database/CompareOperatorWireSerialization.test.ts +33 -0
- package/Tests/Types/Email.test.ts +198 -0
- package/Tests/Types/Kubernetes/KubernetesObjectParser.test.ts +177 -0
- package/Tests/Types/Log/LogQueryToFilter.test.ts +111 -0
- package/Tests/Types/Monitor/MonitorCriteria.test.ts +155 -0
- package/Tests/Types/Monitor/MonitorCriteriaInstance.test.ts +465 -0
- package/Tests/Types/Monitor/MonitorStep.test.ts +183 -0
- package/Tests/Types/Monitor/MonitorStepNetworkDeviceMonitor.test.ts +141 -1
- package/Tests/Types/Monitor/MonitorSteps.test.ts +183 -0
- package/Tests/Types/Monitor/MonitorType.test.ts +59 -1
- package/Tests/Types/Monitor/NetworkDeviceAlertPack.test.ts +97 -0
- package/Tests/Types/Monitor/SnmpEndpointDiscovery.test.ts +151 -0
- package/Tests/Types/Monitor/SnmpVendorTemplate.test.ts +110 -6
- package/Tests/Types/NetworkSite/DefaultNetworkSiteType.test.ts +129 -0
- package/Tests/Types/SerializableObjectDictionary.test.ts +166 -0
- package/Tests/Types/Time/RangeStartAndEndDateTime.test.ts +98 -0
- package/Tests/Types/WebsiteRequest.test.ts +230 -0
- package/Tests/UI/Components/EntityFilterRoundTrip.test.tsx +103 -0
- package/Tests/UI/Components/ModelTable/BaseModelTableUrlState.test.tsx +612 -0
- package/Tests/UI/Components/ModelTable/FilterDataToQuery.test.ts +275 -0
- package/Tests/UI/Utils/LogExport.test.ts +159 -0
- package/Tests/UI/Utils/Navigation.test.ts +183 -0
- package/Tests/UI/Utils/TableFilterUrlState.test.ts +539 -0
- package/Tests/UI/Utils/TableViewUrlState.test.ts +272 -0
- package/Tests/Utils/Base64.test.ts +51 -0
- package/Tests/Utils/Boolean.test.ts +76 -0
- package/Tests/Utils/Crypto.test.ts +48 -0
- package/Tests/Utils/Dashboard/DashboardSloComponent.test.ts +259 -0
- package/Tests/Utils/Dashboard/ModelQueryVariableInterpolation.test.ts +162 -0
- package/Tests/Utils/Enum.test.ts +54 -0
- package/Tests/Utils/IpCanonicalUtil.test.ts +85 -0
- package/Tests/Utils/Memory.test.ts +44 -0
- package/Tests/Utils/Metrics/MetricSeriesFingerprint.test.ts +160 -0
- package/Tests/Utils/Monitor/EndpointAttachmentUtil.test.ts +836 -0
- package/Tests/Utils/Monitor/MonitorMetricType.test.ts +218 -0
- package/Tests/Utils/Monitor/NetworkTopologyUtil.test.ts +447 -0
- package/Tests/Utils/NetworkSite/CidrMatchUtil.test.ts +440 -0
- package/Tests/Utils/NetworkSite/MaterializedPathUtil.test.ts +205 -0
- package/Tests/Utils/NetworkSite/SiteStatusRollupUtil.test.ts +221 -0
- package/Tests/Utils/NetworkSite/SiteUptimeUtil.test.ts +283 -0
- package/Tests/Utils/ObjectUtil.test.ts +30 -0
- package/Tests/Utils/Slo/SloBurnRateRuleState.test.ts +124 -0
- package/Tests/Utils/Slo/SloDuration.test.ts +148 -0
- package/Tests/Utils/Slo/SloHealth.test.ts +334 -0
- package/Tests/Utils/Slo/SloStatusColor.test.ts +89 -0
- package/Tests/Utils/Slo/SloUtil.test.ts +1980 -0
- package/Tests/Utils/Slo/SloWidgetFormat.test.ts +605 -0
- package/Tests/Utils/TechStack.test.ts +50 -0
- package/Tests/Utils/Traces/CriticalPath.test.ts +178 -0
- package/Types/AnalyticsDatabase/AnalyticsTableName.ts +10 -0
- package/Types/BaseDatabase/EqualTo.ts +9 -1
- package/Types/BaseDatabase/EqualToOrNull.ts +9 -1
- package/Types/BaseDatabase/NotEqual.ts +9 -1
- package/Types/Dashboard/DashboardComponentType.ts +1 -0
- package/Types/Dashboard/DashboardComponents/ComponentArgument.ts +1 -0
- package/Types/Dashboard/DashboardComponents/DashboardSloComponent.ts +42 -0
- package/Types/Dashboard/DashboardTemplates.ts +214 -0
- package/Types/Email/EmailTemplateType.ts +2 -0
- package/Types/Kubernetes/KubernetesCostIngest.ts +79 -0
- package/Types/Monitor/CriteriaFilter.ts +9 -0
- package/Types/Monitor/MonitorStep.ts +5 -8
- package/Types/Monitor/MonitorStepNetworkDeviceMonitor.ts +27 -5
- package/Types/Monitor/MonitorType.ts +15 -5
- package/Types/Monitor/SnmpMonitor/ArpEntry.ts +14 -0
- package/Types/Monitor/SnmpMonitor/FdbEntry.ts +18 -0
- package/Types/Monitor/SnmpMonitor/NetworkDeviceAlertPack.ts +10 -3
- package/Types/Monitor/SnmpMonitor/NetworkTopology.ts +31 -5
- package/Types/Monitor/SnmpMonitor/SnmpMonitorResponse.ts +12 -0
- package/Types/Monitor/SnmpMonitor/SnmpVendorTemplate.ts +231 -3
- package/Types/NetworkSite/DefaultNetworkSiteType.ts +20 -0
- package/Types/NotificationSetting/NotificationSettingEventType.ts +4 -0
- package/Types/Permission.ts +449 -0
- package/Types/ServiceLevelObjective/SliType.ts +6 -0
- package/Types/ServiceLevelObjective/SloMultiMonitorMode.ts +6 -0
- package/Types/ServiceLevelObjective/SloStatus.ts +9 -0
- package/Types/ServiceLevelObjective/SloWindowType.ts +6 -0
- package/Types/Telemetry/ServiceType.ts +1 -0
- package/UI/Components/Filters/EntityFilter.tsx +16 -0
- package/UI/Components/Filters/FilterViewer.tsx +22 -5
- package/UI/Components/List/List.tsx +8 -0
- package/UI/Components/ModelTable/BaseModelTable.tsx +309 -106
- package/UI/Components/ModelTable/FilterDataToQuery.ts +172 -0
- package/UI/Components/Navbar/NavBar.tsx +16 -2
- package/UI/Components/Navbar/NavBarMenuModal.tsx +3 -3
- package/UI/Utils/Navigation.ts +10 -0
- package/UI/Utils/TableFilterUrlState.ts +204 -17
- package/UI/Utils/TableViewUrlState.ts +165 -0
- package/Utils/Dashboard/Components/DashboardSloComponent.ts +114 -0
- package/Utils/Dashboard/Components/Index.ts +7 -0
- package/Utils/IpCanonicalUtil.ts +134 -0
- package/Utils/Monitor/EndpointAttachmentUtil.ts +508 -0
- package/Utils/Monitor/NetworkTopologyUtil.ts +157 -5
- package/Utils/NetworkSite/CidrMatchUtil.ts +296 -0
- package/Utils/NetworkSite/MaterializedPathUtil.ts +115 -0
- package/Utils/NetworkSite/SiteStatusRollupUtil.ts +97 -0
- package/Utils/NetworkSite/SiteUptimeUtil.ts +111 -0
- package/Utils/Slo/SloBurnRateRuleState.ts +91 -0
- package/Utils/Slo/SloDuration.ts +165 -0
- package/Utils/Slo/SloEvaluation.ts +22 -0
- package/Utils/Slo/SloHealth.ts +302 -0
- package/Utils/Slo/SloStatusColor.ts +54 -0
- package/Utils/Slo/SloUtil.ts +637 -0
- package/Utils/Slo/SloWidgetFormat.ts +383 -0
- package/build/dist/Models/AnalyticsModels/Index.js +4 -0
- package/build/dist/Models/AnalyticsModels/Index.js.map +1 -1
- package/build/dist/Models/AnalyticsModels/KubernetesCostAllocation.js +713 -0
- package/build/dist/Models/AnalyticsModels/KubernetesCostAllocation.js.map +1 -0
- package/build/dist/Models/AnalyticsModels/NetworkFlow.js +44 -0
- package/build/dist/Models/AnalyticsModels/NetworkFlow.js.map +1 -1
- package/build/dist/Models/AnalyticsModels/SloHistory.js +218 -0
- package/build/dist/Models/AnalyticsModels/SloHistory.js.map +1 -0
- package/build/dist/Models/DatabaseModels/Index.js +20 -0
- package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
- package/build/dist/Models/DatabaseModels/NetworkDevice.js +458 -6
- package/build/dist/Models/DatabaseModels/NetworkDevice.js.map +1 -1
- package/build/dist/Models/DatabaseModels/NetworkDeviceDiscoveryScan.js +0 -6
- package/build/dist/Models/DatabaseModels/NetworkDeviceDiscoveryScan.js.map +1 -1
- package/build/dist/Models/DatabaseModels/NetworkEndpoint.js +779 -0
- package/build/dist/Models/DatabaseModels/NetworkEndpoint.js.map +1 -0
- package/build/dist/Models/DatabaseModels/NetworkSite.js +1180 -0
- package/build/dist/Models/DatabaseModels/NetworkSite.js.map +1 -0
- package/build/dist/Models/DatabaseModels/NetworkSiteAssignmentRule.js +534 -0
- package/build/dist/Models/DatabaseModels/NetworkSiteAssignmentRule.js.map +1 -0
- package/build/dist/Models/DatabaseModels/NetworkSiteLink.js +629 -0
- package/build/dist/Models/DatabaseModels/NetworkSiteLink.js.map +1 -0
- package/build/dist/Models/DatabaseModels/NetworkSiteStatusTimeline.js +538 -0
- package/build/dist/Models/DatabaseModels/NetworkSiteStatusTimeline.js.map +1 -0
- package/build/dist/Models/DatabaseModels/NetworkSiteType.js +522 -0
- package/build/dist/Models/DatabaseModels/NetworkSiteType.js.map +1 -0
- package/build/dist/Models/DatabaseModels/ServiceLevelObjective.js +1134 -0
- package/build/dist/Models/DatabaseModels/ServiceLevelObjective.js.map +1 -0
- package/build/dist/Models/DatabaseModels/ServiceLevelObjectiveBurnRateRule.js +769 -0
- package/build/dist/Models/DatabaseModels/ServiceLevelObjectiveBurnRateRule.js.map +1 -0
- package/build/dist/Models/DatabaseModels/ServiceLevelObjectiveOwnerTeam.js +460 -0
- package/build/dist/Models/DatabaseModels/ServiceLevelObjectiveOwnerTeam.js.map +1 -0
- package/build/dist/Models/DatabaseModels/ServiceLevelObjectiveOwnerUser.js +459 -0
- package/build/dist/Models/DatabaseModels/ServiceLevelObjectiveOwnerUser.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784757142154-AddNetworkSiteHierarchyAndEndpoints.js +130 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784757142154-AddNetworkSiteHierarchyAndEndpoints.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784897317860-AddNetworkSiteAlerting.js +31 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784897317860-AddNetworkSiteAlerting.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784970388777-AddNetworkDevicePollingColumns.js +36 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784970388777-AddNetworkDevicePollingColumns.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784986826214-AddNetworkSiteTypeTable.js +49 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784986826214-AddNetworkSiteTypeTable.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784987015619-AddServiceLevelObjective.js +140 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784987015619-AddServiceLevelObjective.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785066759532-MigrationName.js +21 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785066759532-MigrationName.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/Services/AnalyticsDatabaseService.js +23 -6
- package/build/dist/Server/Services/AnalyticsDatabaseService.js.map +1 -1
- package/build/dist/Server/Services/Index.js +24 -0
- package/build/dist/Server/Services/Index.js.map +1 -1
- package/build/dist/Server/Services/KubernetesCostAllocationService.js +12 -0
- package/build/dist/Server/Services/KubernetesCostAllocationService.js.map +1 -0
- package/build/dist/Server/Services/MetricService.js +21 -3
- package/build/dist/Server/Services/MetricService.js.map +1 -1
- package/build/dist/Server/Services/MonitorService.js +19 -0
- package/build/dist/Server/Services/MonitorService.js.map +1 -1
- package/build/dist/Server/Services/NetworkDeviceService.js +351 -1
- package/build/dist/Server/Services/NetworkDeviceService.js.map +1 -1
- package/build/dist/Server/Services/NetworkEndpointService.js +319 -0
- package/build/dist/Server/Services/NetworkEndpointService.js.map +1 -0
- package/build/dist/Server/Services/NetworkSiteAssignmentRuleService.js +90 -0
- package/build/dist/Server/Services/NetworkSiteAssignmentRuleService.js.map +1 -0
- package/build/dist/Server/Services/NetworkSiteLinkService.js +9 -0
- package/build/dist/Server/Services/NetworkSiteLinkService.js.map +1 -0
- package/build/dist/Server/Services/NetworkSiteService.js +1038 -0
- package/build/dist/Server/Services/NetworkSiteService.js.map +1 -0
- package/build/dist/Server/Services/NetworkSiteStatusTimelineService.js +9 -0
- package/build/dist/Server/Services/NetworkSiteStatusTimelineService.js.map +1 -0
- package/build/dist/Server/Services/NetworkSiteTypeService.js +9 -0
- package/build/dist/Server/Services/NetworkSiteTypeService.js.map +1 -0
- package/build/dist/Server/Services/ProjectService.js +98 -2
- package/build/dist/Server/Services/ProjectService.js.map +1 -1
- package/build/dist/Server/Services/ServiceLevelObjectiveBurnRateRuleService.js +358 -0
- package/build/dist/Server/Services/ServiceLevelObjectiveBurnRateRuleService.js.map +1 -0
- package/build/dist/Server/Services/ServiceLevelObjectiveOwnerTeamService.js +9 -0
- package/build/dist/Server/Services/ServiceLevelObjectiveOwnerTeamService.js.map +1 -0
- package/build/dist/Server/Services/ServiceLevelObjectiveOwnerUserService.js +9 -0
- package/build/dist/Server/Services/ServiceLevelObjectiveOwnerUserService.js.map +1 -0
- package/build/dist/Server/Services/ServiceLevelObjectiveService.js +588 -0
- package/build/dist/Server/Services/ServiceLevelObjectiveService.js.map +1 -0
- package/build/dist/Server/Services/SloHistoryService.js +77 -0
- package/build/dist/Server/Services/SloHistoryService.js.map +1 -0
- package/build/dist/Server/Services/UserNotificationSettingService.js +20 -0
- package/build/dist/Server/Services/UserNotificationSettingService.js.map +1 -1
- package/build/dist/Server/Types/AnalyticsDatabase/AggregateBy.js +9 -0
- package/build/dist/Server/Types/AnalyticsDatabase/AggregateBy.js.map +1 -1
- package/build/dist/Server/Types/Database/Permissions/OwnerTableRegistry.js +15 -0
- package/build/dist/Server/Types/Database/Permissions/OwnerTableRegistry.js.map +1 -1
- package/build/dist/Server/Utils/AnalyticsDatabase/Statement.js +31 -0
- package/build/dist/Server/Utils/AnalyticsDatabase/Statement.js.map +1 -1
- package/build/dist/Server/Utils/AnalyticsDatabase/StatementGenerator.js +76 -48
- package/build/dist/Server/Utils/AnalyticsDatabase/StatementGenerator.js.map +1 -1
- package/build/dist/Server/Utils/Memory.js +9 -1
- package/build/dist/Server/Utils/Memory.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/Criteria/SnmpMonitorCriteria.js +132 -10
- package/build/dist/Server/Utils/Monitor/Criteria/SnmpMonitorCriteria.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/Data/OuiVendors.json +6920 -0
- package/build/dist/Server/Utils/Monitor/DnsResolutionCache.js +77 -0
- package/build/dist/Server/Utils/Monitor/DnsResolutionCache.js.map +1 -0
- package/build/dist/Server/Utils/Monitor/MonitorResource.js +21 -41
- package/build/dist/Server/Utils/Monitor/MonitorResource.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/NetworkDeviceHydrationUtil.js +152 -40
- package/build/dist/Server/Utils/Monitor/NetworkDeviceHydrationUtil.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/NetworkDeviceMetricUtil.js +262 -0
- package/build/dist/Server/Utils/Monitor/NetworkDeviceMetricUtil.js.map +1 -0
- package/build/dist/Server/Utils/Monitor/NetworkDeviceWalkUtil.js +201 -0
- package/build/dist/Server/Utils/Monitor/NetworkDeviceWalkUtil.js.map +1 -0
- package/build/dist/Server/Utils/Monitor/NetworkInventoryUtil.js +152 -120
- package/build/dist/Server/Utils/Monitor/NetworkInventoryUtil.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/OuiLookupUtil.js +44 -0
- package/build/dist/Server/Utils/Monitor/OuiLookupUtil.js.map +1 -0
- package/build/dist/Server/Utils/Monitor/SnmpInterfaceRateUtil.js +10 -10
- package/build/dist/Server/Utils/Monitor/SnmpInterfaceRateUtil.js.map +1 -1
- package/build/dist/Server/Utils/WhatsAppTemplateUtil.js +5 -0
- package/build/dist/Server/Utils/WhatsAppTemplateUtil.js.map +1 -1
- package/build/dist/Types/AnalyticsDatabase/AnalyticsTableName.js +10 -0
- package/build/dist/Types/AnalyticsDatabase/AnalyticsTableName.js.map +1 -1
- package/build/dist/Types/BaseDatabase/EqualTo.js +9 -1
- package/build/dist/Types/BaseDatabase/EqualTo.js.map +1 -1
- package/build/dist/Types/BaseDatabase/EqualToOrNull.js +9 -1
- package/build/dist/Types/BaseDatabase/EqualToOrNull.js.map +1 -1
- package/build/dist/Types/BaseDatabase/NotEqual.js +9 -1
- package/build/dist/Types/BaseDatabase/NotEqual.js.map +1 -1
- package/build/dist/Types/Dashboard/DashboardComponentType.js +1 -0
- package/build/dist/Types/Dashboard/DashboardComponentType.js.map +1 -1
- package/build/dist/Types/Dashboard/DashboardComponents/ComponentArgument.js +1 -0
- package/build/dist/Types/Dashboard/DashboardComponents/ComponentArgument.js.map +1 -1
- package/build/dist/Types/Dashboard/DashboardComponents/DashboardSloComponent.js +23 -0
- package/build/dist/Types/Dashboard/DashboardComponents/DashboardSloComponent.js.map +1 -0
- package/build/dist/Types/Dashboard/DashboardTemplates.js +205 -0
- package/build/dist/Types/Dashboard/DashboardTemplates.js.map +1 -1
- package/build/dist/Types/Email/EmailTemplateType.js +1 -0
- package/build/dist/Types/Email/EmailTemplateType.js.map +1 -1
- package/build/dist/Types/Kubernetes/KubernetesCostIngest.js +21 -0
- package/build/dist/Types/Kubernetes/KubernetesCostIngest.js.map +1 -0
- package/build/dist/Types/Monitor/CriteriaFilter.js +1 -0
- package/build/dist/Types/Monitor/CriteriaFilter.js.map +1 -1
- package/build/dist/Types/Monitor/MonitorStep.js +5 -5
- package/build/dist/Types/Monitor/MonitorStep.js.map +1 -1
- package/build/dist/Types/Monitor/MonitorStepNetworkDeviceMonitor.js +8 -0
- package/build/dist/Types/Monitor/MonitorStepNetworkDeviceMonitor.js.map +1 -1
- package/build/dist/Types/Monitor/MonitorType.js +15 -5
- package/build/dist/Types/Monitor/MonitorType.js.map +1 -1
- package/build/dist/Types/Monitor/SnmpMonitor/ArpEntry.js +2 -0
- package/build/dist/Types/Monitor/SnmpMonitor/ArpEntry.js.map +1 -0
- package/build/dist/Types/Monitor/SnmpMonitor/FdbEntry.js +2 -0
- package/build/dist/Types/Monitor/SnmpMonitor/FdbEntry.js.map +1 -0
- package/build/dist/Types/Monitor/SnmpMonitor/NetworkDeviceAlertPack.js +9 -3
- package/build/dist/Types/Monitor/SnmpMonitor/NetworkDeviceAlertPack.js.map +1 -1
- package/build/dist/Types/Monitor/SnmpMonitor/SnmpVendorTemplate.js +217 -3
- package/build/dist/Types/Monitor/SnmpMonitor/SnmpVendorTemplate.js.map +1 -1
- package/build/dist/Types/NetworkSite/DefaultNetworkSiteType.js +21 -0
- package/build/dist/Types/NetworkSite/DefaultNetworkSiteType.js.map +1 -0
- package/build/dist/Types/NotificationSetting/NotificationSettingEventType.js +3 -0
- package/build/dist/Types/NotificationSetting/NotificationSettingEventType.js.map +1 -1
- package/build/dist/Types/Permission.js +409 -0
- package/build/dist/Types/Permission.js.map +1 -1
- package/build/dist/Types/ServiceLevelObjective/SliType.js +7 -0
- package/build/dist/Types/ServiceLevelObjective/SliType.js.map +1 -0
- package/build/dist/Types/ServiceLevelObjective/SloMultiMonitorMode.js +7 -0
- package/build/dist/Types/ServiceLevelObjective/SloMultiMonitorMode.js.map +1 -0
- package/build/dist/Types/ServiceLevelObjective/SloStatus.js +10 -0
- package/build/dist/Types/ServiceLevelObjective/SloStatus.js.map +1 -0
- package/build/dist/Types/ServiceLevelObjective/SloWindowType.js +7 -0
- package/build/dist/Types/ServiceLevelObjective/SloWindowType.js.map +1 -0
- package/build/dist/Types/Telemetry/ServiceType.js +1 -0
- package/build/dist/Types/Telemetry/ServiceType.js.map +1 -1
- package/build/dist/UI/Components/Filters/EntityFilter.js +15 -0
- package/build/dist/UI/Components/Filters/EntityFilter.js.map +1 -1
- package/build/dist/UI/Components/Filters/FilterViewer.js +19 -4
- package/build/dist/UI/Components/Filters/FilterViewer.js.map +1 -1
- package/build/dist/UI/Components/List/List.js +1 -1
- package/build/dist/UI/Components/List/List.js.map +1 -1
- package/build/dist/UI/Components/ModelTable/BaseModelTable.js +235 -89
- package/build/dist/UI/Components/ModelTable/BaseModelTable.js.map +1 -1
- package/build/dist/UI/Components/ModelTable/FilterDataToQuery.js +96 -0
- package/build/dist/UI/Components/ModelTable/FilterDataToQuery.js.map +1 -0
- package/build/dist/UI/Components/Navbar/NavBar.js +14 -2
- package/build/dist/UI/Components/Navbar/NavBar.js.map +1 -1
- package/build/dist/UI/Components/Navbar/NavBarMenuModal.js +3 -2
- package/build/dist/UI/Components/Navbar/NavBarMenuModal.js.map +1 -1
- package/build/dist/UI/Utils/Navigation.js +9 -0
- package/build/dist/UI/Utils/Navigation.js.map +1 -1
- package/build/dist/UI/Utils/TableFilterUrlState.js +159 -15
- package/build/dist/UI/Utils/TableFilterUrlState.js.map +1 -1
- package/build/dist/UI/Utils/TableViewUrlState.js +103 -0
- package/build/dist/UI/Utils/TableViewUrlState.js.map +1 -0
- package/build/dist/Utils/Dashboard/Components/DashboardSloComponent.js +93 -0
- package/build/dist/Utils/Dashboard/Components/DashboardSloComponent.js.map +1 -0
- package/build/dist/Utils/Dashboard/Components/Index.js +4 -0
- package/build/dist/Utils/Dashboard/Components/Index.js.map +1 -1
- package/build/dist/Utils/IpCanonicalUtil.js +110 -0
- package/build/dist/Utils/IpCanonicalUtil.js.map +1 -0
- package/build/dist/Utils/Monitor/EndpointAttachmentUtil.js +311 -0
- package/build/dist/Utils/Monitor/EndpointAttachmentUtil.js.map +1 -0
- package/build/dist/Utils/Monitor/NetworkTopologyUtil.js +98 -5
- package/build/dist/Utils/Monitor/NetworkTopologyUtil.js.map +1 -1
- package/build/dist/Utils/NetworkSite/CidrMatchUtil.js +222 -0
- package/build/dist/Utils/NetworkSite/CidrMatchUtil.js.map +1 -0
- package/build/dist/Utils/NetworkSite/MaterializedPathUtil.js +89 -0
- package/build/dist/Utils/NetworkSite/MaterializedPathUtil.js.map +1 -0
- package/build/dist/Utils/NetworkSite/SiteStatusRollupUtil.js +60 -0
- package/build/dist/Utils/NetworkSite/SiteStatusRollupUtil.js.map +1 -0
- package/build/dist/Utils/NetworkSite/SiteUptimeUtil.js +76 -0
- package/build/dist/Utils/NetworkSite/SiteUptimeUtil.js.map +1 -0
- package/build/dist/Utils/Slo/SloBurnRateRuleState.js +35 -0
- package/build/dist/Utils/Slo/SloBurnRateRuleState.js.map +1 -0
- package/build/dist/Utils/Slo/SloDuration.js +87 -0
- package/build/dist/Utils/Slo/SloDuration.js.map +1 -0
- package/build/dist/Utils/Slo/SloEvaluation.js +21 -0
- package/build/dist/Utils/Slo/SloEvaluation.js.map +1 -0
- package/build/dist/Utils/Slo/SloHealth.js +179 -0
- package/build/dist/Utils/Slo/SloHealth.js.map +1 -0
- package/build/dist/Utils/Slo/SloStatusColor.js +18 -0
- package/build/dist/Utils/Slo/SloStatusColor.js.map +1 -0
- package/build/dist/Utils/Slo/SloUtil.js +393 -0
- package/build/dist/Utils/Slo/SloUtil.js.map +1 -0
- package/build/dist/Utils/Slo/SloWidgetFormat.js +174 -0
- package/build/dist/Utils/Slo/SloWidgetFormat.js.map +1 -0
- package/package.json +2 -2
- package/Types/Dashboard/DashboardComponents/Index.ts +0 -7
- package/build/dist/Types/Dashboard/DashboardComponents/Index.js +0 -8
- package/build/dist/Types/Dashboard/DashboardComponents/Index.js.map +0 -1
|
@@ -1,17 +1,44 @@
|
|
|
1
1
|
import { JSONObject } from "../../../Types/JSON";
|
|
2
|
+
import MonitorStep from "../../../Types/Monitor/MonitorStep";
|
|
2
3
|
import MonitorStepNetworkDeviceMonitor, {
|
|
3
4
|
MonitorStepNetworkDeviceMonitorUtil,
|
|
4
5
|
} from "../../../Types/Monitor/MonitorStepNetworkDeviceMonitor";
|
|
6
|
+
import MonitorType from "../../../Types/Monitor/MonitorType";
|
|
5
7
|
import SnmpOid from "../../../Types/Monitor/SnmpMonitor/SnmpOid";
|
|
8
|
+
import ObjectID from "../../../Types/ObjectID";
|
|
9
|
+
|
|
10
|
+
const getNetworkDeviceMonitorStep: (
|
|
11
|
+
overrides?: Partial<MonitorStepNetworkDeviceMonitor>,
|
|
12
|
+
) => MonitorStep = (
|
|
13
|
+
overrides: Partial<MonitorStepNetworkDeviceMonitor> = {},
|
|
14
|
+
): MonitorStep => {
|
|
15
|
+
const id: ObjectID = ObjectID.generate();
|
|
16
|
+
const monitorStep: MonitorStep = MonitorStep.getDefaultMonitorStep({
|
|
17
|
+
monitorName: "Network device monitor",
|
|
18
|
+
monitorType: MonitorType.NetworkDevice,
|
|
19
|
+
onlineMonitorStatusId: id,
|
|
20
|
+
offlineMonitorStatusId: id,
|
|
21
|
+
defaultIncidentSeverityId: id,
|
|
22
|
+
defaultAlertSeverityId: id,
|
|
23
|
+
});
|
|
24
|
+
|
|
25
|
+
return monitorStep.setNetworkDeviceMonitor({
|
|
26
|
+
...MonitorStepNetworkDeviceMonitorUtil.getDefault(),
|
|
27
|
+
networkDeviceId: "device-1",
|
|
28
|
+
...overrides,
|
|
29
|
+
});
|
|
30
|
+
};
|
|
6
31
|
|
|
7
32
|
describe("MonitorStepNetworkDeviceMonitorUtil", () => {
|
|
8
33
|
describe("getDefault", () => {
|
|
9
|
-
test("returns no device, interface monitoring on, and no oids", () => {
|
|
34
|
+
test("returns no device, interface monitoring on, endpoint collection OFF, and no oids", () => {
|
|
10
35
|
const def: MonitorStepNetworkDeviceMonitor =
|
|
11
36
|
MonitorStepNetworkDeviceMonitorUtil.getDefault();
|
|
12
37
|
|
|
13
38
|
expect(def.networkDeviceId).toBeUndefined();
|
|
14
39
|
expect(def.monitorInterfaces).toBe(true);
|
|
40
|
+
// Endpoint collection is strictly opt-in, so a new step starts off.
|
|
41
|
+
expect(def.collectEndpoints).toBe(false);
|
|
15
42
|
expect(def.oids).toEqual([]);
|
|
16
43
|
});
|
|
17
44
|
});
|
|
@@ -22,6 +49,7 @@ describe("MonitorStepNetworkDeviceMonitorUtil", () => {
|
|
|
22
49
|
MonitorStepNetworkDeviceMonitorUtil.fromJSON({
|
|
23
50
|
networkDeviceId: "device-1",
|
|
24
51
|
monitorInterfaces: false,
|
|
52
|
+
collectEndpoints: false,
|
|
25
53
|
oids: [
|
|
26
54
|
{
|
|
27
55
|
oid: "1.3.6.1.2.1.1.1.0",
|
|
@@ -33,6 +61,7 @@ describe("MonitorStepNetworkDeviceMonitorUtil", () => {
|
|
|
33
61
|
|
|
34
62
|
expect(monitor.networkDeviceId).toBe("device-1");
|
|
35
63
|
expect(monitor.monitorInterfaces).toBe(false);
|
|
64
|
+
expect(monitor.collectEndpoints).toBe(false);
|
|
36
65
|
expect(monitor.oids.length).toBe(1);
|
|
37
66
|
expect(monitor.oids[0]!.oid).toBe("1.3.6.1.2.1.1.1.0");
|
|
38
67
|
expect(monitor.oids[0]!.name).toBe("sysDescr");
|
|
@@ -58,6 +87,37 @@ describe("MonitorStepNetworkDeviceMonitorUtil", () => {
|
|
|
58
87
|
).toBe(false);
|
|
59
88
|
});
|
|
60
89
|
|
|
90
|
+
test("defaults collectEndpoints to false unless it is explicitly true", () => {
|
|
91
|
+
// Missing -> false: steps saved before the flag existed stay opted out.
|
|
92
|
+
expect(
|
|
93
|
+
MonitorStepNetworkDeviceMonitorUtil.fromJSON({}).collectEndpoints,
|
|
94
|
+
).toBe(false);
|
|
95
|
+
// Explicit true -> true: the only way to opt in.
|
|
96
|
+
expect(
|
|
97
|
+
MonitorStepNetworkDeviceMonitorUtil.fromJSON({
|
|
98
|
+
collectEndpoints: true,
|
|
99
|
+
}).collectEndpoints,
|
|
100
|
+
).toBe(true);
|
|
101
|
+
// Explicit false -> false.
|
|
102
|
+
expect(
|
|
103
|
+
MonitorStepNetworkDeviceMonitorUtil.fromJSON({
|
|
104
|
+
collectEndpoints: false,
|
|
105
|
+
}).collectEndpoints,
|
|
106
|
+
).toBe(false);
|
|
107
|
+
// null (a JSON round trip of undefined) -> false, not "not false".
|
|
108
|
+
expect(
|
|
109
|
+
MonitorStepNetworkDeviceMonitorUtil.fromJSON({
|
|
110
|
+
collectEndpoints: null,
|
|
111
|
+
}).collectEndpoints,
|
|
112
|
+
).toBe(false);
|
|
113
|
+
// A truthy non-true value is NOT an opt-in.
|
|
114
|
+
expect(
|
|
115
|
+
MonitorStepNetworkDeviceMonitorUtil.fromJSON({
|
|
116
|
+
collectEndpoints: "true",
|
|
117
|
+
}).collectEndpoints,
|
|
118
|
+
).toBe(false);
|
|
119
|
+
});
|
|
120
|
+
|
|
61
121
|
test("coerces a missing networkDeviceId to undefined and missing oids to []", () => {
|
|
62
122
|
const monitor: MonitorStepNetworkDeviceMonitor =
|
|
63
123
|
MonitorStepNetworkDeviceMonitorUtil.fromJSON({});
|
|
@@ -85,6 +145,7 @@ describe("MonitorStepNetworkDeviceMonitorUtil", () => {
|
|
|
85
145
|
const monitor: MonitorStepNetworkDeviceMonitor = {
|
|
86
146
|
networkDeviceId: "device-42",
|
|
87
147
|
monitorInterfaces: false,
|
|
148
|
+
collectEndpoints: false,
|
|
88
149
|
oids: [{ oid: "1.2.3", name: "n", description: "d" }],
|
|
89
150
|
};
|
|
90
151
|
|
|
@@ -93,10 +154,22 @@ describe("MonitorStepNetworkDeviceMonitorUtil", () => {
|
|
|
93
154
|
|
|
94
155
|
expect(json["networkDeviceId"]).toBe("device-42");
|
|
95
156
|
expect(json["monitorInterfaces"]).toBe(false);
|
|
157
|
+
expect(json["collectEndpoints"]).toBe(false);
|
|
96
158
|
expect(json["oids"]).toEqual([
|
|
97
159
|
{ oid: "1.2.3", name: "n", description: "d" },
|
|
98
160
|
]);
|
|
99
161
|
});
|
|
162
|
+
|
|
163
|
+
test("passes collectEndpoints through untouched (true stays true)", () => {
|
|
164
|
+
const json: JSONObject = MonitorStepNetworkDeviceMonitorUtil.toJSON({
|
|
165
|
+
networkDeviceId: undefined,
|
|
166
|
+
monitorInterfaces: true,
|
|
167
|
+
collectEndpoints: true,
|
|
168
|
+
oids: [],
|
|
169
|
+
});
|
|
170
|
+
|
|
171
|
+
expect(json["collectEndpoints"]).toBe(true);
|
|
172
|
+
});
|
|
100
173
|
});
|
|
101
174
|
|
|
102
175
|
describe("round trip", () => {
|
|
@@ -104,6 +177,7 @@ describe("MonitorStepNetworkDeviceMonitorUtil", () => {
|
|
|
104
177
|
const original: MonitorStepNetworkDeviceMonitor = {
|
|
105
178
|
networkDeviceId: "device-7",
|
|
106
179
|
monitorInterfaces: false,
|
|
180
|
+
collectEndpoints: false,
|
|
107
181
|
oids: [
|
|
108
182
|
{ oid: "1.3.6.1.2.1.1.1.0", name: "sysDescr", description: "desc" },
|
|
109
183
|
{
|
|
@@ -134,6 +208,26 @@ describe("MonitorStepNetworkDeviceMonitorUtil", () => {
|
|
|
134
208
|
expect(roundTripped).toEqual(def);
|
|
135
209
|
});
|
|
136
210
|
|
|
211
|
+
test("a legacy step without collectEndpoints round-trips to endpoint collection OFF", () => {
|
|
212
|
+
// Steps saved before the flag existed serialize without it…
|
|
213
|
+
const legacy: MonitorStepNetworkDeviceMonitor = {
|
|
214
|
+
networkDeviceId: "device-legacy",
|
|
215
|
+
monitorInterfaces: true,
|
|
216
|
+
oids: [],
|
|
217
|
+
};
|
|
218
|
+
|
|
219
|
+
const roundTripped: MonitorStepNetworkDeviceMonitor =
|
|
220
|
+
MonitorStepNetworkDeviceMonitorUtil.fromJSON(
|
|
221
|
+
MonitorStepNetworkDeviceMonitorUtil.toJSON(legacy),
|
|
222
|
+
);
|
|
223
|
+
|
|
224
|
+
/*
|
|
225
|
+
* …and must deserialize opted OUT: an upgrade cannot silently enrol
|
|
226
|
+
* an existing monitor into extra SNMP walks and per-MAC writes.
|
|
227
|
+
*/
|
|
228
|
+
expect(roundTripped.collectEndpoints).toBe(false);
|
|
229
|
+
});
|
|
230
|
+
|
|
137
231
|
test("preserves oids with only an oid string across a round trip", () => {
|
|
138
232
|
const original: MonitorStepNetworkDeviceMonitor = {
|
|
139
233
|
networkDeviceId: undefined,
|
|
@@ -152,4 +246,50 @@ describe("MonitorStepNetworkDeviceMonitorUtil", () => {
|
|
|
152
246
|
expect(oid.description).toBeUndefined();
|
|
153
247
|
});
|
|
154
248
|
});
|
|
249
|
+
|
|
250
|
+
/*
|
|
251
|
+
* Under device-owned polling a Network Device monitor is a pure alerting
|
|
252
|
+
* layer: WHAT to collect (interface walks, endpoint discovery, OIDs) lives
|
|
253
|
+
* on the NetworkDevice resource itself. Step validation therefore only
|
|
254
|
+
* requires the device reference — the old "enable interface monitoring or
|
|
255
|
+
* configure at least one OID" rule is gone.
|
|
256
|
+
*/
|
|
257
|
+
describe("MonitorStep validation", () => {
|
|
258
|
+
test("accepts a step with only a device reference (interfaces off, zero oids)", () => {
|
|
259
|
+
const monitorStep: MonitorStep = getNetworkDeviceMonitorStep({
|
|
260
|
+
monitorInterfaces: false,
|
|
261
|
+
oids: [],
|
|
262
|
+
});
|
|
263
|
+
|
|
264
|
+
expect(
|
|
265
|
+
MonitorStep.getValidationError(monitorStep, MonitorType.NetworkDevice),
|
|
266
|
+
).toBeNull();
|
|
267
|
+
});
|
|
268
|
+
|
|
269
|
+
test("still rejects a step with no device reference", () => {
|
|
270
|
+
const monitorStep: MonitorStep = getNetworkDeviceMonitorStep({
|
|
271
|
+
networkDeviceId: undefined,
|
|
272
|
+
});
|
|
273
|
+
|
|
274
|
+
expect(
|
|
275
|
+
MonitorStep.getValidationError(monitorStep, MonitorType.NetworkDevice),
|
|
276
|
+
).toBe("Network Device is required");
|
|
277
|
+
});
|
|
278
|
+
|
|
279
|
+
test("rejects a step that has no networkDeviceMonitor block at all", () => {
|
|
280
|
+
const id: ObjectID = ObjectID.generate();
|
|
281
|
+
const monitorStep: MonitorStep = MonitorStep.getDefaultMonitorStep({
|
|
282
|
+
monitorName: "Network device monitor",
|
|
283
|
+
monitorType: MonitorType.NetworkDevice,
|
|
284
|
+
onlineMonitorStatusId: id,
|
|
285
|
+
offlineMonitorStatusId: id,
|
|
286
|
+
defaultIncidentSeverityId: id,
|
|
287
|
+
defaultAlertSeverityId: id,
|
|
288
|
+
});
|
|
289
|
+
|
|
290
|
+
expect(
|
|
291
|
+
MonitorStep.getValidationError(monitorStep, MonitorType.NetworkDevice),
|
|
292
|
+
).toBe("Network Device is required");
|
|
293
|
+
});
|
|
294
|
+
});
|
|
155
295
|
});
|
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
import MonitorSteps from "../../../Types/Monitor/MonitorSteps";
|
|
2
|
+
import MonitorStep from "../../../Types/Monitor/MonitorStep";
|
|
3
|
+
import MonitorType from "../../../Types/Monitor/MonitorType";
|
|
4
|
+
import ObjectID from "../../../Types/ObjectID";
|
|
5
|
+
import { JSONObject, ObjectType } from "../../../Types/JSON";
|
|
6
|
+
import BadDataException from "../../../Types/Exception/BadDataException";
|
|
7
|
+
|
|
8
|
+
/*
|
|
9
|
+
* MonitorSteps is the top-level DatabaseProperty stored on a Monitor: an array
|
|
10
|
+
* of MonitorStep plus the default monitor status. These tests lock in the
|
|
11
|
+
* factory shape, toJSON/fromJSON round-trip (including the deliberately lenient
|
|
12
|
+
* fromJSON(undefined) -> empty instance), and the validation contract.
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
const buildDefaultSteps: () => MonitorSteps = (): MonitorSteps => {
|
|
16
|
+
return MonitorSteps.getDefaultMonitorSteps({
|
|
17
|
+
defaultMonitorStatusId: new ObjectID("100000000000000000000001"),
|
|
18
|
+
monitorType: MonitorType.Manual,
|
|
19
|
+
monitorName: "My Monitor",
|
|
20
|
+
onlineMonitorStatusId: new ObjectID("100000000000000000000002"),
|
|
21
|
+
offlineMonitorStatusId: new ObjectID("100000000000000000000003"),
|
|
22
|
+
defaultIncidentSeverityId: new ObjectID("100000000000000000000004"),
|
|
23
|
+
defaultAlertSeverityId: new ObjectID("100000000000000000000005"),
|
|
24
|
+
});
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
describe("MonitorSteps", () => {
|
|
28
|
+
describe("getNewMonitorStepsAsJSON", () => {
|
|
29
|
+
test("wraps a single default step under the MonitorSteps type", () => {
|
|
30
|
+
const json: JSONObject = MonitorSteps.getNewMonitorStepsAsJSON();
|
|
31
|
+
expect(json["_type"]).toBe(ObjectType.MonitorSteps);
|
|
32
|
+
const value: JSONObject = json["value"] as JSONObject;
|
|
33
|
+
expect(Array.isArray(value["monitorStepsInstanceArray"])).toBe(true);
|
|
34
|
+
expect(
|
|
35
|
+
(value["monitorStepsInstanceArray"] as Array<unknown>).length,
|
|
36
|
+
).toBe(1);
|
|
37
|
+
expect(value["defaultMonitorStatusId"]).toBeUndefined();
|
|
38
|
+
});
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
describe("getDefaultMonitorSteps", () => {
|
|
42
|
+
test("creates one step and carries the default monitor status id", () => {
|
|
43
|
+
const steps: MonitorSteps = buildDefaultSteps();
|
|
44
|
+
expect(steps.data?.monitorStepsInstanceArray).toHaveLength(1);
|
|
45
|
+
expect(steps.data?.monitorStepsInstanceArray[0]).toBeInstanceOf(
|
|
46
|
+
MonitorStep,
|
|
47
|
+
);
|
|
48
|
+
expect(steps.data?.defaultMonitorStatusId?.toString()).toBe(
|
|
49
|
+
"100000000000000000000001",
|
|
50
|
+
);
|
|
51
|
+
});
|
|
52
|
+
});
|
|
53
|
+
|
|
54
|
+
describe("toJSON / fromJSON round-trip", () => {
|
|
55
|
+
test("serializes with the MonitorSteps type wrapper", () => {
|
|
56
|
+
const steps: MonitorSteps = buildDefaultSteps();
|
|
57
|
+
const json: JSONObject = steps.toJSON();
|
|
58
|
+
expect(json["_type"]).toBe(ObjectType.MonitorSteps);
|
|
59
|
+
expect((json["value"] as JSONObject)["defaultMonitorStatusId"]).toBe(
|
|
60
|
+
"100000000000000000000001",
|
|
61
|
+
);
|
|
62
|
+
});
|
|
63
|
+
|
|
64
|
+
test("round-trips the default status id and step count", () => {
|
|
65
|
+
const steps: MonitorSteps = buildDefaultSteps();
|
|
66
|
+
const restored: MonitorSteps = MonitorSteps.fromJSON(steps.toJSON());
|
|
67
|
+
expect(restored.data?.defaultMonitorStatusId?.toString()).toBe(
|
|
68
|
+
"100000000000000000000001",
|
|
69
|
+
);
|
|
70
|
+
expect(restored.data?.monitorStepsInstanceArray).toHaveLength(1);
|
|
71
|
+
expect(restored.data?.monitorStepsInstanceArray[0]).toBeInstanceOf(
|
|
72
|
+
MonitorStep,
|
|
73
|
+
);
|
|
74
|
+
});
|
|
75
|
+
|
|
76
|
+
test("toString returns a JSON string of the serialized value", () => {
|
|
77
|
+
const steps: MonitorSteps = buildDefaultSteps();
|
|
78
|
+
const asString: string = steps.toString();
|
|
79
|
+
const parsed: JSONObject = JSON.parse(asString) as JSONObject;
|
|
80
|
+
expect(parsed["_type"]).toBe(ObjectType.MonitorSteps);
|
|
81
|
+
});
|
|
82
|
+
});
|
|
83
|
+
|
|
84
|
+
describe("fromJSON leniency and validation", () => {
|
|
85
|
+
test("returns an empty instance for undefined input", () => {
|
|
86
|
+
const steps: MonitorSteps = MonitorSteps.fromJSON(undefined);
|
|
87
|
+
expect(steps).toBeInstanceOf(MonitorSteps);
|
|
88
|
+
});
|
|
89
|
+
|
|
90
|
+
test("returns the same instance when given a MonitorSteps", () => {
|
|
91
|
+
const steps: MonitorSteps = buildDefaultSteps();
|
|
92
|
+
expect(MonitorSteps.fromJSON(steps)).toBe(steps);
|
|
93
|
+
});
|
|
94
|
+
|
|
95
|
+
test("throws on a wrong _type", () => {
|
|
96
|
+
expect(() => {
|
|
97
|
+
return MonitorSteps.fromJSON({ _type: "Nope", value: {} });
|
|
98
|
+
}).toThrow(BadDataException);
|
|
99
|
+
});
|
|
100
|
+
|
|
101
|
+
test("throws when value is missing", () => {
|
|
102
|
+
expect(() => {
|
|
103
|
+
return MonitorSteps.fromJSON({ _type: "MonitorSteps" });
|
|
104
|
+
}).toThrow(BadDataException);
|
|
105
|
+
});
|
|
106
|
+
|
|
107
|
+
test("throws when monitorStepsInstanceArray is missing", () => {
|
|
108
|
+
expect(() => {
|
|
109
|
+
return MonitorSteps.fromJSON({
|
|
110
|
+
_type: "MonitorSteps",
|
|
111
|
+
value: { defaultMonitorStatusId: undefined },
|
|
112
|
+
});
|
|
113
|
+
}).toThrow(BadDataException);
|
|
114
|
+
});
|
|
115
|
+
});
|
|
116
|
+
|
|
117
|
+
describe("getValidationError", () => {
|
|
118
|
+
test("errors when data is missing", () => {
|
|
119
|
+
const steps: MonitorSteps = new MonitorSteps();
|
|
120
|
+
steps.data = undefined;
|
|
121
|
+
expect(MonitorSteps.getValidationError(steps, MonitorType.Manual)).toBe(
|
|
122
|
+
"Monitor Steps is required",
|
|
123
|
+
);
|
|
124
|
+
});
|
|
125
|
+
|
|
126
|
+
test("errors when the step array is empty", () => {
|
|
127
|
+
const steps: MonitorSteps = new MonitorSteps();
|
|
128
|
+
steps.data = {
|
|
129
|
+
monitorStepsInstanceArray: [],
|
|
130
|
+
defaultMonitorStatusId: new ObjectID("100000000000000000000001"),
|
|
131
|
+
};
|
|
132
|
+
expect(MonitorSteps.getValidationError(steps, MonitorType.Manual)).toBe(
|
|
133
|
+
"Monitor Steps is required",
|
|
134
|
+
);
|
|
135
|
+
});
|
|
136
|
+
|
|
137
|
+
test("errors when the default monitor status id is missing", () => {
|
|
138
|
+
const steps: MonitorSteps = buildDefaultSteps();
|
|
139
|
+
steps.data!.defaultMonitorStatusId = undefined;
|
|
140
|
+
expect(MonitorSteps.getValidationError(steps, MonitorType.Manual)).toBe(
|
|
141
|
+
"Default Monitor Status is required",
|
|
142
|
+
);
|
|
143
|
+
});
|
|
144
|
+
});
|
|
145
|
+
|
|
146
|
+
describe("clone and setters", () => {
|
|
147
|
+
test("clone produces an independent copy", () => {
|
|
148
|
+
const steps: MonitorSteps = buildDefaultSteps();
|
|
149
|
+
const cloned: MonitorSteps = MonitorSteps.clone(steps);
|
|
150
|
+
expect(cloned).not.toBe(steps);
|
|
151
|
+
expect(cloned.data?.defaultMonitorStatusId?.toString()).toBe(
|
|
152
|
+
steps.data?.defaultMonitorStatusId?.toString(),
|
|
153
|
+
);
|
|
154
|
+
|
|
155
|
+
cloned.setDefaultMonitorStatusId(
|
|
156
|
+
new ObjectID("200000000000000000000009"),
|
|
157
|
+
);
|
|
158
|
+
// Original must be unaffected by the clone's mutation.
|
|
159
|
+
expect(steps.data?.defaultMonitorStatusId?.toString()).toBe(
|
|
160
|
+
"100000000000000000000001",
|
|
161
|
+
);
|
|
162
|
+
});
|
|
163
|
+
|
|
164
|
+
test("setDefaultMonitorStatusId mutates and returns this", () => {
|
|
165
|
+
const steps: MonitorSteps = new MonitorSteps();
|
|
166
|
+
const returned: MonitorSteps = steps.setDefaultMonitorStatusId(
|
|
167
|
+
new ObjectID("300000000000000000000000"),
|
|
168
|
+
);
|
|
169
|
+
expect(returned).toBe(steps);
|
|
170
|
+
expect(steps.data?.defaultMonitorStatusId?.toString()).toBe(
|
|
171
|
+
"300000000000000000000000",
|
|
172
|
+
);
|
|
173
|
+
});
|
|
174
|
+
|
|
175
|
+
test("setMonitorStepsInstanceArray replaces the step list", () => {
|
|
176
|
+
const steps: MonitorSteps = buildDefaultSteps();
|
|
177
|
+
const newStep: MonitorStep = new MonitorStep();
|
|
178
|
+
steps.setMonitorStepsInstanceArray([newStep]);
|
|
179
|
+
expect(steps.data?.monitorStepsInstanceArray).toHaveLength(1);
|
|
180
|
+
expect(steps.data?.monitorStepsInstanceArray[0]).toBe(newStep);
|
|
181
|
+
});
|
|
182
|
+
});
|
|
183
|
+
});
|
|
@@ -120,7 +120,6 @@ describe("MonitorTypeHelper", () => {
|
|
|
120
120
|
MonitorType.SSLCertificate,
|
|
121
121
|
MonitorType.SyntheticMonitor,
|
|
122
122
|
MonitorType.CustomJavaScriptCode,
|
|
123
|
-
MonitorType.NetworkDevice,
|
|
124
123
|
MonitorType.DNS,
|
|
125
124
|
MonitorType.DNSSEC,
|
|
126
125
|
MonitorType.Domain,
|
|
@@ -134,6 +133,8 @@ describe("MonitorTypeHelper", () => {
|
|
|
134
133
|
MonitorType.Logs,
|
|
135
134
|
MonitorType.Server,
|
|
136
135
|
MonitorType.IncomingRequest,
|
|
136
|
+
// Device-owned polling: the NetworkDevice resource polls itself.
|
|
137
|
+
MonitorType.NetworkDevice,
|
|
137
138
|
])("returns false for %s", (monitorType: MonitorType) => {
|
|
138
139
|
expect(MonitorTypeHelper.isProbableMonitor(monitorType)).toBe(false);
|
|
139
140
|
});
|
|
@@ -195,6 +196,63 @@ describe("MonitorTypeHelper", () => {
|
|
|
195
196
|
});
|
|
196
197
|
});
|
|
197
198
|
|
|
199
|
+
/*
|
|
200
|
+
* NetworkDevice is a pure alerting layer under device-owned polling: the
|
|
201
|
+
* NetworkDevice resource's assigned probe walks it on the device's own
|
|
202
|
+
* schedule, and the monitor is evaluated server-side against each walk.
|
|
203
|
+
* It must therefore never appear probeable (no MonitorProbe rows, no
|
|
204
|
+
* interval) while keeping its full monitor surface: criteria, graphs,
|
|
205
|
+
* documentation, creatability, and its place in the Network category.
|
|
206
|
+
*/
|
|
207
|
+
describe("NetworkDevice under device-owned polling", () => {
|
|
208
|
+
test("is not probeable and has no interval", () => {
|
|
209
|
+
expect(
|
|
210
|
+
MonitorTypeHelper.isProbableMonitor(MonitorType.NetworkDevice),
|
|
211
|
+
).toBe(false);
|
|
212
|
+
expect(
|
|
213
|
+
MonitorTypeHelper.doesMonitorTypeHaveInterval(
|
|
214
|
+
MonitorType.NetworkDevice,
|
|
215
|
+
),
|
|
216
|
+
).toBe(false);
|
|
217
|
+
});
|
|
218
|
+
|
|
219
|
+
test("still has criteria, graphs, and documentation", () => {
|
|
220
|
+
expect(
|
|
221
|
+
MonitorTypeHelper.doesMonitorTypeHaveCriteria(
|
|
222
|
+
MonitorType.NetworkDevice,
|
|
223
|
+
),
|
|
224
|
+
).toBe(true);
|
|
225
|
+
expect(
|
|
226
|
+
MonitorTypeHelper.doesMonitorTypeHaveGraphs(MonitorType.NetworkDevice),
|
|
227
|
+
).toBe(true);
|
|
228
|
+
expect(
|
|
229
|
+
MonitorTypeHelper.doesMonitorTypeHaveDocumentation(
|
|
230
|
+
MonitorType.NetworkDevice,
|
|
231
|
+
),
|
|
232
|
+
).toBe(true);
|
|
233
|
+
});
|
|
234
|
+
|
|
235
|
+
test("is still an active (creatable) monitor type", () => {
|
|
236
|
+
expect(MonitorTypeHelper.getActiveMonitorTypes()).toContain(
|
|
237
|
+
MonitorType.NetworkDevice,
|
|
238
|
+
);
|
|
239
|
+
});
|
|
240
|
+
|
|
241
|
+
test("is still listed under the Network category", () => {
|
|
242
|
+
const networkCategory: MonitorTypeCategory | undefined =
|
|
243
|
+
MonitorTypeHelper.getMonitorTypeCategories().find(
|
|
244
|
+
(category: MonitorTypeCategory) => {
|
|
245
|
+
return category.label === "Network";
|
|
246
|
+
},
|
|
247
|
+
);
|
|
248
|
+
|
|
249
|
+
expect(networkCategory).toBeDefined();
|
|
250
|
+
expect(networkCategory?.monitorTypes).toContain(
|
|
251
|
+
MonitorType.NetworkDevice,
|
|
252
|
+
);
|
|
253
|
+
});
|
|
254
|
+
});
|
|
255
|
+
|
|
198
256
|
describe("doesMonitorTypeHaveGraphs", () => {
|
|
199
257
|
test("returns true for graphable types and false otherwise", () => {
|
|
200
258
|
expect(
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import NetworkDeviceAlertPackUtil, {
|
|
2
|
+
NetworkDeviceAlertPackItem,
|
|
3
|
+
} from "../../../Types/Monitor/SnmpMonitor/NetworkDeviceAlertPack";
|
|
4
|
+
import MonitorCriteriaInstance from "../../../Types/Monitor/MonitorCriteriaInstance";
|
|
5
|
+
import ObjectID from "../../../Types/ObjectID";
|
|
6
|
+
|
|
7
|
+
describe("NetworkDeviceAlertPackUtil.getPackItems", () => {
|
|
8
|
+
test("every pack item has a name, a description and at least one filter", () => {
|
|
9
|
+
const items: Array<NetworkDeviceAlertPackItem> =
|
|
10
|
+
NetworkDeviceAlertPackUtil.getPackItems();
|
|
11
|
+
|
|
12
|
+
expect(items.length).toBeGreaterThan(0);
|
|
13
|
+
|
|
14
|
+
for (const item of items) {
|
|
15
|
+
expect(item.name).toBeTruthy();
|
|
16
|
+
expect(item.description).toBeTruthy();
|
|
17
|
+
expect(item.filters.length).toBeGreaterThan(0);
|
|
18
|
+
}
|
|
19
|
+
});
|
|
20
|
+
});
|
|
21
|
+
|
|
22
|
+
describe("NetworkDeviceAlertPackUtil.buildCriteriaInstances", () => {
|
|
23
|
+
test("builds one enabled instance per pack item with unique ids", () => {
|
|
24
|
+
const instances: Array<MonitorCriteriaInstance> =
|
|
25
|
+
NetworkDeviceAlertPackUtil.buildCriteriaInstances();
|
|
26
|
+
|
|
27
|
+
expect(instances.length).toBe(
|
|
28
|
+
NetworkDeviceAlertPackUtil.getPackItems().length,
|
|
29
|
+
);
|
|
30
|
+
|
|
31
|
+
const ids: Set<string> = new Set<string>();
|
|
32
|
+
for (const instance of instances) {
|
|
33
|
+
expect(instance.data?.isEnabled).toBe(true);
|
|
34
|
+
expect(instance.data?.id).toBeTruthy();
|
|
35
|
+
ids.add(instance.data!.id);
|
|
36
|
+
}
|
|
37
|
+
expect(ids.size).toBe(instances.length);
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
test("with a downMonitorStatusId context, incident-creating criteria carry that status id", () => {
|
|
41
|
+
const downStatusId: ObjectID = ObjectID.generate();
|
|
42
|
+
|
|
43
|
+
const instances: Array<MonitorCriteriaInstance> =
|
|
44
|
+
NetworkDeviceAlertPackUtil.buildCriteriaInstances({
|
|
45
|
+
downMonitorStatusId: downStatusId,
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
for (const instance of instances) {
|
|
49
|
+
expect(instance.data?.monitorStatusId?.toString()).toBe(
|
|
50
|
+
downStatusId.toString(),
|
|
51
|
+
);
|
|
52
|
+
|
|
53
|
+
/*
|
|
54
|
+
* changeMonitorStatus must never be true while the target status id
|
|
55
|
+
* is missing — that combination produces a criteria that "changes"
|
|
56
|
+
* the monitor to no status at all.
|
|
57
|
+
*/
|
|
58
|
+
if (instance.data?.changeMonitorStatus) {
|
|
59
|
+
expect(instance.data?.monitorStatusId).toBeTruthy();
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
});
|
|
63
|
+
|
|
64
|
+
test("without context, no instance claims to change monitor status to an undefined id", () => {
|
|
65
|
+
const instances: Array<MonitorCriteriaInstance> =
|
|
66
|
+
NetworkDeviceAlertPackUtil.buildCriteriaInstances();
|
|
67
|
+
|
|
68
|
+
for (const instance of instances) {
|
|
69
|
+
expect(instance.data?.monitorStatusId).toBeUndefined();
|
|
70
|
+
/*
|
|
71
|
+
* Legacy call sites (no context) still exist in principle; the pack
|
|
72
|
+
* must not produce a status change pointing at nothing.
|
|
73
|
+
*/
|
|
74
|
+
expect(instance.data?.changeMonitorStatus).toBe(false);
|
|
75
|
+
}
|
|
76
|
+
});
|
|
77
|
+
|
|
78
|
+
test("only incident-creating pack items request a monitor status change", () => {
|
|
79
|
+
const downStatusId: ObjectID = ObjectID.generate();
|
|
80
|
+
const items: Array<NetworkDeviceAlertPackItem> =
|
|
81
|
+
NetworkDeviceAlertPackUtil.getPackItems();
|
|
82
|
+
const instances: Array<MonitorCriteriaInstance> =
|
|
83
|
+
NetworkDeviceAlertPackUtil.buildCriteriaInstances({
|
|
84
|
+
downMonitorStatusId: downStatusId,
|
|
85
|
+
});
|
|
86
|
+
|
|
87
|
+
for (let i: number = 0; i < items.length; i++) {
|
|
88
|
+
expect(instances[i]!.data?.createIncidents).toBe(
|
|
89
|
+
items[i]!.createIncidents,
|
|
90
|
+
);
|
|
91
|
+
expect(instances[i]!.data?.createAlerts).toBe(items[i]!.createAlerts);
|
|
92
|
+
expect(instances[i]!.data?.changeMonitorStatus).toBe(
|
|
93
|
+
items[i]!.createIncidents,
|
|
94
|
+
);
|
|
95
|
+
}
|
|
96
|
+
});
|
|
97
|
+
});
|