@oneuptime/common 11.6.0 → 11.6.2
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/AnalyticsBaseModel/AnalyticsBaseModel.ts +41 -24
- package/Models/AnalyticsModels/Index.ts +4 -0
- package/Models/AnalyticsModels/KubernetesCostAllocation.ts +842 -0
- package/Models/AnalyticsModels/MetricBaselineHourly.ts +2 -0
- package/Models/AnalyticsModels/MetricItemAggMV1m.ts +5 -2
- package/Models/AnalyticsModels/MetricItemAggMV1mByContainer.ts +5 -2
- package/Models/AnalyticsModels/MetricItemAggMV1mByHostV2.ts +5 -2
- package/Models/AnalyticsModels/MetricItemAggMV1mByK8sCluster.ts +5 -2
- package/Models/AnalyticsModels/MetricItemAggMV1mByService.ts +5 -2
- package/Models/AnalyticsModels/NetworkFlow.ts +54 -0
- package/Models/AnalyticsModels/SloHistory.ts +240 -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 +1106 -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/Index.ts +10 -0
- package/Server/Services/AnalyticsDatabaseService.ts +38 -10
- 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 +677 -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 +128 -52
- 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/AnalyticsBaseModel.test.ts +122 -0
- 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/ClusterAwareSchema.test.ts +164 -3
- package/Tests/Server/Utils/AnalyticsDatabase/Statement.test.ts +22 -0
- package/Tests/Server/Utils/AnalyticsDatabase/StatementGenerator.test.ts +503 -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/HashCode.test.ts +41 -0
- package/Tests/Types/Kubernetes/KubernetesObjectParser.test.ts +177 -0
- package/Tests/Types/Log/LogQueryParser.test.ts +186 -0
- package/Tests/Types/Log/LogQueryToFilter.test.ts +111 -0
- package/Tests/Types/Monitor/MonitorStepNetworkDeviceMonitor.test.ts +141 -1
- 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/Dashboard/VariableInterpolation.test.ts +197 -0
- package/Tests/Utils/Enum.test.ts +54 -0
- package/Tests/Utils/IpCanonicalUtil.test.ts +85 -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/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/Tests/Utils/ValueFormatter.test.ts +305 -0
- package/Types/AnalyticsDatabase/AnalyticsTableName.ts +10 -0
- package/Types/AnalyticsDatabase/TableColumn.ts +23 -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/SloStatusColor.ts +54 -0
- package/Utils/Slo/SloUtil.ts +637 -0
- package/Utils/Slo/SloWidgetFormat.ts +383 -0
- package/build/dist/Models/AnalyticsModels/AnalyticsBaseModel/AnalyticsBaseModel.js +25 -20
- package/build/dist/Models/AnalyticsModels/AnalyticsBaseModel/AnalyticsBaseModel.js.map +1 -1
- 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/MetricBaselineHourly.js +2 -0
- package/build/dist/Models/AnalyticsModels/MetricBaselineHourly.js.map +1 -1
- package/build/dist/Models/AnalyticsModels/MetricItemAggMV1m.js +5 -2
- package/build/dist/Models/AnalyticsModels/MetricItemAggMV1m.js.map +1 -1
- package/build/dist/Models/AnalyticsModels/MetricItemAggMV1mByContainer.js +5 -2
- package/build/dist/Models/AnalyticsModels/MetricItemAggMV1mByContainer.js.map +1 -1
- package/build/dist/Models/AnalyticsModels/MetricItemAggMV1mByHostV2.js +5 -2
- package/build/dist/Models/AnalyticsModels/MetricItemAggMV1mByHostV2.js.map +1 -1
- package/build/dist/Models/AnalyticsModels/MetricItemAggMV1mByK8sCluster.js +5 -2
- package/build/dist/Models/AnalyticsModels/MetricItemAggMV1mByK8sCluster.js.map +1 -1
- package/build/dist/Models/AnalyticsModels/MetricItemAggMV1mByService.js +5 -2
- package/build/dist/Models/AnalyticsModels/MetricItemAggMV1mByService.js.map +1 -1
- 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 +215 -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 +1124 -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/Index.js +10 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
- package/build/dist/Server/Services/AnalyticsDatabaseService.js +32 -7
- 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 +582 -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 +105 -52
- 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/AnalyticsDatabase/TableColumn.js +7 -0
- package/build/dist/Types/AnalyticsDatabase/TableColumn.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/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
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Matching helpers for NetworkSite auto-assignment rules: IPv4 CIDR
|
|
3
|
+
* containment, case-insensitive '*' wildcard hostname patterns, and the
|
|
4
|
+
* highest-priority-wins rule picker. Pure and dependency-free so the rule
|
|
5
|
+
* engine's decisions are unit-testable.
|
|
6
|
+
*/
|
|
7
|
+
export class CidrMatchUtil {
|
|
8
|
+
/*
|
|
9
|
+
* True when the IPv4 address `ip` falls inside `cidr` ('10.0.0.0/8').
|
|
10
|
+
* Prefixes /0 through /32 are supported; a bare address is treated as /32.
|
|
11
|
+
* Any invalid input returns false instead of throwing.
|
|
12
|
+
*/
|
|
13
|
+
static ipInCidr(ip, cidr) {
|
|
14
|
+
const ipValue = CidrMatchUtil.parseIpv4(ip);
|
|
15
|
+
if (ipValue === null) {
|
|
16
|
+
return false;
|
|
17
|
+
}
|
|
18
|
+
if (typeof cidr !== "string" || cidr.trim().length === 0) {
|
|
19
|
+
return false;
|
|
20
|
+
}
|
|
21
|
+
const parts = cidr.trim().split("/");
|
|
22
|
+
if (parts.length > 2) {
|
|
23
|
+
return false;
|
|
24
|
+
}
|
|
25
|
+
const baseValue = CidrMatchUtil.parseIpv4(parts[0] || "");
|
|
26
|
+
if (baseValue === null) {
|
|
27
|
+
return false;
|
|
28
|
+
}
|
|
29
|
+
let prefixLength = 32;
|
|
30
|
+
if (parts.length === 2) {
|
|
31
|
+
const prefixText = parts[1] || "";
|
|
32
|
+
if (!CidrMatchUtil.PREFIX_LENGTH_PATTERN.test(prefixText)) {
|
|
33
|
+
return false;
|
|
34
|
+
}
|
|
35
|
+
prefixLength = parseInt(prefixText, 10);
|
|
36
|
+
if (prefixLength < 0 || prefixLength > 32) {
|
|
37
|
+
return false;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
/*
|
|
41
|
+
* JS bitwise ops are 32-bit signed; >>> 0 keeps the mask and the masked
|
|
42
|
+
* addresses unsigned. A shift by 32 is a no-op in JS, so /0 is special
|
|
43
|
+
* cased to the all-zero mask (matches everything).
|
|
44
|
+
*/
|
|
45
|
+
const mask = prefixLength === 0 ? 0 : (0xffffffff << (32 - prefixLength)) >>> 0;
|
|
46
|
+
return (ipValue & mask) >>> 0 === (baseValue & mask) >>> 0;
|
|
47
|
+
}
|
|
48
|
+
// True when `cidr` is a well-formed IPv4 CIDR (or bare address == /32).
|
|
49
|
+
static isValidCidr(cidr) {
|
|
50
|
+
if (typeof cidr !== "string" || cidr.trim().length === 0) {
|
|
51
|
+
return false;
|
|
52
|
+
}
|
|
53
|
+
const parts = cidr.trim().split("/");
|
|
54
|
+
if (parts.length > 2) {
|
|
55
|
+
return false;
|
|
56
|
+
}
|
|
57
|
+
if (CidrMatchUtil.parseIpv4(parts[0] || "") === null) {
|
|
58
|
+
return false;
|
|
59
|
+
}
|
|
60
|
+
if (parts.length === 2) {
|
|
61
|
+
const prefixText = parts[1] || "";
|
|
62
|
+
if (!CidrMatchUtil.PREFIX_LENGTH_PATTERN.test(prefixText)) {
|
|
63
|
+
return false;
|
|
64
|
+
}
|
|
65
|
+
const prefixLength = parseInt(prefixText, 10);
|
|
66
|
+
if (prefixLength < 0 || prefixLength > 32) {
|
|
67
|
+
return false;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
return true;
|
|
71
|
+
}
|
|
72
|
+
/*
|
|
73
|
+
* Case-insensitive wildcard match where '*' matches any run of characters
|
|
74
|
+
* (including none) and every other character is literal. The pattern must
|
|
75
|
+
* cover the whole hostname. Non-string or missing inputs never match, and
|
|
76
|
+
* so does an over-long pattern.
|
|
77
|
+
*
|
|
78
|
+
* Deliberately NOT a regex: compiling a user-authored pattern into
|
|
79
|
+
* /^.*a.*a.*a...$/ makes the backtracking engine explore an exponential
|
|
80
|
+
* number of split points on a long homogeneous input, which blocks the
|
|
81
|
+
* event loop for minutes. This matcher is O(hostname x pattern) worst case
|
|
82
|
+
* with no recursion, so a hostile rule cannot hang the process.
|
|
83
|
+
*/
|
|
84
|
+
static hostnameMatchesWildcard(hostname, pattern) {
|
|
85
|
+
if (typeof hostname !== "string" || typeof pattern !== "string") {
|
|
86
|
+
return false;
|
|
87
|
+
}
|
|
88
|
+
const text = hostname.trim().toLowerCase();
|
|
89
|
+
const glob = pattern.trim().toLowerCase();
|
|
90
|
+
if (glob.length > CidrMatchUtil.MAX_HOSTNAME_PATTERN_LENGTH) {
|
|
91
|
+
return false;
|
|
92
|
+
}
|
|
93
|
+
/*
|
|
94
|
+
* Greedy two-pointer glob match. On a mismatch we rewind only to the
|
|
95
|
+
* most recent '*' and advance the character it consumed by one, so each
|
|
96
|
+
* character of the hostname is revisited at most once per '*'.
|
|
97
|
+
*/
|
|
98
|
+
let textIndex = 0;
|
|
99
|
+
let globIndex = 0;
|
|
100
|
+
let lastStarIndex = -1;
|
|
101
|
+
let textIndexAtLastStar = 0;
|
|
102
|
+
while (textIndex < text.length) {
|
|
103
|
+
if (globIndex < glob.length && glob[globIndex] === "*") {
|
|
104
|
+
lastStarIndex = globIndex;
|
|
105
|
+
textIndexAtLastStar = textIndex;
|
|
106
|
+
globIndex++;
|
|
107
|
+
}
|
|
108
|
+
else if (globIndex < glob.length &&
|
|
109
|
+
glob[globIndex] === text[textIndex]) {
|
|
110
|
+
globIndex++;
|
|
111
|
+
textIndex++;
|
|
112
|
+
}
|
|
113
|
+
else if (lastStarIndex !== -1) {
|
|
114
|
+
globIndex = lastStarIndex + 1;
|
|
115
|
+
textIndexAtLastStar++;
|
|
116
|
+
textIndex = textIndexAtLastStar;
|
|
117
|
+
}
|
|
118
|
+
else {
|
|
119
|
+
return false;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
// Any trailing '*' in the pattern can still match the empty remainder.
|
|
123
|
+
while (globIndex < glob.length && glob[globIndex] === "*") {
|
|
124
|
+
globIndex++;
|
|
125
|
+
}
|
|
126
|
+
return globIndex === glob.length;
|
|
127
|
+
}
|
|
128
|
+
/*
|
|
129
|
+
* True when the rule's populated criteria all match the target. A CIDR
|
|
130
|
+
* criterion matches the target's ip; a hostname pattern matches either the
|
|
131
|
+
* hostname or the SNMP sysName. A rule with no criteria never matches.
|
|
132
|
+
*/
|
|
133
|
+
static ruleMatches(rule, target) {
|
|
134
|
+
const hasCidr = Boolean(rule.subnetCidr && rule.subnetCidr.trim().length > 0);
|
|
135
|
+
const hasPattern = Boolean(rule.hostnamePattern && rule.hostnamePattern.trim().length > 0);
|
|
136
|
+
if (!hasCidr && !hasPattern) {
|
|
137
|
+
return false;
|
|
138
|
+
}
|
|
139
|
+
if (hasCidr) {
|
|
140
|
+
if (!target.ip || !CidrMatchUtil.ipInCidr(target.ip, rule.subnetCidr)) {
|
|
141
|
+
return false;
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
if (hasPattern) {
|
|
145
|
+
const matchesHostname = Boolean(target.hostname &&
|
|
146
|
+
CidrMatchUtil.hostnameMatchesWildcard(target.hostname, rule.hostnamePattern));
|
|
147
|
+
const matchesSysName = Boolean(target.sysName &&
|
|
148
|
+
CidrMatchUtil.hostnameMatchesWildcard(target.sysName, rule.hostnamePattern));
|
|
149
|
+
if (!matchesHostname && !matchesSysName) {
|
|
150
|
+
return false;
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
return true;
|
|
154
|
+
}
|
|
155
|
+
/*
|
|
156
|
+
* Picks the winning rule for a target: among matching rules the highest
|
|
157
|
+
* priority number wins; ties go to the earlier createdAt when both rows
|
|
158
|
+
* carry one, otherwise the earlier rule in the input order (stable).
|
|
159
|
+
* Returns null when nothing matches.
|
|
160
|
+
*/
|
|
161
|
+
static pickRule(rules, target) {
|
|
162
|
+
let best = null;
|
|
163
|
+
for (const rule of rules) {
|
|
164
|
+
if (!CidrMatchUtil.ruleMatches(rule, target)) {
|
|
165
|
+
continue;
|
|
166
|
+
}
|
|
167
|
+
if (!best) {
|
|
168
|
+
best = rule;
|
|
169
|
+
continue;
|
|
170
|
+
}
|
|
171
|
+
const bestPriority = best.priority || 0;
|
|
172
|
+
const rulePriority = rule.priority || 0;
|
|
173
|
+
if (rulePriority > bestPriority) {
|
|
174
|
+
best = rule;
|
|
175
|
+
continue;
|
|
176
|
+
}
|
|
177
|
+
if (rulePriority === bestPriority &&
|
|
178
|
+
rule.createdAt &&
|
|
179
|
+
best.createdAt &&
|
|
180
|
+
rule.createdAt.getTime() < best.createdAt.getTime()) {
|
|
181
|
+
best = rule;
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
return best;
|
|
185
|
+
}
|
|
186
|
+
// '10.0.0.1' -> unsigned 32-bit value; anything malformed -> null.
|
|
187
|
+
static parseIpv4(ip) {
|
|
188
|
+
if (typeof ip !== "string") {
|
|
189
|
+
return null;
|
|
190
|
+
}
|
|
191
|
+
const octets = ip.trim().split(".");
|
|
192
|
+
if (octets.length !== 4) {
|
|
193
|
+
return null;
|
|
194
|
+
}
|
|
195
|
+
let value = 0;
|
|
196
|
+
for (const octetText of octets) {
|
|
197
|
+
if (!CidrMatchUtil.OCTET_PATTERN.test(octetText)) {
|
|
198
|
+
return null;
|
|
199
|
+
}
|
|
200
|
+
const octet = parseInt(octetText, 10);
|
|
201
|
+
if (octet > 255) {
|
|
202
|
+
return null;
|
|
203
|
+
}
|
|
204
|
+
value = (value * 256 + octet) >>> 0;
|
|
205
|
+
}
|
|
206
|
+
return value;
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
/*
|
|
210
|
+
* Longest hostname pattern we will evaluate. The column itself is
|
|
211
|
+
* ShortText (100), and a DNS name tops out at 253 characters, so anything
|
|
212
|
+
* longer is either a mistake or an attempt to make matching expensive.
|
|
213
|
+
*/
|
|
214
|
+
CidrMatchUtil.MAX_HOSTNAME_PATTERN_LENGTH = 253;
|
|
215
|
+
/*
|
|
216
|
+
* Hoisted out of the call sites so the literals are not the object of a
|
|
217
|
+
* member expression, which `wrap-regex` and Prettier cannot agree on.
|
|
218
|
+
*/
|
|
219
|
+
CidrMatchUtil.PREFIX_LENGTH_PATTERN = /^\d{1,2}$/;
|
|
220
|
+
CidrMatchUtil.OCTET_PATTERN = /^\d{1,3}$/;
|
|
221
|
+
export default CidrMatchUtil;
|
|
222
|
+
//# sourceMappingURL=CidrMatchUtil.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CidrMatchUtil.js","sourceRoot":"","sources":["../../../../Utils/NetworkSite/CidrMatchUtil.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Materialized-path helpers for the NetworkSite hierarchy.
|
|
3
|
+
*
|
|
4
|
+
* A site's path is the slash-separated list of its ancestor IDs ending with
|
|
5
|
+
* its own ID, in '/rootId/childId/.../ownId/' form. Root sites have the path
|
|
6
|
+
* '/ownId/'. All helpers are pure string operations so the tree math is
|
|
7
|
+
* unit-testable without a database.
|
|
8
|
+
*/
|
|
9
|
+
export class MaterializedPathUtil {
|
|
10
|
+
/*
|
|
11
|
+
* Builds the path for a site given its parent's path (null/undefined/empty
|
|
12
|
+
* for root sites). Tolerates a parent path missing its leading or trailing
|
|
13
|
+
* slash so a hand-edited row cannot poison every child path built from it.
|
|
14
|
+
*/
|
|
15
|
+
static buildPath(parentPath, siteId) {
|
|
16
|
+
const normalizedParent = MaterializedPathUtil.normalizePath(parentPath || "");
|
|
17
|
+
return `${normalizedParent || "/"}${siteId}/`;
|
|
18
|
+
}
|
|
19
|
+
// '/a/b/' -> ['a', 'b']; invalid/empty input -> [].
|
|
20
|
+
static segmentsOf(path) {
|
|
21
|
+
if (!path || typeof path !== "string") {
|
|
22
|
+
return [];
|
|
23
|
+
}
|
|
24
|
+
return path.split("/").filter((segment) => {
|
|
25
|
+
return segment.length > 0;
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
/*
|
|
29
|
+
* Number of ancestors above the site this path belongs to: '/a/' -> 0,
|
|
30
|
+
* '/a/b/' -> 1. Empty/invalid paths report 0.
|
|
31
|
+
*/
|
|
32
|
+
static depthOf(path) {
|
|
33
|
+
const segments = MaterializedPathUtil.segmentsOf(path);
|
|
34
|
+
return segments.length > 0 ? segments.length - 1 : 0;
|
|
35
|
+
}
|
|
36
|
+
/*
|
|
37
|
+
* True when `path` belongs to a strict descendant of the site that owns
|
|
38
|
+
* `ancestorPath` (a site is not its own descendant).
|
|
39
|
+
*/
|
|
40
|
+
static isDescendant(path, ancestorPath) {
|
|
41
|
+
if (!path || !ancestorPath) {
|
|
42
|
+
return false;
|
|
43
|
+
}
|
|
44
|
+
const normalizedPath = MaterializedPathUtil.normalizePath(path);
|
|
45
|
+
const normalizedAncestor = MaterializedPathUtil.normalizePath(ancestorPath);
|
|
46
|
+
return (normalizedPath.startsWith(normalizedAncestor) &&
|
|
47
|
+
normalizedPath !== normalizedAncestor);
|
|
48
|
+
}
|
|
49
|
+
/*
|
|
50
|
+
* True when making the site with `siteId` a child of the site whose path is
|
|
51
|
+
* `newParentPath` would create a cycle - i.e. the proposed parent is the
|
|
52
|
+
* site itself or one of its descendants (its own ID appears anywhere in the
|
|
53
|
+
* parent's path). A null/empty parent path (becoming a root) can never
|
|
54
|
+
* create a cycle.
|
|
55
|
+
*/
|
|
56
|
+
static wouldCreateCycle(siteId, newParentPath) {
|
|
57
|
+
if (!siteId || !newParentPath) {
|
|
58
|
+
return false;
|
|
59
|
+
}
|
|
60
|
+
const segments = MaterializedPathUtil.segmentsOf(newParentPath);
|
|
61
|
+
return segments.includes(siteId);
|
|
62
|
+
}
|
|
63
|
+
/*
|
|
64
|
+
* Rewrites subtree paths for a move: every affected path that starts with
|
|
65
|
+
* `oldParentPath` gets that prefix replaced with `newParentPath`. Paths
|
|
66
|
+
* outside the moved subtree are returned unchanged, in input order.
|
|
67
|
+
*/
|
|
68
|
+
static rebasePaths(oldParentPath, newParentPath, affectedPaths) {
|
|
69
|
+
const oldPrefix = MaterializedPathUtil.normalizePath(oldParentPath);
|
|
70
|
+
const newPrefix = MaterializedPathUtil.normalizePath(newParentPath);
|
|
71
|
+
return affectedPaths.map((path) => {
|
|
72
|
+
const normalized = MaterializedPathUtil.normalizePath(path);
|
|
73
|
+
if (!oldPrefix || !normalized.startsWith(oldPrefix)) {
|
|
74
|
+
return path;
|
|
75
|
+
}
|
|
76
|
+
return `${newPrefix}${normalized.slice(oldPrefix.length)}`;
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
// Ensures '/a/b/' form: leading + trailing slash, no empty segments.
|
|
80
|
+
static normalizePath(path) {
|
|
81
|
+
const segments = MaterializedPathUtil.segmentsOf(path);
|
|
82
|
+
if (segments.length === 0) {
|
|
83
|
+
return "";
|
|
84
|
+
}
|
|
85
|
+
return `/${segments.join("/")}/`;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
export default MaterializedPathUtil;
|
|
89
|
+
//# sourceMappingURL=MaterializedPathUtil.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MaterializedPathUtil.js","sourceRoot":"","sources":["../../../../Utils/NetworkSite/MaterializedPathUtil.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Worst-of health rollup for a NetworkSite's device subtree.
|
|
3
|
+
*
|
|
4
|
+
* Each device contributes one MonitorStatus candidate and the highest
|
|
5
|
+
* priority number wins - MonitorStatus.priority is HIGHER = WORSE per the
|
|
6
|
+
* seeded rows (Operational 1 ... Offline 3), regardless of what the column
|
|
7
|
+
* docstring claims. Pure so the whole decision matrix is unit-testable.
|
|
8
|
+
*/
|
|
9
|
+
export class SiteStatusRollupUtil {
|
|
10
|
+
/*
|
|
11
|
+
* Returns the winning MonitorStatus id for a set of devices, or null when
|
|
12
|
+
* no device contributes anything (empty subtree, or freshness fallbacks
|
|
13
|
+
* unavailable because the project has no operational/offline rows) - the
|
|
14
|
+
* caller treats null as "leave the site's status untouched".
|
|
15
|
+
*
|
|
16
|
+
* Per device: a stamped monitor status (with a known priority) wins;
|
|
17
|
+
* otherwise lastSeenAt within the freshness window maps to the project's
|
|
18
|
+
* isOperationalState row and anything staler (or never seen) maps to the
|
|
19
|
+
* isOfflineState row. Priority ties keep the first contributor (stable).
|
|
20
|
+
*/
|
|
21
|
+
static worstStatus(data) {
|
|
22
|
+
var _a;
|
|
23
|
+
const now = data.now || new Date();
|
|
24
|
+
const windowInMinutes = (_a = data.freshnessWindowInMinutes) !== null && _a !== void 0 ? _a : SiteStatusRollupUtil.DEFAULT_FRESHNESS_WINDOW_IN_MINUTES;
|
|
25
|
+
const windowInMs = windowInMinutes * 60 * 1000;
|
|
26
|
+
let winner = null;
|
|
27
|
+
for (const device of data.deviceStates) {
|
|
28
|
+
let candidate = null;
|
|
29
|
+
if (device.currentMonitorStatusId &&
|
|
30
|
+
typeof device.monitorStatusPriority === "number" &&
|
|
31
|
+
Number.isFinite(device.monitorStatusPriority)) {
|
|
32
|
+
candidate = {
|
|
33
|
+
monitorStatusId: device.currentMonitorStatusId,
|
|
34
|
+
priority: device.monitorStatusPriority,
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
else {
|
|
38
|
+
const lastSeenAtInMs = device.lastSeenAt
|
|
39
|
+
? new Date(device.lastSeenAt).getTime()
|
|
40
|
+
: null;
|
|
41
|
+
const isFresh = lastSeenAtInMs !== null &&
|
|
42
|
+
now.getTime() - lastSeenAtInMs <= windowInMs;
|
|
43
|
+
candidate = isFresh
|
|
44
|
+
? data.operationalStatus || null
|
|
45
|
+
: data.offlineStatus || null;
|
|
46
|
+
}
|
|
47
|
+
if (!candidate) {
|
|
48
|
+
continue;
|
|
49
|
+
}
|
|
50
|
+
if (!winner || candidate.priority > winner.priority) {
|
|
51
|
+
winner = candidate;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
return winner ? winner.monitorStatusId : null;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
// A device is considered alive when SNMP data arrived within this window.
|
|
58
|
+
SiteStatusRollupUtil.DEFAULT_FRESHNESS_WINDOW_IN_MINUTES = 15;
|
|
59
|
+
export default SiteStatusRollupUtil;
|
|
60
|
+
//# sourceMappingURL=SiteStatusRollupUtil.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SiteStatusRollupUtil.js","sourceRoot":"","sources":["../../../../Utils/NetworkSite/SiteStatusRollupUtil.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAqBH,MAAM,OAAO,oBAAoB;IAI/B;;;;;;;;;;OAUG;IACI,MAAM,CAAC,WAAW,CAAC,IAMzB;;QACC,MAAM,GAAG,GAAS,IAAI,CAAC,GAAG,IAAI,IAAI,IAAI,EAAE,CAAC;QACzC,MAAM,eAAe,GACnB,MAAA,IAAI,CAAC,wBAAwB,mCAC7B,oBAAoB,CAAC,mCAAmC,CAAC;QAC3D,MAAM,UAAU,GAAW,eAAe,GAAG,EAAE,GAAG,IAAI,CAAC;QAEvD,IAAI,MAAM,GAA8B,IAAI,CAAC;QAE7C,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACvC,IAAI,SAAS,GAA8B,IAAI,CAAC;YAEhD,IACE,MAAM,CAAC,sBAAsB;gBAC7B,OAAO,MAAM,CAAC,qBAAqB,KAAK,QAAQ;gBAChD,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,qBAAqB,CAAC,EAC7C,CAAC;gBACD,SAAS,GAAG;oBACV,eAAe,EAAE,MAAM,CAAC,sBAAsB;oBAC9C,QAAQ,EAAE,MAAM,CAAC,qBAAqB;iBACvC,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,MAAM,cAAc,GAAkB,MAAM,CAAC,UAAU;oBACrD,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,OAAO,EAAE;oBACvC,CAAC,CAAC,IAAI,CAAC;gBACT,MAAM,OAAO,GACX,cAAc,KAAK,IAAI;oBACvB,GAAG,CAAC,OAAO,EAAE,GAAG,cAAc,IAAI,UAAU,CAAC;gBAE/C,SAAS,GAAG,OAAO;oBACjB,CAAC,CAAC,IAAI,CAAC,iBAAiB,IAAI,IAAI;oBAChC,CAAC,CAAC,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC;YACjC,CAAC;YAED,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,SAAS;YACX,CAAC;YAED,IAAI,CAAC,MAAM,IAAI,SAAS,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC;gBACpD,MAAM,GAAG,SAAS,CAAC;YACrB,CAAC;QACH,CAAC;QAED,OAAO,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC;IAChD,CAAC;;AAhED,0EAA0E;AACnD,wDAAmC,GAAW,EAAE,CAAC;AAkE1E,eAAe,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Uptime percentage over a NetworkSiteStatusTimeline window.
|
|
3
|
+
*
|
|
4
|
+
* Every row whose status is not flagged operational counts as downtime.
|
|
5
|
+
* Rows are clamped to the window, an open row (endsAt null) extends to the
|
|
6
|
+
* window end, and overlapping down rows are merged so no second is counted
|
|
7
|
+
* twice. Time not covered by any row counts as up - the timeline only gains
|
|
8
|
+
* rows once a rollup has run, and absence of evidence is not an outage.
|
|
9
|
+
*/
|
|
10
|
+
export class SiteUptimeUtil {
|
|
11
|
+
/*
|
|
12
|
+
* Percent of [windowStart, windowEnd) the site was NOT in a
|
|
13
|
+
* non-operational status. Returns 100 for an empty or inverted window.
|
|
14
|
+
* The result is exact (not rounded) and clamped to 0..100.
|
|
15
|
+
*/
|
|
16
|
+
static calculateUptimePercent(rows, windowStart, windowEnd) {
|
|
17
|
+
const windowStartInMs = windowStart.getTime();
|
|
18
|
+
const windowEndInMs = windowEnd.getTime();
|
|
19
|
+
const windowInMs = windowEndInMs - windowStartInMs;
|
|
20
|
+
if (!Number.isFinite(windowInMs) || windowInMs <= 0) {
|
|
21
|
+
return 100;
|
|
22
|
+
}
|
|
23
|
+
const downIntervals = [];
|
|
24
|
+
for (const row of rows) {
|
|
25
|
+
if (row.isOperationalState) {
|
|
26
|
+
continue;
|
|
27
|
+
}
|
|
28
|
+
const rowStartInMs = new Date(row.startsAt).getTime();
|
|
29
|
+
const rowEndInMs = row.endsAt
|
|
30
|
+
? new Date(row.endsAt).getTime()
|
|
31
|
+
: windowEndInMs;
|
|
32
|
+
if (!Number.isFinite(rowStartInMs) || !Number.isFinite(rowEndInMs)) {
|
|
33
|
+
continue;
|
|
34
|
+
}
|
|
35
|
+
const clampedStartInMs = Math.max(rowStartInMs, windowStartInMs);
|
|
36
|
+
const clampedEndInMs = Math.min(rowEndInMs, windowEndInMs);
|
|
37
|
+
if (clampedEndInMs <= clampedStartInMs) {
|
|
38
|
+
continue;
|
|
39
|
+
}
|
|
40
|
+
downIntervals.push({
|
|
41
|
+
startInMs: clampedStartInMs,
|
|
42
|
+
endInMs: clampedEndInMs,
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
const downInMs = SiteUptimeUtil.totalCoveredMs(downIntervals);
|
|
46
|
+
const uptimePercent = ((windowInMs - downInMs) / windowInMs) * 100;
|
|
47
|
+
return Math.min(100, Math.max(0, uptimePercent));
|
|
48
|
+
}
|
|
49
|
+
// Sum of interval lengths after merging overlaps.
|
|
50
|
+
static totalCoveredMs(intervals) {
|
|
51
|
+
if (intervals.length === 0) {
|
|
52
|
+
return 0;
|
|
53
|
+
}
|
|
54
|
+
const sorted = [...intervals].sort((a, b) => {
|
|
55
|
+
return a.startInMs - b.startInMs;
|
|
56
|
+
});
|
|
57
|
+
let totalInMs = 0;
|
|
58
|
+
let currentStartInMs = sorted[0].startInMs;
|
|
59
|
+
let currentEndInMs = sorted[0].endInMs;
|
|
60
|
+
for (let i = 1; i < sorted.length; i++) {
|
|
61
|
+
const interval = sorted[i];
|
|
62
|
+
if (interval.startInMs <= currentEndInMs) {
|
|
63
|
+
currentEndInMs = Math.max(currentEndInMs, interval.endInMs);
|
|
64
|
+
}
|
|
65
|
+
else {
|
|
66
|
+
totalInMs += currentEndInMs - currentStartInMs;
|
|
67
|
+
currentStartInMs = interval.startInMs;
|
|
68
|
+
currentEndInMs = interval.endInMs;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
totalInMs += currentEndInMs - currentStartInMs;
|
|
72
|
+
return totalInMs;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
export default SiteUptimeUtil;
|
|
76
|
+
//# sourceMappingURL=SiteUptimeUtil.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SiteUptimeUtil.js","sourceRoot":"","sources":["../../../../Utils/NetworkSite/SiteUptimeUtil.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { Gray500, Green, Red, Yellow } from "../../Types/BrandColors";
|
|
2
|
+
import SloStatus from "../../Types/ServiceLevelObjective/SloStatus";
|
|
3
|
+
export const getSloStatusColor = (status) => {
|
|
4
|
+
if (status === SloStatus.Healthy) {
|
|
5
|
+
return Green;
|
|
6
|
+
}
|
|
7
|
+
if (status === SloStatus.AtRisk) {
|
|
8
|
+
return Yellow;
|
|
9
|
+
}
|
|
10
|
+
if (status === SloStatus.BudgetExhausted) {
|
|
11
|
+
return Red;
|
|
12
|
+
}
|
|
13
|
+
return Gray500;
|
|
14
|
+
};
|
|
15
|
+
export const getSloStatusText = (status) => {
|
|
16
|
+
return status || "Unknown";
|
|
17
|
+
};
|
|
18
|
+
//# sourceMappingURL=SloStatusColor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SloStatusColor.js","sourceRoot":"","sources":["../../../../Utils/Slo/SloStatusColor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AAEtE,OAAO,SAAS,MAAM,6CAA6C,CAAC;AAoBpE,MAAM,CAAC,MAAM,iBAAiB,GAA8B,CAC1D,MAAoC,EAC7B,EAAE;IACT,IAAI,MAAM,KAAK,SAAS,CAAC,OAAO,EAAE,CAAC;QACjC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,MAAM,KAAK,SAAS,CAAC,MAAM,EAAE,CAAC;QAChC,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,IAAI,MAAM,KAAK,SAAS,CAAC,eAAe,EAAE,CAAC;QACzC,OAAO,GAAG,CAAC;IACb,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC;AAWF,MAAM,CAAC,MAAM,gBAAgB,GAA6B,CACxD,MAAoC,EAC5B,EAAE;IACV,OAAO,MAAM,IAAI,SAAS,CAAC;AAC7B,CAAC,CAAC"}
|