@oneuptime/common 11.5.9 → 11.5.11
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 +13 -0
- package/Models/AnalyticsModels/MetricItemAggMV1mByContainer.ts +178 -0
- package/Models/AnalyticsModels/MetricItemAggMV1mByK8sCluster.ts +179 -0
- package/Models/AnalyticsModels/MetricItemAggMV1mByService.ts +179 -0
- package/Models/AnalyticsModels/NetworkFlow.ts +397 -0
- package/Models/DatabaseModels/EnterpriseLicenseInstance.ts +18 -0
- package/Models/DatabaseModels/GlobalConfig.ts +36 -0
- package/Models/DatabaseModels/Index.ts +2 -0
- package/Models/DatabaseModels/MarketingConversion.ts +198 -0
- package/Models/DatabaseModels/MetricSavedView.ts +34 -0
- package/Models/DatabaseModels/MetricType.ts +74 -0
- package/Models/DatabaseModels/NetworkDevice.ts +332 -0
- package/Models/DatabaseModels/NetworkDeviceDiscoveryScan.ts +113 -0
- package/Models/DatabaseModels/NetworkInterface.ts +58 -0
- package/Models/DatabaseModels/Project.ts +37 -0
- package/Models/DatabaseModels/User.ts +37 -0
- package/Server/API/BaseAnalyticsAPI.ts +23 -0
- package/Server/API/EnterpriseLicenseAPI.ts +14 -0
- package/Server/EnvironmentConfig.ts +84 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1784191414522-AddCounterSemanticsToMetricType.ts +38 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1784191414600-AddViewTypeToMetricSavedView.ts +28 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1784211212164-AddNetworkDeviceInventoryAndDiscoverySchedule.ts +108 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1784218257664-AddEnterpriseLicenseNotificationColumns.ts +31 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1784293516000-AddAttributionColumnsToUserAndProject.ts +29 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1784298000000-AddMarketingConversionTable.ts +35 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1784401962564-MigrationName.ts +101 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +14 -0
- package/Server/Services/AnalyticsDatabaseService.ts +70 -1
- package/Server/Services/IncidentService.ts +13 -0
- package/Server/Services/Index.ts +10 -0
- package/Server/Services/MarketingConversionService.ts +10 -0
- package/Server/Services/MetricItemAggMV1mByContainerService.ts +31 -0
- package/Server/Services/MetricItemAggMV1mByK8sClusterService.ts +31 -0
- package/Server/Services/MetricItemAggMV1mByServiceService.ts +31 -0
- package/Server/Services/MetricService.ts +970 -122
- package/Server/Services/MonitorService.ts +14 -0
- package/Server/Services/NetworkDeviceOwnerTeamService.ts +42 -0
- package/Server/Services/NetworkDeviceOwnerUserService.ts +106 -0
- package/Server/Services/NetworkFlowService.ts +11 -0
- package/Server/Services/OnCallDutyPolicyService.ts +11 -1
- package/Server/Services/ProjectService.ts +136 -0
- package/Server/Services/SpanService.ts +13 -9
- package/Server/Services/StatusPageService.ts +10 -0
- package/Server/Services/TeamMemberService.ts +11 -0
- package/Server/Services/UserService.ts +59 -0
- package/Server/Types/AnalyticsDatabase/AggregateBy.ts +37 -7
- package/Server/Utils/Attribution.ts +99 -0
- package/Server/Utils/Marketing/ConversionUploadProvider.ts +103 -0
- package/Server/Utils/Marketing/ConversionUploadProviders.ts +22 -0
- package/Server/Utils/Marketing/Providers/GoogleAds.ts +270 -0
- package/Server/Utils/Marketing/Providers/LinkedIn.ts +147 -0
- package/Server/Utils/Marketing/Providers/Meta.ts +148 -0
- package/Server/Utils/Marketing/Providers/MicrosoftAds.ts +196 -0
- package/Server/Utils/Marketing/Providers/Reddit.ts +178 -0
- package/Server/Utils/Monitor/MonitorAlert.ts +71 -7
- package/Server/Utils/Monitor/MonitorCriteriaEvaluator.ts +31 -19
- package/Server/Utils/Monitor/MonitorIncident.ts +71 -7
- package/Server/Utils/Monitor/MonitorMetricUtil.ts +57 -0
- package/Server/Utils/Monitor/MonitorTemplateUtil.ts +94 -0
- package/Server/Utils/Monitor/NetworkDeviceHydrationUtil.ts +15 -0
- package/Server/Utils/Monitor/NetworkInventoryUtil.ts +125 -14
- package/Server/Utils/ProductAnalytics.ts +133 -0
- package/Server/Utils/Telemetry/Telemetry.ts +39 -0
- package/Server/Utils/Telemetry/TelemetryEntity.ts +21 -0
- package/Tests/Server/API/BaseAnalyticsAPI.test.ts +72 -0
- package/Tests/Server/Infrastructure/SemaphorePermit.test.ts +9 -1
- package/Tests/Server/Services/AnalyticsDatabaseService.test.ts +21 -2
- package/Tests/Server/Services/MetricEntityMVKeyParity.test.ts +173 -0
- package/Tests/Server/Services/MetricServiceAggregate.test.ts +1391 -0
- package/Tests/Server/Services/NetworkDeviceOwnerServices.test.ts +260 -0
- package/Tests/Server/Utils/Monitor/MonitorTemplateUtilNetworkDevice.test.ts +389 -0
- package/Tests/Server/Utils/Monitor/NetworkInventoryUtil.test.ts +764 -0
- package/Tests/Types/BaseDatabase/AggregationIntervalUtil.test.ts +111 -2
- package/Tests/Types/Database/EndsWith.test.ts +64 -0
- package/Tests/Types/Database/GreaterThan.test.ts +62 -0
- package/Tests/Types/Database/GreaterThanOrEqual.test.ts +65 -0
- package/Tests/Types/Database/GreaterThanOrNull.test.ts +63 -0
- package/Tests/Types/Database/Includes.test.ts +65 -0
- package/Tests/Types/Database/IncludesAll.test.ts +65 -0
- package/Tests/Types/Database/IncludesNone.test.ts +65 -0
- package/Tests/Types/Database/IsNull.test.ts +44 -0
- package/Tests/Types/Database/LessThan.test.ts +62 -0
- package/Tests/Types/Database/LessThanOrEqual.test.ts +62 -0
- package/Tests/Types/Database/LessThanOrNull.test.ts +62 -0
- package/Tests/Types/Database/MultiSearch.test.ts +81 -0
- package/Tests/Types/Database/NotContains.test.ts +64 -0
- package/Tests/Types/Database/NotNull.test.ts +44 -0
- package/Tests/Types/Database/StartsWith.test.ts +64 -0
- package/Tests/Types/Monitor/MonitorStepSqlMonitor.test.ts +83 -1
- package/Tests/Types/Monitor/SnmpV3EnumParsing.test.ts +247 -0
- package/Tests/Types/Monitor/SnmpVendorTemplate.test.ts +263 -0
- package/Tests/UI/Components/XAxis.test.ts +5 -3
- package/Tests/Utils/EnterpriseLicenseUsage.test.ts +76 -0
- package/Tests/Utils/Metrics/MetricExplorerUrl.test.ts +622 -0
- package/Tests/Utils/Metrics/MetricFormulaEvaluator.test.ts +474 -0
- package/Tests/Utils/Telemetry/HeartbeatAvailability.test.ts +52 -4
- package/Types/AnalyticsDatabase/AnalyticsTableName.ts +11 -0
- package/Types/BaseDatabase/AggregateBy.ts +31 -2
- package/Types/BaseDatabase/AggregatedResult.ts +22 -0
- package/Types/BaseDatabase/AggregationInterval.ts +11 -0
- package/Types/BaseDatabase/AggregationIntervalUtil.ts +30 -5
- package/Types/Dashboard/DashboardComponents/DashboardTraceChartComponent.ts +16 -0
- package/Types/Email/EmailTemplateType.ts +3 -0
- package/Types/Marketing/MarketingConversion.ts +11 -0
- package/Types/Metrics/MetricQueryConfigData.ts +21 -0
- package/Types/Metrics/MetricQueryData.ts +8 -0
- package/Types/Metrics/MetricViewData.ts +8 -0
- package/Types/Monitor/MonitorMetricType.ts +8 -0
- package/Types/Monitor/MonitorStep.ts +9 -0
- package/Types/Monitor/MonitorStepSqlMonitor.ts +12 -0
- package/Types/Monitor/MonitorType.ts +2 -1
- package/Types/Monitor/SSLMonitor/SslMonitorResponse.ts +17 -12
- package/Types/Monitor/SnmpMonitor/CdpNeighbor.ts +13 -0
- package/Types/Monitor/SnmpMonitor/NetworkTopology.ts +37 -3
- package/Types/Monitor/SnmpMonitor/SnmpAuthProtocol.ts +46 -0
- package/Types/Monitor/SnmpMonitor/SnmpEntityInfo.ts +15 -0
- package/Types/Monitor/SnmpMonitor/SnmpInterface.ts +8 -0
- package/Types/Monitor/SnmpMonitor/SnmpMonitorResponse.ts +17 -8
- package/Types/Monitor/SnmpMonitor/SnmpPrivProtocol.ts +53 -0
- package/Types/Monitor/SnmpMonitor/SnmpSecurityLevel.ts +43 -0
- package/Types/Monitor/SnmpMonitor/SnmpSystemInfo.ts +16 -0
- package/Types/Monitor/SnmpMonitor/SnmpVendorTemplate.ts +119 -3
- package/Types/NetFlow/NetworkFlowRecord.ts +25 -0
- package/Types/Syslog/SyslogMessage.ts +18 -0
- package/Types/Telemetry/TelemetrySavedViewState.ts +9 -0
- package/Types/Telemetry/TelemetrySavedViewType.ts +12 -0
- package/UI/Components/Charts/Area/AreaChart.tsx +51 -0
- package/UI/Components/Charts/Bar/BarChart.tsx +51 -1
- package/UI/Components/Charts/ChartGroup/ChartGroup.tsx +97 -26
- package/UI/Components/Charts/ChartLibrary/AreaChart/AreaChart.tsx +328 -1
- package/UI/Components/Charts/ChartLibrary/BarChart/BarChart.tsx +115 -0
- package/UI/Components/Charts/ChartLibrary/LineChart/LineChart.tsx +328 -1
- package/UI/Components/Charts/ChartLibrary/Types/ChartDataPoint.ts +7 -0
- package/UI/Components/Charts/ChartLibrary/Types/FormattedReferenceRegion.ts +15 -0
- package/UI/Components/Charts/ChartLibrary/Types/FormattedTimeReferenceLine.ts +13 -0
- package/UI/Components/Charts/Line/LineChart.tsx +51 -0
- package/UI/Components/Charts/Types/ReferenceRegionProps.ts +12 -0
- package/UI/Components/Charts/Types/TimeReferenceLineProps.ts +12 -0
- package/UI/Components/Charts/Types/XAxis/XAxisPrecision.ts +1 -0
- package/UI/Components/Charts/Utils/DataPoint.ts +0 -0
- package/UI/Components/Charts/Utils/TimeAnnotation.ts +169 -0
- package/UI/Components/Charts/Utils/XAxis.ts +28 -4
- package/UI/Components/Icon/Icon.tsx +33 -13
- package/UI/Components/Markdown.tsx/MarkdownViewer.tsx +9 -0
- package/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.ts +67 -0
- package/UI/Components/Page/ModelPage.tsx +6 -1
- package/UI/Components/TelemetryViewer/components/SavedViewsDropdown.tsx +33 -4
- package/UI/Styles/Theme.css +10 -0
- package/UI/Utils/User.ts +41 -2
- package/Utils/Analytics.ts +8 -6
- package/Utils/EnterpriseLicense/EnterpriseLicenseUsage.ts +74 -0
- package/Utils/Metrics/MetricExplorerUrl.ts +771 -0
- package/Utils/Metrics/MetricFormulaEvaluator.ts +410 -46
- package/Utils/Monitor/NetworkTopologyUtil.ts +261 -49
- package/Utils/ValueFormatter.ts +22 -1
- package/build/dist/Models/AnalyticsModels/Index.js +13 -0
- package/build/dist/Models/AnalyticsModels/Index.js.map +1 -1
- package/build/dist/Models/AnalyticsModels/MetricItemAggMV1mByContainer.js +159 -0
- package/build/dist/Models/AnalyticsModels/MetricItemAggMV1mByContainer.js.map +1 -0
- package/build/dist/Models/AnalyticsModels/MetricItemAggMV1mByK8sCluster.js +158 -0
- package/build/dist/Models/AnalyticsModels/MetricItemAggMV1mByK8sCluster.js.map +1 -0
- package/build/dist/Models/AnalyticsModels/MetricItemAggMV1mByService.js +160 -0
- package/build/dist/Models/AnalyticsModels/MetricItemAggMV1mByService.js.map +1 -0
- package/build/dist/Models/AnalyticsModels/NetworkFlow.js +351 -0
- package/build/dist/Models/AnalyticsModels/NetworkFlow.js.map +1 -0
- package/build/dist/Models/DatabaseModels/EnterpriseLicenseInstance.js +19 -0
- package/build/dist/Models/DatabaseModels/EnterpriseLicenseInstance.js.map +1 -1
- package/build/dist/Models/DatabaseModels/GlobalConfig.js +38 -0
- package/build/dist/Models/DatabaseModels/GlobalConfig.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Index.js +2 -0
- package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
- package/build/dist/Models/DatabaseModels/MarketingConversion.js +219 -0
- package/build/dist/Models/DatabaseModels/MarketingConversion.js.map +1 -0
- package/build/dist/Models/DatabaseModels/MetricSavedView.js +35 -0
- package/build/dist/Models/DatabaseModels/MetricSavedView.js.map +1 -1
- package/build/dist/Models/DatabaseModels/MetricType.js +76 -0
- package/build/dist/Models/DatabaseModels/MetricType.js.map +1 -1
- package/build/dist/Models/DatabaseModels/NetworkDevice.js +341 -0
- package/build/dist/Models/DatabaseModels/NetworkDevice.js.map +1 -1
- package/build/dist/Models/DatabaseModels/NetworkDeviceDiscoveryScan.js +116 -0
- package/build/dist/Models/DatabaseModels/NetworkDeviceDiscoveryScan.js.map +1 -1
- package/build/dist/Models/DatabaseModels/NetworkInterface.js +60 -0
- package/build/dist/Models/DatabaseModels/NetworkInterface.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Project.js +38 -0
- package/build/dist/Models/DatabaseModels/Project.js.map +1 -1
- package/build/dist/Models/DatabaseModels/User.js +38 -0
- package/build/dist/Models/DatabaseModels/User.js.map +1 -1
- package/build/dist/Server/API/BaseAnalyticsAPI.js +19 -0
- package/build/dist/Server/API/BaseAnalyticsAPI.js.map +1 -1
- package/build/dist/Server/API/EnterpriseLicenseAPI.js +8 -0
- package/build/dist/Server/API/EnterpriseLicenseAPI.js.map +1 -1
- package/build/dist/Server/EnvironmentConfig.js +51 -0
- package/build/dist/Server/EnvironmentConfig.js.map +1 -1
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784191414522-AddCounterSemanticsToMetricType.js +27 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784191414522-AddCounterSemanticsToMetricType.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784191414600-AddViewTypeToMetricSavedView.js +21 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784191414600-AddViewTypeToMetricSavedView.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784211212164-AddNetworkDeviceInventoryAndDiscoverySchedule.js +47 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784211212164-AddNetworkDeviceInventoryAndDiscoverySchedule.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784218257664-AddEnterpriseLicenseNotificationColumns.js +16 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784218257664-AddEnterpriseLicenseNotificationColumns.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784293516000-AddAttributionColumnsToUserAndProject.js +18 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784293516000-AddAttributionColumnsToUserAndProject.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784298000000-AddMarketingConversionTable.js +20 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784298000000-AddMarketingConversionTable.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784401962564-MigrationName.js +40 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784401962564-MigrationName.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +14 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
- package/build/dist/Server/Services/AnalyticsDatabaseService.js +58 -4
- package/build/dist/Server/Services/AnalyticsDatabaseService.js.map +1 -1
- package/build/dist/Server/Services/IncidentService.js +12 -0
- package/build/dist/Server/Services/IncidentService.js.map +1 -1
- package/build/dist/Server/Services/Index.js +10 -0
- package/build/dist/Server/Services/Index.js.map +1 -1
- package/build/dist/Server/Services/MarketingConversionService.js +9 -0
- package/build/dist/Server/Services/MarketingConversionService.js.map +1 -0
- package/build/dist/Server/Services/MetricItemAggMV1mByContainerService.js +29 -0
- package/build/dist/Server/Services/MetricItemAggMV1mByContainerService.js.map +1 -0
- package/build/dist/Server/Services/MetricItemAggMV1mByK8sClusterService.js +29 -0
- package/build/dist/Server/Services/MetricItemAggMV1mByK8sClusterService.js.map +1 -0
- package/build/dist/Server/Services/MetricItemAggMV1mByServiceService.js +29 -0
- package/build/dist/Server/Services/MetricItemAggMV1mByServiceService.js.map +1 -0
- package/build/dist/Server/Services/MetricService.js +761 -125
- package/build/dist/Server/Services/MetricService.js.map +1 -1
- package/build/dist/Server/Services/MonitorService.js +18 -5
- package/build/dist/Server/Services/MonitorService.js.map +1 -1
- package/build/dist/Server/Services/NetworkDeviceOwnerTeamService.js +44 -0
- package/build/dist/Server/Services/NetworkDeviceOwnerTeamService.js.map +1 -1
- package/build/dist/Server/Services/NetworkDeviceOwnerUserService.js +88 -0
- package/build/dist/Server/Services/NetworkDeviceOwnerUserService.js.map +1 -1
- package/build/dist/Server/Services/NetworkFlowService.js +9 -0
- package/build/dist/Server/Services/NetworkFlowService.js.map +1 -0
- package/build/dist/Server/Services/OnCallDutyPolicyService.js +15 -6
- package/build/dist/Server/Services/OnCallDutyPolicyService.js.map +1 -1
- package/build/dist/Server/Services/ProjectService.js +107 -6
- package/build/dist/Server/Services/ProjectService.js.map +1 -1
- package/build/dist/Server/Services/SpanService.js +8 -6
- package/build/dist/Server/Services/SpanService.js.map +1 -1
- package/build/dist/Server/Services/StatusPageService.js +10 -0
- package/build/dist/Server/Services/StatusPageService.js.map +1 -1
- package/build/dist/Server/Services/TeamMemberService.js +11 -0
- package/build/dist/Server/Services/TeamMemberService.js.map +1 -1
- package/build/dist/Server/Services/UserService.js +52 -0
- package/build/dist/Server/Services/UserService.js.map +1 -1
- package/build/dist/Server/Types/AnalyticsDatabase/AggregateBy.js +33 -7
- package/build/dist/Server/Types/AnalyticsDatabase/AggregateBy.js.map +1 -1
- package/build/dist/Server/Utils/Attribution.js +74 -0
- package/build/dist/Server/Utils/Attribution.js.map +1 -0
- package/build/dist/Server/Utils/Marketing/ConversionUploadProvider.js +40 -0
- package/build/dist/Server/Utils/Marketing/ConversionUploadProvider.js.map +1 -0
- package/build/dist/Server/Utils/Marketing/ConversionUploadProviders.js +20 -0
- package/build/dist/Server/Utils/Marketing/ConversionUploadProviders.js.map +1 -0
- package/build/dist/Server/Utils/Marketing/Providers/GoogleAds.js +177 -0
- package/build/dist/Server/Utils/Marketing/Providers/GoogleAds.js.map +1 -0
- package/build/dist/Server/Utils/Marketing/Providers/LinkedIn.js +113 -0
- package/build/dist/Server/Utils/Marketing/Providers/LinkedIn.js.map +1 -0
- package/build/dist/Server/Utils/Marketing/Providers/Meta.js +109 -0
- package/build/dist/Server/Utils/Marketing/Providers/Meta.js.map +1 -0
- package/build/dist/Server/Utils/Marketing/Providers/MicrosoftAds.js +130 -0
- package/build/dist/Server/Utils/Marketing/Providers/MicrosoftAds.js.map +1 -0
- package/build/dist/Server/Utils/Marketing/Providers/Reddit.js +126 -0
- package/build/dist/Server/Utils/Marketing/Providers/Reddit.js.map +1 -0
- package/build/dist/Server/Utils/Monitor/MonitorAlert.js +53 -9
- package/build/dist/Server/Utils/Monitor/MonitorAlert.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js +21 -10
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorIncident.js +54 -11
- package/build/dist/Server/Utils/Monitor/MonitorIncident.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorMetricUtil.js +43 -3
- package/build/dist/Server/Utils/Monitor/MonitorMetricUtil.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorTemplateUtil.js +68 -0
- package/build/dist/Server/Utils/Monitor/MonitorTemplateUtil.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/NetworkDeviceHydrationUtil.js +15 -0
- package/build/dist/Server/Utils/Monitor/NetworkDeviceHydrationUtil.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/NetworkInventoryUtil.js +100 -15
- package/build/dist/Server/Utils/Monitor/NetworkInventoryUtil.js.map +1 -1
- package/build/dist/Server/Utils/ProductAnalytics.js +111 -0
- package/build/dist/Server/Utils/ProductAnalytics.js.map +1 -0
- package/build/dist/Server/Utils/Telemetry/Telemetry.js +32 -5
- package/build/dist/Server/Utils/Telemetry/Telemetry.js.map +1 -1
- package/build/dist/Server/Utils/Telemetry/TelemetryEntity.js +17 -0
- package/build/dist/Server/Utils/Telemetry/TelemetryEntity.js.map +1 -1
- package/build/dist/Types/AnalyticsDatabase/AnalyticsTableName.js +11 -0
- package/build/dist/Types/AnalyticsDatabase/AnalyticsTableName.js.map +1 -1
- package/build/dist/Types/BaseDatabase/AggregationInterval.js +11 -0
- package/build/dist/Types/BaseDatabase/AggregationInterval.js.map +1 -1
- package/build/dist/Types/BaseDatabase/AggregationIntervalUtil.js +33 -5
- package/build/dist/Types/BaseDatabase/AggregationIntervalUtil.js.map +1 -1
- package/build/dist/Types/Email/EmailTemplateType.js +2 -0
- package/build/dist/Types/Email/EmailTemplateType.js.map +1 -1
- package/build/dist/Types/Marketing/MarketingConversion.js +13 -0
- package/build/dist/Types/Marketing/MarketingConversion.js.map +1 -0
- package/build/dist/Types/Monitor/MonitorMetricType.js +7 -0
- package/build/dist/Types/Monitor/MonitorMetricType.js.map +1 -1
- package/build/dist/Types/Monitor/MonitorStep.js +6 -0
- package/build/dist/Types/Monitor/MonitorStep.js.map +1 -1
- package/build/dist/Types/Monitor/MonitorStepSqlMonitor.js +3 -0
- package/build/dist/Types/Monitor/MonitorStepSqlMonitor.js.map +1 -1
- package/build/dist/Types/Monitor/MonitorType.js +2 -1
- package/build/dist/Types/Monitor/MonitorType.js.map +1 -1
- package/build/dist/Types/Monitor/SnmpMonitor/CdpNeighbor.js +2 -0
- package/build/dist/Types/Monitor/SnmpMonitor/CdpNeighbor.js.map +1 -0
- package/build/dist/Types/Monitor/SnmpMonitor/SnmpAuthProtocol.js +41 -0
- package/build/dist/Types/Monitor/SnmpMonitor/SnmpAuthProtocol.js.map +1 -1
- package/build/dist/Types/Monitor/SnmpMonitor/SnmpEntityInfo.js +2 -0
- package/build/dist/Types/Monitor/SnmpMonitor/SnmpEntityInfo.js.map +1 -0
- package/build/dist/Types/Monitor/SnmpMonitor/SnmpPrivProtocol.js +48 -0
- package/build/dist/Types/Monitor/SnmpMonitor/SnmpPrivProtocol.js.map +1 -1
- package/build/dist/Types/Monitor/SnmpMonitor/SnmpSecurityLevel.js +38 -0
- package/build/dist/Types/Monitor/SnmpMonitor/SnmpSecurityLevel.js.map +1 -1
- package/build/dist/Types/Monitor/SnmpMonitor/SnmpSystemInfo.js +2 -0
- package/build/dist/Types/Monitor/SnmpMonitor/SnmpSystemInfo.js.map +1 -0
- package/build/dist/Types/Monitor/SnmpMonitor/SnmpVendorTemplate.js +96 -3
- package/build/dist/Types/Monitor/SnmpMonitor/SnmpVendorTemplate.js.map +1 -1
- package/build/dist/Types/NetFlow/NetworkFlowRecord.js +2 -0
- package/build/dist/Types/NetFlow/NetworkFlowRecord.js.map +1 -0
- package/build/dist/Types/Syslog/SyslogMessage.js +2 -0
- package/build/dist/Types/Syslog/SyslogMessage.js.map +1 -0
- package/build/dist/Types/Telemetry/TelemetrySavedViewState.js +0 -7
- package/build/dist/Types/Telemetry/TelemetrySavedViewState.js.map +1 -1
- package/build/dist/Types/Telemetry/TelemetrySavedViewType.js +13 -0
- package/build/dist/Types/Telemetry/TelemetrySavedViewType.js.map +1 -0
- package/build/dist/UI/Components/Charts/Area/AreaChart.js +25 -1
- package/build/dist/UI/Components/Charts/Area/AreaChart.js.map +1 -1
- package/build/dist/UI/Components/Charts/Bar/BarChart.js +26 -2
- package/build/dist/UI/Components/Charts/Bar/BarChart.js.map +1 -1
- package/build/dist/UI/Components/Charts/ChartGroup/ChartGroup.js +36 -12
- package/build/dist/UI/Components/Charts/ChartGroup/ChartGroup.js.map +1 -1
- package/build/dist/UI/Components/Charts/ChartLibrary/AreaChart/AreaChart.js +208 -6
- package/build/dist/UI/Components/Charts/ChartLibrary/AreaChart/AreaChart.js.map +1 -1
- package/build/dist/UI/Components/Charts/ChartLibrary/BarChart/BarChart.js +52 -3
- package/build/dist/UI/Components/Charts/ChartLibrary/BarChart/BarChart.js.map +1 -1
- package/build/dist/UI/Components/Charts/ChartLibrary/LineChart/LineChart.js +208 -6
- package/build/dist/UI/Components/Charts/ChartLibrary/LineChart/LineChart.js.map +1 -1
- package/build/dist/UI/Components/Charts/ChartLibrary/Types/ChartDataPoint.js +6 -1
- package/build/dist/UI/Components/Charts/ChartLibrary/Types/ChartDataPoint.js.map +1 -1
- package/build/dist/UI/Components/Charts/ChartLibrary/Types/FormattedReferenceRegion.js +2 -0
- package/build/dist/UI/Components/Charts/ChartLibrary/Types/FormattedReferenceRegion.js.map +1 -0
- package/build/dist/UI/Components/Charts/ChartLibrary/Types/FormattedTimeReferenceLine.js +2 -0
- package/build/dist/UI/Components/Charts/ChartLibrary/Types/FormattedTimeReferenceLine.js.map +1 -0
- package/build/dist/UI/Components/Charts/Line/LineChart.js +25 -1
- package/build/dist/UI/Components/Charts/Line/LineChart.js.map +1 -1
- package/build/dist/UI/Components/Charts/Types/ReferenceRegionProps.js +2 -0
- package/build/dist/UI/Components/Charts/Types/ReferenceRegionProps.js.map +1 -0
- package/build/dist/UI/Components/Charts/Types/TimeReferenceLineProps.js +2 -0
- package/build/dist/UI/Components/Charts/Types/TimeReferenceLineProps.js.map +1 -0
- package/build/dist/UI/Components/Charts/Types/XAxis/XAxisPrecision.js +1 -0
- package/build/dist/UI/Components/Charts/Types/XAxis/XAxisPrecision.js.map +1 -1
- package/build/dist/UI/Components/Charts/Utils/DataPoint.js +0 -0
- package/build/dist/UI/Components/Charts/Utils/DataPoint.js.map +1 -1
- package/build/dist/UI/Components/Charts/Utils/TimeAnnotation.js +121 -0
- package/build/dist/UI/Components/Charts/Utils/TimeAnnotation.js.map +1 -0
- package/build/dist/UI/Components/Charts/Utils/XAxis.js +27 -4
- package/build/dist/UI/Components/Charts/Utils/XAxis.js.map +1 -1
- package/build/dist/UI/Components/Icon/Icon.js +15 -8
- package/build/dist/UI/Components/Icon/Icon.js.map +1 -1
- package/build/dist/UI/Components/Markdown.tsx/MarkdownViewer.js.map +1 -1
- package/build/dist/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.js +58 -0
- package/build/dist/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.js.map +1 -1
- package/build/dist/UI/Components/Page/ModelPage.js +7 -1
- package/build/dist/UI/Components/Page/ModelPage.js.map +1 -1
- package/build/dist/UI/Components/TelemetryViewer/components/SavedViewsDropdown.js +10 -4
- package/build/dist/UI/Components/TelemetryViewer/components/SavedViewsDropdown.js.map +1 -1
- package/build/dist/UI/Utils/User.js +35 -2
- package/build/dist/UI/Utils/User.js.map +1 -1
- package/build/dist/Utils/Analytics.js +8 -5
- package/build/dist/Utils/Analytics.js.map +1 -1
- package/build/dist/Utils/EnterpriseLicense/EnterpriseLicenseUsage.js +57 -0
- package/build/dist/Utils/EnterpriseLicense/EnterpriseLicenseUsage.js.map +1 -1
- package/build/dist/Utils/Metrics/MetricExplorerUrl.js +418 -0
- package/build/dist/Utils/Metrics/MetricExplorerUrl.js.map +1 -0
- package/build/dist/Utils/Metrics/MetricFormulaEvaluator.js +296 -37
- package/build/dist/Utils/Metrics/MetricFormulaEvaluator.js.map +1 -1
- package/build/dist/Utils/Monitor/NetworkTopologyUtil.js +176 -40
- package/build/dist/Utils/Monitor/NetworkTopologyUtil.js.map +1 -1
- package/build/dist/Utils/ValueFormatter.js +20 -1
- package/build/dist/Utils/ValueFormatter.js.map +1 -1
- package/package.json +4 -3
|
@@ -48,7 +48,7 @@ const MIKROTIK: SnmpVendorTemplate = {
|
|
|
48
48
|
id: "mikrotik-routeros",
|
|
49
49
|
label: "MikroTik RouterOS",
|
|
50
50
|
description:
|
|
51
|
-
"CPU load,
|
|
51
|
+
"CPU load, board temperature, and voltage from the MikroTik health MIB, plus standard Host Resources CPU.",
|
|
52
52
|
oids: [
|
|
53
53
|
{
|
|
54
54
|
oid: "1.3.6.1.2.1.25.3.3.1.2.1",
|
|
@@ -56,9 +56,10 @@ const MIKROTIK: SnmpVendorTemplate = {
|
|
|
56
56
|
description: "hrProcessorLoad — first processor.",
|
|
57
57
|
},
|
|
58
58
|
{
|
|
59
|
+
// .10.0 is mtxrHlTemperature (board temp); processor temp is .11.0.
|
|
59
60
|
oid: "1.3.6.1.4.1.14988.1.1.3.10.0",
|
|
60
|
-
name: "
|
|
61
|
-
description: "
|
|
61
|
+
name: "Temperature (C)",
|
|
62
|
+
description: "mtxrHlTemperature — system/board temperature.",
|
|
62
63
|
},
|
|
63
64
|
{
|
|
64
65
|
oid: "1.3.6.1.4.1.14988.1.1.3.8.0",
|
|
@@ -128,6 +129,58 @@ export const SnmpVendorTemplates: Array<SnmpVendorTemplate> = [
|
|
|
128
129
|
UBIQUITI,
|
|
129
130
|
];
|
|
130
131
|
|
|
132
|
+
/*
|
|
133
|
+
* IANA private-enterprise numbers → vendor display names, for the vendors
|
|
134
|
+
* that actually show up on monitored networks. Used to derive a vendor from
|
|
135
|
+
* sysObjectID (1.3.6.1.4.1.<enterprise>...) when the device does not
|
|
136
|
+
* implement ENTITY-MIB. Not exhaustive by design — unknown enterprises just
|
|
137
|
+
* leave the vendor blank.
|
|
138
|
+
*/
|
|
139
|
+
const ENTERPRISE_VENDOR_NAMES: Record<number, string> = {
|
|
140
|
+
9: "Cisco",
|
|
141
|
+
11: "HPE",
|
|
142
|
+
43: "3Com",
|
|
143
|
+
171: "D-Link",
|
|
144
|
+
207: "Allied Telesis",
|
|
145
|
+
674: "Dell",
|
|
146
|
+
1588: "Brocade",
|
|
147
|
+
1916: "Extreme Networks",
|
|
148
|
+
2011: "Huawei",
|
|
149
|
+
2021: "Net-SNMP",
|
|
150
|
+
2636: "Juniper",
|
|
151
|
+
3224: "NetScreen",
|
|
152
|
+
3375: "F5",
|
|
153
|
+
4526: "Netgear",
|
|
154
|
+
6027: "Force10",
|
|
155
|
+
6486: "Alcatel-Lucent",
|
|
156
|
+
6574: "Synology",
|
|
157
|
+
8072: "Net-SNMP",
|
|
158
|
+
9303: "PacketFront",
|
|
159
|
+
10002: "Frogfoot",
|
|
160
|
+
11863: "TP-Link",
|
|
161
|
+
12325: "pfSense",
|
|
162
|
+
12356: "Fortinet",
|
|
163
|
+
14823: "Aruba",
|
|
164
|
+
14988: "MikroTik",
|
|
165
|
+
17163: "Riverbed",
|
|
166
|
+
22610: "Vyatta",
|
|
167
|
+
24681: "QNAP",
|
|
168
|
+
25461: "Palo Alto Networks",
|
|
169
|
+
25506: "H3C",
|
|
170
|
+
26543: "Yamaha",
|
|
171
|
+
30065: "Arista",
|
|
172
|
+
35098: "PICA8",
|
|
173
|
+
41112: "Ubiquiti",
|
|
174
|
+
47196: "OPNsense",
|
|
175
|
+
};
|
|
176
|
+
|
|
177
|
+
// sysObjectID template routing: enterprise number → vendor template id.
|
|
178
|
+
const ENTERPRISE_TEMPLATE_IDS: Record<number, string> = {
|
|
179
|
+
9: "cisco-ios",
|
|
180
|
+
14988: "mikrotik-routeros",
|
|
181
|
+
41112: "ubiquiti-edgeos",
|
|
182
|
+
};
|
|
183
|
+
|
|
131
184
|
export default class SnmpVendorTemplateUtil {
|
|
132
185
|
public static getAll(): Array<SnmpVendorTemplate> {
|
|
133
186
|
return SnmpVendorTemplates;
|
|
@@ -139,6 +192,69 @@ export default class SnmpVendorTemplateUtil {
|
|
|
139
192
|
});
|
|
140
193
|
}
|
|
141
194
|
|
|
195
|
+
/*
|
|
196
|
+
* Extracts the IANA private-enterprise number from a sysObjectID value
|
|
197
|
+
* ("1.3.6.1.4.1.<enterprise>...", with or without a leading dot). Returns
|
|
198
|
+
* undefined for OIDs outside the enterprises arc (e.g. the mib-2 values
|
|
199
|
+
* some appliances report).
|
|
200
|
+
*/
|
|
201
|
+
public static getEnterpriseNumber(
|
|
202
|
+
sysObjectId: string | undefined,
|
|
203
|
+
): number | undefined {
|
|
204
|
+
if (!sysObjectId) {
|
|
205
|
+
return undefined;
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
const normalized: string = sysObjectId.trim().replace(/^\./, "");
|
|
209
|
+
const enterprisesPrefix: string = "1.3.6.1.4.1.";
|
|
210
|
+
|
|
211
|
+
if (!normalized.startsWith(enterprisesPrefix)) {
|
|
212
|
+
return undefined;
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
const enterprisePart: string | undefined = normalized
|
|
216
|
+
.substring(enterprisesPrefix.length)
|
|
217
|
+
.split(".")[0];
|
|
218
|
+
|
|
219
|
+
const enterpriseNumber: number = parseInt(enterprisePart || "", 10);
|
|
220
|
+
return isNaN(enterpriseNumber) ? undefined : enterpriseNumber;
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
public static getVendorNameBySysObjectId(
|
|
224
|
+
sysObjectId: string | undefined,
|
|
225
|
+
): string | undefined {
|
|
226
|
+
const enterpriseNumber: number | undefined =
|
|
227
|
+
SnmpVendorTemplateUtil.getEnterpriseNumber(sysObjectId);
|
|
228
|
+
|
|
229
|
+
if (enterpriseNumber === undefined) {
|
|
230
|
+
return undefined;
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
return ENTERPRISE_VENDOR_NAMES[enterpriseNumber];
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
/*
|
|
237
|
+
* Suggests the vendor OID template matching a device's sysObjectID.
|
|
238
|
+
* Returns undefined when no vendor-specific template exists — callers can
|
|
239
|
+
* fall back to the generic Host Resources template, which most
|
|
240
|
+
* Linux-based appliances answer.
|
|
241
|
+
*/
|
|
242
|
+
public static matchBySysObjectId(
|
|
243
|
+
sysObjectId: string | undefined,
|
|
244
|
+
): SnmpVendorTemplate | undefined {
|
|
245
|
+
const enterpriseNumber: number | undefined =
|
|
246
|
+
SnmpVendorTemplateUtil.getEnterpriseNumber(sysObjectId);
|
|
247
|
+
|
|
248
|
+
if (enterpriseNumber === undefined) {
|
|
249
|
+
return undefined;
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
const templateId: string | undefined =
|
|
253
|
+
ENTERPRISE_TEMPLATE_IDS[enterpriseNumber];
|
|
254
|
+
|
|
255
|
+
return templateId ? SnmpVendorTemplateUtil.getById(templateId) : undefined;
|
|
256
|
+
}
|
|
257
|
+
|
|
142
258
|
/*
|
|
143
259
|
* Merges a template's OIDs into an existing list, skipping any OID already
|
|
144
260
|
* present so applying a template twice (or applying two overlapping ones)
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* One network flow parsed from a NetFlow v5 record, forwarded by a probe's
|
|
3
|
+
* NetFlow receiver to the server, where it is correlated to a NetworkDevice
|
|
4
|
+
* by the EXPORTER's IP address (the router/switch that sent the datagram)
|
|
5
|
+
* and written into the ClickHouse NetworkFlow table. Source/destination
|
|
6
|
+
* describe the traffic itself; exporterIpAddress identifies the device that
|
|
7
|
+
* observed it. Flow timestamps are converted to wall-clock time by the
|
|
8
|
+
* probe from the datagram's sysUptime/unixSecs header fields.
|
|
9
|
+
*/
|
|
10
|
+
export default interface NetworkFlowRecord {
|
|
11
|
+
exporterIpAddress: string;
|
|
12
|
+
sourceIpAddress: string;
|
|
13
|
+
destinationIpAddress: string;
|
|
14
|
+
sourcePort: number;
|
|
15
|
+
destinationPort: number;
|
|
16
|
+
protocolNumber: number;
|
|
17
|
+
octets: number;
|
|
18
|
+
packets: number;
|
|
19
|
+
flowStartAt: Date;
|
|
20
|
+
flowEndAt: Date;
|
|
21
|
+
inputInterfaceIndex?: number | undefined;
|
|
22
|
+
outputInterfaceIndex?: number | undefined;
|
|
23
|
+
tcpFlags?: number | undefined;
|
|
24
|
+
tos?: number | undefined;
|
|
25
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* A syslog message received by a probe's syslog receiver and forwarded to
|
|
3
|
+
* the server, where it is correlated to a NetworkDevice by source IP and
|
|
4
|
+
* written into the telemetry Logs pipeline. Facility and severity are the
|
|
5
|
+
* RFC 5424 numerical codes decoded from the message's <PRI> prefix
|
|
6
|
+
* (facility 0-23, severity 0-7). The timestamp comes from the message
|
|
7
|
+
* itself when parseable, otherwise it equals receivedAt.
|
|
8
|
+
*/
|
|
9
|
+
export default interface SyslogMessage {
|
|
10
|
+
sourceIpAddress: string;
|
|
11
|
+
facility: number;
|
|
12
|
+
severity: number;
|
|
13
|
+
timestamp: Date;
|
|
14
|
+
hostname?: string | undefined;
|
|
15
|
+
appName?: string | undefined;
|
|
16
|
+
message: string;
|
|
17
|
+
receivedAt: Date;
|
|
18
|
+
}
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { JSONObject } from "../JSON";
|
|
2
|
+
|
|
1
3
|
/*
|
|
2
4
|
* Serializable view state for the Metrics and Traces explorers. Stored in the
|
|
3
5
|
* `query` JSONB column of MetricSavedView / TraceSavedView. This is the same
|
|
@@ -25,4 +27,11 @@ export default interface TelemetrySavedViewState {
|
|
|
25
27
|
pageSize?: number | undefined;
|
|
26
28
|
// Traces explorer: root-spans-only toggle (defaults to true when absent).
|
|
27
29
|
rootOnly?: boolean | undefined;
|
|
30
|
+
/*
|
|
31
|
+
* Metrics explorer: the full chart-builder state — MetricsViewConfig-
|
|
32
|
+
* shaped { queryConfigs, formulaConfigs } plus a time-range token.
|
|
33
|
+
* Kept loosely typed like the rest of this state: the explorer owns
|
|
34
|
+
* serialization and must deserialize defensively.
|
|
35
|
+
*/
|
|
36
|
+
explorerConfig?: JSONObject | undefined;
|
|
28
37
|
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Which explorer surface a saved telemetry view belongs to. Stored in the
|
|
3
|
+
* nullable `viewType` column of MetricSavedView — NULL is treated as List
|
|
4
|
+
* for back-compat (every row created before the column existed came from
|
|
5
|
+
* the list page).
|
|
6
|
+
*/
|
|
7
|
+
enum TelemetrySavedViewType {
|
|
8
|
+
List = "list",
|
|
9
|
+
Explorer = "explorer",
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export default TelemetrySavedViewType;
|
|
@@ -15,8 +15,13 @@ import YAxis from "../Types/YAxis/YAxis";
|
|
|
15
15
|
import ChartCurve from "../Types/ChartCurve";
|
|
16
16
|
import ChartDataPoint from "../ChartLibrary/Types/ChartDataPoint";
|
|
17
17
|
import FormattedExemplarPoint from "../ChartLibrary/Types/FormattedExemplarPoint";
|
|
18
|
+
import FormattedReferenceRegion from "../ChartLibrary/Types/FormattedReferenceRegion";
|
|
19
|
+
import FormattedTimeReferenceLine from "../ChartLibrary/Types/FormattedTimeReferenceLine";
|
|
18
20
|
import DataPointUtil from "../Utils/DataPoint";
|
|
21
|
+
import TimeAnnotationUtil from "../Utils/TimeAnnotation";
|
|
19
22
|
import ChartReferenceLineProps from "../Types/ReferenceLineProps";
|
|
23
|
+
import ChartReferenceRegionProps from "../Types/ReferenceRegionProps";
|
|
24
|
+
import ChartTimeReferenceLineProps from "../Types/TimeReferenceLineProps";
|
|
20
25
|
import ExemplarPoint from "../Types/ExemplarPoint";
|
|
21
26
|
import XAxisUtil from "../Utils/XAxis";
|
|
22
27
|
import NoDataMessage from "../ChartGroup/NoDataMessage";
|
|
@@ -42,8 +47,20 @@ export interface ComponentProps {
|
|
|
42
47
|
sync: boolean;
|
|
43
48
|
heightInPx?: number | undefined;
|
|
44
49
|
referenceLines?: Array<ChartReferenceLineProps> | undefined;
|
|
50
|
+
/*
|
|
51
|
+
* Time-anchored annotations: vertical event markers and shaded regions.
|
|
52
|
+
* Dates are snapped onto the categorical x-axis buckets; annotations
|
|
53
|
+
* outside the charted window are dropped (regions clamp to the edge).
|
|
54
|
+
*/
|
|
55
|
+
timeReferenceLines?: Array<ChartTimeReferenceLineProps> | undefined;
|
|
56
|
+
referenceRegions?: Array<ChartReferenceRegionProps> | undefined;
|
|
45
57
|
exemplarPoints?: Array<ExemplarPoint> | undefined;
|
|
46
58
|
onExemplarClick?: ((exemplar: ExemplarPoint) => void) | undefined;
|
|
59
|
+
/*
|
|
60
|
+
* When provided, the chart supports drag-to-select: dragging across
|
|
61
|
+
* buckets calls back with the [start, end) of the selected time range.
|
|
62
|
+
*/
|
|
63
|
+
onTimeRangeSelect?: ((startTime: Date, endTime: Date) => void) | undefined;
|
|
47
64
|
showLegend?: boolean | undefined;
|
|
48
65
|
/**
|
|
49
66
|
* Render a shaded "expected range" band underneath the plotted lines.
|
|
@@ -117,6 +134,29 @@ const AreaChartElement: FunctionComponent<AreaInternalProps> = (
|
|
|
117
134
|
});
|
|
118
135
|
}, [props.exemplarPoints, props.xAxis]);
|
|
119
136
|
|
|
137
|
+
// Snap time annotations onto the categorical x-axis bucket labels
|
|
138
|
+
const formattedTimeReferenceLines: Array<FormattedTimeReferenceLine> =
|
|
139
|
+
useMemo(() => {
|
|
140
|
+
if (!props.timeReferenceLines || props.timeReferenceLines.length === 0) {
|
|
141
|
+
return [];
|
|
142
|
+
}
|
|
143
|
+
return TimeAnnotationUtil.formatTimeReferenceLines({
|
|
144
|
+
timeReferenceLines: props.timeReferenceLines,
|
|
145
|
+
xAxis: props.xAxis,
|
|
146
|
+
});
|
|
147
|
+
}, [props.timeReferenceLines, props.xAxis]);
|
|
148
|
+
|
|
149
|
+
const formattedReferenceRegions: Array<FormattedReferenceRegion> =
|
|
150
|
+
useMemo(() => {
|
|
151
|
+
if (!props.referenceRegions || props.referenceRegions.length === 0) {
|
|
152
|
+
return [];
|
|
153
|
+
}
|
|
154
|
+
return TimeAnnotationUtil.formatReferenceRegions({
|
|
155
|
+
referenceRegions: props.referenceRegions,
|
|
156
|
+
xAxis: props.xAxis,
|
|
157
|
+
});
|
|
158
|
+
}, [props.referenceRegions, props.xAxis]);
|
|
159
|
+
|
|
120
160
|
const hasNoData: boolean =
|
|
121
161
|
!props.data ||
|
|
122
162
|
props.data.length === 0 ||
|
|
@@ -164,10 +204,21 @@ const AreaChartElement: FunctionComponent<AreaInternalProps> = (
|
|
|
164
204
|
{...maxValueProp}
|
|
165
205
|
onValueChange={() => {}}
|
|
166
206
|
referenceLines={props.referenceLines}
|
|
207
|
+
formattedTimeReferenceLines={
|
|
208
|
+
formattedTimeReferenceLines.length > 0
|
|
209
|
+
? formattedTimeReferenceLines
|
|
210
|
+
: undefined
|
|
211
|
+
}
|
|
212
|
+
formattedReferenceRegions={
|
|
213
|
+
formattedReferenceRegions.length > 0
|
|
214
|
+
? formattedReferenceRegions
|
|
215
|
+
: undefined
|
|
216
|
+
}
|
|
167
217
|
formattedExemplarPoints={
|
|
168
218
|
formattedExemplars.length > 0 ? formattedExemplars : undefined
|
|
169
219
|
}
|
|
170
220
|
onExemplarClick={props.onExemplarClick}
|
|
221
|
+
onTimeRangeSelect={props.onTimeRangeSelect}
|
|
171
222
|
anomalyBandLowerKey={bandLower}
|
|
172
223
|
anomalyBandUpperKey={bandUpper}
|
|
173
224
|
/>
|
|
@@ -3,13 +3,23 @@ import {
|
|
|
3
3
|
AvailableChartColorsKeys,
|
|
4
4
|
ChartColorValue,
|
|
5
5
|
} from "../ChartLibrary/Utils/ChartColors";
|
|
6
|
-
import React, {
|
|
6
|
+
import React, {
|
|
7
|
+
FunctionComponent,
|
|
8
|
+
ReactElement,
|
|
9
|
+
useEffect,
|
|
10
|
+
useMemo,
|
|
11
|
+
} from "react";
|
|
7
12
|
import SeriesPoint from "../Types/SeriesPoints";
|
|
8
13
|
import { XAxis } from "../Types/XAxis/XAxis";
|
|
9
14
|
import YAxis from "../Types/YAxis/YAxis";
|
|
10
15
|
import ChartDataPoint from "../ChartLibrary/Types/ChartDataPoint";
|
|
16
|
+
import FormattedReferenceRegion from "../ChartLibrary/Types/FormattedReferenceRegion";
|
|
17
|
+
import FormattedTimeReferenceLine from "../ChartLibrary/Types/FormattedTimeReferenceLine";
|
|
11
18
|
import DataPointUtil from "../Utils/DataPoint";
|
|
19
|
+
import TimeAnnotationUtil from "../Utils/TimeAnnotation";
|
|
12
20
|
import ChartReferenceLineProps from "../Types/ReferenceLineProps";
|
|
21
|
+
import ChartReferenceRegionProps from "../Types/ReferenceRegionProps";
|
|
22
|
+
import ChartTimeReferenceLineProps from "../Types/TimeReferenceLineProps";
|
|
13
23
|
import NoDataMessage from "../ChartGroup/NoDataMessage";
|
|
14
24
|
|
|
15
25
|
export const BarChartPalette: Array<AvailableChartColorsKeys> = [
|
|
@@ -31,6 +41,13 @@ export interface ComponentProps {
|
|
|
31
41
|
sync: boolean;
|
|
32
42
|
heightInPx?: number | undefined;
|
|
33
43
|
referenceLines?: Array<ChartReferenceLineProps> | undefined;
|
|
44
|
+
/*
|
|
45
|
+
* Time-anchored annotations: vertical event markers and shaded regions.
|
|
46
|
+
* Dates are snapped onto the categorical x-axis buckets; annotations
|
|
47
|
+
* outside the charted window are dropped (regions clamp to the edge).
|
|
48
|
+
*/
|
|
49
|
+
timeReferenceLines?: Array<ChartTimeReferenceLineProps> | undefined;
|
|
50
|
+
referenceRegions?: Array<ChartReferenceRegionProps> | undefined;
|
|
34
51
|
showLegend?: boolean | undefined;
|
|
35
52
|
/*
|
|
36
53
|
* Optional per-series color override. Each entry may be a named palette key
|
|
@@ -64,6 +81,29 @@ const BarChartElement: FunctionComponent<BarInternalProps> = (
|
|
|
64
81
|
setRecords(records);
|
|
65
82
|
}, [props.data]);
|
|
66
83
|
|
|
84
|
+
// Snap time annotations onto the categorical x-axis bucket labels
|
|
85
|
+
const formattedTimeReferenceLines: Array<FormattedTimeReferenceLine> =
|
|
86
|
+
useMemo(() => {
|
|
87
|
+
if (!props.timeReferenceLines || props.timeReferenceLines.length === 0) {
|
|
88
|
+
return [];
|
|
89
|
+
}
|
|
90
|
+
return TimeAnnotationUtil.formatTimeReferenceLines({
|
|
91
|
+
timeReferenceLines: props.timeReferenceLines,
|
|
92
|
+
xAxis: props.xAxis,
|
|
93
|
+
});
|
|
94
|
+
}, [props.timeReferenceLines, props.xAxis]);
|
|
95
|
+
|
|
96
|
+
const formattedReferenceRegions: Array<FormattedReferenceRegion> =
|
|
97
|
+
useMemo(() => {
|
|
98
|
+
if (!props.referenceRegions || props.referenceRegions.length === 0) {
|
|
99
|
+
return [];
|
|
100
|
+
}
|
|
101
|
+
return TimeAnnotationUtil.formatReferenceRegions({
|
|
102
|
+
referenceRegions: props.referenceRegions,
|
|
103
|
+
xAxis: props.xAxis,
|
|
104
|
+
});
|
|
105
|
+
}, [props.referenceRegions, props.xAxis]);
|
|
106
|
+
|
|
67
107
|
const hasNoData: boolean =
|
|
68
108
|
!props.data ||
|
|
69
109
|
props.data.length === 0 ||
|
|
@@ -93,6 +133,16 @@ const BarChartElement: FunctionComponent<BarInternalProps> = (
|
|
|
93
133
|
syncid={props.sync ? props.syncid : undefined}
|
|
94
134
|
onValueChange={() => {}}
|
|
95
135
|
referenceLines={props.referenceLines}
|
|
136
|
+
formattedTimeReferenceLines={
|
|
137
|
+
formattedTimeReferenceLines.length > 0
|
|
138
|
+
? formattedTimeReferenceLines
|
|
139
|
+
: undefined
|
|
140
|
+
}
|
|
141
|
+
formattedReferenceRegions={
|
|
142
|
+
formattedReferenceRegions.length > 0
|
|
143
|
+
? formattedReferenceRegions
|
|
144
|
+
: undefined
|
|
145
|
+
}
|
|
96
146
|
/>
|
|
97
147
|
{hasNoData && <NoDataMessage />}
|
|
98
148
|
</div>
|
|
@@ -37,6 +37,13 @@ export interface Chart {
|
|
|
37
37
|
metricInfo?: ChartMetricInfo | undefined;
|
|
38
38
|
exemplarPoints?: Array<ExemplarPoint> | undefined;
|
|
39
39
|
onExemplarClick?: ((exemplar: ExemplarPoint) => void) | undefined;
|
|
40
|
+
/**
|
|
41
|
+
* Optional "Open in Explorer" action rendered as an icon button in the
|
|
42
|
+
* chart header next to the info icon. Kept as a plain callback so this
|
|
43
|
+
* shared component stays free of any app's routing — callers build the
|
|
44
|
+
* explorer URL and navigate themselves.
|
|
45
|
+
*/
|
|
46
|
+
onOpenInExplorer?: (() => void) | undefined;
|
|
40
47
|
/**
|
|
41
48
|
* Optional control panel rendered directly below the chart body. Used by
|
|
42
49
|
* per-series-grouped metric charts to surface a search box, a sort
|
|
@@ -109,6 +116,29 @@ const ChartGroup: FunctionComponent<ComponentProps> = (
|
|
|
109
116
|
}
|
|
110
117
|
};
|
|
111
118
|
|
|
119
|
+
type GetDragToZoomHintFunction = (chart: Chart) => ReactElement;
|
|
120
|
+
|
|
121
|
+
// Same subtle hint the log/telemetry histograms show for drag-to-zoom.
|
|
122
|
+
const getDragToZoomHint: GetDragToZoomHintFunction = (
|
|
123
|
+
chart: Chart,
|
|
124
|
+
): ReactElement => {
|
|
125
|
+
const supportsTimeRangeSelect: boolean =
|
|
126
|
+
(chart.type === ChartType.LINE || chart.type === ChartType.AREA) &&
|
|
127
|
+
Boolean(
|
|
128
|
+
(chart.props as LineChartProps | AreaChartProps).onTimeRangeSelect,
|
|
129
|
+
);
|
|
130
|
+
|
|
131
|
+
if (!supportsTimeRangeSelect) {
|
|
132
|
+
return <></>;
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
return (
|
|
136
|
+
<span className="ml-auto shrink-0 whitespace-nowrap text-[10px] text-gray-400">
|
|
137
|
+
Drag to zoom
|
|
138
|
+
</span>
|
|
139
|
+
);
|
|
140
|
+
};
|
|
141
|
+
|
|
112
142
|
type GetInfoIconFunction = (chart: Chart) => ReactElement;
|
|
113
143
|
|
|
114
144
|
const getInfoIcon: GetInfoIconFunction = (chart: Chart): ReactElement => {
|
|
@@ -119,7 +149,7 @@ const ChartGroup: FunctionComponent<ComponentProps> = (
|
|
|
119
149
|
return (
|
|
120
150
|
<button
|
|
121
151
|
type="button"
|
|
122
|
-
className="ml-1.5 inline-flex items-center justify-center rounded-full w-5 h-5 text-gray-
|
|
152
|
+
className="ml-1.5 inline-flex items-center justify-center rounded-full w-5 h-5 text-gray-400 hover:text-gray-600 hover:bg-gray-100 transition-all duration-150"
|
|
123
153
|
title="View metric details"
|
|
124
154
|
onClick={() => {
|
|
125
155
|
setMetricInfoModalChart(chart.metricInfo || null);
|
|
@@ -134,6 +164,33 @@ const ChartGroup: FunctionComponent<ComponentProps> = (
|
|
|
134
164
|
);
|
|
135
165
|
};
|
|
136
166
|
|
|
167
|
+
type GetExplorerIconFunction = (chart: Chart) => ReactElement;
|
|
168
|
+
|
|
169
|
+
const getExplorerIcon: GetExplorerIconFunction = (
|
|
170
|
+
chart: Chart,
|
|
171
|
+
): ReactElement => {
|
|
172
|
+
if (!chart.onOpenInExplorer) {
|
|
173
|
+
return <></>;
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
return (
|
|
177
|
+
<button
|
|
178
|
+
type="button"
|
|
179
|
+
className="ml-1.5 inline-flex items-center justify-center rounded-full w-5 h-5 text-gray-400 hover:text-gray-600 hover:bg-gray-100 transition-all duration-150"
|
|
180
|
+
title="Open in Metric Explorer"
|
|
181
|
+
onClick={() => {
|
|
182
|
+
chart.onOpenInExplorer?.();
|
|
183
|
+
}}
|
|
184
|
+
>
|
|
185
|
+
<Icon
|
|
186
|
+
icon={IconProp.ExternalLink}
|
|
187
|
+
size={SizeProp.Smaller}
|
|
188
|
+
className="h-3.5 w-3.5"
|
|
189
|
+
/>
|
|
190
|
+
</button>
|
|
191
|
+
);
|
|
192
|
+
};
|
|
193
|
+
|
|
137
194
|
const renderMetricInfoModal: () => ReactElement = (): ReactElement => {
|
|
138
195
|
if (!metricInfoModalChart) {
|
|
139
196
|
return <></>;
|
|
@@ -250,10 +307,15 @@ const ChartGroup: FunctionComponent<ComponentProps> = (
|
|
|
250
307
|
<div className="px-5 pt-4 pb-4 flex flex-col flex-1">
|
|
251
308
|
<div className="mb-3 pb-3 border-b border-gray-100">
|
|
252
309
|
<div className="flex items-center">
|
|
253
|
-
<h3
|
|
310
|
+
<h3
|
|
311
|
+
className="min-w-0 truncate text-sm font-semibold text-gray-800 tracking-tight"
|
|
312
|
+
title={chart.title}
|
|
313
|
+
>
|
|
254
314
|
{chart.title}
|
|
255
315
|
</h3>
|
|
256
316
|
{getInfoIcon(chart)}
|
|
317
|
+
{getExplorerIcon(chart)}
|
|
318
|
+
{getDragToZoomHint(chart)}
|
|
257
319
|
</div>
|
|
258
320
|
{chart.description && (
|
|
259
321
|
<p className="mt-1 text-xs text-gray-500 hidden md:block">
|
|
@@ -263,7 +325,7 @@ const ChartGroup: FunctionComponent<ComponentProps> = (
|
|
|
263
325
|
</div>
|
|
264
326
|
{getChartContent(chart, index)}
|
|
265
327
|
{chart.seriesControls ? (
|
|
266
|
-
<div className="
|
|
328
|
+
<div className="mt-3">{chart.seriesControls}</div>
|
|
267
329
|
) : null}
|
|
268
330
|
</div>
|
|
269
331
|
</div>
|
|
@@ -281,37 +343,46 @@ const ChartGroup: FunctionComponent<ComponentProps> = (
|
|
|
281
343
|
return (
|
|
282
344
|
<>
|
|
283
345
|
{renderMetricInfoModal()}
|
|
284
|
-
<div
|
|
285
|
-
className={`grid grid-cols-1 ${gridCols} gap-4 space-y-4 lg:space-y-0`}
|
|
286
|
-
>
|
|
346
|
+
<div className={`grid grid-cols-1 ${gridCols} gap-4`}>
|
|
287
347
|
{props.charts.map((chart: Chart, index: number) => {
|
|
288
348
|
return (
|
|
289
349
|
<div
|
|
290
350
|
key={index}
|
|
291
|
-
className={`
|
|
351
|
+
className={`flex flex-col rounded-lg border border-gray-200 bg-white shadow-sm ${props.chartCssClass || ""}`}
|
|
292
352
|
>
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
353
|
+
{/* Header strip — title, meta icons, hover-revealed zoom hint */}
|
|
354
|
+
<div className="border-b border-gray-100 px-4 py-2.5">
|
|
355
|
+
<div className="flex items-center">
|
|
356
|
+
<h2
|
|
357
|
+
data-testid="card-details-heading"
|
|
358
|
+
id="card-details-heading"
|
|
359
|
+
className="min-w-0 truncate text-sm font-semibold leading-6 text-gray-900"
|
|
360
|
+
title={chart.title}
|
|
361
|
+
>
|
|
362
|
+
{chart.title}
|
|
363
|
+
</h2>
|
|
364
|
+
{getInfoIcon(chart)}
|
|
365
|
+
{getExplorerIcon(chart)}
|
|
366
|
+
{getDragToZoomHint(chart)}
|
|
367
|
+
</div>
|
|
368
|
+
{chart.description && (
|
|
369
|
+
<p
|
|
370
|
+
data-testid="card-description"
|
|
371
|
+
className="mt-0.5 w-full truncate text-xs text-gray-500 hidden md:block"
|
|
372
|
+
title={chart.description}
|
|
373
|
+
>
|
|
374
|
+
{chart.description}
|
|
375
|
+
</p>
|
|
376
|
+
)}
|
|
302
377
|
</div>
|
|
303
|
-
|
|
304
|
-
<p
|
|
305
|
-
data-testid="card-description"
|
|
306
|
-
className="mt-0.5 text-sm text-gray-500 w-full hidden md:block"
|
|
307
|
-
>
|
|
308
|
-
{chart.description}
|
|
309
|
-
</p>
|
|
310
|
-
)}
|
|
311
|
-
<div className="flex-1 flex flex-col min-h-80">
|
|
378
|
+
<div className="flex-1 flex flex-col min-h-80 px-4 pt-3 pb-2">
|
|
312
379
|
{getChartContent(chart, index)}
|
|
313
380
|
</div>
|
|
314
|
-
{chart.seriesControls ?
|
|
381
|
+
{chart.seriesControls ? (
|
|
382
|
+
<div className="border-t border-gray-100 px-4 py-3">
|
|
383
|
+
{chart.seriesControls}
|
|
384
|
+
</div>
|
|
385
|
+
) : null}
|
|
315
386
|
</div>
|
|
316
387
|
);
|
|
317
388
|
})}
|