@oneuptime/common 11.6.1 → 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/Index.ts +4 -0
- package/Models/AnalyticsModels/KubernetesCostAllocation.ts +842 -0
- 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 +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 +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 +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/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/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/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/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 +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 +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 +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 +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/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,393 @@
|
|
|
1
|
+
import OneUptimeDate, { Moment } from "../../Types/Date";
|
|
2
|
+
import BadDataException from "../../Types/Exception/BadDataException";
|
|
3
|
+
import SloMultiMonitorMode from "../../Types/ServiceLevelObjective/SloMultiMonitorMode";
|
|
4
|
+
import SloStatus from "../../Types/ServiceLevelObjective/SloStatus";
|
|
5
|
+
import UptimeUtil from "../Uptime/UptimeUtil";
|
|
6
|
+
/**
|
|
7
|
+
* SLO / error budget math. Isomorphic (no server imports) so it is shared by the
|
|
8
|
+
* worker, the dashboard, and later the status page - exactly like UptimeUtil.
|
|
9
|
+
*
|
|
10
|
+
* Design notes (see SLO design doc paragraph 3.1 / 5):
|
|
11
|
+
*
|
|
12
|
+
* - Multi-monitor downtime must NOT be computed by feeding several monitors into
|
|
13
|
+
* UptimeUtil.getNonOverlappingMonitorEvents: its priority flatten lets a
|
|
14
|
+
* better-status event that merely ends later truncate a concurrent worse-status
|
|
15
|
+
* event (Monitor A Offline 10:00-11:00 + Monitor B Operational 10:30-12:00
|
|
16
|
+
* silently loses 30 minutes of downtime). That flatten was built for rendering
|
|
17
|
+
* one status-page bar, not cross-monitor budget math. This util therefore works
|
|
18
|
+
* per monitor (getMonitorEventsForId is per-monitor and correct) and combines
|
|
19
|
+
* monitors with explicit semantics (SloMultiMonitorMode).
|
|
20
|
+
*
|
|
21
|
+
* - Every comparison against a threshold uses UNROUNDED values. Round only at
|
|
22
|
+
* render time (roundForDisplay floors - fine for display, wrong for
|
|
23
|
+
* classification).
|
|
24
|
+
*/
|
|
25
|
+
export default class SloUtil {
|
|
26
|
+
/**
|
|
27
|
+
* Extracts the downtime intervals of a SINGLE monitor inside the window.
|
|
28
|
+
* Uses UptimeUtil.getMonitorEventsForId, which is per-monitor: it clips events
|
|
29
|
+
* to the window, caps them at "now" and imputes an end for open
|
|
30
|
+
* (endsAt = null) rows. Events whose status is not in `downtimeStatuses` are
|
|
31
|
+
* dropped.
|
|
32
|
+
*/
|
|
33
|
+
static getDowntimeIntervalsForMonitor(monitorId, timelines, downtimeStatuses, window) {
|
|
34
|
+
const events = UptimeUtil.getMonitorEventsForId(monitorId, timelines, window);
|
|
35
|
+
const intervals = [];
|
|
36
|
+
for (const event of events) {
|
|
37
|
+
const isDowntimeEvent = Boolean(downtimeStatuses.find((status) => {
|
|
38
|
+
var _a;
|
|
39
|
+
return ((_a = status.id) === null || _a === void 0 ? void 0 : _a.toString()) === event.eventStatusId.toString();
|
|
40
|
+
}));
|
|
41
|
+
if (isDowntimeEvent) {
|
|
42
|
+
intervals.push({
|
|
43
|
+
startDate: event.startDate,
|
|
44
|
+
endDate: event.endDate,
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
return intervals;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* The EARLIEST event start across the attached monitors inside `window`, or
|
|
52
|
+
* null when no monitor has an event that overlaps the window at all.
|
|
53
|
+
*
|
|
54
|
+
* Uses the SAME UptimeUtil.getMonitorEventsForId clipping path the SLI
|
|
55
|
+
* denominator uses, so the answer has identical semantics to the clamp inside
|
|
56
|
+
* computeTimeSli: because events are clipped to the window, the returned date
|
|
57
|
+
* is always >= window.startDate, i.e. it is "how far back this window can
|
|
58
|
+
* actually see data".
|
|
59
|
+
*
|
|
60
|
+
* This exists for callers that must distinguish "the metric is fine" from
|
|
61
|
+
* "we have not observed enough history to judge it yet" - most importantly the
|
|
62
|
+
* burn-rate evaluator, whose FIXED-LENGTH long window would otherwise silently
|
|
63
|
+
* collapse to the data age (see EvaluateSlos.evaluateBurnRateRule).
|
|
64
|
+
*/
|
|
65
|
+
static getEarliestEventStartDate(perMonitorTimelines, window) {
|
|
66
|
+
let earliestEventStart = null;
|
|
67
|
+
for (const monitor of perMonitorTimelines) {
|
|
68
|
+
const events = UptimeUtil.getMonitorEventsForId(monitor.monitorId, monitor.timelines, window);
|
|
69
|
+
for (const event of events) {
|
|
70
|
+
if (!earliestEventStart ||
|
|
71
|
+
event.startDate.getTime() < earliestEventStart.getTime()) {
|
|
72
|
+
earliestEventStart = event.startDate;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
return earliestEventStart;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Merges overlapping and adjacent intervals into a disjoint, sorted set.
|
|
80
|
+
* Millisecond-precise (raw timestamps, not second-granularity moment
|
|
81
|
+
* comparisons) so the merged length agrees with
|
|
82
|
+
* OneUptimeDate.getSecondsBetweenDates.
|
|
83
|
+
*/
|
|
84
|
+
static mergeIntervals(intervals) {
|
|
85
|
+
const sorted = [...intervals].sort((a, b) => {
|
|
86
|
+
return a.startDate.getTime() - b.startDate.getTime();
|
|
87
|
+
});
|
|
88
|
+
const merged = [];
|
|
89
|
+
for (const interval of sorted) {
|
|
90
|
+
// skip empty / inverted intervals.
|
|
91
|
+
if (interval.endDate.getTime() <= interval.startDate.getTime()) {
|
|
92
|
+
continue;
|
|
93
|
+
}
|
|
94
|
+
const last = merged[merged.length - 1];
|
|
95
|
+
// overlapping OR adjacent (start === last end) -> extend the last interval.
|
|
96
|
+
if (last && interval.startDate.getTime() <= last.endDate.getTime()) {
|
|
97
|
+
if (interval.endDate.getTime() > last.endDate.getTime()) {
|
|
98
|
+
last.endDate = interval.endDate;
|
|
99
|
+
}
|
|
100
|
+
continue;
|
|
101
|
+
}
|
|
102
|
+
merged.push({
|
|
103
|
+
startDate: interval.startDate,
|
|
104
|
+
endDate: interval.endDate,
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
return merged;
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Union downtime across monitors: per monitor, extract its down intervals from
|
|
111
|
+
* its OWN event list, then take the interval union across monitors and sum the
|
|
112
|
+
* seconds. This is the AnyDown numerator.
|
|
113
|
+
*
|
|
114
|
+
* The correctness case this exists for: Monitor A Offline 10:00-11:00 while
|
|
115
|
+
* Monitor B is Operational 10:30-12:00 must yield 3600 seconds of downtime,
|
|
116
|
+
* NOT 1800 - which is what the cross-monitor priority flatten in
|
|
117
|
+
* UptimeUtil.getNonOverlappingMonitorEvents produces.
|
|
118
|
+
*/
|
|
119
|
+
static getUnionDowntimeSeconds(perMonitor, downtimeStatuses, window) {
|
|
120
|
+
const allIntervals = [];
|
|
121
|
+
for (const monitor of perMonitor) {
|
|
122
|
+
allIntervals.push(...this.getDowntimeIntervalsForMonitor(monitor.monitorId, monitor.timelines, downtimeStatuses, window));
|
|
123
|
+
}
|
|
124
|
+
const merged = this.mergeIntervals(allIntervals);
|
|
125
|
+
let totalSeconds = 0;
|
|
126
|
+
for (const interval of merged) {
|
|
127
|
+
totalSeconds += OneUptimeDate.getSecondsBetweenDates(interval.startDate, interval.endDate);
|
|
128
|
+
}
|
|
129
|
+
return totalSeconds;
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Time-based SLI over MonitorStatusTimeline data.
|
|
133
|
+
*
|
|
134
|
+
* Denominator rules:
|
|
135
|
+
* - The window end is always clipped to "now" (a window reaching into the
|
|
136
|
+
* future must not inflate the denominator).
|
|
137
|
+
* - AnyDown: the window start is clamped forward to the EARLIEST first event
|
|
138
|
+
* across the attached monitors, so a young SLO is measured from its first
|
|
139
|
+
* data point, not diluted by time before any monitor existed. The clamp uses
|
|
140
|
+
* the merged set's earliest event so that one old monitor anchors the window
|
|
141
|
+
* for the whole SLO.
|
|
142
|
+
* - MonitorSecondsAverage: the clamp happens PER MONITOR (each monitor's own
|
|
143
|
+
* first event), mirroring UptimeUtil.getTotalDowntimeInSeconds - otherwise
|
|
144
|
+
* adding a young monitor dilutes the SLI.
|
|
145
|
+
*
|
|
146
|
+
* No data at all (no timeline rows for any monitor) => totalSeconds 0,
|
|
147
|
+
* sliPercentage 100 - callers decide what "no data" means (the evaluator marks
|
|
148
|
+
* such SLOs Misconfigured/Paused; it never treats them as healthy 100%).
|
|
149
|
+
*
|
|
150
|
+
* Rows exist but none overlap the window => the monitor was up for the whole
|
|
151
|
+
* window as far as the window can tell: full-window denominator, 0 bad seconds
|
|
152
|
+
* (same answer UptimeUtil gives - see the "orphaned row" production incident
|
|
153
|
+
* test in UptimeUtil.test.ts).
|
|
154
|
+
*
|
|
155
|
+
* All values are UNROUNDED.
|
|
156
|
+
*/
|
|
157
|
+
static computeTimeSli(data) {
|
|
158
|
+
const { perMonitorTimelines, downtimeStatuses, window, mode } = data;
|
|
159
|
+
const hasAnyTimelineRows = perMonitorTimelines.some((monitor) => {
|
|
160
|
+
return monitor.timelines.length > 0;
|
|
161
|
+
});
|
|
162
|
+
if (!hasAnyTimelineRows) {
|
|
163
|
+
return {
|
|
164
|
+
badSeconds: 0,
|
|
165
|
+
totalSeconds: 0,
|
|
166
|
+
sliPercentage: 100,
|
|
167
|
+
};
|
|
168
|
+
}
|
|
169
|
+
if (mode === SloMultiMonitorMode.MonitorSecondsAverage) {
|
|
170
|
+
return this.computeMonitorSecondsAverageSli({
|
|
171
|
+
perMonitorTimelines,
|
|
172
|
+
downtimeStatuses,
|
|
173
|
+
window,
|
|
174
|
+
});
|
|
175
|
+
}
|
|
176
|
+
return this.computeAnyDownSli({
|
|
177
|
+
perMonitorTimelines,
|
|
178
|
+
downtimeStatuses,
|
|
179
|
+
window,
|
|
180
|
+
});
|
|
181
|
+
}
|
|
182
|
+
static computeAnyDownSli(data) {
|
|
183
|
+
const { perMonitorTimelines, downtimeStatuses, window } = data;
|
|
184
|
+
const windowEndDate = OneUptimeDate.getLesserDate(window.endDate, OneUptimeDate.getCurrentDate());
|
|
185
|
+
/*
|
|
186
|
+
* Earliest first event across monitors. Events from getMonitorEventsForId are
|
|
187
|
+
* already clipped to the window, so every start is >= window.startDate: the
|
|
188
|
+
* clamp can only move the window start FORWARD (young SLO), never backward.
|
|
189
|
+
*/
|
|
190
|
+
const earliestEventStart = this.getEarliestEventStartDate(perMonitorTimelines, window);
|
|
191
|
+
/*
|
|
192
|
+
* Rows exist but none clip into the window: as far as the window can tell the
|
|
193
|
+
* monitors were up throughout - full-window denominator, zero bad seconds
|
|
194
|
+
* (matches UptimeUtil's behaviour for the same input).
|
|
195
|
+
*/
|
|
196
|
+
const windowStartDate = earliestEventStart
|
|
197
|
+
? OneUptimeDate.getGreaterDate(window.startDate, earliestEventStart)
|
|
198
|
+
: window.startDate;
|
|
199
|
+
const totalSeconds = OneUptimeDate.getSecondsBetweenDates(windowStartDate, windowEndDate);
|
|
200
|
+
if (totalSeconds <= 0) {
|
|
201
|
+
return {
|
|
202
|
+
badSeconds: 0,
|
|
203
|
+
totalSeconds: 0,
|
|
204
|
+
sliPercentage: 100,
|
|
205
|
+
};
|
|
206
|
+
}
|
|
207
|
+
const badSeconds = this.getUnionDowntimeSeconds(perMonitorTimelines, downtimeStatuses, window);
|
|
208
|
+
return {
|
|
209
|
+
badSeconds,
|
|
210
|
+
totalSeconds,
|
|
211
|
+
sliPercentage: ((totalSeconds - badSeconds) / totalSeconds) * 100,
|
|
212
|
+
};
|
|
213
|
+
}
|
|
214
|
+
static computeMonitorSecondsAverageSli(data) {
|
|
215
|
+
const { perMonitorTimelines, downtimeStatuses, window } = data;
|
|
216
|
+
let badSeconds = 0;
|
|
217
|
+
let totalSeconds = 0;
|
|
218
|
+
for (const monitor of perMonitorTimelines) {
|
|
219
|
+
/*
|
|
220
|
+
* Guard against rows of other monitors leaking into this monitor's array -
|
|
221
|
+
* getTotalDowntimeInSeconds does not filter by monitor id, and feeding it a
|
|
222
|
+
* multi-monitor array would reintroduce the priority-flatten bug.
|
|
223
|
+
*/
|
|
224
|
+
const ownTimelines = monitor.timelines.filter((timeline) => {
|
|
225
|
+
var _a;
|
|
226
|
+
return (((_a = timeline.monitorId) === null || _a === void 0 ? void 0 : _a.toString()) === monitor.monitorId.toString());
|
|
227
|
+
});
|
|
228
|
+
/*
|
|
229
|
+
* A monitor with no timeline rows at all has no data - skip it instead of
|
|
230
|
+
* letting it contribute a full window of implied uptime.
|
|
231
|
+
*/
|
|
232
|
+
if (ownTimelines.length === 0) {
|
|
233
|
+
continue;
|
|
234
|
+
}
|
|
235
|
+
const { totalDowntimeInSeconds, totalSecondsInTimePeriod, } = UptimeUtil.getTotalDowntimeInSeconds(ownTimelines, downtimeStatuses, window);
|
|
236
|
+
badSeconds += totalDowntimeInSeconds;
|
|
237
|
+
totalSeconds += totalSecondsInTimePeriod;
|
|
238
|
+
}
|
|
239
|
+
if (totalSeconds <= 0) {
|
|
240
|
+
return {
|
|
241
|
+
badSeconds: 0,
|
|
242
|
+
totalSeconds: 0,
|
|
243
|
+
sliPercentage: 100,
|
|
244
|
+
};
|
|
245
|
+
}
|
|
246
|
+
return {
|
|
247
|
+
badSeconds,
|
|
248
|
+
totalSeconds,
|
|
249
|
+
sliPercentage: (1 - badSeconds / totalSeconds) * 100,
|
|
250
|
+
};
|
|
251
|
+
}
|
|
252
|
+
/**
|
|
253
|
+
* Error budget from an SLI measurement.
|
|
254
|
+
*
|
|
255
|
+
* Provide either `sliPercentage` or `badSeconds` (badSeconds wins when both are
|
|
256
|
+
* given, since it is the exact number the SLI was derived from).
|
|
257
|
+
*
|
|
258
|
+
* budgetRemainingSeconds is SIGNED - negative when over budget. Never clamp it
|
|
259
|
+
* here; clamp in the UI only. budgetRemainingPercentage is capped at 100 but
|
|
260
|
+
* NOT floored at 0.
|
|
261
|
+
*/
|
|
262
|
+
static getErrorBudget(data) {
|
|
263
|
+
const { sliPercentage, badSeconds, totalSeconds, targetPercentage } = data;
|
|
264
|
+
this.validateTargetPercentage(targetPercentage);
|
|
265
|
+
if (badSeconds === undefined && sliPercentage === undefined) {
|
|
266
|
+
throw new BadDataException("Either sliPercentage or badSeconds must be provided to compute the error budget.");
|
|
267
|
+
}
|
|
268
|
+
// no elapsed window yet => nothing consumed, full budget remaining.
|
|
269
|
+
if (totalSeconds === 0) {
|
|
270
|
+
return {
|
|
271
|
+
budgetTotalSeconds: 0,
|
|
272
|
+
budgetConsumedSeconds: 0,
|
|
273
|
+
budgetRemainingSeconds: 0,
|
|
274
|
+
budgetRemainingPercentage: 100,
|
|
275
|
+
};
|
|
276
|
+
}
|
|
277
|
+
const allowedBadFraction = 1 - targetPercentage / 100;
|
|
278
|
+
const budgetTotalSeconds = allowedBadFraction * totalSeconds;
|
|
279
|
+
const budgetConsumedSeconds = badSeconds !== undefined
|
|
280
|
+
? badSeconds
|
|
281
|
+
: (1 - sliPercentage / 100) * totalSeconds;
|
|
282
|
+
const budgetRemainingSeconds = budgetTotalSeconds - budgetConsumedSeconds;
|
|
283
|
+
const budgetRemainingPercentage = Math.min(100, (budgetRemainingSeconds / budgetTotalSeconds) * 100);
|
|
284
|
+
return {
|
|
285
|
+
budgetTotalSeconds,
|
|
286
|
+
budgetConsumedSeconds,
|
|
287
|
+
budgetRemainingSeconds,
|
|
288
|
+
budgetRemainingPercentage,
|
|
289
|
+
};
|
|
290
|
+
}
|
|
291
|
+
/**
|
|
292
|
+
* Burn rate: how many times faster than "exactly on target" the budget is being
|
|
293
|
+
* consumed over the measured period. 1 = burning exactly the sustainable rate,
|
|
294
|
+
* 14.4 = the canonical fast-burn page threshold for a 30-day window.
|
|
295
|
+
*
|
|
296
|
+
* Works identically for seconds (time-based SLIs) and event counts (event-based
|
|
297
|
+
* SLIs) - pass bad/total counts in badSeconds/totalSeconds.
|
|
298
|
+
*
|
|
299
|
+
* totalSeconds === 0 (no data in the lookback) => 0: no evidence of burn -
|
|
300
|
+
* callers skip burn rules on no-data windows.
|
|
301
|
+
*/
|
|
302
|
+
static computeBurnRate(data) {
|
|
303
|
+
const { badSeconds, totalSeconds, targetPercentage } = data;
|
|
304
|
+
this.validateTargetPercentage(targetPercentage);
|
|
305
|
+
if (totalSeconds === 0) {
|
|
306
|
+
return 0;
|
|
307
|
+
}
|
|
308
|
+
const allowedBadFraction = 1 - targetPercentage / 100;
|
|
309
|
+
return badSeconds / totalSeconds / allowedBadFraction;
|
|
310
|
+
}
|
|
311
|
+
/**
|
|
312
|
+
* Status from remaining budget, with hysteresis so rolling windows that
|
|
313
|
+
* re-cross a boundary as bad seconds age out do not flap:
|
|
314
|
+
*
|
|
315
|
+
* - enter BudgetExhausted when remaining <= 0; exit only when remaining >= 2
|
|
316
|
+
* - enter AtRisk when remaining <= atRiskThreshold; exit back to Healthy only
|
|
317
|
+
* when remaining >= atRiskThreshold + 5
|
|
318
|
+
*
|
|
319
|
+
* All comparisons use UNROUNDED percentages. This function never emits
|
|
320
|
+
* Misconfigured or Paused - those are set by the caller (zero monitors /
|
|
321
|
+
* all monitors paused) before any math runs.
|
|
322
|
+
*/
|
|
323
|
+
static computeSloStatus(data) {
|
|
324
|
+
const { budgetRemainingPercentage, currentStatus } = data;
|
|
325
|
+
const threshold = data.atRiskThresholdPercentage;
|
|
326
|
+
// enter exhausted.
|
|
327
|
+
if (budgetRemainingPercentage <= 0) {
|
|
328
|
+
return SloStatus.BudgetExhausted;
|
|
329
|
+
}
|
|
330
|
+
// hysteresis: stay exhausted until the budget has meaningfully recovered.
|
|
331
|
+
if (currentStatus === SloStatus.BudgetExhausted &&
|
|
332
|
+
budgetRemainingPercentage < 2) {
|
|
333
|
+
return SloStatus.BudgetExhausted;
|
|
334
|
+
}
|
|
335
|
+
// enter at risk.
|
|
336
|
+
if (budgetRemainingPercentage <= threshold) {
|
|
337
|
+
return SloStatus.AtRisk;
|
|
338
|
+
}
|
|
339
|
+
// hysteresis: stay at risk until comfortably above the threshold.
|
|
340
|
+
if (currentStatus === SloStatus.AtRisk &&
|
|
341
|
+
budgetRemainingPercentage < threshold + 5) {
|
|
342
|
+
return SloStatus.AtRisk;
|
|
343
|
+
}
|
|
344
|
+
return SloStatus.Healthy;
|
|
345
|
+
}
|
|
346
|
+
/**
|
|
347
|
+
* The full calendar month containing `at`, resolved in the given IANA timezone
|
|
348
|
+
* (default UTC - calendar boundaries are undefined without a zone). Timezone
|
|
349
|
+
* support comes from moment-timezone, which OneUptimeDate already wraps.
|
|
350
|
+
*
|
|
351
|
+
* `endDate` is EXCLUSIVE (the first instant of the next month).
|
|
352
|
+
* `totalSecondsInFullPeriod` is the real elapsed seconds of the whole month and
|
|
353
|
+
* is the budget denominator for calendar windows - fixed at period start, NOT
|
|
354
|
+
* elapsed time. Note the rollover consequence: on the 1st the budget silently
|
|
355
|
+
* resets to full.
|
|
356
|
+
*/
|
|
357
|
+
static getCalendarMonthWindow(data) {
|
|
358
|
+
const timezone = data.timezone || "UTC";
|
|
359
|
+
if (!Moment.tz.zone(timezone)) {
|
|
360
|
+
throw new BadDataException(`Unknown timezone: ${timezone}`);
|
|
361
|
+
}
|
|
362
|
+
const startOfMonth = Moment.tz(data.at, timezone).startOf("month");
|
|
363
|
+
const startDate = startOfMonth.toDate();
|
|
364
|
+
const endDate = startOfMonth.clone().add(1, "month").toDate();
|
|
365
|
+
return {
|
|
366
|
+
startDate,
|
|
367
|
+
endDate,
|
|
368
|
+
totalSecondsInFullPeriod: OneUptimeDate.getSecondsBetweenDates(startDate, endDate),
|
|
369
|
+
};
|
|
370
|
+
}
|
|
371
|
+
/**
|
|
372
|
+
* Display-only rounding (delegates to UptimeUtil.roundToPrecision, which
|
|
373
|
+
* FLOORS). All status/threshold comparisons in this util use unrounded values;
|
|
374
|
+
* use this at render time only - never before classification.
|
|
375
|
+
*/
|
|
376
|
+
static roundForDisplay(value, precision) {
|
|
377
|
+
return UptimeUtil.roundToPrecision({
|
|
378
|
+
number: value,
|
|
379
|
+
precision,
|
|
380
|
+
});
|
|
381
|
+
}
|
|
382
|
+
static validateTargetPercentage(targetPercentage) {
|
|
383
|
+
/*
|
|
384
|
+
* target >= 100 makes allowedBadFraction 0 (or negative): every budget
|
|
385
|
+
* formula divides by zero and NaN propagates everywhere. target <= 0 is
|
|
386
|
+
* meaningless.
|
|
387
|
+
*/
|
|
388
|
+
if (targetPercentage >= 100 || targetPercentage <= 0) {
|
|
389
|
+
throw new BadDataException("SLO target percentage must be greater than 0 and less than 100.");
|
|
390
|
+
}
|
|
391
|
+
}
|
|
392
|
+
}
|
|
393
|
+
//# sourceMappingURL=SloUtil.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SloUtil.js","sourceRoot":"","sources":["../../../../Utils/Slo/SloUtil.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
import AggregationInterval from "../../Types/BaseDatabase/AggregationInterval";
|
|
2
|
+
import { SloWidgetMetric } from "../../Types/Dashboard/DashboardComponents/DashboardSloComponent";
|
|
3
|
+
/**
|
|
4
|
+
* Pure value/label derivation for the dashboard SLO widget.
|
|
5
|
+
*
|
|
6
|
+
* Everything the widget needs to turn a ServiceLevelObjective row into
|
|
7
|
+
* display strings lives here rather than in the React renderer, so the
|
|
8
|
+
* formatting rules (and every null / negative / rounding edge) are
|
|
9
|
+
* unit-testable without a DOM.
|
|
10
|
+
*
|
|
11
|
+
* The worker-maintained state columns on ServiceLevelObjective are NULL
|
|
12
|
+
* until the SLO is first evaluated, so every entry point must be able to
|
|
13
|
+
* answer "not evaluated yet" instead of rendering "null%" or "NaN%".
|
|
14
|
+
*/
|
|
15
|
+
/** Shown in place of a number whenever the SLO has no evaluated state. */
|
|
16
|
+
export const SLO_NOT_EVALUATED_TEXT = "Not evaluated yet";
|
|
17
|
+
/** U+2212 MINUS SIGN — reads as a minus rather than a hyphen at tile sizes. */
|
|
18
|
+
const MINUS_SIGN = "−";
|
|
19
|
+
/** U+00D7 MULTIPLICATION SIGN — burn rate is a multiplier ("3.2×"). */
|
|
20
|
+
const MULTIPLICATION_SIGN = "×";
|
|
21
|
+
const toFiniteNumber = (value) => {
|
|
22
|
+
if (typeof value !== "number" || !isFinite(value)) {
|
|
23
|
+
return null;
|
|
24
|
+
}
|
|
25
|
+
return value;
|
|
26
|
+
};
|
|
27
|
+
const roundToDecimals = (value, maxDecimals) => {
|
|
28
|
+
const factor = Math.pow(10, maxDecimals);
|
|
29
|
+
/*
|
|
30
|
+
* `+ 0` normalises -0 (which Math.round can produce from a tiny
|
|
31
|
+
* negative) so it never renders as "-0".
|
|
32
|
+
*/
|
|
33
|
+
return Math.round(value * factor) / factor + 0;
|
|
34
|
+
};
|
|
35
|
+
/**
|
|
36
|
+
* SLI is quoted to three decimals to match the SLO pages — the digits
|
|
37
|
+
* past the second matter at 99.99x targets. Error budget remaining is a
|
|
38
|
+
* coarse gauge, so one decimal is enough; the precise number lives in the
|
|
39
|
+
* seconds subline.
|
|
40
|
+
*/
|
|
41
|
+
const SLI_DECIMALS = 3;
|
|
42
|
+
const BUDGET_PERCENT_DECIMALS = 1;
|
|
43
|
+
const BURN_RATE_DECIMALS = 2;
|
|
44
|
+
export const formatSloPercent = (value, maxDecimals) => {
|
|
45
|
+
const numericValue = toFiniteNumber(value);
|
|
46
|
+
if (numericValue === null) {
|
|
47
|
+
return null;
|
|
48
|
+
}
|
|
49
|
+
return `${roundToDecimals(numericValue, maxDecimals !== null && maxDecimals !== void 0 ? maxDecimals : SLI_DECIMALS)}%`;
|
|
50
|
+
};
|
|
51
|
+
export const formatSloBurnRate = (value) => {
|
|
52
|
+
const numericValue = toFiniteNumber(value);
|
|
53
|
+
if (numericValue === null) {
|
|
54
|
+
return null;
|
|
55
|
+
}
|
|
56
|
+
return `${roundToDecimals(numericValue, BURN_RATE_DECIMALS)}${MULTIPLICATION_SIGN}`;
|
|
57
|
+
};
|
|
58
|
+
export const formatErrorBudgetRemainingSeconds = (seconds) => {
|
|
59
|
+
const numericSeconds = toFiniteNumber(seconds);
|
|
60
|
+
if (numericSeconds === null) {
|
|
61
|
+
return null;
|
|
62
|
+
}
|
|
63
|
+
const isOverBudget = numericSeconds < 0;
|
|
64
|
+
const suffix = isOverBudget ? "over budget" : "remaining";
|
|
65
|
+
const minutes = Math.round(Math.abs(numericSeconds) / 60);
|
|
66
|
+
if (minutes === 0) {
|
|
67
|
+
/*
|
|
68
|
+
* Exactly zero is a real state worth stating; a sub-30-second
|
|
69
|
+
* remainder would otherwise round to a misleading "0 min".
|
|
70
|
+
*/
|
|
71
|
+
if (numericSeconds === 0) {
|
|
72
|
+
return `0 min ${suffix}`;
|
|
73
|
+
}
|
|
74
|
+
return `under 1 min ${suffix}`;
|
|
75
|
+
}
|
|
76
|
+
return `${isOverBudget ? MINUS_SIGN : ""}${minutes} min ${suffix}`;
|
|
77
|
+
};
|
|
78
|
+
export const getSloMetricLabel = (sloMetric) => {
|
|
79
|
+
if (sloMetric === SloWidgetMetric.ErrorBudgetRemaining) {
|
|
80
|
+
return "Error Budget Remaining";
|
|
81
|
+
}
|
|
82
|
+
if (sloMetric === SloWidgetMetric.BurnRate) {
|
|
83
|
+
return "Burn Rate";
|
|
84
|
+
}
|
|
85
|
+
// Sli is the default metric, so it is also the fallback label.
|
|
86
|
+
return "SLI";
|
|
87
|
+
};
|
|
88
|
+
export const getSloHistoryMetricName = (sloMetric) => {
|
|
89
|
+
if (sloMetric === SloWidgetMetric.ErrorBudgetRemaining) {
|
|
90
|
+
return "error.budget.remaining.percent";
|
|
91
|
+
}
|
|
92
|
+
if (sloMetric === SloWidgetMetric.BurnRate) {
|
|
93
|
+
return "burn.rate";
|
|
94
|
+
}
|
|
95
|
+
return "sli.percent";
|
|
96
|
+
};
|
|
97
|
+
export const getSloWidgetTitle = (data) => {
|
|
98
|
+
const trimmedTitle = (data.widgetTitle || "").trim();
|
|
99
|
+
if (trimmedTitle) {
|
|
100
|
+
return trimmedTitle;
|
|
101
|
+
}
|
|
102
|
+
const metricLabel = getSloMetricLabel(data.sloMetric);
|
|
103
|
+
const trimmedName = (data.sloName || "").trim();
|
|
104
|
+
if (!trimmedName) {
|
|
105
|
+
return metricLabel;
|
|
106
|
+
}
|
|
107
|
+
return `${trimmedName} · ${metricLabel}`;
|
|
108
|
+
};
|
|
109
|
+
export const getSloWidgetTileDisplay = (data) => {
|
|
110
|
+
const notEvaluated = {
|
|
111
|
+
isEvaluated: false,
|
|
112
|
+
value: SLO_NOT_EVALUATED_TEXT,
|
|
113
|
+
subline: null,
|
|
114
|
+
};
|
|
115
|
+
const slo = data.slo;
|
|
116
|
+
if (!slo) {
|
|
117
|
+
return notEvaluated;
|
|
118
|
+
}
|
|
119
|
+
if (data.sloMetric === SloWidgetMetric.ErrorBudgetRemaining) {
|
|
120
|
+
const value = formatSloPercent(slo.errorBudgetRemainingPercentage, BUDGET_PERCENT_DECIMALS);
|
|
121
|
+
if (value === null) {
|
|
122
|
+
return notEvaluated;
|
|
123
|
+
}
|
|
124
|
+
return {
|
|
125
|
+
isEvaluated: true,
|
|
126
|
+
value: value,
|
|
127
|
+
subline: formatErrorBudgetRemainingSeconds(slo.errorBudgetRemainingSeconds),
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
if (data.sloMetric === SloWidgetMetric.BurnRate) {
|
|
131
|
+
const value = formatSloBurnRate(slo.currentBurnRate);
|
|
132
|
+
if (value === null) {
|
|
133
|
+
return notEvaluated;
|
|
134
|
+
}
|
|
135
|
+
return {
|
|
136
|
+
isEvaluated: true,
|
|
137
|
+
value: value,
|
|
138
|
+
subline: null,
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
// Sli (also the default when the argument was never set).
|
|
142
|
+
const value = formatSloPercent(slo.currentSliPercentage, SLI_DECIMALS);
|
|
143
|
+
if (value === null) {
|
|
144
|
+
return notEvaluated;
|
|
145
|
+
}
|
|
146
|
+
const target = formatSloPercent(slo.targetPercentage, SLI_DECIMALS);
|
|
147
|
+
return {
|
|
148
|
+
isEvaluated: true,
|
|
149
|
+
value: value,
|
|
150
|
+
subline: target === null ? null : `target ${target}`,
|
|
151
|
+
};
|
|
152
|
+
};
|
|
153
|
+
export const getSloChartAggregationInterval = (rangeInMinutes) => {
|
|
154
|
+
if (!isFinite(rangeInMinutes) || rangeInMinutes <= 12 * 60) {
|
|
155
|
+
return AggregationInterval.FiveMinutes;
|
|
156
|
+
}
|
|
157
|
+
if (rangeInMinutes <= 3 * 24 * 60) {
|
|
158
|
+
return AggregationInterval.ThirtyMinutes;
|
|
159
|
+
}
|
|
160
|
+
if (rangeInMinutes <= 45 * 24 * 60) {
|
|
161
|
+
return AggregationInterval.Hour;
|
|
162
|
+
}
|
|
163
|
+
return AggregationInterval.Day;
|
|
164
|
+
};
|
|
165
|
+
export const formatSloChartValue = (sloMetric, value) => {
|
|
166
|
+
if (sloMetric === SloWidgetMetric.BurnRate) {
|
|
167
|
+
return formatSloBurnRate(value) || "";
|
|
168
|
+
}
|
|
169
|
+
if (sloMetric === SloWidgetMetric.ErrorBudgetRemaining) {
|
|
170
|
+
return formatSloPercent(value, BUDGET_PERCENT_DECIMALS) || "";
|
|
171
|
+
}
|
|
172
|
+
return formatSloPercent(value, SLI_DECIMALS) || "";
|
|
173
|
+
};
|
|
174
|
+
//# sourceMappingURL=SloWidgetFormat.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SloWidgetFormat.js","sourceRoot":"","sources":["../../../../Utils/Slo/SloWidgetFormat.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@oneuptime/common",
|
|
3
|
-
"version": "11.6.
|
|
3
|
+
"version": "11.6.2",
|
|
4
4
|
"description": "",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
},
|
|
9
9
|
"main": "index.js",
|
|
10
10
|
"scripts": {
|
|
11
|
-
"test": "cd .. && export $(grep -v '^#' config.env | xargs) && cd Common && node node_modules/.bin/jest --runInBand ./Tests --detectOpenHandles",
|
|
11
|
+
"test": "cd .. && export $(grep -v '^#' config.env | xargs) && cd Common && node --max-old-space-size=6144 node_modules/.bin/jest --runInBand ./Tests --detectOpenHandles",
|
|
12
12
|
"test-file": "cd .. && export $(grep -v '^#' config.env | xargs) && cd Common && node node_modules/.bin/jest --runInBand $1 --detectOpenHandles",
|
|
13
13
|
"coverage": "jest --detectOpenHandles --coverage",
|
|
14
14
|
"compile": "tsc",
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
var DashboardComponentType;
|
|
2
|
-
(function (DashboardComponentType) {
|
|
3
|
-
DashboardComponentType["Chart"] = "Chart";
|
|
4
|
-
DashboardComponentType["Value"] = "Value";
|
|
5
|
-
DashboardComponentType["Text"] = "Text";
|
|
6
|
-
})(DashboardComponentType || (DashboardComponentType = {}));
|
|
7
|
-
export default DashboardComponentType;
|
|
8
|
-
//# sourceMappingURL=Index.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Index.js","sourceRoot":"","sources":["../../../../../Types/Dashboard/DashboardComponents/Index.ts"],"names":[],"mappings":"AAAA,IAAK,sBAIJ;AAJD,WAAK,sBAAsB;IACzB,yCAAe,CAAA;IACf,yCAAe,CAAA;IACf,uCAAa,CAAA;AACf,CAAC,EAJI,sBAAsB,KAAtB,sBAAsB,QAI1B;AAED,eAAe,sBAAsB,CAAC"}
|