@oneuptime/common 10.8.2 → 11.0.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/AnalyticsBaseModel/AnalyticsBaseModel.ts +16 -18
- package/Models/AnalyticsModels/AuditLog.ts +3 -1
- package/Models/AnalyticsModels/ExceptionInstance.ts +200 -82
- package/Models/AnalyticsModels/Index.ts +7 -2
- package/Models/AnalyticsModels/Log.ts +197 -81
- package/Models/AnalyticsModels/Metric.ts +199 -86
- package/Models/AnalyticsModels/MetricBaselineHourly.ts +44 -25
- package/Models/AnalyticsModels/MetricItemAggMV1m.ts +23 -20
- package/Models/AnalyticsModels/{MetricItemAggMV1mByHost.ts → MetricItemAggMV1mByHostV2.ts} +58 -47
- package/Models/AnalyticsModels/MonitorLog.ts +5 -1
- package/Models/AnalyticsModels/Profile.ts +206 -85
- package/Models/AnalyticsModels/ProfileSample.ts +196 -83
- package/Models/AnalyticsModels/Span.ts +218 -85
- package/Models/DatabaseModels/Index.ts +4 -0
- package/Models/DatabaseModels/Service.ts +29 -0
- package/Models/DatabaseModels/TelemetryEntity.ts +393 -0
- package/Models/DatabaseModels/TelemetryEntityRelationship.ts +294 -0
- package/Models/DatabaseModels/TelemetryException.ts +10 -10
- package/Models/DatabaseModels/TelemetryUsageBilling.ts +5 -5
- package/Server/API/AIAgentDataAPI.ts +13 -12
- package/Server/API/DashboardAPI.ts +2 -2
- package/Server/API/TelemetryAPI.ts +656 -141
- package/Server/API/TelemetryExceptionAPI.ts +2 -2
- package/Server/Infrastructure/ClickhouseConfig.ts +12 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1781100000001-RenameTelemetryServiceIdToPrimaryEntityId.ts +48 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1781200000000-AddTelemetryEntityTable.ts +70 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1781200000001-AddTelemetryEntityRelationshipTable.ts +57 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1781250074195-MigrationName.ts +207 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1781300000000-AddTelemetryEntityLabels.ts +24 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1781400000000-AddServiceTelemetrySdkLanguage.ts +25 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +12 -0
- package/Server/Infrastructure/Queue.ts +36 -3
- package/Server/Middleware/TelemetryIngest.ts +27 -22
- package/Server/Services/AlertService.ts +9 -9
- package/Server/Services/AnalyticsDatabaseService.ts +204 -35
- package/Server/Services/ExceptionAggregationService.ts +41 -18
- package/Server/Services/HostService.ts +2 -1
- package/Server/Services/IncidentService.ts +19 -19
- package/Server/Services/Index.ts +6 -2
- package/Server/Services/LogAggregationService.ts +116 -43
- package/Server/Services/MetricAggregationService.ts +29 -14
- package/Server/Services/MetricBaselineService.ts +34 -34
- package/Server/Services/MetricItemAggMV1mByHostV2Service.ts +30 -0
- package/Server/Services/MetricService.ts +119 -31
- package/Server/Services/OpenTelemetryIngestService.ts +186 -50
- package/Server/Services/ProfileAggregationService.ts +904 -126
- package/Server/Services/ServiceService.ts +6 -0
- package/Server/Services/SpanService.ts +274 -14
- package/Server/Services/TelemetryEntityRelationshipService.ts +71 -0
- package/Server/Services/TelemetryEntityService.ts +246 -0
- package/Server/Services/TelemetryExceptionService.ts +27 -23
- package/Server/Services/TelemetryUsageBillingService.ts +38 -31
- package/Server/Services/TraceAggregationService.ts +875 -43
- package/Server/Types/AnalyticsDatabase/ModelPermission.ts +43 -2
- package/Server/Types/Database/Permissions/AccessControlPermission.ts +47 -2
- package/Server/Types/Database/Permissions/BasePermission.ts +37 -1
- package/Server/Types/Database/Permissions/OwnedScopePermission.ts +21 -3
- package/Server/Types/Database/Permissions/OwnerTableRegistry.ts +1 -0
- package/Server/Types/Database/QueryHelper.ts +41 -0
- package/Server/Utils/Alert/AlertPrivacyFilter.ts +9 -2
- package/Server/Utils/AlertEpisode/AlertEpisodePrivacyFilter.ts +9 -2
- package/Server/Utils/AnalyticsDatabase/QuerySettingsHelper.ts +95 -0
- package/Server/Utils/AnalyticsDatabase/StatementGenerator.ts +133 -0
- package/Server/Utils/Incident/IncidentPrivacyFilter.ts +9 -2
- package/Server/Utils/IncidentEpisode/IncidentEpisodePrivacyFilter.ts +9 -2
- package/Server/Utils/Monitor/Criteria/EvaluateOverTime.ts +1 -1
- package/Server/Utils/Monitor/MonitorLogUtil.ts +1 -2
- package/Server/Utils/Monitor/MonitorMetricUtil.ts +3 -4
- package/Server/Utils/PrivacyFilterUtil.ts +72 -0
- package/Server/Utils/Profile/PprofEncoder.ts +135 -11
- package/Server/Utils/Telemetry/EntityRegistry.ts +316 -0
- package/Server/Utils/Telemetry/ResourceFacetResolver.ts +5 -0
- package/Server/Utils/Telemetry/TelemetryEntity.ts +783 -0
- package/Tests/Server/Services/AnalyticsDatabaseService.test.ts +79 -4
- package/Tests/Server/Services/LogAggregationService.test.ts +7 -2
- package/Tests/Server/Services/ProfileAggregationService.test.ts +280 -0
- package/Tests/Server/Services/ProfileBreakdown.test.ts +161 -0
- package/Tests/Server/Services/ProfileFunctionFocus.test.ts +349 -0
- package/Tests/Server/Services/TelemetryAttributeService.test.ts +1 -1
- package/Tests/Server/Services/TraceAggregationService.test.ts +403 -0
- package/Tests/Server/Types/AnalyticsDatabase/ModelPermissionOwnedScope.test.ts +114 -0
- package/Tests/Server/Types/Database/Permissions/AccessControlPermission.test.ts +189 -0
- package/Tests/Server/Types/Database/Permissions/BasePermission.test.ts +118 -0
- package/Tests/Server/Types/Database/Permissions/OwnedScopePermission.test.ts +159 -0
- package/Tests/Server/Utils/AnalyticsDatabase/StatementGenerator.test.ts +275 -8
- package/Tests/Server/Utils/PrivacyFilterUtil.test.ts +177 -0
- package/Tests/Server/Utils/Profile/PprofEncoder.test.ts +276 -0
- package/Tests/Server/Utils/Telemetry/TelemetryEntity.test.ts +761 -0
- package/Tests/Types/Monitor/MonitorStepEntityScope.test.ts +275 -0
- package/Tests/Types/Text.test.ts +52 -0
- package/Tests/Utils/Telemetry/EntityKey.test.ts +150 -0
- package/Tests/Utils/Telemetry/EntityKeySqlParity.test.ts +40 -0
- package/Tests/Utils/Telemetry/EntityRelationship.test.ts +150 -0
- package/Tests/Utils/UUID.test.ts +47 -0
- package/Types/AnalyticsDatabase/AnalyticsTableName.ts +14 -9
- package/Types/AnalyticsDatabase/TableColumnType.ts +1 -0
- package/Types/Dashboard/DashboardComponentType.ts +1 -0
- package/Types/Dashboard/DashboardComponents/DashboardTraceChartComponent.ts +37 -0
- package/Types/Dashboard/DashboardTemplates.ts +4 -5
- package/Types/Log/LogQueryParser.ts +2 -2
- package/Types/Log/LogQueryToFilter.ts +2 -2
- package/Types/Monitor/MonitorStepExceptionMonitor.ts +19 -1
- package/Types/Monitor/MonitorStepLogMonitor.ts +20 -1
- package/Types/Monitor/MonitorStepMetricMonitor.ts +27 -0
- package/Types/Monitor/MonitorStepProfileMonitor.ts +19 -1
- package/Types/Monitor/MonitorStepTraceMonitor.ts +18 -1
- package/Types/Monitor/MonitorType.ts +8 -1
- package/Types/ObjectID.ts +10 -0
- package/Types/Telemetry/EntityRelationshipType.ts +31 -0
- package/Types/Telemetry/EntityType.ts +33 -0
- package/Types/Telemetry/TelemetrySavedViewState.ts +2 -0
- package/Types/Text.ts +34 -0
- package/Types/Trace/TraceAggregationType.ts +1 -0
- package/Types/Trace/TraceRecordingRuleDefinition.ts +74 -0
- package/UI/Components/LogsViewer/LogsViewer.tsx +12 -9
- package/UI/Components/LogsViewer/components/LogDetailsPanel.tsx +10 -9
- package/UI/Components/LogsViewer/components/LogSearchBar.tsx +1 -1
- package/UI/Components/LogsViewer/components/LogsAnalyticsView.tsx +2 -2
- package/UI/Components/LogsViewer/components/LogsFacetSidebar.tsx +4 -4
- package/UI/Components/LogsViewer/components/LogsTable.tsx +5 -3
- package/UI/Components/Navbar/NavBarMenuModal.tsx +81 -44
- package/UI/Components/TelemetryViewer/TelemetryViewer.tsx +33 -10
- package/UI/Components/TelemetryViewer/components/TelemetryFacetSidebar.tsx +18 -3
- package/UI/Components/TelemetryViewer/components/TelemetryHistogram.tsx +91 -68
- package/UI/Components/TelemetryViewer/components/TelemetryHistogramTooltip.tsx +9 -2
- package/UI/Utils/LogExport.ts +2 -2
- package/UI/Utils/TelemetryService.ts +20 -20
- package/Utils/Dashboard/Components/DashboardTraceChartComponent.ts +134 -0
- package/Utils/Dashboard/Components/Index.ts +7 -0
- package/Utils/Telemetry/EntityKey.ts +151 -0
- package/Utils/Telemetry/EntityRelationship.ts +113 -0
- package/Utils/Traces/CriticalPath.ts +7 -7
- package/Utils/UUID.ts +57 -0
- package/build/dist/Models/AnalyticsModels/AnalyticsBaseModel/AnalyticsBaseModel.js +14 -13
- package/build/dist/Models/AnalyticsModels/AnalyticsBaseModel/AnalyticsBaseModel.js.map +1 -1
- package/build/dist/Models/AnalyticsModels/AuditLog.js +2 -1
- package/build/dist/Models/AnalyticsModels/AuditLog.js.map +1 -1
- package/build/dist/Models/AnalyticsModels/ExceptionInstance.js +125 -22
- package/build/dist/Models/AnalyticsModels/ExceptionInstance.js.map +1 -1
- package/build/dist/Models/AnalyticsModels/Index.js +7 -2
- package/build/dist/Models/AnalyticsModels/Index.js.map +1 -1
- package/build/dist/Models/AnalyticsModels/Log.js +123 -22
- package/build/dist/Models/AnalyticsModels/Log.js.map +1 -1
- package/build/dist/Models/AnalyticsModels/Metric.js +125 -27
- package/build/dist/Models/AnalyticsModels/Metric.js.map +1 -1
- package/build/dist/Models/AnalyticsModels/MetricBaselineHourly.js +38 -21
- package/build/dist/Models/AnalyticsModels/MetricBaselineHourly.js.map +1 -1
- package/build/dist/Models/AnalyticsModels/MetricItemAggMV1m.js +17 -16
- package/build/dist/Models/AnalyticsModels/MetricItemAggMV1m.js.map +1 -1
- package/build/dist/Models/AnalyticsModels/{MetricItemAggMV1mByHost.js → MetricItemAggMV1mByHostV2.js} +54 -42
- package/build/dist/Models/AnalyticsModels/MetricItemAggMV1mByHostV2.js.map +1 -0
- package/build/dist/Models/AnalyticsModels/MonitorLog.js +4 -1
- package/build/dist/Models/AnalyticsModels/MonitorLog.js.map +1 -1
- package/build/dist/Models/AnalyticsModels/Profile.js +132 -26
- package/build/dist/Models/AnalyticsModels/Profile.js.map +1 -1
- package/build/dist/Models/AnalyticsModels/ProfileSample.js +121 -23
- package/build/dist/Models/AnalyticsModels/ProfileSample.js.map +1 -1
- package/build/dist/Models/AnalyticsModels/Span.js +144 -26
- package/build/dist/Models/AnalyticsModels/Span.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Index.js +4 -0
- package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Service.js +30 -0
- package/build/dist/Models/DatabaseModels/Service.js.map +1 -1
- package/build/dist/Models/DatabaseModels/TelemetryEntity.js +419 -0
- package/build/dist/Models/DatabaseModels/TelemetryEntity.js.map +1 -0
- package/build/dist/Models/DatabaseModels/TelemetryEntityRelationship.js +317 -0
- package/build/dist/Models/DatabaseModels/TelemetryEntityRelationship.js.map +1 -0
- package/build/dist/Models/DatabaseModels/TelemetryException.js +12 -12
- package/build/dist/Models/DatabaseModels/TelemetryException.js.map +1 -1
- package/build/dist/Models/DatabaseModels/TelemetryUsageBilling.js +7 -7
- package/build/dist/Models/DatabaseModels/TelemetryUsageBilling.js.map +1 -1
- package/build/dist/Server/API/AIAgentDataAPI.js +14 -13
- package/build/dist/Server/API/AIAgentDataAPI.js.map +1 -1
- package/build/dist/Server/API/DashboardAPI.js +2 -2
- package/build/dist/Server/API/DashboardAPI.js.map +1 -1
- package/build/dist/Server/API/TelemetryAPI.js +425 -129
- package/build/dist/Server/API/TelemetryAPI.js.map +1 -1
- package/build/dist/Server/API/TelemetryExceptionAPI.js +2 -2
- package/build/dist/Server/API/TelemetryExceptionAPI.js.map +1 -1
- package/build/dist/Server/Infrastructure/ClickhouseConfig.js +12 -0
- package/build/dist/Server/Infrastructure/ClickhouseConfig.js.map +1 -1
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1781100000001-RenameTelemetryServiceIdToPrimaryEntityId.js +29 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1781100000001-RenameTelemetryServiceIdToPrimaryEntityId.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1781200000000-AddTelemetryEntityTable.js +38 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1781200000000-AddTelemetryEntityTable.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1781200000001-AddTelemetryEntityRelationshipTable.js +33 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1781200000001-AddTelemetryEntityRelationshipTable.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1781250074195-MigrationName.js +78 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1781250074195-MigrationName.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1781300000000-AddTelemetryEntityLabels.js +19 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1781300000000-AddTelemetryEntityLabels.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1781400000000-AddServiceTelemetrySdkLanguage.js +18 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1781400000000-AddServiceTelemetrySdkLanguage.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/Infrastructure/Queue.js +14 -3
- package/build/dist/Server/Infrastructure/Queue.js.map +1 -1
- package/build/dist/Server/Middleware/TelemetryIngest.js +16 -18
- package/build/dist/Server/Middleware/TelemetryIngest.js.map +1 -1
- package/build/dist/Server/Services/AlertService.js +9 -9
- package/build/dist/Server/Services/AlertService.js.map +1 -1
- package/build/dist/Server/Services/AnalyticsDatabaseService.js +115 -40
- package/build/dist/Server/Services/AnalyticsDatabaseService.js.map +1 -1
- package/build/dist/Server/Services/ExceptionAggregationService.js +38 -18
- package/build/dist/Server/Services/ExceptionAggregationService.js.map +1 -1
- package/build/dist/Server/Services/HostService.js +2 -1
- package/build/dist/Server/Services/HostService.js.map +1 -1
- package/build/dist/Server/Services/IncidentService.js +19 -19
- package/build/dist/Server/Services/IncidentService.js.map +1 -1
- package/build/dist/Server/Services/Index.js +6 -2
- package/build/dist/Server/Services/Index.js.map +1 -1
- package/build/dist/Server/Services/LogAggregationService.js +100 -42
- package/build/dist/Server/Services/LogAggregationService.js.map +1 -1
- package/build/dist/Server/Services/MetricAggregationService.js +27 -14
- package/build/dist/Server/Services/MetricAggregationService.js.map +1 -1
- package/build/dist/Server/Services/MetricBaselineService.js +28 -28
- package/build/dist/Server/Services/MetricBaselineService.js.map +1 -1
- package/build/dist/Server/Services/MetricItemAggMV1mByHostV2Service.js +28 -0
- package/build/dist/Server/Services/MetricItemAggMV1mByHostV2Service.js.map +1 -0
- package/build/dist/Server/Services/MetricService.js +116 -31
- package/build/dist/Server/Services/MetricService.js.map +1 -1
- package/build/dist/Server/Services/OpenTelemetryIngestService.js +103 -36
- package/build/dist/Server/Services/OpenTelemetryIngestService.js.map +1 -1
- package/build/dist/Server/Services/ProfileAggregationService.js +613 -105
- package/build/dist/Server/Services/ProfileAggregationService.js.map +1 -1
- package/build/dist/Server/Services/ServiceService.js +9 -5
- package/build/dist/Server/Services/ServiceService.js.map +1 -1
- package/build/dist/Server/Services/SpanService.js +217 -15
- package/build/dist/Server/Services/SpanService.js.map +1 -1
- package/build/dist/Server/Services/TelemetryEntityRelationshipService.js +72 -0
- package/build/dist/Server/Services/TelemetryEntityRelationshipService.js.map +1 -0
- package/build/dist/Server/Services/TelemetryEntityService.js +201 -0
- package/build/dist/Server/Services/TelemetryEntityService.js.map +1 -0
- package/build/dist/Server/Services/TelemetryExceptionService.js +18 -18
- package/build/dist/Server/Services/TelemetryExceptionService.js.map +1 -1
- package/build/dist/Server/Services/TelemetryUsageBillingService.js +27 -21
- package/build/dist/Server/Services/TelemetryUsageBillingService.js.map +1 -1
- package/build/dist/Server/Services/TraceAggregationService.js +568 -43
- package/build/dist/Server/Services/TraceAggregationService.js.map +1 -1
- package/build/dist/Server/Types/AnalyticsDatabase/ModelPermission.js +38 -2
- package/build/dist/Server/Types/AnalyticsDatabase/ModelPermission.js.map +1 -1
- package/build/dist/Server/Types/Database/Permissions/AccessControlPermission.js +36 -2
- package/build/dist/Server/Types/Database/Permissions/AccessControlPermission.js.map +1 -1
- package/build/dist/Server/Types/Database/Permissions/BasePermission.js +25 -1
- package/build/dist/Server/Types/Database/Permissions/BasePermission.js.map +1 -1
- package/build/dist/Server/Types/Database/Permissions/OwnedScopePermission.js +17 -3
- package/build/dist/Server/Types/Database/Permissions/OwnedScopePermission.js.map +1 -1
- package/build/dist/Server/Types/Database/Permissions/OwnerTableRegistry.js +1 -0
- package/build/dist/Server/Types/Database/Permissions/OwnerTableRegistry.js.map +1 -1
- package/build/dist/Server/Types/Database/QueryHelper.js +31 -0
- package/build/dist/Server/Types/Database/QueryHelper.js.map +1 -1
- package/build/dist/Server/Utils/Alert/AlertPrivacyFilter.js +3 -2
- package/build/dist/Server/Utils/Alert/AlertPrivacyFilter.js.map +1 -1
- package/build/dist/Server/Utils/AlertEpisode/AlertEpisodePrivacyFilter.js +3 -2
- package/build/dist/Server/Utils/AlertEpisode/AlertEpisodePrivacyFilter.js.map +1 -1
- package/build/dist/Server/Utils/AnalyticsDatabase/QuerySettingsHelper.js +46 -0
- package/build/dist/Server/Utils/AnalyticsDatabase/QuerySettingsHelper.js.map +1 -0
- package/build/dist/Server/Utils/AnalyticsDatabase/StatementGenerator.js +97 -3
- package/build/dist/Server/Utils/AnalyticsDatabase/StatementGenerator.js.map +1 -1
- package/build/dist/Server/Utils/Incident/IncidentPrivacyFilter.js +3 -2
- package/build/dist/Server/Utils/Incident/IncidentPrivacyFilter.js.map +1 -1
- package/build/dist/Server/Utils/IncidentEpisode/IncidentEpisodePrivacyFilter.js +3 -2
- package/build/dist/Server/Utils/IncidentEpisode/IncidentEpisodePrivacyFilter.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/Criteria/EvaluateOverTime.js +1 -1
- package/build/dist/Server/Utils/Monitor/Criteria/EvaluateOverTime.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorLogUtil.js +1 -2
- package/build/dist/Server/Utils/Monitor/MonitorLogUtil.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorMetricUtil.js +3 -4
- package/build/dist/Server/Utils/Monitor/MonitorMetricUtil.js.map +1 -1
- package/build/dist/Server/Utils/PrivacyFilterUtil.js +47 -0
- package/build/dist/Server/Utils/PrivacyFilterUtil.js.map +1 -0
- package/build/dist/Server/Utils/Profile/PprofEncoder.js +132 -4
- package/build/dist/Server/Utils/Profile/PprofEncoder.js.map +1 -1
- package/build/dist/Server/Utils/Telemetry/EntityRegistry.js +228 -0
- package/build/dist/Server/Utils/Telemetry/EntityRegistry.js.map +1 -0
- package/build/dist/Server/Utils/Telemetry/ResourceFacetResolver.js +5 -0
- package/build/dist/Server/Utils/Telemetry/ResourceFacetResolver.js.map +1 -1
- package/build/dist/Server/Utils/Telemetry/TelemetryEntity.js +569 -0
- package/build/dist/Server/Utils/Telemetry/TelemetryEntity.js.map +1 -0
- package/build/dist/Types/AnalyticsDatabase/AnalyticsTableName.js +14 -9
- package/build/dist/Types/AnalyticsDatabase/AnalyticsTableName.js.map +1 -1
- package/build/dist/Types/AnalyticsDatabase/TableColumnType.js +1 -0
- package/build/dist/Types/AnalyticsDatabase/TableColumnType.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/DashboardTraceChartComponent.js +2 -0
- package/build/dist/Types/Dashboard/DashboardComponents/DashboardTraceChartComponent.js.map +1 -0
- package/build/dist/Types/Dashboard/DashboardTemplates.js +4 -5
- package/build/dist/Types/Dashboard/DashboardTemplates.js.map +1 -1
- package/build/dist/Types/Log/LogQueryParser.js +2 -2
- package/build/dist/Types/Log/LogQueryParser.js.map +1 -1
- package/build/dist/Types/Log/LogQueryToFilter.js +1 -1
- package/build/dist/Types/Log/LogQueryToFilter.js.map +1 -1
- package/build/dist/Types/Monitor/MonitorStepExceptionMonitor.js +9 -1
- package/build/dist/Types/Monitor/MonitorStepExceptionMonitor.js.map +1 -1
- package/build/dist/Types/Monitor/MonitorStepLogMonitor.js +9 -1
- package/build/dist/Types/Monitor/MonitorStepLogMonitor.js.map +1 -1
- package/build/dist/Types/Monitor/MonitorStepMetricMonitor.js +13 -0
- package/build/dist/Types/Monitor/MonitorStepMetricMonitor.js.map +1 -1
- package/build/dist/Types/Monitor/MonitorStepProfileMonitor.js +9 -1
- package/build/dist/Types/Monitor/MonitorStepProfileMonitor.js.map +1 -1
- package/build/dist/Types/Monitor/MonitorStepTraceMonitor.js +9 -1
- package/build/dist/Types/Monitor/MonitorStepTraceMonitor.js.map +1 -1
- package/build/dist/Types/Monitor/MonitorType.js +8 -1
- package/build/dist/Types/Monitor/MonitorType.js.map +1 -1
- package/build/dist/Types/ObjectID.js +9 -0
- package/build/dist/Types/ObjectID.js.map +1 -1
- package/build/dist/Types/Telemetry/EntityRelationshipType.js +32 -0
- package/build/dist/Types/Telemetry/EntityRelationshipType.js.map +1 -0
- package/build/dist/Types/Telemetry/EntityType.js +34 -0
- package/build/dist/Types/Telemetry/EntityType.js.map +1 -0
- package/build/dist/Types/Text.js +32 -1
- package/build/dist/Types/Text.js.map +1 -1
- package/build/dist/Types/Trace/TraceAggregationType.js +1 -0
- package/build/dist/Types/Trace/TraceAggregationType.js.map +1 -1
- package/build/dist/Types/Trace/TraceRecordingRuleDefinition.js +50 -1
- package/build/dist/Types/Trace/TraceRecordingRuleDefinition.js.map +1 -1
- package/build/dist/UI/Components/LogsViewer/LogsViewer.js +10 -9
- package/build/dist/UI/Components/LogsViewer/LogsViewer.js.map +1 -1
- package/build/dist/UI/Components/LogsViewer/components/LogDetailsPanel.js +8 -8
- package/build/dist/UI/Components/LogsViewer/components/LogDetailsPanel.js.map +1 -1
- package/build/dist/UI/Components/LogsViewer/components/LogSearchBar.js +1 -1
- package/build/dist/UI/Components/LogsViewer/components/LogSearchBar.js.map +1 -1
- package/build/dist/UI/Components/LogsViewer/components/LogsAnalyticsView.js +2 -2
- package/build/dist/UI/Components/LogsViewer/components/LogsAnalyticsView.js.map +1 -1
- package/build/dist/UI/Components/LogsViewer/components/LogsFacetSidebar.js +4 -4
- package/build/dist/UI/Components/LogsViewer/components/LogsFacetSidebar.js.map +1 -1
- package/build/dist/UI/Components/LogsViewer/components/LogsTable.js +3 -3
- package/build/dist/UI/Components/LogsViewer/components/LogsTable.js.map +1 -1
- package/build/dist/UI/Components/Navbar/NavBarMenuModal.js +43 -30
- package/build/dist/UI/Components/Navbar/NavBarMenuModal.js.map +1 -1
- package/build/dist/UI/Components/TelemetryViewer/TelemetryViewer.js +6 -2
- package/build/dist/UI/Components/TelemetryViewer/TelemetryViewer.js.map +1 -1
- package/build/dist/UI/Components/TelemetryViewer/components/TelemetryFacetSidebar.js +14 -3
- package/build/dist/UI/Components/TelemetryViewer/components/TelemetryFacetSidebar.js.map +1 -1
- package/build/dist/UI/Components/TelemetryViewer/components/TelemetryHistogram.js +18 -10
- package/build/dist/UI/Components/TelemetryViewer/components/TelemetryHistogram.js.map +1 -1
- package/build/dist/UI/Components/TelemetryViewer/components/TelemetryHistogramTooltip.js +4 -2
- package/build/dist/UI/Components/TelemetryViewer/components/TelemetryHistogramTooltip.js.map +1 -1
- package/build/dist/UI/Utils/LogExport.js +2 -2
- package/build/dist/UI/Utils/LogExport.js.map +1 -1
- package/build/dist/UI/Utils/TelemetryService.js +16 -16
- package/build/dist/UI/Utils/TelemetryService.js.map +1 -1
- package/build/dist/Utils/Dashboard/Components/DashboardTraceChartComponent.js +110 -0
- package/build/dist/Utils/Dashboard/Components/DashboardTraceChartComponent.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/Telemetry/EntityKey.js +115 -0
- package/build/dist/Utils/Telemetry/EntityKey.js.map +1 -0
- package/build/dist/Utils/Telemetry/EntityRelationship.js +71 -0
- package/build/dist/Utils/Telemetry/EntityRelationship.js.map +1 -0
- package/build/dist/Utils/Traces/CriticalPath.js +5 -5
- package/build/dist/Utils/Traces/CriticalPath.js.map +1 -1
- package/build/dist/Utils/UUID.js +50 -0
- package/build/dist/Utils/UUID.js.map +1 -1
- package/package.json +2 -1
- package/tsconfig.json +10 -1
- package/Server/Services/MetricItemAggMV1mByHostService.ts +0 -30
- package/Types/Profile/ProfileMetricType.ts +0 -16
- package/build/dist/Models/AnalyticsModels/MetricItemAggMV1mByHost.js.map +0 -1
- package/build/dist/Server/Services/MetricItemAggMV1mByHostService.js +0 -28
- package/build/dist/Server/Services/MetricItemAggMV1mByHostService.js.map +0 -1
- package/build/dist/Tests/MockType.js +0 -5
- package/build/dist/Tests/MockType.js.map +0 -1
- package/build/dist/Tests/Models/AnalyticsModels/Log.test.js +0 -12
- package/build/dist/Tests/Models/AnalyticsModels/Log.test.js.map +0 -1
- package/build/dist/Tests/Models/File.test.js +0 -10
- package/build/dist/Tests/Models/File.test.js.map +0 -1
- package/build/dist/Tests/Server/API/BaseAPI.test.js +0 -590
- package/build/dist/Tests/Server/API/BaseAPI.test.js.map +0 -1
- package/build/dist/Tests/Server/API/Helpers.js +0 -27
- package/build/dist/Tests/Server/API/Helpers.js.map +0 -1
- package/build/dist/Tests/Server/API/ProbeAPI.test.js +0 -84
- package/build/dist/Tests/Server/API/ProbeAPI.test.js.map +0 -1
- package/build/dist/Tests/Server/API/ProjectAPI.test.js +0 -170
- package/build/dist/Tests/Server/API/ProjectAPI.test.js.map +0 -1
- package/build/dist/Tests/Server/API/UserSmsApi.test.js +0 -177
- package/build/dist/Tests/Server/API/UserSmsApi.test.js.map +0 -1
- package/build/dist/Tests/Server/Middleware/BearerTokenAuthorization.test.js +0 -63
- package/build/dist/Tests/Server/Middleware/BearerTokenAuthorization.test.js.map +0 -1
- package/build/dist/Tests/Server/Middleware/ClusterKeyAuthorization.test.js +0 -58
- package/build/dist/Tests/Server/Middleware/ClusterKeyAuthorization.test.js.map +0 -1
- package/build/dist/Tests/Server/Middleware/NotificationMiddleware.test.js +0 -101
- package/build/dist/Tests/Server/Middleware/NotificationMiddleware.test.js.map +0 -1
- package/build/dist/Tests/Server/Middleware/ProjectAuthorization.test.js +0 -160
- package/build/dist/Tests/Server/Middleware/ProjectAuthorization.test.js.map +0 -1
- package/build/dist/Tests/Server/Middleware/UserAuthorization.test.js +0 -410
- package/build/dist/Tests/Server/Middleware/UserAuthorization.test.js.map +0 -1
- package/build/dist/Tests/Server/Services/AlertEpisodeMemberService.test.js +0 -165
- package/build/dist/Tests/Server/Services/AlertEpisodeMemberService.test.js.map +0 -1
- package/build/dist/Tests/Server/Services/AlertEpisodeService.test.js +0 -193
- package/build/dist/Tests/Server/Services/AlertEpisodeService.test.js.map +0 -1
- package/build/dist/Tests/Server/Services/AlertGroupingEngineService.test.js +0 -435
- package/build/dist/Tests/Server/Services/AlertGroupingEngineService.test.js.map +0 -1
- package/build/dist/Tests/Server/Services/AlertGroupingRuleService.test.js +0 -320
- package/build/dist/Tests/Server/Services/AlertGroupingRuleService.test.js.map +0 -1
- package/build/dist/Tests/Server/Services/AnalyticsDatabaseService.test.js +0 -266
- package/build/dist/Tests/Server/Services/AnalyticsDatabaseService.test.js.map +0 -1
- package/build/dist/Tests/Server/Services/BillingService.test.js +0 -910
- package/build/dist/Tests/Server/Services/BillingService.test.js.map +0 -1
- package/build/dist/Tests/Server/Services/LogAggregationService.test.js +0 -75
- package/build/dist/Tests/Server/Services/LogAggregationService.test.js.map +0 -1
- package/build/dist/Tests/Server/Services/ProbeService.test.js +0 -127
- package/build/dist/Tests/Server/Services/ProbeService.test.js.map +0 -1
- package/build/dist/Tests/Server/Services/ScheduledMaintenanceService.test.js +0 -114
- package/build/dist/Tests/Server/Services/ScheduledMaintenanceService.test.js.map +0 -1
- package/build/dist/Tests/Server/Services/TeamMemberService.test.js +0 -106
- package/build/dist/Tests/Server/Services/TeamMemberService.test.js.map +0 -1
- package/build/dist/Tests/Server/Services/TelemetryAttributeService.test.js +0 -50
- package/build/dist/Tests/Server/Services/TelemetryAttributeService.test.js.map +0 -1
- package/build/dist/Tests/Server/TestingUtils/Init.js +0 -4
- package/build/dist/Tests/Server/TestingUtils/Init.js.map +0 -1
- package/build/dist/Tests/Server/TestingUtils/Postgres/TestDataSourceOptions.js +0 -9
- package/build/dist/Tests/Server/TestingUtils/Postgres/TestDataSourceOptions.js.map +0 -1
- package/build/dist/Tests/Server/TestingUtils/Redis/TestRedisOptions.js +0 -16
- package/build/dist/Tests/Server/TestingUtils/Redis/TestRedisOptions.js.map +0 -1
- package/build/dist/Tests/Server/TestingUtils/Services/BillingServiceHelper.js +0 -125
- package/build/dist/Tests/Server/TestingUtils/Services/BillingServiceHelper.js.map +0 -1
- package/build/dist/Tests/Server/TestingUtils/Services/ProjectServiceHelper.js +0 -39
- package/build/dist/Tests/Server/TestingUtils/Services/ProjectServiceHelper.js.map +0 -1
- package/build/dist/Tests/Server/TestingUtils/Services/ScheduledMaintenanceServiceHelper.js +0 -20
- package/build/dist/Tests/Server/TestingUtils/Services/ScheduledMaintenanceServiceHelper.js.map +0 -1
- package/build/dist/Tests/Server/TestingUtils/Services/ScheduledMaintenanceStateServiceHelper.js +0 -31
- package/build/dist/Tests/Server/TestingUtils/Services/ScheduledMaintenanceStateServiceHelper.js.map +0 -1
- package/build/dist/Tests/Server/TestingUtils/Services/TeamMemberServiceHelper.js +0 -14
- package/build/dist/Tests/Server/TestingUtils/Services/TeamMemberServiceHelper.js.map +0 -1
- package/build/dist/Tests/Server/TestingUtils/Services/TeamServiceHelper.js +0 -21
- package/build/dist/Tests/Server/TestingUtils/Services/TeamServiceHelper.js.map +0 -1
- package/build/dist/Tests/Server/TestingUtils/Services/Types.js +0 -2
- package/build/dist/Tests/Server/TestingUtils/Services/Types.js.map +0 -1
- package/build/dist/Tests/Server/TestingUtils/Services/UserServiceHelper.js +0 -37
- package/build/dist/Tests/Server/TestingUtils/Services/UserServiceHelper.js.map +0 -1
- package/build/dist/Tests/Server/TestingUtils/__mocks__/Stripe.mock.js +0 -13
- package/build/dist/Tests/Server/TestingUtils/__mocks__/Stripe.mock.js.map +0 -1
- package/build/dist/Tests/Server/TestingUtils/__mocks__/TestDatabase.mock.js +0 -22
- package/build/dist/Tests/Server/TestingUtils/__mocks__/TestDatabase.mock.js.map +0 -1
- package/build/dist/Tests/Server/Types/Domain.test.js +0 -78
- package/build/dist/Tests/Server/Types/Domain.test.js.map +0 -1
- package/build/dist/Tests/Server/Utils/AnalyticsDatabase/Statement.test.js +0 -94
- package/build/dist/Tests/Server/Utils/AnalyticsDatabase/Statement.test.js.map +0 -1
- package/build/dist/Tests/Server/Utils/AnalyticsDatabase/StatementGenerator.test.js +0 -459
- package/build/dist/Tests/Server/Utils/AnalyticsDatabase/StatementGenerator.test.js.map +0 -1
- package/build/dist/Tests/Server/Utils/Cookie.test.js +0 -83
- package/build/dist/Tests/Server/Utils/Cookie.test.js.map +0 -1
- package/build/dist/Tests/Server/Utils/CronTab.test.js +0 -29
- package/build/dist/Tests/Server/Utils/CronTab.test.js.map +0 -1
- package/build/dist/Tests/Server/Utils/JsonToCsv.test.js +0 -114
- package/build/dist/Tests/Server/Utils/JsonToCsv.test.js.map +0 -1
- package/build/dist/Tests/Server/Utils/Monitor/Criteria/MetricMonitorCriteria.test.js +0 -606
- package/build/dist/Tests/Server/Utils/Monitor/Criteria/MetricMonitorCriteria.test.js.map +0 -1
- package/build/dist/Tests/Server/Utils/Monitor/Criteria/SnmpMonitorCriteria.test.js +0 -255
- package/build/dist/Tests/Server/Utils/Monitor/Criteria/SnmpMonitorCriteria.test.js.map +0 -1
- package/build/dist/Tests/Server/Utils/Monitor/MonitorMaintenanceSuppression.test.js +0 -142
- package/build/dist/Tests/Server/Utils/Monitor/MonitorMaintenanceSuppression.test.js.map +0 -1
- package/build/dist/Tests/Server/Utils/StatusPageResource.test.js +0 -122
- package/build/dist/Tests/Server/Utils/StatusPageResource.test.js.map +0 -1
- package/build/dist/Tests/Server/Utils/Telemetry/LogExceptionExtractor.test.js +0 -0
- package/build/dist/Tests/Server/Utils/Telemetry/LogExceptionExtractor.test.js.map +0 -1
- package/build/dist/Tests/Server/Utils/VM/VMAPI.test.js +0 -205
- package/build/dist/Tests/Server/Utils/VM/VMAPI.test.js.map +0 -1
- package/build/dist/Tests/Spy.js +0 -4
- package/build/dist/Tests/Spy.js.map +0 -1
- package/build/dist/Tests/Types/API/ErrorResponse.test.js +0 -13
- package/build/dist/Tests/Types/API/ErrorResponse.test.js.map +0 -1
- package/build/dist/Tests/Types/API/HTTPErrorResponse.test.js +0 -33
- package/build/dist/Tests/Types/API/HTTPErrorResponse.test.js.map +0 -1
- package/build/dist/Tests/Types/API/HTTPMethod.test.js +0 -16
- package/build/dist/Tests/Types/API/HTTPMethod.test.js.map +0 -1
- package/build/dist/Tests/Types/API/Headers.test.js +0 -14
- package/build/dist/Tests/Types/API/Headers.test.js.map +0 -1
- package/build/dist/Tests/Types/API/Hostname.test.js +0 -22
- package/build/dist/Tests/Types/API/Hostname.test.js.map +0 -1
- package/build/dist/Tests/Types/API/Protocal.test.js +0 -19
- package/build/dist/Tests/Types/API/Protocal.test.js.map +0 -1
- package/build/dist/Tests/Types/API/Response.test.js +0 -14
- package/build/dist/Tests/Types/API/Response.test.js.map +0 -1
- package/build/dist/Tests/Types/API/ResponseType.test.js +0 -13
- package/build/dist/Tests/Types/API/ResponseType.test.js.map +0 -1
- package/build/dist/Tests/Types/API/Route.test.js +0 -30
- package/build/dist/Tests/Types/API/Route.test.js.map +0 -1
- package/build/dist/Tests/Types/API/StatusCode.test.js +0 -26
- package/build/dist/Tests/Types/API/StatusCode.test.js.map +0 -1
- package/build/dist/Tests/Types/API/URL.test.js +0 -33
- package/build/dist/Tests/Types/API/URL.test.js.map +0 -1
- package/build/dist/Tests/Types/Alerts/AlertEventType.test.js +0 -34
- package/build/dist/Tests/Types/Alerts/AlertEventType.test.js.map +0 -1
- package/build/dist/Tests/Types/Alerts/AlertType.test.js +0 -19
- package/build/dist/Tests/Types/Alerts/AlertType.test.js.map +0 -1
- package/build/dist/Tests/Types/AppEnvironment.test.js +0 -13
- package/build/dist/Tests/Types/AppEnvironment.test.js.map +0 -1
- package/build/dist/Tests/Types/ApplicationLog/ApplicationLogType.test.js +0 -13
- package/build/dist/Tests/Types/ApplicationLog/ApplicationLogType.test.js.map +0 -1
- package/build/dist/Tests/Types/ArrayUtil.test.js +0 -71
- package/build/dist/Tests/Types/ArrayUtil.test.js.map +0 -1
- package/build/dist/Tests/Types/Billing/SubscriptionPlan.test.js +0 -181
- package/build/dist/Tests/Types/Billing/SubscriptionPlan.test.js.map +0 -1
- package/build/dist/Tests/Types/BrandColors.test.js +0 -124
- package/build/dist/Tests/Types/BrandColors.test.js.map +0 -1
- package/build/dist/Tests/Types/Char.test.js +0 -82
- package/build/dist/Tests/Types/Char.test.js.map +0 -1
- package/build/dist/Tests/Types/Code/CodeType.test.js +0 -13
- package/build/dist/Tests/Types/Code/CodeType.test.js.map +0 -1
- package/build/dist/Tests/Types/Color.test.js +0 -44
- package/build/dist/Tests/Types/Color.test.js.map +0 -1
- package/build/dist/Tests/Types/Company/CompanySize.test.js +0 -20
- package/build/dist/Tests/Types/Company/CompanySize.test.js.map +0 -1
- package/build/dist/Tests/Types/Company/JobRole.test.js +0 -22
- package/build/dist/Tests/Types/Company/JobRole.test.js.map +0 -1
- package/build/dist/Tests/Types/Countries.test.js +0 -249
- package/build/dist/Tests/Types/Countries.test.js.map +0 -1
- package/build/dist/Tests/Types/Database/ColumnLength.test.js +0 -43
- package/build/dist/Tests/Types/Database/ColumnLength.test.js.map +0 -1
- package/build/dist/Tests/Types/Database/ColumnType.test.js +0 -79
- package/build/dist/Tests/Types/Database/ColumnType.test.js.map +0 -1
- package/build/dist/Tests/Types/Database/Columns.test.js +0 -20
- package/build/dist/Tests/Types/Database/Columns.test.js.map +0 -1
- package/build/dist/Tests/Types/Database/CompareBase.test.js +0 -37
- package/build/dist/Tests/Types/Database/CompareBase.test.js.map +0 -1
- package/build/dist/Tests/Types/Database/Date.test.js +0 -62
- package/build/dist/Tests/Types/Database/Date.test.js.map +0 -1
- package/build/dist/Tests/Types/Database/EqualTo.test.js +0 -65
- package/build/dist/Tests/Types/Database/EqualTo.test.js.map +0 -1
- package/build/dist/Tests/Types/Database/EqualToOrNull.test.js +0 -62
- package/build/dist/Tests/Types/Database/EqualToOrNull.test.js.map +0 -1
- package/build/dist/Tests/Types/Database/InBetween.test.js +0 -72
- package/build/dist/Tests/Types/Database/InBetween.test.js.map +0 -1
- package/build/dist/Tests/Types/Database/LimitMax.test.js +0 -18
- package/build/dist/Tests/Types/Database/LimitMax.test.js.map +0 -1
- package/build/dist/Tests/Types/Database/NotEqual.test.js +0 -19
- package/build/dist/Tests/Types/Database/NotEqual.test.js.map +0 -1
- package/build/dist/Tests/Types/Database/Search.test.js +0 -10
- package/build/dist/Tests/Types/Database/Search.test.js.map +0 -1
- package/build/dist/Tests/Types/DatabaseType.test.js +0 -7
- package/build/dist/Tests/Types/DatabaseType.test.js.map +0 -1
- package/build/dist/Tests/Types/Date.test.js +0 -194
- package/build/dist/Tests/Types/Date.test.js.map +0 -1
- package/build/dist/Tests/Types/Dictionary.test.js +0 -25
- package/build/dist/Tests/Types/Dictionary.test.js.map +0 -1
- package/build/dist/Tests/Types/Domain.test.js +0 -54
- package/build/dist/Tests/Types/Domain.test.js.map +0 -1
- package/build/dist/Tests/Types/Email/Email.test.js +0 -51
- package/build/dist/Tests/Types/Email/Email.test.js.map +0 -1
- package/build/dist/Tests/Types/EmailWithName.test.js +0 -36
- package/build/dist/Tests/Types/EmailWithName.test.js.map +0 -1
- package/build/dist/Tests/Types/EncryptionAlgorithm.test.js +0 -7
- package/build/dist/Tests/Types/EncryptionAlgorithm.test.js.map +0 -1
- package/build/dist/Tests/Types/Exception/ApiException.test.js +0 -10
- package/build/dist/Tests/Types/Exception/ApiException.test.js.map +0 -1
- package/build/dist/Tests/Types/Exception/BadDataException.test.js +0 -12
- package/build/dist/Tests/Types/Exception/BadDataException.test.js.map +0 -1
- package/build/dist/Tests/Types/Exception/BadOperationException.test.js +0 -10
- package/build/dist/Tests/Types/Exception/BadOperationException.test.js.map +0 -1
- package/build/dist/Tests/Types/Exception/BadRequestException.test.js +0 -12
- package/build/dist/Tests/Types/Exception/BadRequestException.test.js.map +0 -1
- package/build/dist/Tests/Types/Exception/DatabaseNotConnectedException.test.js +0 -10
- package/build/dist/Tests/Types/Exception/DatabaseNotConnectedException.test.js.map +0 -1
- package/build/dist/Tests/Types/Exception/Exception.test.js +0 -15
- package/build/dist/Tests/Types/Exception/Exception.test.js.map +0 -1
- package/build/dist/Tests/Types/Exception/NotImplementedException.test.js +0 -12
- package/build/dist/Tests/Types/Exception/NotImplementedException.test.js.map +0 -1
- package/build/dist/Tests/Types/File.test.js +0 -22
- package/build/dist/Tests/Types/File.test.js.map +0 -1
- package/build/dist/Tests/Types/HashedString.test.js +0 -51
- package/build/dist/Tests/Types/HashedString.test.js.map +0 -1
- package/build/dist/Tests/Types/Html.test.js +0 -8
- package/build/dist/Tests/Types/Html.test.js.map +0 -1
- package/build/dist/Tests/Types/IP/IP.test.js +0 -65
- package/build/dist/Tests/Types/IP/IP.test.js.map +0 -1
- package/build/dist/Tests/Types/IP/IPType.test.js +0 -10
- package/build/dist/Tests/Types/IP/IPType.test.js.map +0 -1
- package/build/dist/Tests/Types/IP/IPv4.test.js +0 -17
- package/build/dist/Tests/Types/IP/IPv4.test.js.map +0 -1
- package/build/dist/Tests/Types/IP/IPv6.test.js +0 -17
- package/build/dist/Tests/Types/IP/IPv6.test.js.map +0 -1
- package/build/dist/Tests/Types/JSON.test.js +0 -37
- package/build/dist/Tests/Types/JSON.test.js.map +0 -1
- package/build/dist/Tests/Types/JSONFunctions.test.js +0 -38
- package/build/dist/Tests/Types/JSONFunctions.test.js.map +0 -1
- package/build/dist/Tests/Types/ListData.test.js +0 -34
- package/build/dist/Tests/Types/ListData.test.js.map +0 -1
- package/build/dist/Tests/Types/Monitor/KubernetesAlertTemplates.test.js +0 -121
- package/build/dist/Tests/Types/Monitor/KubernetesAlertTemplates.test.js.map +0 -1
- package/build/dist/Tests/Types/Name.test.js +0 -26
- package/build/dist/Tests/Types/Name.test.js.map +0 -1
- package/build/dist/Tests/Types/ObjectID.test.js +0 -12
- package/build/dist/Tests/Types/ObjectID.test.js.map +0 -1
- package/build/dist/Tests/Types/OnCallDutyPolicy/LayerUtil.test.js +0 -530
- package/build/dist/Tests/Types/OnCallDutyPolicy/LayerUtil.test.js.map +0 -1
- package/build/dist/Tests/Types/Permission.test.js +0 -99
- package/build/dist/Tests/Types/Permission.test.js.map +0 -1
- package/build/dist/Tests/Types/Phone.test.js +0 -37
- package/build/dist/Tests/Types/Phone.test.js.map +0 -1
- package/build/dist/Tests/Types/Port.test.js +0 -35
- package/build/dist/Tests/Types/Port.test.js.map +0 -1
- package/build/dist/Tests/Types/PositiveNumber.test.js +0 -101
- package/build/dist/Tests/Types/PositiveNumber.test.js.map +0 -1
- package/build/dist/Tests/Types/SecuritySeverity.test.js +0 -16
- package/build/dist/Tests/Types/SecuritySeverity.test.js.map +0 -1
- package/build/dist/Tests/Types/SerializableObject.test.js +0 -37
- package/build/dist/Tests/Types/SerializableObject.test.js.map +0 -1
- package/build/dist/Tests/Types/Sleep.test.js +0 -14
- package/build/dist/Tests/Types/Sleep.test.js.map +0 -1
- package/build/dist/Tests/Types/Text.test.js +0 -8
- package/build/dist/Tests/Types/Text.test.js.map +0 -1
- package/build/dist/Tests/Types/Timezone.test.js +0 -596
- package/build/dist/Tests/Types/Timezone.test.js.map +0 -1
- package/build/dist/Tests/Types/Typeof.test.js +0 -16
- package/build/dist/Tests/Types/Typeof.test.js.map +0 -1
- package/build/dist/Tests/Types/UserType.test.js +0 -16
- package/build/dist/Tests/Types/UserType.test.js.map +0 -1
- package/build/dist/Tests/Types/Version.test.js +0 -35
- package/build/dist/Tests/Types/Version.test.js.map +0 -1
- package/build/dist/Tests/Types/XML.test.js +0 -35
- package/build/dist/Tests/Types/XML.test.js.map +0 -1
- package/build/dist/Tests/UI/Components/404.test.js +0 -59
- package/build/dist/Tests/UI/Components/404.test.js.map +0 -1
- package/build/dist/Tests/UI/Components/Alert.test.js +0 -83
- package/build/dist/Tests/UI/Components/Alert.test.js.map +0 -1
- package/build/dist/Tests/UI/Components/Badge.test.js +0 -59
- package/build/dist/Tests/UI/Components/Badge.test.js.map +0 -1
- package/build/dist/Tests/UI/Components/BasicForm.test.js +0 -92
- package/build/dist/Tests/UI/Components/BasicForm.test.js.map +0 -1
- package/build/dist/Tests/UI/Components/Breadcrumbs.test.js +0 -69
- package/build/dist/Tests/UI/Components/Breadcrumbs.test.js.map +0 -1
- package/build/dist/Tests/UI/Components/Button.test.js +0 -104
- package/build/dist/Tests/UI/Components/Button.test.js.map +0 -1
- package/build/dist/Tests/UI/Components/Card.test.js +0 -81
- package/build/dist/Tests/UI/Components/Card.test.js.map +0 -1
- package/build/dist/Tests/UI/Components/ColorViewer.test.js +0 -42
- package/build/dist/Tests/UI/Components/ColorViewer.test.js.map +0 -1
- package/build/dist/Tests/UI/Components/ComponentsModal.test.js +0 -233
- package/build/dist/Tests/UI/Components/ComponentsModal.test.js.map +0 -1
- package/build/dist/Tests/UI/Components/ConfirmModal.test.js +0 -57
- package/build/dist/Tests/UI/Components/ConfirmModal.test.js.map +0 -1
- package/build/dist/Tests/UI/Components/DictionaryOfStrings.test.js +0 -84
- package/build/dist/Tests/UI/Components/DictionaryOfStrings.test.js.map +0 -1
- package/build/dist/Tests/UI/Components/Dropdown.test.js +0 -146
- package/build/dist/Tests/UI/Components/Dropdown.test.js.map +0 -1
- package/build/dist/Tests/UI/Components/DuplicateModel.test.js +0 -229
- package/build/dist/Tests/UI/Components/DuplicateModel.test.js.map +0 -1
- package/build/dist/Tests/UI/Components/EmptyState/EmptyState.test.js +0 -26
- package/build/dist/Tests/UI/Components/EmptyState/EmptyState.test.js.map +0 -1
- package/build/dist/Tests/UI/Components/ErrorBoundary.test.js +0 -32
- package/build/dist/Tests/UI/Components/ErrorBoundary.test.js.map +0 -1
- package/build/dist/Tests/UI/Components/FilePicker.test.js +0 -342
- package/build/dist/Tests/UI/Components/FilePicker.test.js.map +0 -1
- package/build/dist/Tests/UI/Components/HiddenText.test.js +0 -50
- package/build/dist/Tests/UI/Components/HiddenText.test.js.map +0 -1
- package/build/dist/Tests/UI/Components/Input.test.js +0 -223
- package/build/dist/Tests/UI/Components/Input.test.js.map +0 -1
- package/build/dist/Tests/UI/Components/Item.test.js +0 -58
- package/build/dist/Tests/UI/Components/Item.test.js.map +0 -1
- package/build/dist/Tests/UI/Components/List.test.js +0 -83
- package/build/dist/Tests/UI/Components/List.test.js.map +0 -1
- package/build/dist/Tests/UI/Components/Loader.test.js +0 -19
- package/build/dist/Tests/UI/Components/Loader.test.js.map +0 -1
- package/build/dist/Tests/UI/Components/MarkdownEditor.test.js +0 -85
- package/build/dist/Tests/UI/Components/MarkdownEditor.test.js.map +0 -1
- package/build/dist/Tests/UI/Components/MasterPage.test.js +0 -46
- package/build/dist/Tests/UI/Components/MasterPage.test.js.map +0 -1
- package/build/dist/Tests/UI/Components/Modal.test.js +0 -127
- package/build/dist/Tests/UI/Components/Modal.test.js.map +0 -1
- package/build/dist/Tests/UI/Components/NavBar.test.js +0 -52
- package/build/dist/Tests/UI/Components/NavBar.test.js.map +0 -1
- package/build/dist/Tests/UI/Components/OrderedStatesList.test.js +0 -86
- package/build/dist/Tests/UI/Components/OrderedStatesList.test.js.map +0 -1
- package/build/dist/Tests/UI/Components/Pagination.test.js +0 -137
- package/build/dist/Tests/UI/Components/Pagination.test.js.map +0 -1
- package/build/dist/Tests/UI/Components/Pill.test.js +0 -55
- package/build/dist/Tests/UI/Components/Pill.test.js.map +0 -1
- package/build/dist/Tests/UI/Components/Probe.test.js +0 -52
- package/build/dist/Tests/UI/Components/Probe.test.js.map +0 -1
- package/build/dist/Tests/UI/Components/ProgressBar.test.js +0 -41
- package/build/dist/Tests/UI/Components/ProgressBar.test.js.map +0 -1
- package/build/dist/Tests/UI/Components/RadioButtons.test.js +0 -66
- package/build/dist/Tests/UI/Components/RadioButtons.test.js.map +0 -1
- package/build/dist/Tests/UI/Components/SideMenuItem.test.js +0 -99
- package/build/dist/Tests/UI/Components/SideMenuItem.test.js.map +0 -1
- package/build/dist/Tests/UI/Components/SideOver.test.js +0 -77
- package/build/dist/Tests/UI/Components/SideOver.test.js.map +0 -1
- package/build/dist/Tests/UI/Components/Tabs.test.js +0 -56
- package/build/dist/Tests/UI/Components/Tabs.test.js.map +0 -1
- package/build/dist/Tests/UI/Components/Template/Template.test.js +0 -15
- package/build/dist/Tests/UI/Components/Template/Template.test.js.map +0 -1
- package/build/dist/Tests/UI/Components/TextArea.test.js +0 -112
- package/build/dist/Tests/UI/Components/TextArea.test.js.map +0 -1
- package/build/dist/Tests/UI/Components/TimePicker/TimePicker.test.js +0 -352
- package/build/dist/Tests/UI/Components/TimePicker/TimePicker.test.js.map +0 -1
- package/build/dist/Tests/UI/Components/Toast.test.js +0 -48
- package/build/dist/Tests/UI/Components/Toast.test.js.map +0 -1
- package/build/dist/Tests/UI/Components/Toggle.test.js +0 -95
- package/build/dist/Tests/UI/Components/Toggle.test.js.map +0 -1
- package/build/dist/Tests/UI/Components/TopSection.test.js +0 -33
- package/build/dist/Tests/UI/Components/TopSection.test.js.map +0 -1
- package/build/dist/Tests/UI/Components/XAxis.test.js +0 -21
- package/build/dist/Tests/UI/Components/XAxis.test.js.map +0 -1
- package/build/dist/Tests/UI/Index.js +0 -2
- package/build/dist/Tests/UI/Index.js.map +0 -1
- package/build/dist/Tests/UI/Mocks/FileMock.js +0 -3
- package/build/dist/Tests/UI/Mocks/FileMock.js.map +0 -1
- package/build/dist/Tests/Utils/API.test.js +0 -399
- package/build/dist/Tests/Utils/API.test.js.map +0 -1
- package/build/dist/Tests/Utils/Analytics.test.js +0 -67
- package/build/dist/Tests/Utils/Analytics.test.js.map +0 -1
- package/build/dist/Tests/Utils/CronTime.test.js +0 -22
- package/build/dist/Tests/Utils/CronTime.test.js.map +0 -1
- package/build/dist/Tests/Utils/Faker.test.js +0 -27
- package/build/dist/Tests/Utils/Faker.test.js.map +0 -1
- package/build/dist/Tests/Utils/MetricUnitUtil.test.js +0 -187
- package/build/dist/Tests/Utils/MetricUnitUtil.test.js.map +0 -1
- package/build/dist/Tests/Utils/Metrics/MetricFormulaEvaluator.test.js +0 -224
- package/build/dist/Tests/Utils/Metrics/MetricFormulaEvaluator.test.js.map +0 -1
- package/build/dist/Tests/Utils/Metrics/MetricResultUnitConverter.test.js +0 -180
- package/build/dist/Tests/Utils/Metrics/MetricResultUnitConverter.test.js.map +0 -1
- package/build/dist/Tests/Utils/RecordingRuleExpression.test.js +0 -142
- package/build/dist/Tests/Utils/RecordingRuleExpression.test.js.map +0 -1
- package/build/dist/Tests/Utils/Slug.test.js +0 -20
- package/build/dist/Tests/Utils/Slug.test.js.map +0 -1
- package/build/dist/Tests/Utils/UUID.test.js +0 -48
- package/build/dist/Tests/Utils/UUID.test.js.map +0 -1
- package/build/dist/Tests/jest.setup.js +0 -30
- package/build/dist/Tests/jest.setup.js.map +0 -1
- package/build/dist/Types/Profile/ProfileMetricType.js +0 -17
- package/build/dist/Types/Profile/ProfileMetricType.js.map +0 -1
|
@@ -8,6 +8,7 @@ var __metadata = (this && this.__metadata) || function (k, v) {
|
|
|
8
8
|
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
9
9
|
};
|
|
10
10
|
import { SQL, Statement } from "../Utils/AnalyticsDatabase/Statement";
|
|
11
|
+
import { getQuerySettings } from "../Utils/AnalyticsDatabase/QuerySettingsHelper";
|
|
11
12
|
import MetricService from "./MetricService";
|
|
12
13
|
import TableColumnType from "../../Types/AnalyticsDatabase/TableColumnType";
|
|
13
14
|
import BadDataException from "../../Types/Exception/BadDataException";
|
|
@@ -18,9 +19,9 @@ import ServiceType from "../../Types/Telemetry/ServiceType";
|
|
|
18
19
|
/*
|
|
19
20
|
* Facet aggregation for the Metrics page sidebar. Same shape as
|
|
20
21
|
* TraceAggregationService / LogAggregationService — per-facet GROUP BY on
|
|
21
|
-
* the analytics table, with a `
|
|
22
|
-
* `
|
|
23
|
-
* the corresponding virtual facets.
|
|
22
|
+
* the analytics table, with a `primaryEntityType` discriminator that lets
|
|
23
|
+
* the `primaryEntityId` column carry Host / DockerHost / KubernetesCluster
|
|
24
|
+
* ids for the corresponding virtual facets.
|
|
24
25
|
*/
|
|
25
26
|
export class MetricAggregationService {
|
|
26
27
|
static async getFacetValues(request) {
|
|
@@ -41,6 +42,10 @@ export class MetricAggregationService {
|
|
|
41
42
|
}
|
|
42
43
|
static buildFacetStatement(request) {
|
|
43
44
|
var _a;
|
|
45
|
+
// Pre-rename alias from stale clients; the V3 column is primaryEntityId.
|
|
46
|
+
if (request.facetKey === "serviceId") {
|
|
47
|
+
request.facetKey = "primaryEntityId";
|
|
48
|
+
}
|
|
44
49
|
const limit = (_a = request.limit) !== null && _a !== void 0 ? _a : MetricAggregationService.DEFAULT_FACET_LIMIT;
|
|
45
50
|
MetricAggregationService.validateFacetKey(request.facetKey);
|
|
46
51
|
const resourceServiceType = MetricAggregationService.RESOURCE_FACET_KEYS.get(request.facetKey);
|
|
@@ -49,16 +54,16 @@ export class MetricAggregationService {
|
|
|
49
54
|
MetricAggregationService.isTopLevelColumn(request.facetKey);
|
|
50
55
|
const statement = new Statement();
|
|
51
56
|
if (isResourceFacet) {
|
|
52
|
-
statement.append(SQL `SELECT toString(
|
|
57
|
+
statement.append(SQL `SELECT toString(primaryEntityId) AS val, count() AS cnt FROM ${MetricAggregationService.TABLE_NAME}`);
|
|
53
58
|
}
|
|
54
59
|
else if (isTopLevelColumn) {
|
|
55
60
|
statement.append(SQL `SELECT toString(${request.facetKey}) AS val, count() AS cnt FROM ${MetricAggregationService.TABLE_NAME}`);
|
|
56
61
|
}
|
|
57
62
|
else {
|
|
58
|
-
statement.append(SQL `SELECT
|
|
63
|
+
statement.append(SQL `SELECT attributes[${{
|
|
59
64
|
type: TableColumnType.Text,
|
|
60
65
|
value: request.facetKey,
|
|
61
|
-
}}
|
|
66
|
+
}}] AS val, count() AS cnt FROM ${MetricAggregationService.TABLE_NAME}`);
|
|
62
67
|
}
|
|
63
68
|
statement.append(SQL ` WHERE projectId = ${{
|
|
64
69
|
type: TableColumnType.ObjectID,
|
|
@@ -71,23 +76,28 @@ export class MetricAggregationService {
|
|
|
71
76
|
value: request.endTime,
|
|
72
77
|
}}`);
|
|
73
78
|
if (isResourceFacet) {
|
|
74
|
-
statement.append(SQL ` AND
|
|
79
|
+
statement.append(SQL ` AND primaryEntityType = ${{
|
|
75
80
|
type: TableColumnType.Text,
|
|
76
81
|
value: resourceServiceType,
|
|
77
82
|
}}`);
|
|
78
83
|
}
|
|
79
|
-
else if (request.facetKey === "
|
|
80
|
-
statement.append(SQL ` AND (
|
|
84
|
+
else if (request.facetKey === "primaryEntityId") {
|
|
85
|
+
statement.append(SQL ` AND (primaryEntityType = '' OR primaryEntityType = ${{
|
|
81
86
|
type: TableColumnType.Text,
|
|
82
87
|
value: ServiceType.OpenTelemetry,
|
|
83
88
|
}})`);
|
|
84
89
|
}
|
|
85
90
|
else if (!isTopLevelColumn) {
|
|
86
|
-
statement.append(SQL ` AND
|
|
91
|
+
statement.append(SQL ` AND mapContains(attributes, ${{
|
|
87
92
|
type: TableColumnType.Text,
|
|
88
93
|
value: request.facetKey,
|
|
89
|
-
}})
|
|
94
|
+
}})`);
|
|
90
95
|
}
|
|
96
|
+
/*
|
|
97
|
+
* Read-side retention filter: rows past their per-service retention
|
|
98
|
+
* stay in their part until the whole part drops (ttl_only_drop_parts).
|
|
99
|
+
*/
|
|
100
|
+
statement.append(" AND retentionDate >= now()");
|
|
91
101
|
MetricAggregationService.appendCommonFilters(statement, request);
|
|
92
102
|
statement.append(SQL ` GROUP BY val ORDER BY cnt DESC LIMIT ${{
|
|
93
103
|
type: TableColumnType.Number,
|
|
@@ -97,12 +107,15 @@ export class MetricAggregationService {
|
|
|
97
107
|
* Defense in depth: cap runtime below nginx's 60s proxy_read_timeout
|
|
98
108
|
* so a slow facet never starves the endpoint.
|
|
99
109
|
*/
|
|
100
|
-
statement.append(
|
|
110
|
+
statement.append(getQuerySettings({
|
|
111
|
+
maxExecutionTimeInSeconds: 45,
|
|
112
|
+
timeoutOverflowMode: "break",
|
|
113
|
+
}));
|
|
101
114
|
return statement;
|
|
102
115
|
}
|
|
103
116
|
static appendCommonFilters(statement, request) {
|
|
104
117
|
if (request.serviceIds && request.serviceIds.length > 0) {
|
|
105
|
-
statement.append(SQL ` AND
|
|
118
|
+
statement.append(SQL ` AND primaryEntityId IN (${{
|
|
106
119
|
type: TableColumnType.ObjectID,
|
|
107
120
|
value: new Includes(request.serviceIds.map((id) => {
|
|
108
121
|
return id.toString();
|
|
@@ -139,7 +152,7 @@ export class MetricAggregationService {
|
|
|
139
152
|
MetricAggregationService.DEFAULT_FACET_LIMIT = 500;
|
|
140
153
|
MetricAggregationService.TABLE_NAME = AnalyticsTableName.Metric;
|
|
141
154
|
MetricAggregationService.TOP_LEVEL_COLUMNS = new Set([
|
|
142
|
-
"
|
|
155
|
+
"primaryEntityId",
|
|
143
156
|
"name",
|
|
144
157
|
]);
|
|
145
158
|
MetricAggregationService.RESOURCE_FACET_KEYS = new Map([
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MetricAggregationService.js","sourceRoot":"","sources":["../../../../Server/Services/MetricAggregationService.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,sCAAsC,CAAC;AACtE,OAAO,aAAa,MAAM,iBAAiB,CAAC;AAC5C,OAAO,eAAe,MAAM,+CAA+C,CAAC;AAG5E,OAAO,gBAAgB,MAAM,wCAAwC,CAAC;AACtE,OAAO,QAAQ,MAAM,mCAAmC,CAAC;AACzD,OAAO,kBAAkB,MAAM,kDAAkD,CAAC;AAClF,OAAO,WAAW,MAAM,gCAAgC,CAAC;AAEzD,OAAO,WAAW,MAAM,mCAAmC,CAAC;AAqB5D;;;;;;GAMG;AACH,MAAM,OAAO,wBAAwB;IAoBf,AAAb,MAAM,CAAC,KAAK,CAAC,cAAc,CAChC,OAAqB;QAErB,MAAM,SAAS,GACb,wBAAwB,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC;QAExD,MAAM,QAAQ,GAAY,MAAM,aAAa,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;QACtE,MAAM,QAAQ,GAAmB,MAAM,QAAQ,CAAC,IAAI,EAEhD,CAAC;QAEL,MAAM,IAAI,GAAsB,QAAQ,CAAC,IAAI,IAAI,EAAE,CAAC;QAEpD,OAAO,IAAI;aACR,GAAG,CAAC,CAAC,GAAe,EAAc,EAAE;YACnC,OAAO;gBACL,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;gBAC/B,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;aAC/B,CAAC;QACJ,CAAC,CAAC;aACD,MAAM,CAAC,CAAC,KAAiB,EAAW,EAAE;YACrC,OAAO,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;QAChC,CAAC,CAAC,CAAC;IACP,CAAC;IAEO,MAAM,CAAC,mBAAmB,CAAC,OAAqB;;QACtD,MAAM,KAAK,GACT,MAAA,OAAO,CAAC,KAAK,mCAAI,wBAAwB,CAAC,mBAAmB,CAAC;QAEhE,wBAAwB,CAAC,gBAAgB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAE5D,MAAM,mBAAmB,GACvB,wBAAwB,CAAC,mBAAmB,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACrE,MAAM,eAAe,GAAY,mBAAmB,KAAK,SAAS,CAAC;QACnE,MAAM,gBAAgB,GACpB,eAAe;YACf,wBAAwB,CAAC,gBAAgB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAE9D,MAAM,SAAS,GAAc,IAAI,SAAS,EAAE,CAAC;QAE7C,IAAI,eAAe,EAAE,CAAC;YACpB,SAAS,CAAC,MAAM,CACd,GAAG,CAAA,
|
|
1
|
+
{"version":3,"file":"MetricAggregationService.js","sourceRoot":"","sources":["../../../../Server/Services/MetricAggregationService.ts"],"names":[],"mappings":"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"}
|
|
@@ -23,14 +23,14 @@ export class MetricBaselineService extends AnalyticsDatabaseService {
|
|
|
23
23
|
super({ modelType: MetricBaselineHourly, database: clickhouseDatabase });
|
|
24
24
|
}
|
|
25
25
|
/**
|
|
26
|
-
* Fetch the rolling-window baseline for one (metric, [
|
|
26
|
+
* Fetch the rolling-window baseline for one (metric, [entity],
|
|
27
27
|
* hour-of-week) cell. Aggregates the AggregateFunction states across
|
|
28
28
|
* the last `windowDays` days. Returns null when no data exists.
|
|
29
29
|
*
|
|
30
|
-
* `
|
|
31
|
-
* across every
|
|
32
|
-
* Useful for monitor criteria whose query isn't scoped to
|
|
33
|
-
* telemetry service.
|
|
30
|
+
* `primaryEntityId` is optional: when omitted, baselines are
|
|
31
|
+
* aggregated across every primaryEntityId that ingested the metric in
|
|
32
|
+
* the window. Useful for monitor criteria whose query isn't scoped to
|
|
33
|
+
* a single telemetry service.
|
|
34
34
|
*/
|
|
35
35
|
async getBaseline(input) {
|
|
36
36
|
const windowDays = Math.min(input.windowDays || MetricBaselineService.DEFAULT_WINDOW_DAYS, MetricBaselineService.MAX_WINDOW_DAYS);
|
|
@@ -40,24 +40,24 @@ export class MetricBaselineService extends AnalyticsDatabaseService {
|
|
|
40
40
|
: input.projectId);
|
|
41
41
|
const metricNameStr = this.escapeString(input.metricName);
|
|
42
42
|
const hour = Math.max(0, Math.min(167, Math.floor(input.hourOfWeek)));
|
|
43
|
-
const
|
|
44
|
-
? `AND
|
|
45
|
-
? input.
|
|
46
|
-
: input.
|
|
43
|
+
const primaryEntityIdClause = input.primaryEntityId
|
|
44
|
+
? `AND primaryEntityId = '${this.escapeString(input.primaryEntityId instanceof ObjectID
|
|
45
|
+
? input.primaryEntityId.toString()
|
|
46
|
+
: input.primaryEntityId)}'`
|
|
47
47
|
: "";
|
|
48
48
|
const sql = `
|
|
49
49
|
SELECT
|
|
50
|
-
countMerge(sampleCountState)
|
|
51
|
-
avgMerge(meanState)
|
|
52
|
-
stddevPopMerge(stddevState)
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
minMerge(minObsState)
|
|
56
|
-
maxMerge(maxObsState)
|
|
50
|
+
countMerge(sampleCountState) AS sampleCount,
|
|
51
|
+
avgMerge(meanState) AS mean,
|
|
52
|
+
stddevPopMerge(stddevState) AS stddev,
|
|
53
|
+
quantileBFloat16Merge(0.5)(medianState) AS median,
|
|
54
|
+
quantileBFloat16Merge(0.95)(p95State) AS p95,
|
|
55
|
+
minMerge(minObsState) AS minObserved,
|
|
56
|
+
maxMerge(maxObsState) AS maxObserved
|
|
57
57
|
FROM MetricBaselineHourly
|
|
58
58
|
WHERE projectId = '${projectIdStr}'
|
|
59
59
|
AND name = '${metricNameStr}'
|
|
60
|
-
${
|
|
60
|
+
${primaryEntityIdClause}
|
|
61
61
|
AND hourOfWeek = ${hour}
|
|
62
62
|
AND day >= today() - INTERVAL ${windowDays} DAY
|
|
63
63
|
`;
|
|
@@ -94,7 +94,7 @@ export class MetricBaselineService extends AnalyticsDatabaseService {
|
|
|
94
94
|
}
|
|
95
95
|
/**
|
|
96
96
|
* Coverage probe: how much baseline data we have for a (metric,
|
|
97
|
-
*
|
|
97
|
+
* entity) pair. Used by the form UI to show "Learning — N days of
|
|
98
98
|
* data, baseline ready in M days".
|
|
99
99
|
*/
|
|
100
100
|
async getCoverage(input) {
|
|
@@ -102,10 +102,10 @@ export class MetricBaselineService extends AnalyticsDatabaseService {
|
|
|
102
102
|
? input.projectId.toString()
|
|
103
103
|
: input.projectId);
|
|
104
104
|
const metricNameStr = this.escapeString(input.metricName);
|
|
105
|
-
const
|
|
106
|
-
? `AND
|
|
107
|
-
? input.
|
|
108
|
-
: input.
|
|
105
|
+
const primaryEntityIdClause = input.primaryEntityId
|
|
106
|
+
? `AND primaryEntityId = '${this.escapeString(input.primaryEntityId instanceof ObjectID
|
|
107
|
+
? input.primaryEntityId.toString()
|
|
108
|
+
: input.primaryEntityId)}'`
|
|
109
109
|
: "";
|
|
110
110
|
const sql = `
|
|
111
111
|
SELECT
|
|
@@ -114,7 +114,7 @@ export class MetricBaselineService extends AnalyticsDatabaseService {
|
|
|
114
114
|
FROM MetricBaselineHourly
|
|
115
115
|
WHERE projectId = '${projectIdStr}'
|
|
116
116
|
AND name = '${metricNameStr}'
|
|
117
|
-
${
|
|
117
|
+
${primaryEntityIdClause}
|
|
118
118
|
AND day >= today() - INTERVAL ${MetricBaselineService.MAX_WINDOW_DAYS} DAY
|
|
119
119
|
`;
|
|
120
120
|
const resultSet = (await this.executeQuery(sql));
|
|
@@ -144,10 +144,10 @@ export class MetricBaselineService extends AnalyticsDatabaseService {
|
|
|
144
144
|
? input.projectId.toString()
|
|
145
145
|
: input.projectId);
|
|
146
146
|
const metricNameStr = this.escapeString(input.metricName);
|
|
147
|
-
const
|
|
148
|
-
? `AND
|
|
149
|
-
? input.
|
|
150
|
-
: input.
|
|
147
|
+
const primaryEntityIdClause = input.primaryEntityId
|
|
148
|
+
? `AND primaryEntityId = '${this.escapeString(input.primaryEntityId instanceof ObjectID
|
|
149
|
+
? input.primaryEntityId.toString()
|
|
150
|
+
: input.primaryEntityId)}'`
|
|
151
151
|
: "";
|
|
152
152
|
const sql = `
|
|
153
153
|
SELECT
|
|
@@ -158,7 +158,7 @@ export class MetricBaselineService extends AnalyticsDatabaseService {
|
|
|
158
158
|
FROM MetricBaselineHourly
|
|
159
159
|
WHERE projectId = '${projectIdStr}'
|
|
160
160
|
AND name = '${metricNameStr}'
|
|
161
|
-
${
|
|
161
|
+
${primaryEntityIdClause}
|
|
162
162
|
AND day >= today() - INTERVAL ${windowDays} DAY
|
|
163
163
|
GROUP BY hourOfWeek
|
|
164
164
|
`;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MetricBaselineService.js","sourceRoot":"","sources":["../../../../Server/Services/MetricBaselineService.ts"],"names":[],"mappings":"AAAA,OAAO,wBAAwB,MAAM,4BAA4B,CAAC;AAElE,OAAO,oBAAoB,MAAM,mDAAmD,CAAC;AACrF,OAAO,MAAyB,MAAM,iBAAiB,CAAC;AACxD,OAAO,QAAQ,MAAM,sBAAsB,CAAC;AA0C5C;;;;;;;;;;;;;;;GAeG;AACH,MAAM,OAAO,qBAAsB,SAAQ,wBAA8C;IACvF,YAAmB,kBAAmD;QACpE,KAAK,CAAC,EAAE,SAAS,EAAE,oBAAoB,EAAE,QAAQ,EAAE,kBAAkB,EAAE,CAAC,CAAC;IAC3E,CAAC;IAkCD;;;;;;;;;OASG;IACI,KAAK,CAAC,WAAW,CAAC,KAOxB;QACC,MAAM,UAAU,GAAW,IAAI,CAAC,GAAG,CACjC,KAAK,CAAC,UAAU,IAAI,qBAAqB,CAAC,mBAAmB,EAC7D,qBAAqB,CAAC,eAAe,CACtC,CAAC;QACF,MAAM,UAAU,GACd,KAAK,CAAC,UAAU,IAAI,qBAAqB,CAAC,mBAAmB,CAAC;QAEhE,MAAM,YAAY,GAAW,IAAI,CAAC,YAAY,CAC5C,KAAK,CAAC,SAAS,YAAY,QAAQ;YACjC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,QAAQ,EAAE;YAC5B,CAAC,CAAC,KAAK,CAAC,SAAS,CACpB,CAAC;QACF,MAAM,aAAa,GAAW,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAClE,MAAM,IAAI,GAAW,IAAI,CAAC,GAAG,CAC3B,CAAC,EACD,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAC5C,CAAC;QAEF,MAAM,
|
|
1
|
+
{"version":3,"file":"MetricBaselineService.js","sourceRoot":"","sources":["../../../../Server/Services/MetricBaselineService.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import AnalyticsDatabaseService from "./AnalyticsDatabaseService";
|
|
2
|
+
import MetricItemAggMV1mByHostV2 from "../../Models/AnalyticsModels/MetricItemAggMV1mByHostV2";
|
|
3
|
+
/**
|
|
4
|
+
* Read-side service for the `MetricItemAggMV1mByHostV2` MV target table —
|
|
5
|
+
* per-(host entity key, minute) pre-aggregated metric values for
|
|
6
|
+
* host-detail chart queries. Sister of `MetricItemAggMV1mService` (which
|
|
7
|
+
* is keyed by primaryEntityId rather than host).
|
|
8
|
+
*
|
|
9
|
+
* Today's reads go through `MetricService.tryBuildHostAggregateMVStatement`
|
|
10
|
+
* with raw SQL; this service exists so the model is registered with the
|
|
11
|
+
* analytics framework and the auto-create flow can manage the table + MV
|
|
12
|
+
* on app startup (idempotent with the RekeyMetricHostRollupToEntityKey
|
|
13
|
+
* migration, which also backfills from the dropped V1 table).
|
|
14
|
+
*
|
|
15
|
+
* AggregateFunction columns require `*Merge()` finalizers at read time —
|
|
16
|
+
* the generic typed `findBy` path is therefore not useful and should not
|
|
17
|
+
* be relied on against this table.
|
|
18
|
+
*/
|
|
19
|
+
export class MetricItemAggMV1mByHostV2Service extends AnalyticsDatabaseService {
|
|
20
|
+
constructor(clickhouseDatabase) {
|
|
21
|
+
super({
|
|
22
|
+
modelType: MetricItemAggMV1mByHostV2,
|
|
23
|
+
database: clickhouseDatabase,
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
export default new MetricItemAggMV1mByHostV2Service();
|
|
28
|
+
//# sourceMappingURL=MetricItemAggMV1mByHostV2Service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MetricItemAggMV1mByHostV2Service.js","sourceRoot":"","sources":["../../../../Server/Services/MetricItemAggMV1mByHostV2Service.ts"],"names":[],"mappings":"AAAA,OAAO,wBAAwB,MAAM,4BAA4B,CAAC;AAElE,OAAO,yBAAyB,MAAM,wDAAwD,CAAC;AAE/F;;;;;;;;;;;;;;;GAeG;AACH,MAAM,OAAO,gCAAiC,SAAQ,wBAAmD;IACvG,YAAmB,kBAAmD;QACpE,KAAK,CAAC;YACJ,SAAS,EAAE,yBAAyB;YACpC,QAAQ,EAAE,kBAAkB;SAC7B,CAAC,CAAC;IACL,CAAC;CACF;AAED,eAAe,IAAI,gCAAgC,EAAE,CAAC"}
|
|
@@ -2,16 +2,19 @@ import AnalyticsDatabaseService from "./AnalyticsDatabaseService";
|
|
|
2
2
|
import Metric from "../../Models/AnalyticsModels/Metric";
|
|
3
3
|
import { AggregateUtil, } from "../Types/AnalyticsDatabase/AggregateBy";
|
|
4
4
|
import { SQL } from "../Utils/AnalyticsDatabase/Statement";
|
|
5
|
+
import { getQuerySettings } from "../Utils/AnalyticsDatabase/QuerySettingsHelper";
|
|
5
6
|
import AggregationType, { getPercentileLevel, isPercentileAggregation, } from "../../Types/BaseDatabase/AggregationType";
|
|
6
7
|
import AnalyticsTableName from "../../Types/AnalyticsDatabase/AnalyticsTableName";
|
|
7
8
|
import TableColumnType from "../../Types/AnalyticsDatabase/TableColumnType";
|
|
9
|
+
import { keyForHost } from "../../Utils/Telemetry/EntityKey";
|
|
10
|
+
import ObjectID from "../../Types/ObjectID";
|
|
8
11
|
import logger from "../Utils/Logger";
|
|
9
12
|
export class MetricService extends AnalyticsDatabaseService {
|
|
10
13
|
constructor(clickhouseDatabase) {
|
|
11
14
|
super({ modelType: Metric, database: clickhouseDatabase });
|
|
12
15
|
}
|
|
13
16
|
/*
|
|
14
|
-
* Cascade deletes from `
|
|
17
|
+
* Cascade deletes from `MetricItemV3` into the aggregating
|
|
15
18
|
* materialized-view target tables.
|
|
16
19
|
*
|
|
17
20
|
* `MetricItemAggMV1m` and `MetricBaselineHourly` are AggregatingMergeTree
|
|
@@ -24,12 +27,12 @@ export class MetricService extends AnalyticsDatabaseService {
|
|
|
24
27
|
* See https://github.com/OneUptime/oneuptime/issues/2419.
|
|
25
28
|
*
|
|
26
29
|
* The cascade only runs when the caller scoped the delete by
|
|
27
|
-
* `
|
|
28
|
-
* each MV table's own `retentionDate TTL DELETE`, so cascading those
|
|
30
|
+
* `primaryEntityId`. Global time-based purges (TTL cleanup) are handled
|
|
31
|
+
* by each MV table's own `retentionDate TTL DELETE`, so cascading those
|
|
29
32
|
* would pointlessly scan the whole MV. The per-host MV
|
|
30
|
-
* (`
|
|
31
|
-
* `
|
|
32
|
-
* skip it.
|
|
33
|
+
* (`MetricItemAggMV1mByHostV2`) is keyed by `hostEntityKey` rather than
|
|
34
|
+
* `primaryEntityId`, so an entity-scoped delete has nothing to remove
|
|
35
|
+
* there — skip it.
|
|
33
36
|
*/
|
|
34
37
|
async deleteBy(deleteBy) {
|
|
35
38
|
await super.deleteBy(deleteBy);
|
|
@@ -68,26 +71,26 @@ export class MetricService extends AnalyticsDatabaseService {
|
|
|
68
71
|
}
|
|
69
72
|
const queryRecord = query;
|
|
70
73
|
/*
|
|
71
|
-
* Cascade only when the delete is scoped by
|
|
72
|
-
* key is (projectId, name,
|
|
73
|
-
* the DELETE would scan a huge swath of unrelated
|
|
74
|
-
* removing data that belongs to other entities sharing
|
|
75
|
-
* project.
|
|
74
|
+
* Cascade only when the delete is scoped by primaryEntityId. The MV
|
|
75
|
+
* sort key is (projectId, name, primaryEntityId, bucketTime); without
|
|
76
|
+
* primaryEntityId the DELETE would scan a huge swath of unrelated
|
|
77
|
+
* rows and risk removing data that belongs to other entities sharing
|
|
78
|
+
* the same project.
|
|
76
79
|
*/
|
|
77
|
-
if (queryRecord["
|
|
78
|
-
queryRecord["
|
|
80
|
+
if (queryRecord["primaryEntityId"] === undefined ||
|
|
81
|
+
queryRecord["primaryEntityId"] === null) {
|
|
79
82
|
return null;
|
|
80
83
|
}
|
|
81
84
|
/*
|
|
82
85
|
* Only project the keys the MV target tables actually expose.
|
|
83
|
-
* `time`, `attributes`, `
|
|
86
|
+
* `time`, `attributes`, `primaryEntityType`, and the metric-payload
|
|
84
87
|
* columns don't exist on the MV schema and would either fail
|
|
85
88
|
* where-statement generation or reference a missing column.
|
|
86
89
|
*/
|
|
87
90
|
const allowedKeys = [
|
|
88
91
|
"projectId",
|
|
89
92
|
"name",
|
|
90
|
-
"
|
|
93
|
+
"primaryEntityId",
|
|
91
94
|
];
|
|
92
95
|
const out = {};
|
|
93
96
|
for (const key of allowedKeys) {
|
|
@@ -139,7 +142,7 @@ export class MetricService extends AnalyticsDatabaseService {
|
|
|
139
142
|
* dominant attribute-filtered path and the per-host MV is
|
|
140
143
|
* the only one that can serve them. If it doesn't apply
|
|
141
144
|
* (no host filter, or extra attrs/groupBy), fall through
|
|
142
|
-
* to the project/
|
|
145
|
+
* to the project/primaryEntityId MV, then to the base table.
|
|
143
146
|
*/
|
|
144
147
|
const hostMvStatement = this.tryBuildHostAggregateMVStatement(aggregateBy);
|
|
145
148
|
if (hostMvStatement) {
|
|
@@ -262,6 +265,7 @@ export class MetricService extends AnalyticsDatabaseService {
|
|
|
262
265
|
statement.append(`SELECT ${innerSelectClause}`);
|
|
263
266
|
statement.append(` FROM ${databaseName}.${this.model.tableName} WHERE TRUE `);
|
|
264
267
|
statement.append(whereStatement);
|
|
268
|
+
statement.append(this.getRetentionReadFilter());
|
|
265
269
|
statement.append(SQL `) `);
|
|
266
270
|
statement.append(SQL ` GROUP BY `).append(`${aggregationTimestampColumn}`);
|
|
267
271
|
for (const key of groupByKeys) {
|
|
@@ -282,7 +286,13 @@ export class MetricService extends AnalyticsDatabaseService {
|
|
|
282
286
|
* path bypasses the base method, so we mirror them here to keep
|
|
283
287
|
* cluster behavior consistent across aggregation kinds.
|
|
284
288
|
*/
|
|
285
|
-
statement.append(
|
|
289
|
+
statement.append(getQuerySettings({
|
|
290
|
+
additionalSettings: {
|
|
291
|
+
optimize_aggregation_in_order: 1,
|
|
292
|
+
optimize_move_to_prewhere: 1,
|
|
293
|
+
max_threads: 4,
|
|
294
|
+
},
|
|
295
|
+
}));
|
|
286
296
|
const columns = [
|
|
287
297
|
aggregationColumn,
|
|
288
298
|
aggregationTimestampColumn,
|
|
@@ -307,7 +317,7 @@ export class MetricService extends AnalyticsDatabaseService {
|
|
|
307
317
|
* - The dashboard's effective bucket interval is >= 1 minute (the
|
|
308
318
|
* MV stores 1-minute states; sub-minute requests need raw rows).
|
|
309
319
|
* - The query carries no per-attribute filter or group-by, since
|
|
310
|
-
* the MV is keyed by (projectId, name,
|
|
320
|
+
* the MV is keyed by (projectId, name, primaryEntityId, bucketTime)
|
|
311
321
|
* only — it does not preserve attribute breakdowns.
|
|
312
322
|
* - The query carries no group-by other than the time bucket.
|
|
313
323
|
*
|
|
@@ -354,6 +364,25 @@ export class MetricService extends AnalyticsDatabaseService {
|
|
|
354
364
|
if (aggregateBy.groupBy && Object.keys(aggregateBy.groupBy).length > 0) {
|
|
355
365
|
return null;
|
|
356
366
|
}
|
|
367
|
+
/*
|
|
368
|
+
* The MV only carries projectId/name/primaryEntityId/bucketTime, so a
|
|
369
|
+
* query filtering on any other column (e.g. entityKeys membership,
|
|
370
|
+
* which exists only on the raw Metric table) must fall back to the
|
|
371
|
+
* raw-table path or the generated WHERE would reference a column the
|
|
372
|
+
* MV does not have.
|
|
373
|
+
*/
|
|
374
|
+
const mvQueryableColumns = [
|
|
375
|
+
"projectId",
|
|
376
|
+
"name",
|
|
377
|
+
"primaryEntityId",
|
|
378
|
+
"time", // stripped below; bucketTime range is added explicitly
|
|
379
|
+
"attributes", // guarded empty above
|
|
380
|
+
];
|
|
381
|
+
for (const queryKey of Object.keys(queryRecord)) {
|
|
382
|
+
if (!mvQueryableColumns.includes(queryKey)) {
|
|
383
|
+
return null;
|
|
384
|
+
}
|
|
385
|
+
}
|
|
357
386
|
if (!this.database) {
|
|
358
387
|
this.useDefaultDatabase();
|
|
359
388
|
}
|
|
@@ -387,7 +416,7 @@ export class MetricService extends AnalyticsDatabaseService {
|
|
|
387
416
|
const statement = SQL ``;
|
|
388
417
|
statement.append(`SELECT ${mergedExpr} as value, date_trunc('${intervalLower}', toStartOfInterval(bucketTime, INTERVAL 1 ${intervalLower})) as time`);
|
|
389
418
|
statement.append(SQL ` FROM ${databaseName}.MetricItemAggMV1m`);
|
|
390
|
-
statement.append(` WHERE bucketTime >= toDateTime('${this.formatDateTime(aggregateBy.startTimestamp)}') AND bucketTime <= toDateTime('${this.formatDateTime(aggregateBy.endTimestamp)}')`);
|
|
419
|
+
statement.append(` WHERE bucketTime >= toDateTime('${this.formatDateTime(aggregateBy.startTimestamp)}') AND bucketTime <= toDateTime('${this.formatDateTime(aggregateBy.endTimestamp)}')${this.getRetentionReadFilter()}`);
|
|
391
420
|
statement.append(SQL ` `).append(nonTimeWhere);
|
|
392
421
|
statement.append(SQL ` GROUP BY `).append(`time`);
|
|
393
422
|
statement.append(SQL ` ORDER BY `).append(sortStatement);
|
|
@@ -399,7 +428,13 @@ export class MetricService extends AnalyticsDatabaseService {
|
|
|
399
428
|
value: Number(aggregateBy.skip),
|
|
400
429
|
type: TableColumnType.Number,
|
|
401
430
|
}} `);
|
|
402
|
-
statement.append(
|
|
431
|
+
statement.append(getQuerySettings({
|
|
432
|
+
additionalSettings: {
|
|
433
|
+
optimize_aggregation_in_order: 1,
|
|
434
|
+
optimize_move_to_prewhere: 1,
|
|
435
|
+
max_threads: 4,
|
|
436
|
+
},
|
|
437
|
+
}));
|
|
403
438
|
logger.debug(`${this.model.tableName} MV Aggregate Statement`, {
|
|
404
439
|
tableName: this.model.tableName,
|
|
405
440
|
});
|
|
@@ -417,16 +452,20 @@ export class MetricService extends AnalyticsDatabaseService {
|
|
|
417
452
|
/*
|
|
418
453
|
* Per-host materialized-view fast path.
|
|
419
454
|
*
|
|
420
|
-
* Returns a statement that reads from
|
|
421
|
-
* (created by
|
|
422
|
-
*
|
|
455
|
+
* Returns a statement that reads from MetricItemAggMV1mByHostV2
|
|
456
|
+
* (created by RekeyMetricHostRollupToEntityKey), which is keyed by
|
|
457
|
+
* the stable `hostEntityKey` — the incoming `resource.host.name`
|
|
458
|
+
* filter value is folded into that key server-side via
|
|
459
|
+
* EntityKey.keyForHost, so spelling drift (case/whitespace) in the
|
|
460
|
+
* reported hostname still lands on one rollup stream. Applies when:
|
|
423
461
|
*
|
|
424
462
|
* - The aggregation is Sum/Avg/Min/Max/Count over `value`.
|
|
425
463
|
* - The only attribute filter is `resource.host.name` as a
|
|
426
464
|
* bare-string equality (the dashboard's host detail page
|
|
427
|
-
* pattern)
|
|
465
|
+
* pattern), and the query carries a `projectId` (the entity
|
|
466
|
+
* key is tenant-scoped by construction).
|
|
428
467
|
* - The query carries no group-by other than the time
|
|
429
|
-
* bucket — the MV is keyed by
|
|
468
|
+
* bucket — the MV is keyed by hostEntityKey and does not
|
|
430
469
|
* preserve other attribute breakdowns.
|
|
431
470
|
*
|
|
432
471
|
* Returns `null` if any condition fails so the caller falls
|
|
@@ -477,10 +516,50 @@ export class MetricService extends AnalyticsDatabaseService {
|
|
|
477
516
|
if (attrValue === undefined || attrValue === null) {
|
|
478
517
|
return null;
|
|
479
518
|
}
|
|
519
|
+
/*
|
|
520
|
+
* The MV only carries projectId/name/hostEntityKey/bucketTime. Any
|
|
521
|
+
* other query key (primaryEntityId, entityScope, entityKeys, ...)
|
|
522
|
+
* would compile to a WHERE over a column the MV does not have, so
|
|
523
|
+
* fall back to the raw table for those. Mirrors
|
|
524
|
+
* tryBuildMinuteAggregateMVStatement.
|
|
525
|
+
*/
|
|
526
|
+
const mvQueryableColumns = [
|
|
527
|
+
"projectId",
|
|
528
|
+
"name",
|
|
529
|
+
"time", // stripped below; bucketTime range is added explicitly
|
|
530
|
+
"attributes", // rewritten below into the hostEntityKey predicate
|
|
531
|
+
];
|
|
532
|
+
for (const queryKey of Object.keys(queryRecord)) {
|
|
533
|
+
if (!mvQueryableColumns.includes(queryKey)) {
|
|
534
|
+
return null;
|
|
535
|
+
}
|
|
536
|
+
}
|
|
480
537
|
const hostIdentifier = typeof attrValue === "string" ? attrValue : "";
|
|
481
538
|
if (!hostIdentifier) {
|
|
482
539
|
return null;
|
|
483
540
|
}
|
|
541
|
+
/*
|
|
542
|
+
* The entity key folds the tenant in (sha256(projectId|host|...)), so
|
|
543
|
+
* the MV row can only be located when the query is project-scoped.
|
|
544
|
+
* Dashboard reads always are; anything else falls back safely.
|
|
545
|
+
*/
|
|
546
|
+
const projectIdValue = queryRecord["projectId"];
|
|
547
|
+
let projectId = "";
|
|
548
|
+
if (projectIdValue instanceof ObjectID) {
|
|
549
|
+
projectId = projectIdValue.toString();
|
|
550
|
+
}
|
|
551
|
+
else if (typeof projectIdValue === "string") {
|
|
552
|
+
projectId = projectIdValue;
|
|
553
|
+
}
|
|
554
|
+
if (!projectId) {
|
|
555
|
+
return null;
|
|
556
|
+
}
|
|
557
|
+
/*
|
|
558
|
+
* Same canonicalized key the ingest pipeline stamps into
|
|
559
|
+
* MetricItemV3.hostEntityKey (and the V2 MV groups by) — byte-equality
|
|
560
|
+
* is what makes this lookup correct, see Common/Utils/Telemetry/EntityKey.
|
|
561
|
+
*/
|
|
562
|
+
const hostEntityKey = keyForHost(projectId, hostIdentifier);
|
|
484
563
|
const interval = AggregateUtil.getAggregationInterval({
|
|
485
564
|
startDate: aggregateBy.startTimestamp,
|
|
486
565
|
endDate: aggregateBy.endTimestamp,
|
|
@@ -511,17 +590,17 @@ export class MetricService extends AnalyticsDatabaseService {
|
|
|
511
590
|
* Strip both `time` (column doesn't exist on the MV; we
|
|
512
591
|
* inject an explicit bucketTime range below) and
|
|
513
592
|
* `attributes` (the attribute filter is now an explicit
|
|
514
|
-
* `
|
|
593
|
+
* `hostEntityKey =` predicate against an MV column).
|
|
515
594
|
*/
|
|
516
595
|
const filteredQuery = this.stripAttributesAndTimeFromQuery(aggregateBy.query);
|
|
517
596
|
const nonTimeWhere = this.statementGenerator.toWhereStatement(filteredQuery);
|
|
518
597
|
const sortStatement = this.statementGenerator.toSortStatement(aggregateBy.sort);
|
|
519
598
|
const statement = SQL ``;
|
|
520
599
|
statement.append(`SELECT ${mergedExpr} as value, date_trunc('${intervalLower}', toStartOfInterval(bucketTime, INTERVAL 1 ${intervalLower})) as time`);
|
|
521
|
-
statement.append(SQL ` FROM ${databaseName}.
|
|
522
|
-
statement.append(` WHERE bucketTime >= toDateTime('${this.formatDateTime(aggregateBy.startTimestamp)}') AND bucketTime <= toDateTime('${this.formatDateTime(aggregateBy.endTimestamp)}')`);
|
|
523
|
-
statement.append(SQL ` AND
|
|
524
|
-
value:
|
|
600
|
+
statement.append(SQL ` FROM ${databaseName}.MetricItemAggMV1mByHostV2`);
|
|
601
|
+
statement.append(` WHERE bucketTime >= toDateTime('${this.formatDateTime(aggregateBy.startTimestamp)}') AND bucketTime <= toDateTime('${this.formatDateTime(aggregateBy.endTimestamp)}')${this.getRetentionReadFilter()}`);
|
|
602
|
+
statement.append(SQL ` AND hostEntityKey = ${{
|
|
603
|
+
value: hostEntityKey,
|
|
525
604
|
type: TableColumnType.Text,
|
|
526
605
|
}}`);
|
|
527
606
|
statement.append(SQL ` `).append(nonTimeWhere);
|
|
@@ -535,7 +614,13 @@ export class MetricService extends AnalyticsDatabaseService {
|
|
|
535
614
|
value: Number(aggregateBy.skip),
|
|
536
615
|
type: TableColumnType.Number,
|
|
537
616
|
}} `);
|
|
538
|
-
statement.append(
|
|
617
|
+
statement.append(getQuerySettings({
|
|
618
|
+
additionalSettings: {
|
|
619
|
+
optimize_aggregation_in_order: 1,
|
|
620
|
+
optimize_move_to_prewhere: 1,
|
|
621
|
+
max_threads: 4,
|
|
622
|
+
},
|
|
623
|
+
}));
|
|
539
624
|
logger.debug(`${this.model.tableName} Host MV Aggregate Statement`, {
|
|
540
625
|
tableName: this.model.tableName,
|
|
541
626
|
});
|