@oneuptime/common 11.6.1 → 11.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Models/AnalyticsModels/Index.ts +4 -0
- package/Models/AnalyticsModels/KubernetesCostAllocation.ts +842 -0
- package/Models/AnalyticsModels/NetworkFlow.ts +54 -0
- package/Models/AnalyticsModels/SloHistory.ts +243 -0
- package/Models/DatabaseModels/Index.ts +20 -0
- package/Models/DatabaseModels/NetworkDevice.ts +453 -6
- package/Models/DatabaseModels/NetworkDeviceDiscoveryScan.ts +7 -6
- package/Models/DatabaseModels/NetworkEndpoint.ts +753 -0
- package/Models/DatabaseModels/NetworkSite.ts +1155 -0
- package/Models/DatabaseModels/NetworkSiteAssignmentRule.ts +517 -0
- package/Models/DatabaseModels/NetworkSiteLink.ts +611 -0
- package/Models/DatabaseModels/NetworkSiteStatusTimeline.ts +520 -0
- package/Models/DatabaseModels/NetworkSiteType.ts +499 -0
- package/Models/DatabaseModels/ServiceLevelObjective.ts +1115 -0
- package/Models/DatabaseModels/ServiceLevelObjectiveBurnRateRule.ts +762 -0
- package/Models/DatabaseModels/ServiceLevelObjectiveOwnerTeam.ts +444 -0
- package/Models/DatabaseModels/ServiceLevelObjectiveOwnerUser.ts +443 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1784757142154-AddNetworkSiteHierarchyAndEndpoints.ts +359 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1784897317860-AddNetworkSiteAlerting.ts +48 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1784970388777-AddNetworkDevicePollingColumns.ts +65 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1784986826214-AddNetworkSiteTypeTable.ts +88 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1784987015619-AddServiceLevelObjective.ts +391 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1785066759532-MigrationName.ts +30 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +12 -0
- package/Server/Services/AnalyticsDatabaseService.ts +25 -9
- package/Server/Services/Index.ts +24 -0
- package/Server/Services/KubernetesCostAllocationService.ts +14 -0
- package/Server/Services/MetricService.ts +21 -2
- package/Server/Services/MonitorService.ts +22 -0
- package/Server/Services/NetworkDeviceService.ts +438 -2
- package/Server/Services/NetworkEndpointService.ts +414 -0
- package/Server/Services/NetworkSiteAssignmentRuleService.ts +98 -0
- package/Server/Services/NetworkSiteLinkService.ts +10 -0
- package/Server/Services/NetworkSiteService.ts +1254 -0
- package/Server/Services/NetworkSiteStatusTimelineService.ts +10 -0
- package/Server/Services/NetworkSiteTypeService.ts +10 -0
- package/Server/Services/ProjectService.ts +122 -2
- package/Server/Services/ServiceLevelObjectiveBurnRateRuleService.ts +457 -0
- package/Server/Services/ServiceLevelObjectiveOwnerTeamService.ts +10 -0
- package/Server/Services/ServiceLevelObjectiveOwnerUserService.ts +10 -0
- package/Server/Services/ServiceLevelObjectiveService.ts +685 -0
- package/Server/Services/SloHistoryService.ts +101 -0
- package/Server/Services/UserNotificationSettingService.ts +37 -0
- package/Server/Types/AnalyticsDatabase/AggregateBy.ts +9 -0
- package/Server/Types/Database/Permissions/OwnerTableRegistry.ts +15 -0
- package/Server/Utils/AnalyticsDatabase/Statement.ts +39 -3
- package/Server/Utils/AnalyticsDatabase/StatementGenerator.ts +87 -48
- package/Server/Utils/Memory.ts +9 -1
- package/Server/Utils/Monitor/Criteria/SnmpMonitorCriteria.ts +190 -12
- package/Server/Utils/Monitor/Data/OuiVendors.json +6920 -0
- package/Server/Utils/Monitor/DnsResolutionCache.ts +129 -0
- package/Server/Utils/Monitor/MonitorResource.ts +4 -30
- package/Server/Utils/Monitor/NetworkDeviceHydrationUtil.ts +214 -39
- package/Server/Utils/Monitor/NetworkDeviceMetricUtil.ts +343 -0
- package/Server/Utils/Monitor/NetworkDeviceWalkUtil.ts +251 -0
- package/Server/Utils/Monitor/NetworkInventoryUtil.ts +176 -142
- package/Server/Utils/Monitor/OuiLookupUtil.ts +49 -0
- package/Server/Utils/Monitor/SnmpInterfaceRateUtil.ts +17 -13
- package/Server/Utils/WhatsAppTemplateUtil.ts +7 -3
- package/Tests/Models/AnalyticsModels/KubernetesCostAllocation.test.ts +135 -0
- package/Tests/Models/NetworkSiteHierarchy.test.ts +134 -0
- package/Tests/Server/Services/AnalyticsDatabaseService.test.ts +239 -0
- package/Tests/Server/Services/KubernetesCostAllocationAggregate.test.ts +338 -0
- package/Tests/Server/Services/MetricServiceAggregate.test.ts +142 -0
- package/Tests/Server/Services/NetworkDeviceSiteAssignment.test.ts +484 -0
- package/Tests/Server/Services/NetworkEndpointServiceUpsert.test.ts +686 -0
- package/Tests/Server/Services/NetworkSiteAssignmentRuleService.test.ts +185 -0
- package/Tests/Server/Services/NetworkSiteService.test.ts +1354 -0
- package/Tests/Server/Services/ServiceLevelObjectiveBurnRateRuleService.test.ts +1313 -0
- package/Tests/Server/Services/ServiceLevelObjectiveService.test.ts +1988 -0
- package/Tests/Server/Utils/AnalyticsDatabase/Statement.test.ts +22 -0
- package/Tests/Server/Utils/AnalyticsDatabase/StatementGenerator.test.ts +404 -0
- package/Tests/Server/Utils/Encryption.test.ts +70 -0
- package/Tests/Server/Utils/FileAttachmentMarkdownUtil.test.ts +225 -0
- package/Tests/Server/Utils/JsonWebToken.test.ts +175 -0
- package/Tests/Server/Utils/LocalFile.test.ts +258 -0
- package/Tests/Server/Utils/Memory.test.ts +213 -0
- package/Tests/Server/Utils/Monitor/Criteria/LogMonitorCriteria.test.ts +30 -0
- package/Tests/Server/Utils/Monitor/Criteria/SnmpMonitorCriteria.test.ts +385 -0
- package/Tests/Server/Utils/Monitor/DnsResolutionCache.test.ts +194 -0
- package/Tests/Server/Utils/Monitor/NetworkDeviceHydrationUtil.test.ts +155 -0
- package/Tests/Server/Utils/Monitor/NetworkDeviceWalkUtil.test.ts +600 -0
- package/Tests/Server/Utils/Monitor/NetworkInventoryUtil.test.ts +151 -124
- package/Tests/Server/Utils/Monitor/SnmpInterfaceRateUtil.test.ts +496 -0
- package/Tests/Server/Utils/MonitorCriteriaDataExtractor.test.ts +175 -0
- package/Tests/Server/Utils/MonitorCriteriaMessageFormatter.test.ts +282 -0
- package/Tests/Server/Utils/OuiLookupUtil.test.ts +59 -0
- package/Tests/Server/Utils/SeriesResourceLabels.test.ts +117 -0
- package/Tests/Server/Utils/StackTraceParser.test.ts +370 -0
- package/Tests/Server/Utils/Stream.test.ts +87 -0
- package/Tests/Server/Utils/ValidateGlobalProviderProjectTeams.test.ts +221 -0
- package/Tests/Server/Utils/WhatsAppTemplateUtil.test.ts +199 -0
- package/Tests/Types/Database/CompareOperatorWireSerialization.test.ts +33 -0
- package/Tests/Types/Email.test.ts +198 -0
- package/Tests/Types/Kubernetes/KubernetesObjectParser.test.ts +177 -0
- package/Tests/Types/Log/LogQueryToFilter.test.ts +111 -0
- package/Tests/Types/Monitor/MonitorCriteria.test.ts +155 -0
- package/Tests/Types/Monitor/MonitorCriteriaInstance.test.ts +465 -0
- package/Tests/Types/Monitor/MonitorStep.test.ts +183 -0
- package/Tests/Types/Monitor/MonitorStepNetworkDeviceMonitor.test.ts +141 -1
- package/Tests/Types/Monitor/MonitorSteps.test.ts +183 -0
- package/Tests/Types/Monitor/MonitorType.test.ts +59 -1
- package/Tests/Types/Monitor/NetworkDeviceAlertPack.test.ts +97 -0
- package/Tests/Types/Monitor/SnmpEndpointDiscovery.test.ts +151 -0
- package/Tests/Types/Monitor/SnmpVendorTemplate.test.ts +110 -6
- package/Tests/Types/NetworkSite/DefaultNetworkSiteType.test.ts +129 -0
- package/Tests/Types/SerializableObjectDictionary.test.ts +166 -0
- package/Tests/Types/Time/RangeStartAndEndDateTime.test.ts +98 -0
- package/Tests/Types/WebsiteRequest.test.ts +230 -0
- package/Tests/UI/Components/EntityFilterRoundTrip.test.tsx +103 -0
- package/Tests/UI/Components/ModelTable/BaseModelTableUrlState.test.tsx +612 -0
- package/Tests/UI/Components/ModelTable/FilterDataToQuery.test.ts +275 -0
- package/Tests/UI/Utils/LogExport.test.ts +159 -0
- package/Tests/UI/Utils/Navigation.test.ts +183 -0
- package/Tests/UI/Utils/TableFilterUrlState.test.ts +539 -0
- package/Tests/UI/Utils/TableViewUrlState.test.ts +272 -0
- package/Tests/Utils/Base64.test.ts +51 -0
- package/Tests/Utils/Boolean.test.ts +76 -0
- package/Tests/Utils/Crypto.test.ts +48 -0
- package/Tests/Utils/Dashboard/DashboardSloComponent.test.ts +259 -0
- package/Tests/Utils/Dashboard/ModelQueryVariableInterpolation.test.ts +162 -0
- package/Tests/Utils/Enum.test.ts +54 -0
- package/Tests/Utils/IpCanonicalUtil.test.ts +85 -0
- package/Tests/Utils/Memory.test.ts +44 -0
- package/Tests/Utils/Metrics/MetricSeriesFingerprint.test.ts +160 -0
- package/Tests/Utils/Monitor/EndpointAttachmentUtil.test.ts +836 -0
- package/Tests/Utils/Monitor/MonitorMetricType.test.ts +218 -0
- package/Tests/Utils/Monitor/NetworkTopologyUtil.test.ts +447 -0
- package/Tests/Utils/NetworkSite/CidrMatchUtil.test.ts +440 -0
- package/Tests/Utils/NetworkSite/MaterializedPathUtil.test.ts +205 -0
- package/Tests/Utils/NetworkSite/SiteStatusRollupUtil.test.ts +221 -0
- package/Tests/Utils/NetworkSite/SiteUptimeUtil.test.ts +283 -0
- package/Tests/Utils/ObjectUtil.test.ts +30 -0
- package/Tests/Utils/Slo/SloBurnRateRuleState.test.ts +124 -0
- package/Tests/Utils/Slo/SloDuration.test.ts +148 -0
- package/Tests/Utils/Slo/SloHealth.test.ts +334 -0
- package/Tests/Utils/Slo/SloStatusColor.test.ts +89 -0
- package/Tests/Utils/Slo/SloUtil.test.ts +1980 -0
- package/Tests/Utils/Slo/SloWidgetFormat.test.ts +605 -0
- package/Tests/Utils/TechStack.test.ts +50 -0
- package/Tests/Utils/Traces/CriticalPath.test.ts +178 -0
- package/Types/AnalyticsDatabase/AnalyticsTableName.ts +10 -0
- package/Types/BaseDatabase/EqualTo.ts +9 -1
- package/Types/BaseDatabase/EqualToOrNull.ts +9 -1
- package/Types/BaseDatabase/NotEqual.ts +9 -1
- package/Types/Dashboard/DashboardComponentType.ts +1 -0
- package/Types/Dashboard/DashboardComponents/ComponentArgument.ts +1 -0
- package/Types/Dashboard/DashboardComponents/DashboardSloComponent.ts +42 -0
- package/Types/Dashboard/DashboardTemplates.ts +214 -0
- package/Types/Email/EmailTemplateType.ts +2 -0
- package/Types/Kubernetes/KubernetesCostIngest.ts +79 -0
- package/Types/Monitor/CriteriaFilter.ts +9 -0
- package/Types/Monitor/MonitorStep.ts +5 -8
- package/Types/Monitor/MonitorStepNetworkDeviceMonitor.ts +27 -5
- package/Types/Monitor/MonitorType.ts +15 -5
- package/Types/Monitor/SnmpMonitor/ArpEntry.ts +14 -0
- package/Types/Monitor/SnmpMonitor/FdbEntry.ts +18 -0
- package/Types/Monitor/SnmpMonitor/NetworkDeviceAlertPack.ts +10 -3
- package/Types/Monitor/SnmpMonitor/NetworkTopology.ts +31 -5
- package/Types/Monitor/SnmpMonitor/SnmpMonitorResponse.ts +12 -0
- package/Types/Monitor/SnmpMonitor/SnmpVendorTemplate.ts +231 -3
- package/Types/NetworkSite/DefaultNetworkSiteType.ts +20 -0
- package/Types/NotificationSetting/NotificationSettingEventType.ts +4 -0
- package/Types/Permission.ts +449 -0
- package/Types/ServiceLevelObjective/SliType.ts +6 -0
- package/Types/ServiceLevelObjective/SloMultiMonitorMode.ts +6 -0
- package/Types/ServiceLevelObjective/SloStatus.ts +9 -0
- package/Types/ServiceLevelObjective/SloWindowType.ts +6 -0
- package/Types/Telemetry/ServiceType.ts +1 -0
- package/UI/Components/Filters/EntityFilter.tsx +16 -0
- package/UI/Components/Filters/FilterViewer.tsx +22 -5
- package/UI/Components/List/List.tsx +8 -0
- package/UI/Components/ModelTable/BaseModelTable.tsx +309 -106
- package/UI/Components/ModelTable/FilterDataToQuery.ts +172 -0
- package/UI/Components/Navbar/NavBar.tsx +16 -2
- package/UI/Components/Navbar/NavBarMenuModal.tsx +3 -3
- package/UI/Utils/Navigation.ts +10 -0
- package/UI/Utils/TableFilterUrlState.ts +204 -17
- package/UI/Utils/TableViewUrlState.ts +165 -0
- package/Utils/Dashboard/Components/DashboardSloComponent.ts +114 -0
- package/Utils/Dashboard/Components/Index.ts +7 -0
- package/Utils/IpCanonicalUtil.ts +134 -0
- package/Utils/Monitor/EndpointAttachmentUtil.ts +508 -0
- package/Utils/Monitor/NetworkTopologyUtil.ts +157 -5
- package/Utils/NetworkSite/CidrMatchUtil.ts +296 -0
- package/Utils/NetworkSite/MaterializedPathUtil.ts +115 -0
- package/Utils/NetworkSite/SiteStatusRollupUtil.ts +97 -0
- package/Utils/NetworkSite/SiteUptimeUtil.ts +111 -0
- package/Utils/Slo/SloBurnRateRuleState.ts +91 -0
- package/Utils/Slo/SloDuration.ts +165 -0
- package/Utils/Slo/SloEvaluation.ts +22 -0
- package/Utils/Slo/SloHealth.ts +302 -0
- package/Utils/Slo/SloStatusColor.ts +54 -0
- package/Utils/Slo/SloUtil.ts +637 -0
- package/Utils/Slo/SloWidgetFormat.ts +383 -0
- package/build/dist/Models/AnalyticsModels/Index.js +4 -0
- package/build/dist/Models/AnalyticsModels/Index.js.map +1 -1
- package/build/dist/Models/AnalyticsModels/KubernetesCostAllocation.js +713 -0
- package/build/dist/Models/AnalyticsModels/KubernetesCostAllocation.js.map +1 -0
- package/build/dist/Models/AnalyticsModels/NetworkFlow.js +44 -0
- package/build/dist/Models/AnalyticsModels/NetworkFlow.js.map +1 -1
- package/build/dist/Models/AnalyticsModels/SloHistory.js +218 -0
- package/build/dist/Models/AnalyticsModels/SloHistory.js.map +1 -0
- package/build/dist/Models/DatabaseModels/Index.js +20 -0
- package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
- package/build/dist/Models/DatabaseModels/NetworkDevice.js +458 -6
- package/build/dist/Models/DatabaseModels/NetworkDevice.js.map +1 -1
- package/build/dist/Models/DatabaseModels/NetworkDeviceDiscoveryScan.js +0 -6
- package/build/dist/Models/DatabaseModels/NetworkDeviceDiscoveryScan.js.map +1 -1
- package/build/dist/Models/DatabaseModels/NetworkEndpoint.js +779 -0
- package/build/dist/Models/DatabaseModels/NetworkEndpoint.js.map +1 -0
- package/build/dist/Models/DatabaseModels/NetworkSite.js +1180 -0
- package/build/dist/Models/DatabaseModels/NetworkSite.js.map +1 -0
- package/build/dist/Models/DatabaseModels/NetworkSiteAssignmentRule.js +534 -0
- package/build/dist/Models/DatabaseModels/NetworkSiteAssignmentRule.js.map +1 -0
- package/build/dist/Models/DatabaseModels/NetworkSiteLink.js +629 -0
- package/build/dist/Models/DatabaseModels/NetworkSiteLink.js.map +1 -0
- package/build/dist/Models/DatabaseModels/NetworkSiteStatusTimeline.js +538 -0
- package/build/dist/Models/DatabaseModels/NetworkSiteStatusTimeline.js.map +1 -0
- package/build/dist/Models/DatabaseModels/NetworkSiteType.js +522 -0
- package/build/dist/Models/DatabaseModels/NetworkSiteType.js.map +1 -0
- package/build/dist/Models/DatabaseModels/ServiceLevelObjective.js +1134 -0
- package/build/dist/Models/DatabaseModels/ServiceLevelObjective.js.map +1 -0
- package/build/dist/Models/DatabaseModels/ServiceLevelObjectiveBurnRateRule.js +769 -0
- package/build/dist/Models/DatabaseModels/ServiceLevelObjectiveBurnRateRule.js.map +1 -0
- package/build/dist/Models/DatabaseModels/ServiceLevelObjectiveOwnerTeam.js +460 -0
- package/build/dist/Models/DatabaseModels/ServiceLevelObjectiveOwnerTeam.js.map +1 -0
- package/build/dist/Models/DatabaseModels/ServiceLevelObjectiveOwnerUser.js +459 -0
- package/build/dist/Models/DatabaseModels/ServiceLevelObjectiveOwnerUser.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784757142154-AddNetworkSiteHierarchyAndEndpoints.js +130 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784757142154-AddNetworkSiteHierarchyAndEndpoints.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784897317860-AddNetworkSiteAlerting.js +31 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784897317860-AddNetworkSiteAlerting.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784970388777-AddNetworkDevicePollingColumns.js +36 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784970388777-AddNetworkDevicePollingColumns.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784986826214-AddNetworkSiteTypeTable.js +49 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784986826214-AddNetworkSiteTypeTable.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784987015619-AddServiceLevelObjective.js +140 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784987015619-AddServiceLevelObjective.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785066759532-MigrationName.js +21 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785066759532-MigrationName.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +12 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
- package/build/dist/Server/Services/AnalyticsDatabaseService.js +23 -6
- package/build/dist/Server/Services/AnalyticsDatabaseService.js.map +1 -1
- package/build/dist/Server/Services/Index.js +24 -0
- package/build/dist/Server/Services/Index.js.map +1 -1
- package/build/dist/Server/Services/KubernetesCostAllocationService.js +12 -0
- package/build/dist/Server/Services/KubernetesCostAllocationService.js.map +1 -0
- package/build/dist/Server/Services/MetricService.js +21 -3
- package/build/dist/Server/Services/MetricService.js.map +1 -1
- package/build/dist/Server/Services/MonitorService.js +19 -0
- package/build/dist/Server/Services/MonitorService.js.map +1 -1
- package/build/dist/Server/Services/NetworkDeviceService.js +351 -1
- package/build/dist/Server/Services/NetworkDeviceService.js.map +1 -1
- package/build/dist/Server/Services/NetworkEndpointService.js +319 -0
- package/build/dist/Server/Services/NetworkEndpointService.js.map +1 -0
- package/build/dist/Server/Services/NetworkSiteAssignmentRuleService.js +90 -0
- package/build/dist/Server/Services/NetworkSiteAssignmentRuleService.js.map +1 -0
- package/build/dist/Server/Services/NetworkSiteLinkService.js +9 -0
- package/build/dist/Server/Services/NetworkSiteLinkService.js.map +1 -0
- package/build/dist/Server/Services/NetworkSiteService.js +1038 -0
- package/build/dist/Server/Services/NetworkSiteService.js.map +1 -0
- package/build/dist/Server/Services/NetworkSiteStatusTimelineService.js +9 -0
- package/build/dist/Server/Services/NetworkSiteStatusTimelineService.js.map +1 -0
- package/build/dist/Server/Services/NetworkSiteTypeService.js +9 -0
- package/build/dist/Server/Services/NetworkSiteTypeService.js.map +1 -0
- package/build/dist/Server/Services/ProjectService.js +98 -2
- package/build/dist/Server/Services/ProjectService.js.map +1 -1
- package/build/dist/Server/Services/ServiceLevelObjectiveBurnRateRuleService.js +358 -0
- package/build/dist/Server/Services/ServiceLevelObjectiveBurnRateRuleService.js.map +1 -0
- package/build/dist/Server/Services/ServiceLevelObjectiveOwnerTeamService.js +9 -0
- package/build/dist/Server/Services/ServiceLevelObjectiveOwnerTeamService.js.map +1 -0
- package/build/dist/Server/Services/ServiceLevelObjectiveOwnerUserService.js +9 -0
- package/build/dist/Server/Services/ServiceLevelObjectiveOwnerUserService.js.map +1 -0
- package/build/dist/Server/Services/ServiceLevelObjectiveService.js +588 -0
- package/build/dist/Server/Services/ServiceLevelObjectiveService.js.map +1 -0
- package/build/dist/Server/Services/SloHistoryService.js +77 -0
- package/build/dist/Server/Services/SloHistoryService.js.map +1 -0
- package/build/dist/Server/Services/UserNotificationSettingService.js +20 -0
- package/build/dist/Server/Services/UserNotificationSettingService.js.map +1 -1
- package/build/dist/Server/Types/AnalyticsDatabase/AggregateBy.js +9 -0
- package/build/dist/Server/Types/AnalyticsDatabase/AggregateBy.js.map +1 -1
- package/build/dist/Server/Types/Database/Permissions/OwnerTableRegistry.js +15 -0
- package/build/dist/Server/Types/Database/Permissions/OwnerTableRegistry.js.map +1 -1
- package/build/dist/Server/Utils/AnalyticsDatabase/Statement.js +31 -0
- package/build/dist/Server/Utils/AnalyticsDatabase/Statement.js.map +1 -1
- package/build/dist/Server/Utils/AnalyticsDatabase/StatementGenerator.js +76 -48
- package/build/dist/Server/Utils/AnalyticsDatabase/StatementGenerator.js.map +1 -1
- package/build/dist/Server/Utils/Memory.js +9 -1
- package/build/dist/Server/Utils/Memory.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/Criteria/SnmpMonitorCriteria.js +132 -10
- package/build/dist/Server/Utils/Monitor/Criteria/SnmpMonitorCriteria.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/Data/OuiVendors.json +6920 -0
- package/build/dist/Server/Utils/Monitor/DnsResolutionCache.js +77 -0
- package/build/dist/Server/Utils/Monitor/DnsResolutionCache.js.map +1 -0
- package/build/dist/Server/Utils/Monitor/MonitorResource.js +21 -41
- package/build/dist/Server/Utils/Monitor/MonitorResource.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/NetworkDeviceHydrationUtil.js +152 -40
- package/build/dist/Server/Utils/Monitor/NetworkDeviceHydrationUtil.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/NetworkDeviceMetricUtil.js +262 -0
- package/build/dist/Server/Utils/Monitor/NetworkDeviceMetricUtil.js.map +1 -0
- package/build/dist/Server/Utils/Monitor/NetworkDeviceWalkUtil.js +201 -0
- package/build/dist/Server/Utils/Monitor/NetworkDeviceWalkUtil.js.map +1 -0
- package/build/dist/Server/Utils/Monitor/NetworkInventoryUtil.js +152 -120
- package/build/dist/Server/Utils/Monitor/NetworkInventoryUtil.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/OuiLookupUtil.js +44 -0
- package/build/dist/Server/Utils/Monitor/OuiLookupUtil.js.map +1 -0
- package/build/dist/Server/Utils/Monitor/SnmpInterfaceRateUtil.js +10 -10
- package/build/dist/Server/Utils/Monitor/SnmpInterfaceRateUtil.js.map +1 -1
- package/build/dist/Server/Utils/WhatsAppTemplateUtil.js +5 -0
- package/build/dist/Server/Utils/WhatsAppTemplateUtil.js.map +1 -1
- package/build/dist/Types/AnalyticsDatabase/AnalyticsTableName.js +10 -0
- package/build/dist/Types/AnalyticsDatabase/AnalyticsTableName.js.map +1 -1
- package/build/dist/Types/BaseDatabase/EqualTo.js +9 -1
- package/build/dist/Types/BaseDatabase/EqualTo.js.map +1 -1
- package/build/dist/Types/BaseDatabase/EqualToOrNull.js +9 -1
- package/build/dist/Types/BaseDatabase/EqualToOrNull.js.map +1 -1
- package/build/dist/Types/BaseDatabase/NotEqual.js +9 -1
- package/build/dist/Types/BaseDatabase/NotEqual.js.map +1 -1
- package/build/dist/Types/Dashboard/DashboardComponentType.js +1 -0
- package/build/dist/Types/Dashboard/DashboardComponentType.js.map +1 -1
- package/build/dist/Types/Dashboard/DashboardComponents/ComponentArgument.js +1 -0
- package/build/dist/Types/Dashboard/DashboardComponents/ComponentArgument.js.map +1 -1
- package/build/dist/Types/Dashboard/DashboardComponents/DashboardSloComponent.js +23 -0
- package/build/dist/Types/Dashboard/DashboardComponents/DashboardSloComponent.js.map +1 -0
- package/build/dist/Types/Dashboard/DashboardTemplates.js +205 -0
- package/build/dist/Types/Dashboard/DashboardTemplates.js.map +1 -1
- package/build/dist/Types/Email/EmailTemplateType.js +1 -0
- package/build/dist/Types/Email/EmailTemplateType.js.map +1 -1
- package/build/dist/Types/Kubernetes/KubernetesCostIngest.js +21 -0
- package/build/dist/Types/Kubernetes/KubernetesCostIngest.js.map +1 -0
- package/build/dist/Types/Monitor/CriteriaFilter.js +1 -0
- package/build/dist/Types/Monitor/CriteriaFilter.js.map +1 -1
- package/build/dist/Types/Monitor/MonitorStep.js +5 -5
- package/build/dist/Types/Monitor/MonitorStep.js.map +1 -1
- package/build/dist/Types/Monitor/MonitorStepNetworkDeviceMonitor.js +8 -0
- package/build/dist/Types/Monitor/MonitorStepNetworkDeviceMonitor.js.map +1 -1
- package/build/dist/Types/Monitor/MonitorType.js +15 -5
- package/build/dist/Types/Monitor/MonitorType.js.map +1 -1
- package/build/dist/Types/Monitor/SnmpMonitor/ArpEntry.js +2 -0
- package/build/dist/Types/Monitor/SnmpMonitor/ArpEntry.js.map +1 -0
- package/build/dist/Types/Monitor/SnmpMonitor/FdbEntry.js +2 -0
- package/build/dist/Types/Monitor/SnmpMonitor/FdbEntry.js.map +1 -0
- package/build/dist/Types/Monitor/SnmpMonitor/NetworkDeviceAlertPack.js +9 -3
- package/build/dist/Types/Monitor/SnmpMonitor/NetworkDeviceAlertPack.js.map +1 -1
- package/build/dist/Types/Monitor/SnmpMonitor/SnmpVendorTemplate.js +217 -3
- package/build/dist/Types/Monitor/SnmpMonitor/SnmpVendorTemplate.js.map +1 -1
- package/build/dist/Types/NetworkSite/DefaultNetworkSiteType.js +21 -0
- package/build/dist/Types/NetworkSite/DefaultNetworkSiteType.js.map +1 -0
- package/build/dist/Types/NotificationSetting/NotificationSettingEventType.js +3 -0
- package/build/dist/Types/NotificationSetting/NotificationSettingEventType.js.map +1 -1
- package/build/dist/Types/Permission.js +409 -0
- package/build/dist/Types/Permission.js.map +1 -1
- package/build/dist/Types/ServiceLevelObjective/SliType.js +7 -0
- package/build/dist/Types/ServiceLevelObjective/SliType.js.map +1 -0
- package/build/dist/Types/ServiceLevelObjective/SloMultiMonitorMode.js +7 -0
- package/build/dist/Types/ServiceLevelObjective/SloMultiMonitorMode.js.map +1 -0
- package/build/dist/Types/ServiceLevelObjective/SloStatus.js +10 -0
- package/build/dist/Types/ServiceLevelObjective/SloStatus.js.map +1 -0
- package/build/dist/Types/ServiceLevelObjective/SloWindowType.js +7 -0
- package/build/dist/Types/ServiceLevelObjective/SloWindowType.js.map +1 -0
- package/build/dist/Types/Telemetry/ServiceType.js +1 -0
- package/build/dist/Types/Telemetry/ServiceType.js.map +1 -1
- package/build/dist/UI/Components/Filters/EntityFilter.js +15 -0
- package/build/dist/UI/Components/Filters/EntityFilter.js.map +1 -1
- package/build/dist/UI/Components/Filters/FilterViewer.js +19 -4
- package/build/dist/UI/Components/Filters/FilterViewer.js.map +1 -1
- package/build/dist/UI/Components/List/List.js +1 -1
- package/build/dist/UI/Components/List/List.js.map +1 -1
- package/build/dist/UI/Components/ModelTable/BaseModelTable.js +235 -89
- package/build/dist/UI/Components/ModelTable/BaseModelTable.js.map +1 -1
- package/build/dist/UI/Components/ModelTable/FilterDataToQuery.js +96 -0
- package/build/dist/UI/Components/ModelTable/FilterDataToQuery.js.map +1 -0
- package/build/dist/UI/Components/Navbar/NavBar.js +14 -2
- package/build/dist/UI/Components/Navbar/NavBar.js.map +1 -1
- package/build/dist/UI/Components/Navbar/NavBarMenuModal.js +3 -2
- package/build/dist/UI/Components/Navbar/NavBarMenuModal.js.map +1 -1
- package/build/dist/UI/Utils/Navigation.js +9 -0
- package/build/dist/UI/Utils/Navigation.js.map +1 -1
- package/build/dist/UI/Utils/TableFilterUrlState.js +159 -15
- package/build/dist/UI/Utils/TableFilterUrlState.js.map +1 -1
- package/build/dist/UI/Utils/TableViewUrlState.js +103 -0
- package/build/dist/UI/Utils/TableViewUrlState.js.map +1 -0
- package/build/dist/Utils/Dashboard/Components/DashboardSloComponent.js +93 -0
- package/build/dist/Utils/Dashboard/Components/DashboardSloComponent.js.map +1 -0
- package/build/dist/Utils/Dashboard/Components/Index.js +4 -0
- package/build/dist/Utils/Dashboard/Components/Index.js.map +1 -1
- package/build/dist/Utils/IpCanonicalUtil.js +110 -0
- package/build/dist/Utils/IpCanonicalUtil.js.map +1 -0
- package/build/dist/Utils/Monitor/EndpointAttachmentUtil.js +311 -0
- package/build/dist/Utils/Monitor/EndpointAttachmentUtil.js.map +1 -0
- package/build/dist/Utils/Monitor/NetworkTopologyUtil.js +98 -5
- package/build/dist/Utils/Monitor/NetworkTopologyUtil.js.map +1 -1
- package/build/dist/Utils/NetworkSite/CidrMatchUtil.js +222 -0
- package/build/dist/Utils/NetworkSite/CidrMatchUtil.js.map +1 -0
- package/build/dist/Utils/NetworkSite/MaterializedPathUtil.js +89 -0
- package/build/dist/Utils/NetworkSite/MaterializedPathUtil.js.map +1 -0
- package/build/dist/Utils/NetworkSite/SiteStatusRollupUtil.js +60 -0
- package/build/dist/Utils/NetworkSite/SiteStatusRollupUtil.js.map +1 -0
- package/build/dist/Utils/NetworkSite/SiteUptimeUtil.js +76 -0
- package/build/dist/Utils/NetworkSite/SiteUptimeUtil.js.map +1 -0
- package/build/dist/Utils/Slo/SloBurnRateRuleState.js +35 -0
- package/build/dist/Utils/Slo/SloBurnRateRuleState.js.map +1 -0
- package/build/dist/Utils/Slo/SloDuration.js +87 -0
- package/build/dist/Utils/Slo/SloDuration.js.map +1 -0
- package/build/dist/Utils/Slo/SloEvaluation.js +21 -0
- package/build/dist/Utils/Slo/SloEvaluation.js.map +1 -0
- package/build/dist/Utils/Slo/SloHealth.js +179 -0
- package/build/dist/Utils/Slo/SloHealth.js.map +1 -0
- package/build/dist/Utils/Slo/SloStatusColor.js +18 -0
- package/build/dist/Utils/Slo/SloStatusColor.js.map +1 -0
- package/build/dist/Utils/Slo/SloUtil.js +393 -0
- package/build/dist/Utils/Slo/SloUtil.js.map +1 -0
- package/build/dist/Utils/Slo/SloWidgetFormat.js +174 -0
- package/build/dist/Utils/Slo/SloWidgetFormat.js.map +1 -0
- package/package.json +2 -2
- package/Types/Dashboard/DashboardComponents/Index.ts +0 -7
- package/build/dist/Types/Dashboard/DashboardComponents/Index.js +0 -8
- package/build/dist/Types/Dashboard/DashboardComponents/Index.js.map +0 -1
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
import CriticalPathUtil, {
|
|
2
|
+
CriticalPathResult,
|
|
3
|
+
ServiceBreakdown,
|
|
4
|
+
SpanData,
|
|
5
|
+
SpanSelfTime,
|
|
6
|
+
} from "../../../Utils/Traces/CriticalPath";
|
|
7
|
+
import { describe, expect, test } from "@jest/globals";
|
|
8
|
+
|
|
9
|
+
/*
|
|
10
|
+
* CriticalPathUtil is a zero-dependency interval/graph engine over trace spans.
|
|
11
|
+
* The math is subtle (overlapping-child interval merge, longest-weighted path
|
|
12
|
+
* with self-time), and its output drives the "where did the latency go" views,
|
|
13
|
+
* so these tests pin the numeric behavior with hand-computed fixtures.
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
function span(
|
|
17
|
+
spanId: string,
|
|
18
|
+
parentSpanId: string | undefined,
|
|
19
|
+
start: number,
|
|
20
|
+
end: number,
|
|
21
|
+
primaryEntityId?: string,
|
|
22
|
+
): SpanData {
|
|
23
|
+
return {
|
|
24
|
+
spanId,
|
|
25
|
+
parentSpanId,
|
|
26
|
+
startTimeUnixNano: start,
|
|
27
|
+
endTimeUnixNano: end,
|
|
28
|
+
durationUnixNano: end - start,
|
|
29
|
+
primaryEntityId,
|
|
30
|
+
name: spanId,
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
describe("CriticalPathUtil.computeSelfTimes", () => {
|
|
35
|
+
test("a leaf span's self-time equals its whole duration", () => {
|
|
36
|
+
const times: Map<string, SpanSelfTime> = CriticalPathUtil.computeSelfTimes([
|
|
37
|
+
span("a", undefined, 0, 100),
|
|
38
|
+
]);
|
|
39
|
+
|
|
40
|
+
const a: SpanSelfTime = times.get("a")!;
|
|
41
|
+
expect(a.selfTimeUnixNano).toBe(100);
|
|
42
|
+
expect(a.childTimeUnixNano).toBe(0);
|
|
43
|
+
expect(a.selfTimePercent).toBe(100);
|
|
44
|
+
});
|
|
45
|
+
|
|
46
|
+
test("subtracts a single child's covered time", () => {
|
|
47
|
+
const times: Map<string, SpanSelfTime> = CriticalPathUtil.computeSelfTimes([
|
|
48
|
+
span("root", undefined, 0, 100),
|
|
49
|
+
span("child", "root", 10, 40),
|
|
50
|
+
]);
|
|
51
|
+
|
|
52
|
+
expect(times.get("root")!.selfTimeUnixNano).toBe(70);
|
|
53
|
+
expect(times.get("root")!.childTimeUnixNano).toBe(30);
|
|
54
|
+
expect(times.get("root")!.selfTimePercent).toBe(70);
|
|
55
|
+
});
|
|
56
|
+
|
|
57
|
+
test("sums two non-overlapping children", () => {
|
|
58
|
+
const times: Map<string, SpanSelfTime> = CriticalPathUtil.computeSelfTimes([
|
|
59
|
+
span("root", undefined, 0, 100),
|
|
60
|
+
span("c1", "root", 10, 30),
|
|
61
|
+
span("c2", "root", 50, 80),
|
|
62
|
+
]);
|
|
63
|
+
// covered = 20 + 30 = 50 -> self = 50
|
|
64
|
+
expect(times.get("root")!.childTimeUnixNano).toBe(50);
|
|
65
|
+
expect(times.get("root")!.selfTimeUnixNano).toBe(50);
|
|
66
|
+
});
|
|
67
|
+
|
|
68
|
+
test("merges overlapping children into one interval", () => {
|
|
69
|
+
const times: Map<string, SpanSelfTime> = CriticalPathUtil.computeSelfTimes([
|
|
70
|
+
span("root", undefined, 0, 100),
|
|
71
|
+
span("c1", "root", 10, 50),
|
|
72
|
+
span("c2", "root", 30, 70),
|
|
73
|
+
]);
|
|
74
|
+
// merged interval [10,70] = 60 -> self = 40
|
|
75
|
+
expect(times.get("root")!.childTimeUnixNano).toBe(60);
|
|
76
|
+
expect(times.get("root")!.selfTimeUnixNano).toBe(40);
|
|
77
|
+
});
|
|
78
|
+
|
|
79
|
+
test("clamps children that spill past the parent window", () => {
|
|
80
|
+
const times: Map<string, SpanSelfTime> = CriticalPathUtil.computeSelfTimes([
|
|
81
|
+
span("root", undefined, 0, 100),
|
|
82
|
+
span("c1", "root", -50, 150),
|
|
83
|
+
]);
|
|
84
|
+
// clamped to [0,100] = 100 -> self = 0
|
|
85
|
+
expect(times.get("root")!.childTimeUnixNano).toBe(100);
|
|
86
|
+
expect(times.get("root")!.selfTimeUnixNano).toBe(0);
|
|
87
|
+
});
|
|
88
|
+
|
|
89
|
+
test("self-time is floored at zero and percent is zero for a zero-duration span", () => {
|
|
90
|
+
const zero: SpanData = span("z", undefined, 5, 5);
|
|
91
|
+
const times: Map<string, SpanSelfTime> = CriticalPathUtil.computeSelfTimes([
|
|
92
|
+
zero,
|
|
93
|
+
]);
|
|
94
|
+
expect(times.get("z")!.selfTimeUnixNano).toBe(0);
|
|
95
|
+
expect(times.get("z")!.selfTimePercent).toBe(0);
|
|
96
|
+
});
|
|
97
|
+
});
|
|
98
|
+
|
|
99
|
+
describe("CriticalPathUtil.computeCriticalPath", () => {
|
|
100
|
+
test("returns all-zero result for an empty trace", () => {
|
|
101
|
+
const result: CriticalPathResult = CriticalPathUtil.computeCriticalPath([]);
|
|
102
|
+
expect(result).toEqual({
|
|
103
|
+
criticalPathSpanIds: [],
|
|
104
|
+
totalTraceDurationUnixNano: 0,
|
|
105
|
+
criticalPathDurationUnixNano: 0,
|
|
106
|
+
});
|
|
107
|
+
});
|
|
108
|
+
|
|
109
|
+
test("a single span is its own critical path", () => {
|
|
110
|
+
const result: CriticalPathResult = CriticalPathUtil.computeCriticalPath([
|
|
111
|
+
span("only", undefined, 0, 100),
|
|
112
|
+
]);
|
|
113
|
+
expect(result.criticalPathSpanIds).toEqual(["only"]);
|
|
114
|
+
expect(result.totalTraceDurationUnixNano).toBe(100);
|
|
115
|
+
expect(result.criticalPathDurationUnixNano).toBe(100);
|
|
116
|
+
});
|
|
117
|
+
|
|
118
|
+
test("follows the heavier of two parallel children", () => {
|
|
119
|
+
const result: CriticalPathResult = CriticalPathUtil.computeCriticalPath([
|
|
120
|
+
span("root", undefined, 0, 100),
|
|
121
|
+
span("fast", "root", 10, 40), // duration 30
|
|
122
|
+
span("slow", "root", 10, 90), // duration 80
|
|
123
|
+
]);
|
|
124
|
+
|
|
125
|
+
expect(result.criticalPathSpanIds).toEqual(["root", "slow"]);
|
|
126
|
+
expect(result.totalTraceDurationUnixNano).toBe(100);
|
|
127
|
+
// root self-time (100 - merged[10,90]=80 => 20) + slow weight 80 = 100
|
|
128
|
+
expect(result.criticalPathDurationUnixNano).toBe(100);
|
|
129
|
+
});
|
|
130
|
+
|
|
131
|
+
test("treats a span whose parent is absent from the set as a root", () => {
|
|
132
|
+
const result: CriticalPathResult = CriticalPathUtil.computeCriticalPath([
|
|
133
|
+
span("orphan", "missing-parent", 0, 50),
|
|
134
|
+
]);
|
|
135
|
+
expect(result.criticalPathSpanIds).toEqual(["orphan"]);
|
|
136
|
+
expect(result.criticalPathDurationUnixNano).toBe(50);
|
|
137
|
+
});
|
|
138
|
+
});
|
|
139
|
+
|
|
140
|
+
describe("CriticalPathUtil.computeServiceBreakdown", () => {
|
|
141
|
+
test("aggregates self-time per service and sorts descending", () => {
|
|
142
|
+
const breakdown: Array<ServiceBreakdown> =
|
|
143
|
+
CriticalPathUtil.computeServiceBreakdown([
|
|
144
|
+
span("root", undefined, 0, 100, "A"),
|
|
145
|
+
span("child", "root", 20, 60, "B"),
|
|
146
|
+
]);
|
|
147
|
+
|
|
148
|
+
// root self = 100 - 40 = 60 (service A); child self = 40 (service B)
|
|
149
|
+
expect(breakdown).toHaveLength(2);
|
|
150
|
+
expect(breakdown[0]!.primaryEntityId).toBe("A");
|
|
151
|
+
expect(breakdown[0]!.selfTimeUnixNano).toBe(60);
|
|
152
|
+
expect(breakdown[0]!.percentOfTrace).toBe(60);
|
|
153
|
+
expect(breakdown[1]!.primaryEntityId).toBe("B");
|
|
154
|
+
expect(breakdown[1]!.selfTimeUnixNano).toBe(40);
|
|
155
|
+
expect(breakdown[1]!.percentOfTrace).toBe(40);
|
|
156
|
+
});
|
|
157
|
+
|
|
158
|
+
test("groups spans without a service id under 'unknown'", () => {
|
|
159
|
+
const breakdown: Array<ServiceBreakdown> =
|
|
160
|
+
CriticalPathUtil.computeServiceBreakdown([span("a", undefined, 0, 10)]);
|
|
161
|
+
|
|
162
|
+
expect(breakdown).toHaveLength(1);
|
|
163
|
+
expect(breakdown[0]!.primaryEntityId).toBe("unknown");
|
|
164
|
+
expect(breakdown[0]!.spanCount).toBe(1);
|
|
165
|
+
});
|
|
166
|
+
|
|
167
|
+
test("accumulates span counts and durations per service", () => {
|
|
168
|
+
const breakdown: Array<ServiceBreakdown> =
|
|
169
|
+
CriticalPathUtil.computeServiceBreakdown([
|
|
170
|
+
span("s1", undefined, 0, 100, "A"),
|
|
171
|
+
span("s2", undefined, 100, 150, "A"),
|
|
172
|
+
]);
|
|
173
|
+
|
|
174
|
+
expect(breakdown).toHaveLength(1);
|
|
175
|
+
expect(breakdown[0]!.spanCount).toBe(2);
|
|
176
|
+
expect(breakdown[0]!.totalDurationUnixNano).toBe(150);
|
|
177
|
+
});
|
|
178
|
+
});
|
|
@@ -8,6 +8,7 @@ enum AnalyticsTableName {
|
|
|
8
8
|
Profile = "ProfileItemV3",
|
|
9
9
|
ProfileSample = "ProfileSampleItemV3",
|
|
10
10
|
AuditLog = "AuditLogV2",
|
|
11
|
+
KubernetesCostAllocation = "KubernetesCostAllocationV1",
|
|
11
12
|
/*
|
|
12
13
|
* Materialized-view target tables. These hold AggregateFunction
|
|
13
14
|
* states populated by attached MVs on the source `Metric` table.
|
|
@@ -33,6 +34,15 @@ enum AnalyticsTableName {
|
|
|
33
34
|
MetricItemAggMV1mByContainer = "MetricItemAggMV1mByContainer",
|
|
34
35
|
MetricBaselineHourly = "MetricBaselineHourly",
|
|
35
36
|
MutableMetric = "MutableMetricItem",
|
|
37
|
+
/*
|
|
38
|
+
* SLO / Error Budget history rollup. ReplacingMergeTree keyed by
|
|
39
|
+
* (projectId, sloId, metricName, bucketStart) with a `version` column
|
|
40
|
+
* so at-least-once evaluator writes and trailing re-writes dedupe to
|
|
41
|
+
* the latest value. Deliberately NOT MetricItemV3: its own monthly
|
|
42
|
+
* partitions + 400-day TTL keep long-lived SLO rows from pinning the
|
|
43
|
+
* daily raw-telemetry partitions (ttl_only_drop_parts hazard).
|
|
44
|
+
*/
|
|
45
|
+
SloHistory = "SloHistory",
|
|
36
46
|
}
|
|
37
47
|
|
|
38
48
|
export default AnalyticsTableName;
|
|
@@ -15,7 +15,15 @@ export default class EqualTo<T extends CompareType> extends CompareBase<T> {
|
|
|
15
15
|
public override toJSON(): JSONObject {
|
|
16
16
|
return {
|
|
17
17
|
_type: ObjectType.EqualTo,
|
|
18
|
-
|
|
18
|
+
/*
|
|
19
|
+
* The RAW value is serialized (like GreaterThan / InBetween), not
|
|
20
|
+
* toString(): toString() stringifies a Date into a locale- and
|
|
21
|
+
* timezone-dependent form that loses milliseconds, and coerces a number
|
|
22
|
+
* into a string. JSON.stringify emits a raw Date as its full ISO
|
|
23
|
+
* timestamp, which the server binds at full precision — and which is
|
|
24
|
+
* what lets an equality filter survive a round trip through the URL.
|
|
25
|
+
*/
|
|
26
|
+
value: (this as EqualTo<T>).value,
|
|
19
27
|
};
|
|
20
28
|
}
|
|
21
29
|
|
|
@@ -17,7 +17,15 @@ export default class EqualToOrNull<
|
|
|
17
17
|
public override toJSON(): JSONObject {
|
|
18
18
|
return {
|
|
19
19
|
_type: ObjectType.EqualToOrNull,
|
|
20
|
-
|
|
20
|
+
/*
|
|
21
|
+
* The RAW value is serialized (like GreaterThan / InBetween), not
|
|
22
|
+
* toString(): toString() stringifies a Date into a locale- and
|
|
23
|
+
* timezone-dependent form that loses milliseconds, and coerces a number
|
|
24
|
+
* into a string. JSON.stringify emits a raw Date as its full ISO
|
|
25
|
+
* timestamp, which the server binds at full precision — and which is
|
|
26
|
+
* what lets an equality filter survive a round trip through the URL.
|
|
27
|
+
*/
|
|
28
|
+
value: (this as EqualToOrNull<T>).value,
|
|
21
29
|
};
|
|
22
30
|
}
|
|
23
31
|
|
|
@@ -14,7 +14,15 @@ export default class NotEqual<T extends CompareType> extends CompareBase<T> {
|
|
|
14
14
|
public override toJSON(): JSONObject {
|
|
15
15
|
return {
|
|
16
16
|
_type: ObjectType.NotEqual,
|
|
17
|
-
|
|
17
|
+
/*
|
|
18
|
+
* The RAW value is serialized (like GreaterThan / InBetween), not
|
|
19
|
+
* toString(): toString() stringifies a Date into a locale- and
|
|
20
|
+
* timezone-dependent form that loses milliseconds, and coerces a number
|
|
21
|
+
* into a string. JSON.stringify emits a raw Date as its full ISO
|
|
22
|
+
* timestamp, which the server binds at full precision — and which is
|
|
23
|
+
* what lets an equality filter survive a round trip through the URL.
|
|
24
|
+
*/
|
|
25
|
+
value: (this as NotEqual<T>).value,
|
|
18
26
|
};
|
|
19
27
|
}
|
|
20
28
|
|
|
@@ -12,6 +12,7 @@ enum DashboardComponentType {
|
|
|
12
12
|
IncidentList = `IncidentList`,
|
|
13
13
|
AlertList = `AlertList`,
|
|
14
14
|
MonitorList = `MonitorList`,
|
|
15
|
+
Slo = `Slo`,
|
|
15
16
|
KubernetesPodList = `KubernetesPodList`,
|
|
16
17
|
KubernetesNodeList = `KubernetesNodeList`,
|
|
17
18
|
KubernetesNamespaceList = `KubernetesNamespaceList`,
|
|
@@ -27,6 +27,7 @@ export enum EntityFilterModelType {
|
|
|
27
27
|
AlertState = "AlertState",
|
|
28
28
|
MonitorStatus = "MonitorStatus",
|
|
29
29
|
Monitor = "Monitor",
|
|
30
|
+
ServiceLevelObjective = "ServiceLevelObjective",
|
|
30
31
|
Label = "Label",
|
|
31
32
|
KubernetesCluster = "KubernetesCluster",
|
|
32
33
|
DockerHost = "DockerHost",
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import ObjectID from "../../ObjectID";
|
|
2
|
+
import DashboardComponentType from "../DashboardComponentType";
|
|
3
|
+
import BaseComponent from "./DashboardBaseComponent";
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Which of the SLO's three tracked numbers the widget renders.
|
|
7
|
+
*
|
|
8
|
+
* These values are persisted inside the dashboard's JSON config, so they
|
|
9
|
+
* must never be renamed — only added to.
|
|
10
|
+
*/
|
|
11
|
+
export enum SloWidgetMetric {
|
|
12
|
+
Sli = "Sli",
|
|
13
|
+
ErrorBudgetRemaining = "ErrorBudgetRemaining",
|
|
14
|
+
BurnRate = "BurnRate",
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Tile renders the single current number (read from the SLO row that the
|
|
19
|
+
* evaluation worker keeps up to date). Chart renders the SloHistory
|
|
20
|
+
* series for the same metric over the dashboard's selected time range.
|
|
21
|
+
*/
|
|
22
|
+
export enum SloWidgetDisplayType {
|
|
23
|
+
Tile = "Tile",
|
|
24
|
+
Chart = "Chart",
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
export default interface DashboardSloComponent extends BaseComponent {
|
|
28
|
+
componentType: DashboardComponentType.Slo;
|
|
29
|
+
componentId: ObjectID;
|
|
30
|
+
arguments: {
|
|
31
|
+
/*
|
|
32
|
+
* ObjectID of the ServiceLevelObjective, held as a string because the
|
|
33
|
+
* EntityDropdown argument editor writes the raw `_id` and the whole
|
|
34
|
+
* component tree round-trips through the dashboard's JSON config.
|
|
35
|
+
* The renderer wraps it in `new ObjectID(...)` before querying.
|
|
36
|
+
*/
|
|
37
|
+
serviceLevelObjectiveId?: string | undefined;
|
|
38
|
+
sloMetric?: SloWidgetMetric | undefined;
|
|
39
|
+
displayType?: SloWidgetDisplayType | undefined;
|
|
40
|
+
widgetTitle?: string | undefined;
|
|
41
|
+
};
|
|
42
|
+
}
|
|
@@ -27,6 +27,7 @@ export enum DashboardTemplateType {
|
|
|
27
27
|
Incident = "Incident",
|
|
28
28
|
Alert = "Alert",
|
|
29
29
|
Kubernetes = "Kubernetes",
|
|
30
|
+
KubernetesCost = "KubernetesCost",
|
|
30
31
|
Host = "Host",
|
|
31
32
|
Proxmox = "Proxmox",
|
|
32
33
|
Ceph = "Ceph",
|
|
@@ -110,6 +111,14 @@ export const DashboardTemplates: Array<DashboardTemplate> = [
|
|
|
110
111
|
icon: IconProp.Kubernetes,
|
|
111
112
|
category: DashboardTemplateCategory.Infrastructure,
|
|
112
113
|
},
|
|
114
|
+
{
|
|
115
|
+
type: DashboardTemplateType.KubernetesCost,
|
|
116
|
+
name: "Kubernetes Cost Dashboard",
|
|
117
|
+
description:
|
|
118
|
+
"Node hourly cost trends, CPU/RAM unit costs, persistent volume and load balancer spend from your in-cluster cost engine (OpenCost / Kubecost).",
|
|
119
|
+
icon: IconProp.Billing,
|
|
120
|
+
category: DashboardTemplateCategory.Infrastructure,
|
|
121
|
+
},
|
|
113
122
|
{
|
|
114
123
|
type: DashboardTemplateType.Host,
|
|
115
124
|
name: "Hosts Dashboard",
|
|
@@ -1639,6 +1648,209 @@ function createKubernetesDashboardConfig(): DashboardViewConfig {
|
|
|
1639
1648
|
};
|
|
1640
1649
|
}
|
|
1641
1650
|
|
|
1651
|
+
function createKubernetesCostDashboardConfig(): DashboardViewConfig {
|
|
1652
|
+
/*
|
|
1653
|
+
* Built on the cost metrics the kubernetes-agent chart scrapes from an
|
|
1654
|
+
* in-cluster cost engine (OpenCost / Kubecost cost-model) when
|
|
1655
|
+
* `cost.metrics` is enabled — node_total_hourly_cost,
|
|
1656
|
+
* node_cpu_hourly_cost, node_ram_hourly_cost, pv_hourly_cost,
|
|
1657
|
+
* kubecost_load_balancer_cost. Per-workload allocation (namespace /
|
|
1658
|
+
* controller spend, idle, efficiency) is NOT charted here — those come
|
|
1659
|
+
* from the Allocation API poller and live on the cluster's Costs page.
|
|
1660
|
+
*
|
|
1661
|
+
* Layout notes:
|
|
1662
|
+
*
|
|
1663
|
+
* - Every cost metric here is a per-resource gauge (one series per
|
|
1664
|
+
* node / volume / load balancer) re-emitted on every scrape, so a
|
|
1665
|
+
* `Sum` aggregation would multiply by the scrape count over the
|
|
1666
|
+
* window — the same trap the Kubernetes template documents for
|
|
1667
|
+
* k8s.pod.phase. All widgets therefore use `Avg`, and the charts fan
|
|
1668
|
+
* out per resource via groupByAttributeKeys so a stacked area still
|
|
1669
|
+
* reads as the cluster total per bucket.
|
|
1670
|
+
*
|
|
1671
|
+
* - The engine's metric labels are plain Prometheus labels ("node",
|
|
1672
|
+
* "persistentvolume", "service_name"), not OTel resource attributes,
|
|
1673
|
+
* so group keys have no `resource.` prefix.
|
|
1674
|
+
*/
|
|
1675
|
+
const components: Array<DashboardBaseComponent> = [
|
|
1676
|
+
// Row 0: Title
|
|
1677
|
+
createTextComponent({
|
|
1678
|
+
text: "Kubernetes Cost Dashboard",
|
|
1679
|
+
top: 0,
|
|
1680
|
+
left: 0,
|
|
1681
|
+
width: 12,
|
|
1682
|
+
height: 1,
|
|
1683
|
+
isBold: true,
|
|
1684
|
+
}),
|
|
1685
|
+
|
|
1686
|
+
// Row 1: Unit-cost stat tiles. Rising cost is "worse" for all four.
|
|
1687
|
+
createValueComponent({
|
|
1688
|
+
title: "Node Cost $/hr (avg per node)",
|
|
1689
|
+
top: 1,
|
|
1690
|
+
left: 0,
|
|
1691
|
+
width: 3,
|
|
1692
|
+
metricConfig: {
|
|
1693
|
+
metricName: "node_total_hourly_cost",
|
|
1694
|
+
aggregationType: MetricsAggregationType.Avg,
|
|
1695
|
+
},
|
|
1696
|
+
trendDirection: DashboardValueTrendDirection.HigherIsWorse,
|
|
1697
|
+
}),
|
|
1698
|
+
createValueComponent({
|
|
1699
|
+
title: "CPU Cost $/core-hr (avg)",
|
|
1700
|
+
top: 1,
|
|
1701
|
+
left: 3,
|
|
1702
|
+
width: 3,
|
|
1703
|
+
metricConfig: {
|
|
1704
|
+
metricName: "node_cpu_hourly_cost",
|
|
1705
|
+
aggregationType: MetricsAggregationType.Avg,
|
|
1706
|
+
},
|
|
1707
|
+
trendDirection: DashboardValueTrendDirection.HigherIsWorse,
|
|
1708
|
+
}),
|
|
1709
|
+
createValueComponent({
|
|
1710
|
+
title: "RAM Cost $/GiB-hr (avg)",
|
|
1711
|
+
top: 1,
|
|
1712
|
+
left: 6,
|
|
1713
|
+
width: 3,
|
|
1714
|
+
metricConfig: {
|
|
1715
|
+
metricName: "node_ram_hourly_cost",
|
|
1716
|
+
aggregationType: MetricsAggregationType.Avg,
|
|
1717
|
+
},
|
|
1718
|
+
trendDirection: DashboardValueTrendDirection.HigherIsWorse,
|
|
1719
|
+
}),
|
|
1720
|
+
createValueComponent({
|
|
1721
|
+
title: "PV Cost $/hr (avg per volume)",
|
|
1722
|
+
top: 1,
|
|
1723
|
+
left: 9,
|
|
1724
|
+
width: 3,
|
|
1725
|
+
metricConfig: {
|
|
1726
|
+
metricName: "pv_hourly_cost",
|
|
1727
|
+
aggregationType: MetricsAggregationType.Avg,
|
|
1728
|
+
},
|
|
1729
|
+
trendDirection: DashboardValueTrendDirection.HigherIsWorse,
|
|
1730
|
+
}),
|
|
1731
|
+
|
|
1732
|
+
/*
|
|
1733
|
+
* Row 2-5: Hourly cost per node, stacked — the stack height is the
|
|
1734
|
+
* cluster's total node $/hr per bucket.
|
|
1735
|
+
*/
|
|
1736
|
+
createChartComponent({
|
|
1737
|
+
title: "Node Hourly Cost ($/hr, stacked by node)",
|
|
1738
|
+
chartType: DashboardChartType.StackedArea,
|
|
1739
|
+
top: 2,
|
|
1740
|
+
left: 0,
|
|
1741
|
+
width: 12,
|
|
1742
|
+
height: 3,
|
|
1743
|
+
metricConfig: {
|
|
1744
|
+
metricName: "node_total_hourly_cost",
|
|
1745
|
+
aggregationType: MetricsAggregationType.Avg,
|
|
1746
|
+
legend: "Node",
|
|
1747
|
+
legendUnit: "$/hr",
|
|
1748
|
+
groupByAttributeKeys: ["node"],
|
|
1749
|
+
},
|
|
1750
|
+
}),
|
|
1751
|
+
|
|
1752
|
+
// Row 5-8: Unit-cost trends per node — catches spot/instance-type churn.
|
|
1753
|
+
createChartComponent({
|
|
1754
|
+
title: "CPU Cost per Core Hour by Node",
|
|
1755
|
+
chartType: DashboardChartType.Line,
|
|
1756
|
+
top: 5,
|
|
1757
|
+
left: 0,
|
|
1758
|
+
width: 6,
|
|
1759
|
+
height: 3,
|
|
1760
|
+
metricConfig: {
|
|
1761
|
+
metricName: "node_cpu_hourly_cost",
|
|
1762
|
+
aggregationType: MetricsAggregationType.Avg,
|
|
1763
|
+
legend: "Node",
|
|
1764
|
+
legendUnit: "$/core-hr",
|
|
1765
|
+
groupByAttributeKeys: ["node"],
|
|
1766
|
+
},
|
|
1767
|
+
}),
|
|
1768
|
+
createChartComponent({
|
|
1769
|
+
title: "RAM Cost per GiB Hour by Node",
|
|
1770
|
+
chartType: DashboardChartType.Line,
|
|
1771
|
+
top: 5,
|
|
1772
|
+
left: 6,
|
|
1773
|
+
width: 6,
|
|
1774
|
+
height: 3,
|
|
1775
|
+
metricConfig: {
|
|
1776
|
+
metricName: "node_ram_hourly_cost",
|
|
1777
|
+
aggregationType: MetricsAggregationType.Avg,
|
|
1778
|
+
legend: "Node",
|
|
1779
|
+
legendUnit: "$/GiB-hr",
|
|
1780
|
+
groupByAttributeKeys: ["node"],
|
|
1781
|
+
},
|
|
1782
|
+
}),
|
|
1783
|
+
|
|
1784
|
+
// Row 8-11: Storage and load balancer spend.
|
|
1785
|
+
createChartComponent({
|
|
1786
|
+
title: "Persistent Volume Hourly Cost (stacked by volume)",
|
|
1787
|
+
chartType: DashboardChartType.StackedArea,
|
|
1788
|
+
top: 8,
|
|
1789
|
+
left: 0,
|
|
1790
|
+
width: 6,
|
|
1791
|
+
height: 3,
|
|
1792
|
+
metricConfig: {
|
|
1793
|
+
metricName: "pv_hourly_cost",
|
|
1794
|
+
aggregationType: MetricsAggregationType.Avg,
|
|
1795
|
+
legend: "Volume",
|
|
1796
|
+
legendUnit: "$/hr",
|
|
1797
|
+
groupByAttributeKeys: ["persistentvolume"],
|
|
1798
|
+
},
|
|
1799
|
+
}),
|
|
1800
|
+
createChartComponent({
|
|
1801
|
+
title: "Load Balancer Hourly Cost (stacked by service)",
|
|
1802
|
+
chartType: DashboardChartType.StackedArea,
|
|
1803
|
+
top: 8,
|
|
1804
|
+
left: 6,
|
|
1805
|
+
width: 6,
|
|
1806
|
+
height: 3,
|
|
1807
|
+
metricConfig: {
|
|
1808
|
+
metricName: "kubecost_load_balancer_cost",
|
|
1809
|
+
aggregationType: MetricsAggregationType.Avg,
|
|
1810
|
+
legend: "Service",
|
|
1811
|
+
legendUnit: "$/hr",
|
|
1812
|
+
groupByAttributeKeys: ["service_name"],
|
|
1813
|
+
},
|
|
1814
|
+
}),
|
|
1815
|
+
|
|
1816
|
+
// Row 11-14: Per-node cost table for quick ranking.
|
|
1817
|
+
createTableComponent({
|
|
1818
|
+
title: "Cost by Node ($/hr)",
|
|
1819
|
+
top: 11,
|
|
1820
|
+
left: 0,
|
|
1821
|
+
width: 12,
|
|
1822
|
+
height: 3,
|
|
1823
|
+
maxRows: 20,
|
|
1824
|
+
metricConfig: {
|
|
1825
|
+
metricName: "node_total_hourly_cost",
|
|
1826
|
+
aggregationType: MetricsAggregationType.Avg,
|
|
1827
|
+
groupByAttributeKeys: ["node"],
|
|
1828
|
+
},
|
|
1829
|
+
}),
|
|
1830
|
+
];
|
|
1831
|
+
|
|
1832
|
+
/*
|
|
1833
|
+
* Cluster picker so multi-cluster projects can scope every widget from
|
|
1834
|
+
* the toolbar. The deployment collector stamps k8s.cluster.name on the
|
|
1835
|
+
* scraped cost metrics, so the binding key matches the other
|
|
1836
|
+
* Kubernetes dashboards.
|
|
1837
|
+
*/
|
|
1838
|
+
const variables: Array<DashboardVariable> = [
|
|
1839
|
+
createTelemetryAttributeVariable({
|
|
1840
|
+
name: "cluster",
|
|
1841
|
+
label: "Cluster",
|
|
1842
|
+
attributeKey: "resource.k8s.cluster.name",
|
|
1843
|
+
}),
|
|
1844
|
+
];
|
|
1845
|
+
|
|
1846
|
+
return {
|
|
1847
|
+
_type: ObjectType.DashboardViewConfig,
|
|
1848
|
+
components,
|
|
1849
|
+
variables,
|
|
1850
|
+
heightInDashboardUnits: Math.max(DashboardSize.heightInDashboardUnits, 14),
|
|
1851
|
+
};
|
|
1852
|
+
}
|
|
1853
|
+
|
|
1642
1854
|
function createMetricsDashboardConfig(): DashboardViewConfig {
|
|
1643
1855
|
/*
|
|
1644
1856
|
* Layout notes:
|
|
@@ -2697,6 +2909,8 @@ export function getTemplateConfig(
|
|
|
2697
2909
|
return createAlertDashboardConfig();
|
|
2698
2910
|
case DashboardTemplateType.Kubernetes:
|
|
2699
2911
|
return createKubernetesDashboardConfig();
|
|
2912
|
+
case DashboardTemplateType.KubernetesCost:
|
|
2913
|
+
return createKubernetesCostDashboardConfig();
|
|
2700
2914
|
case DashboardTemplateType.Host:
|
|
2701
2915
|
return createHostDashboardConfig();
|
|
2702
2916
|
case DashboardTemplateType.Proxmox:
|
|
@@ -32,6 +32,8 @@ enum EmailTemplateType {
|
|
|
32
32
|
MonitorProbesStatus = "MonitorProbesStatus.hbs",
|
|
33
33
|
MonitorOwnerStatusChanged = "MonitorOwnerStatusChanged.hbs",
|
|
34
34
|
|
|
35
|
+
SloOwnerStatusChanged = "SloOwnerStatusChanged.hbs",
|
|
36
|
+
|
|
35
37
|
IncidentOwnerAdded = "IncidentOwnerAdded.hbs",
|
|
36
38
|
IncidentOwnerStateChanged = "IncidentOwnerStateChanged.hbs",
|
|
37
39
|
IncidentOwnerNotePosted = "IncidentOwnerNotePosted.hbs",
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Wire contract for POST /kubernetes-cost/ingest — the payload the
|
|
3
|
+
* Kubernetes agent's cost poller ships after querying an in-cluster cost
|
|
4
|
+
* engine's Allocation API (OpenCost `/allocation/compute`, Kubecost
|
|
5
|
+
* `/model/allocation`). One request carries one cluster's allocation rows
|
|
6
|
+
* for one or more closed time windows.
|
|
7
|
+
*
|
|
8
|
+
* The route is mounted under both "/telemetry" and "/" (TELEMETRY_PREFIXES).
|
|
9
|
+
* The agent posts to the "/telemetry" prefix — see the note in
|
|
10
|
+
* KubernetesCostAgent/Shipper.ts for why.
|
|
11
|
+
*
|
|
12
|
+
* The agent projects are standalone (no dependency on Common), so the
|
|
13
|
+
* poller carries its own mirror of these interfaces
|
|
14
|
+
* (KubernetesCostAgent/Types.ts) — keep the two in sync.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
export interface KubernetesCostAllocationIngestRow {
|
|
18
|
+
/** ISO-8601 start of the allocation window. Required. */
|
|
19
|
+
windowStart: string;
|
|
20
|
+
/** ISO-8601 end of the allocation window. Required. */
|
|
21
|
+
windowEnd: string;
|
|
22
|
+
|
|
23
|
+
/*
|
|
24
|
+
* Workload identity. All optional — idle / unallocated rows carry the
|
|
25
|
+
* engine's sentinel in `namespace` ("__idle__" / "__unallocated__") and
|
|
26
|
+
* nothing else.
|
|
27
|
+
*/
|
|
28
|
+
namespace?: string | undefined;
|
|
29
|
+
controllerKind?: string | undefined;
|
|
30
|
+
controllerName?: string | undefined;
|
|
31
|
+
podName?: string | undefined;
|
|
32
|
+
containerName?: string | undefined;
|
|
33
|
+
nodeName?: string | undefined;
|
|
34
|
+
providerId?: string | undefined;
|
|
35
|
+
labels?: Record<string, string> | undefined;
|
|
36
|
+
|
|
37
|
+
// Usage / request measures.
|
|
38
|
+
cpuCoreHours?: number | undefined;
|
|
39
|
+
cpuCoreRequestAverage?: number | undefined;
|
|
40
|
+
cpuCoreUsageAverage?: number | undefined;
|
|
41
|
+
gpuHours?: number | undefined;
|
|
42
|
+
ramByteHours?: number | undefined;
|
|
43
|
+
ramBytesRequestAverage?: number | undefined;
|
|
44
|
+
ramBytesUsageAverage?: number | undefined;
|
|
45
|
+
pvByteHours?: number | undefined;
|
|
46
|
+
|
|
47
|
+
// Pre-priced cost components (in `currency` of the payload).
|
|
48
|
+
cpuCost?: number | undefined;
|
|
49
|
+
gpuCost?: number | undefined;
|
|
50
|
+
ramCost?: number | undefined;
|
|
51
|
+
pvCost?: number | undefined;
|
|
52
|
+
networkCost?: number | undefined;
|
|
53
|
+
loadBalancerCost?: number | undefined;
|
|
54
|
+
sharedCost?: number | undefined;
|
|
55
|
+
externalCost?: number | undefined;
|
|
56
|
+
totalCost?: number | undefined;
|
|
57
|
+
|
|
58
|
+
// Efficiency ratios (usage / request, 0..1+).
|
|
59
|
+
cpuEfficiency?: number | undefined;
|
|
60
|
+
ramEfficiency?: number | undefined;
|
|
61
|
+
totalEfficiency?: number | undefined;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
export interface KubernetesCostIngestPayload {
|
|
65
|
+
/**
|
|
66
|
+
* Cluster identifier — must match the k8s.cluster.name the agent stamps
|
|
67
|
+
* on metrics so cost rows land on the same KubernetesCluster resource.
|
|
68
|
+
*/
|
|
69
|
+
clusterName: string;
|
|
70
|
+
/** Currency code of all cost figures (e.g. "USD"). Optional. */
|
|
71
|
+
currency?: string | undefined;
|
|
72
|
+
allocations: Array<KubernetesCostAllocationIngestRow>;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* Upper bound on `allocations.length` per request. The poller chunks its
|
|
77
|
+
* output to stay under this; the ingest endpoint rejects anything larger.
|
|
78
|
+
*/
|
|
79
|
+
export const MAX_KUBERNETES_COST_ALLOCATIONS_PER_REQUEST: number = 5000;
|
|
@@ -119,6 +119,14 @@ export interface ServerMonitorOptions {
|
|
|
119
119
|
|
|
120
120
|
export interface SnmpMonitorOptions {
|
|
121
121
|
oid?: string | undefined;
|
|
122
|
+
/*
|
|
123
|
+
* Optional interface scope for the interface CheckOns (down /
|
|
124
|
+
* utilization / errors). When set, only interfaces whose name or alias
|
|
125
|
+
* equals this value (case-insensitive) are evaluated — so "uplink Gi0/1
|
|
126
|
+
* above 80%" does not fire because an access port got busy. Empty =
|
|
127
|
+
* every monitored interface, the historical behavior.
|
|
128
|
+
*/
|
|
129
|
+
interfaceName?: string | undefined;
|
|
122
130
|
}
|
|
123
131
|
|
|
124
132
|
export enum EvaluateOverTimeType {
|
|
@@ -429,6 +437,7 @@ export const CriteriaFilterSchema: ZodSchema = Zod.object({
|
|
|
429
437
|
}).optional(),
|
|
430
438
|
snmpMonitorOptions: Zod.object({
|
|
431
439
|
oid: Zod.string().optional(),
|
|
440
|
+
interfaceName: Zod.string().optional(),
|
|
432
441
|
}).optional(),
|
|
433
442
|
filterType: Zod.string().optional(),
|
|
434
443
|
value: Zod.union([Zod.string(), Zod.number()]).optional(),
|