@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
|
@@ -14,32 +14,73 @@ import PprofEncoder from "../Utils/Profile/PprofEncoder";
|
|
|
14
14
|
import ProfileService from "../Services/ProfileService";
|
|
15
15
|
import ProfileSampleService from "../Services/ProfileSampleService";
|
|
16
16
|
import SortOrder from "../../Types/BaseDatabase/SortOrder";
|
|
17
|
+
import Permission from "../../Types/Permission";
|
|
17
18
|
import ObjectID from "../../Types/ObjectID";
|
|
18
19
|
import OneUptimeDate from "../../Types/Date";
|
|
19
20
|
import ResourceFacetResolver from "../Utils/Telemetry/ResourceFacetResolver";
|
|
20
21
|
const router = Express.getRouter();
|
|
21
|
-
|
|
22
|
+
const createTelemetryReadAccessGuard = (signalReadPermission) => {
|
|
23
|
+
return [
|
|
24
|
+
UserMiddleware.getUserMiddleware,
|
|
25
|
+
UserMiddleware.requireUserAuthentication,
|
|
26
|
+
UserMiddleware.requirePermission({
|
|
27
|
+
permissions: [
|
|
28
|
+
Permission.ProjectOwner,
|
|
29
|
+
Permission.ProjectAdmin,
|
|
30
|
+
Permission.ProjectMember,
|
|
31
|
+
Permission.Viewer,
|
|
32
|
+
Permission.TelemetryAdmin,
|
|
33
|
+
Permission.TelemetryMember,
|
|
34
|
+
Permission.TelemetryViewer,
|
|
35
|
+
signalReadPermission,
|
|
36
|
+
],
|
|
37
|
+
}),
|
|
38
|
+
];
|
|
39
|
+
};
|
|
40
|
+
// Mirrors the read access control declared on the Log analytics model.
|
|
41
|
+
const requireLogReadAccess = createTelemetryReadAccessGuard(Permission.ReadTelemetryServiceLog);
|
|
42
|
+
// Mirrors the read access control declared on the Span analytics model.
|
|
43
|
+
const requireTraceReadAccess = createTelemetryReadAccessGuard(Permission.ReadTelemetryServiceTraces);
|
|
44
|
+
/*
|
|
45
|
+
* Mirrors the read access control declared on the Metric analytics model,
|
|
46
|
+
* whose table-level read list grants ReadTelemetryServiceTraces rather than
|
|
47
|
+
* ReadTelemetryServiceMetrics. The guard follows the model declaration so
|
|
48
|
+
* these routes stay in lockstep with the model-backed CRUD API; if the model
|
|
49
|
+
* ever switches to ReadTelemetryServiceMetrics this must change with it.
|
|
50
|
+
*/
|
|
51
|
+
const requireMetricReadAccess = createTelemetryReadAccessGuard(Permission.ReadTelemetryServiceTraces);
|
|
52
|
+
/*
|
|
53
|
+
* Mirrors the read access control declared on the ExceptionInstance
|
|
54
|
+
* analytics model.
|
|
55
|
+
*/
|
|
56
|
+
const requireExceptionReadAccess = createTelemetryReadAccessGuard(Permission.ReadTelemetryException);
|
|
57
|
+
/*
|
|
58
|
+
* Mirrors the read access control declared on the Profile / ProfileSample
|
|
59
|
+
* analytics models.
|
|
60
|
+
*/
|
|
61
|
+
const requireProfileReadAccess = createTelemetryReadAccessGuard(Permission.ReadTelemetryServiceProfiles);
|
|
62
|
+
router.post("/telemetry/metrics/get-attributes", ...requireMetricReadAccess, async (req, res, next) => {
|
|
22
63
|
return getAttributes(req, res, next, TelemetryType.Metric);
|
|
23
64
|
});
|
|
24
|
-
router.post("/telemetry/metrics/get-attribute-values",
|
|
65
|
+
router.post("/telemetry/metrics/get-attribute-values", ...requireMetricReadAccess, async (req, res, next) => {
|
|
25
66
|
return getAttributeValues(req, res, next, TelemetryType.Metric);
|
|
26
67
|
});
|
|
27
|
-
router.post("/telemetry/logs/get-attributes",
|
|
68
|
+
router.post("/telemetry/logs/get-attributes", ...requireLogReadAccess, async (req, res, next) => {
|
|
28
69
|
return getAttributes(req, res, next, TelemetryType.Log);
|
|
29
70
|
});
|
|
30
|
-
router.post("/telemetry/logs/get-attribute-values",
|
|
71
|
+
router.post("/telemetry/logs/get-attribute-values", ...requireLogReadAccess, async (req, res, next) => {
|
|
31
72
|
return getAttributeValues(req, res, next, TelemetryType.Log);
|
|
32
73
|
});
|
|
33
|
-
router.post("/telemetry/traces/get-attributes",
|
|
74
|
+
router.post("/telemetry/traces/get-attributes", ...requireTraceReadAccess, async (req, res, next) => {
|
|
34
75
|
return getAttributes(req, res, next, TelemetryType.Trace);
|
|
35
76
|
});
|
|
36
|
-
router.post("/telemetry/traces/get-attribute-values",
|
|
77
|
+
router.post("/telemetry/traces/get-attribute-values", ...requireTraceReadAccess, async (req, res, next) => {
|
|
37
78
|
return getAttributeValues(req, res, next, TelemetryType.Trace);
|
|
38
79
|
});
|
|
39
|
-
router.post("/telemetry/exceptions/get-attributes",
|
|
80
|
+
router.post("/telemetry/exceptions/get-attributes", ...requireExceptionReadAccess, async (req, res, next) => {
|
|
40
81
|
return getAttributes(req, res, next, TelemetryType.Exception);
|
|
41
82
|
});
|
|
42
|
-
router.post("/telemetry/exceptions/get-attribute-values",
|
|
83
|
+
router.post("/telemetry/exceptions/get-attribute-values", ...requireExceptionReadAccess, async (req, res, next) => {
|
|
43
84
|
return getAttributeValues(req, res, next, TelemetryType.Exception);
|
|
44
85
|
});
|
|
45
86
|
const getAttributes = async (req, res, next, telemetryType) => {
|
|
@@ -104,7 +145,7 @@ const getAttributeValues = async (req, res, next, telemetryType) => {
|
|
|
104
145
|
}
|
|
105
146
|
};
|
|
106
147
|
// --- Log Histogram Endpoint ---
|
|
107
|
-
router.post("/telemetry/logs/histogram",
|
|
148
|
+
router.post("/telemetry/logs/histogram", ...requireLogReadAccess, async (req, res, next) => {
|
|
108
149
|
try {
|
|
109
150
|
const databaseProps = await CommonAPI.getDatabaseCommonInteractionProps(req);
|
|
110
151
|
if (!(databaseProps === null || databaseProps === void 0 ? void 0 : databaseProps.tenantId)) {
|
|
@@ -124,6 +165,9 @@ router.post("/telemetry/logs/histogram", UserMiddleware.getUserMiddleware, async
|
|
|
124
165
|
return new ObjectID(id);
|
|
125
166
|
})
|
|
126
167
|
: undefined;
|
|
168
|
+
const entityKeys = body["entityKeys"]
|
|
169
|
+
? body["entityKeys"]
|
|
170
|
+
: undefined;
|
|
127
171
|
const severityTexts = body["severityTexts"]
|
|
128
172
|
? body["severityTexts"]
|
|
129
173
|
: undefined;
|
|
@@ -145,6 +189,7 @@ router.post("/telemetry/logs/histogram", UserMiddleware.getUserMiddleware, async
|
|
|
145
189
|
endTime,
|
|
146
190
|
bucketSizeInMinutes,
|
|
147
191
|
serviceIds,
|
|
192
|
+
entityKeys,
|
|
148
193
|
severityTexts,
|
|
149
194
|
bodySearchText,
|
|
150
195
|
traceIds,
|
|
@@ -161,7 +206,7 @@ router.post("/telemetry/logs/histogram", UserMiddleware.getUserMiddleware, async
|
|
|
161
206
|
}
|
|
162
207
|
});
|
|
163
208
|
// --- Log Facets Endpoint ---
|
|
164
|
-
router.post("/telemetry/logs/facets",
|
|
209
|
+
router.post("/telemetry/logs/facets", ...requireLogReadAccess, async (req, res, next) => {
|
|
165
210
|
try {
|
|
166
211
|
const databaseProps = await CommonAPI.getDatabaseCommonInteractionProps(req);
|
|
167
212
|
if (!(databaseProps === null || databaseProps === void 0 ? void 0 : databaseProps.tenantId)) {
|
|
@@ -170,7 +215,7 @@ router.post("/telemetry/logs/facets", UserMiddleware.getUserMiddleware, async (r
|
|
|
170
215
|
const body = req.body;
|
|
171
216
|
const facetKeys = body["facetKeys"]
|
|
172
217
|
? body["facetKeys"]
|
|
173
|
-
: ["severityText", "
|
|
218
|
+
: ["severityText", "primaryEntityId"];
|
|
174
219
|
const startTime = body["startTime"]
|
|
175
220
|
? OneUptimeDate.fromString(body["startTime"])
|
|
176
221
|
: OneUptimeDate.addRemoveHours(OneUptimeDate.getCurrentDate(), -1);
|
|
@@ -183,6 +228,9 @@ router.post("/telemetry/logs/facets", UserMiddleware.getUserMiddleware, async (r
|
|
|
183
228
|
return new ObjectID(id);
|
|
184
229
|
})
|
|
185
230
|
: undefined;
|
|
231
|
+
const entityKeys = body["entityKeys"]
|
|
232
|
+
? body["entityKeys"]
|
|
233
|
+
: undefined;
|
|
186
234
|
const severityTexts = body["severityTexts"]
|
|
187
235
|
? body["severityTexts"]
|
|
188
236
|
: undefined;
|
|
@@ -200,9 +248,9 @@ router.post("/telemetry/logs/facets", UserMiddleware.getUserMiddleware, async (r
|
|
|
200
248
|
: undefined;
|
|
201
249
|
/*
|
|
202
250
|
* Per-facet partial-match filter applied at the Postgres source-of-truth
|
|
203
|
-
* lookup stage. Only consulted for resource facets (
|
|
204
|
-
* dockerHostId / kubernetesClusterId) — other facets continue
|
|
205
|
-
* client-side over the loaded value list.
|
|
251
|
+
* lookup stage. Only consulted for resource facets (primaryEntityId /
|
|
252
|
+
* hostId / dockerHostId / kubernetesClusterId) — other facets continue
|
|
253
|
+
* to filter client-side over the loaded value list.
|
|
206
254
|
*/
|
|
207
255
|
const facetSearchText = body["facetSearchText"]
|
|
208
256
|
? body["facetSearchText"]
|
|
@@ -225,6 +273,7 @@ router.post("/telemetry/logs/facets", UserMiddleware.getUserMiddleware, async (r
|
|
|
225
273
|
facetKey,
|
|
226
274
|
limit,
|
|
227
275
|
serviceIds,
|
|
276
|
+
entityKeys,
|
|
228
277
|
severityTexts,
|
|
229
278
|
bodySearchText,
|
|
230
279
|
traceIds,
|
|
@@ -276,8 +325,103 @@ router.post("/telemetry/logs/facets", UserMiddleware.getUserMiddleware, async (r
|
|
|
276
325
|
next(err);
|
|
277
326
|
}
|
|
278
327
|
});
|
|
328
|
+
/*
|
|
329
|
+
* Shared body parsing for every trace aggregation endpoint (histogram,
|
|
330
|
+
* facets, analytics). Defensive about shapes: arrays are validated and
|
|
331
|
+
* filtered to strings, booleans/numbers use strict typeof checks (JSON null
|
|
332
|
+
* or a stringly-typed value must mean "no filter", never an active
|
|
333
|
+
* predicate).
|
|
334
|
+
*/
|
|
335
|
+
function parseTraceFilterBody(body) {
|
|
336
|
+
var _a;
|
|
337
|
+
const serviceIds = Array.isArray(body["serviceIds"])
|
|
338
|
+
? body["serviceIds"]
|
|
339
|
+
.filter((v) => {
|
|
340
|
+
return typeof v === "string";
|
|
341
|
+
})
|
|
342
|
+
.map((id) => {
|
|
343
|
+
return new ObjectID(id);
|
|
344
|
+
})
|
|
345
|
+
: undefined;
|
|
346
|
+
const stringArray = (key) => {
|
|
347
|
+
return Array.isArray(body[key])
|
|
348
|
+
? body[key].filter((v) => {
|
|
349
|
+
return typeof v === "string";
|
|
350
|
+
})
|
|
351
|
+
: undefined;
|
|
352
|
+
};
|
|
353
|
+
/*
|
|
354
|
+
* Numeric strings are coerced (stringly-typed clients worked before the
|
|
355
|
+
* parsing was centralized) — dropping them would silently widen the
|
|
356
|
+
* filter to all statuses.
|
|
357
|
+
*/
|
|
358
|
+
const statusCodes = Array.isArray(body["statusCodes"])
|
|
359
|
+
? body["statusCodes"]
|
|
360
|
+
.map((v) => {
|
|
361
|
+
return typeof v === "number" ? v : Number(v);
|
|
362
|
+
})
|
|
363
|
+
.filter((v) => {
|
|
364
|
+
return Number.isFinite(v);
|
|
365
|
+
})
|
|
366
|
+
: undefined;
|
|
367
|
+
const stringRecord = (key) => {
|
|
368
|
+
const raw = body[key];
|
|
369
|
+
if (!raw || typeof raw !== "object" || Array.isArray(raw)) {
|
|
370
|
+
return undefined;
|
|
371
|
+
}
|
|
372
|
+
const entries = Object.entries(raw).filter((entry) => {
|
|
373
|
+
return typeof entry[1] === "string";
|
|
374
|
+
});
|
|
375
|
+
if (entries.length === 0) {
|
|
376
|
+
return undefined;
|
|
377
|
+
}
|
|
378
|
+
return Object.fromEntries(entries);
|
|
379
|
+
};
|
|
380
|
+
return {
|
|
381
|
+
serviceIds,
|
|
382
|
+
entityKeys: stringArray("entityKeys"),
|
|
383
|
+
statusCodes,
|
|
384
|
+
spanKinds: stringArray("spanKinds"),
|
|
385
|
+
spanNames: stringArray("spanNames"),
|
|
386
|
+
/*
|
|
387
|
+
* spanNameSearches is the only multiplicative filter (one ILIKE
|
|
388
|
+
* predicate per entry) — cap it. The dashboard sends at most one.
|
|
389
|
+
*/
|
|
390
|
+
spanNameSearches: (_a = stringArray("spanNameSearches")) === null || _a === void 0 ? void 0 : _a.slice(0, 10),
|
|
391
|
+
spanIds: stringArray("spanIds"),
|
|
392
|
+
traceIds: stringArray("traceIds"),
|
|
393
|
+
nameSearchText: typeof body["nameSearchText"] === "string" && body["nameSearchText"]
|
|
394
|
+
? body["nameSearchText"]
|
|
395
|
+
: undefined,
|
|
396
|
+
statusMessageSearchText: typeof body["statusMessageSearchText"] === "string" &&
|
|
397
|
+
body["statusMessageSearchText"]
|
|
398
|
+
? body["statusMessageSearchText"]
|
|
399
|
+
: undefined,
|
|
400
|
+
statusMessages: stringArray("statusMessages"),
|
|
401
|
+
/*
|
|
402
|
+
* Strict boolean check — unlike rootOnly, a coerced `false` is a
|
|
403
|
+
* meaningful predicate here (JSON null must mean "no filter", not
|
|
404
|
+
* "exclude exception spans").
|
|
405
|
+
*/
|
|
406
|
+
hasException: typeof body["hasException"] === "boolean"
|
|
407
|
+
? body["hasException"]
|
|
408
|
+
: undefined,
|
|
409
|
+
minDurationNano: typeof body["minDurationNano"] === "number"
|
|
410
|
+
? body["minDurationNano"]
|
|
411
|
+
: undefined,
|
|
412
|
+
maxDurationNano: typeof body["maxDurationNano"] === "number"
|
|
413
|
+
? body["maxDurationNano"]
|
|
414
|
+
: undefined,
|
|
415
|
+
exactDurationNano: typeof body["exactDurationNano"] === "number"
|
|
416
|
+
? body["exactDurationNano"]
|
|
417
|
+
: undefined,
|
|
418
|
+
rootOnly: body["rootOnly"] === undefined ? undefined : Boolean(body["rootOnly"]),
|
|
419
|
+
attributes: stringRecord("attributes"),
|
|
420
|
+
attributeSearches: stringRecord("attributeSearches"),
|
|
421
|
+
};
|
|
422
|
+
}
|
|
279
423
|
// --- Trace Histogram Endpoint ---
|
|
280
|
-
router.post("/telemetry/traces/histogram",
|
|
424
|
+
router.post("/telemetry/traces/histogram", ...requireTraceReadAccess, async (req, res, next) => {
|
|
281
425
|
try {
|
|
282
426
|
const databaseProps = await CommonAPI.getDatabaseCommonInteractionProps(req);
|
|
283
427
|
if (!(databaseProps === null || databaseProps === void 0 ? void 0 : databaseProps.tenantId)) {
|
|
@@ -292,44 +436,10 @@ router.post("/telemetry/traces/histogram", UserMiddleware.getUserMiddleware, asy
|
|
|
292
436
|
: OneUptimeDate.getCurrentDate();
|
|
293
437
|
const bucketSizeInMinutes = body["bucketSizeInMinutes"] ||
|
|
294
438
|
computeDefaultBucketSize(startTime, endTime);
|
|
295
|
-
const
|
|
296
|
-
|
|
297
|
-
return new ObjectID(id);
|
|
298
|
-
})
|
|
299
|
-
: undefined;
|
|
300
|
-
const statusCodes = body["statusCodes"]
|
|
301
|
-
? body["statusCodes"]
|
|
302
|
-
: undefined;
|
|
303
|
-
const spanKinds = body["spanKinds"]
|
|
304
|
-
? body["spanKinds"]
|
|
305
|
-
: undefined;
|
|
306
|
-
const spanNames = body["spanNames"]
|
|
307
|
-
? body["spanNames"]
|
|
308
|
-
: undefined;
|
|
309
|
-
const traceIds = body["traceIds"]
|
|
310
|
-
? body["traceIds"]
|
|
311
|
-
: undefined;
|
|
312
|
-
const nameSearchText = body["nameSearchText"]
|
|
313
|
-
? body["nameSearchText"]
|
|
314
|
-
: undefined;
|
|
315
|
-
const rootOnly = body["rootOnly"] === undefined ? undefined : Boolean(body["rootOnly"]);
|
|
316
|
-
const attributes = body["attributes"]
|
|
317
|
-
? body["attributes"]
|
|
318
|
-
: undefined;
|
|
319
|
-
const request = {
|
|
320
|
-
projectId: databaseProps.tenantId,
|
|
321
|
-
startTime,
|
|
439
|
+
const traceFilters = parseTraceFilterBody(body);
|
|
440
|
+
const request = Object.assign({ projectId: databaseProps.tenantId, startTime,
|
|
322
441
|
endTime,
|
|
323
|
-
bucketSizeInMinutes,
|
|
324
|
-
serviceIds,
|
|
325
|
-
statusCodes,
|
|
326
|
-
spanKinds,
|
|
327
|
-
spanNames,
|
|
328
|
-
traceIds,
|
|
329
|
-
nameSearchText,
|
|
330
|
-
rootOnly,
|
|
331
|
-
attributes,
|
|
332
|
-
};
|
|
442
|
+
bucketSizeInMinutes }, traceFilters);
|
|
333
443
|
const buckets = await TraceAggregationService.getHistogram(request);
|
|
334
444
|
return Response.sendJsonObjectResponse(req, res, {
|
|
335
445
|
buckets: buckets,
|
|
@@ -340,7 +450,7 @@ router.post("/telemetry/traces/histogram", UserMiddleware.getUserMiddleware, asy
|
|
|
340
450
|
}
|
|
341
451
|
});
|
|
342
452
|
// --- Trace Facets Endpoint ---
|
|
343
|
-
router.post("/telemetry/traces/facets",
|
|
453
|
+
router.post("/telemetry/traces/facets", ...requireTraceReadAccess, async (req, res, next) => {
|
|
344
454
|
try {
|
|
345
455
|
const databaseProps = await CommonAPI.getDatabaseCommonInteractionProps(req);
|
|
346
456
|
if (!(databaseProps === null || databaseProps === void 0 ? void 0 : databaseProps.tenantId)) {
|
|
@@ -349,7 +459,7 @@ router.post("/telemetry/traces/facets", UserMiddleware.getUserMiddleware, async
|
|
|
349
459
|
const body = req.body;
|
|
350
460
|
const facetKeys = body["facetKeys"]
|
|
351
461
|
? body["facetKeys"]
|
|
352
|
-
: ["
|
|
462
|
+
: ["primaryEntityId", "statusCode", "kind", "name"];
|
|
353
463
|
const startTime = body["startTime"]
|
|
354
464
|
? OneUptimeDate.fromString(body["startTime"])
|
|
355
465
|
: OneUptimeDate.addRemoveHours(OneUptimeDate.getCurrentDate(), -1);
|
|
@@ -357,35 +467,12 @@ router.post("/telemetry/traces/facets", UserMiddleware.getUserMiddleware, async
|
|
|
357
467
|
? OneUptimeDate.fromString(body["endTime"])
|
|
358
468
|
: OneUptimeDate.getCurrentDate();
|
|
359
469
|
const limit = body["limit"] || 500;
|
|
360
|
-
const
|
|
361
|
-
? body["serviceIds"].map((id) => {
|
|
362
|
-
return new ObjectID(id);
|
|
363
|
-
})
|
|
364
|
-
: undefined;
|
|
365
|
-
const statusCodes = body["statusCodes"]
|
|
366
|
-
? body["statusCodes"]
|
|
367
|
-
: undefined;
|
|
368
|
-
const spanKinds = body["spanKinds"]
|
|
369
|
-
? body["spanKinds"]
|
|
370
|
-
: undefined;
|
|
371
|
-
const spanNames = body["spanNames"]
|
|
372
|
-
? body["spanNames"]
|
|
373
|
-
: undefined;
|
|
374
|
-
const traceIds = body["traceIds"]
|
|
375
|
-
? body["traceIds"]
|
|
376
|
-
: undefined;
|
|
377
|
-
const nameSearchText = body["nameSearchText"]
|
|
378
|
-
? body["nameSearchText"]
|
|
379
|
-
: undefined;
|
|
380
|
-
const rootOnly = body["rootOnly"] === undefined ? undefined : Boolean(body["rootOnly"]);
|
|
381
|
-
const attributes = body["attributes"]
|
|
382
|
-
? body["attributes"]
|
|
383
|
-
: undefined;
|
|
470
|
+
const traceFilters = parseTraceFilterBody(body);
|
|
384
471
|
/*
|
|
385
472
|
* Per-facet partial-match filter applied at the Postgres source-of-truth
|
|
386
|
-
* lookup stage. Only consulted for resource facets (
|
|
387
|
-
* dockerHostId / kubernetesClusterId) — other facets continue
|
|
388
|
-
* client-side over the loaded value list.
|
|
473
|
+
* lookup stage. Only consulted for resource facets (primaryEntityId /
|
|
474
|
+
* hostId / dockerHostId / kubernetesClusterId) — other facets continue
|
|
475
|
+
* to filter client-side over the loaded value list.
|
|
389
476
|
*/
|
|
390
477
|
const facetSearchText = body["facetSearchText"]
|
|
391
478
|
? body["facetSearchText"]
|
|
@@ -396,24 +483,14 @@ router.post("/telemetry/traces/facets", UserMiddleware.getUserMiddleware, async
|
|
|
396
483
|
* and the recent-N sample (kind + attribute facets, which have no cheap
|
|
397
484
|
* exact path).
|
|
398
485
|
*/
|
|
399
|
-
const multiRequest = {
|
|
400
|
-
projectId: databaseProps.tenantId,
|
|
401
|
-
startTime,
|
|
486
|
+
const multiRequest = Object.assign({ projectId: databaseProps.tenantId, startTime,
|
|
402
487
|
endTime,
|
|
403
488
|
facetKeys,
|
|
404
|
-
limit,
|
|
405
|
-
serviceIds,
|
|
406
|
-
statusCodes,
|
|
407
|
-
spanKinds,
|
|
408
|
-
spanNames,
|
|
409
|
-
traceIds,
|
|
410
|
-
nameSearchText,
|
|
411
|
-
rootOnly,
|
|
412
|
-
attributes,
|
|
413
|
-
};
|
|
489
|
+
limit }, traceFilters);
|
|
414
490
|
/*
|
|
415
|
-
* Resource facets (
|
|
416
|
-
* and statusCode are counted with an exact,
|
|
491
|
+
* Resource facets (primaryEntityId / hostId / dockerHostId / k8s
|
|
492
|
+
* cluster ...) and statusCode are counted with an exact,
|
|
493
|
+
* projection-backed GROUP BY
|
|
417
494
|
* in getResourceFacetCounts(). The recent-N sample below saturates with
|
|
418
495
|
* whichever service is chattiest right now and reports 0 for every other
|
|
419
496
|
* service regardless of its true volume over the window — the "top 1000"
|
|
@@ -466,8 +543,8 @@ router.post("/telemetry/traces/facets", UserMiddleware.getUserMiddleware, async
|
|
|
466
543
|
/*
|
|
467
544
|
* Replace resource-facet results with the Postgres source-of-truth list
|
|
468
545
|
* (filtered by facetSearchText and enriched with displayName). Every
|
|
469
|
-
* resource facet shares the same exact
|
|
470
|
-
* ids are globally unique, so each facet only ever resolves its own
|
|
546
|
+
* resource facet shares the same exact primaryEntityId -> count map;
|
|
547
|
+
* resource ids are globally unique, so each facet only ever resolves its own
|
|
471
548
|
* entities. Entities with no telemetry in the window surface with count
|
|
472
549
|
* 0 instead of being hidden, and the search box can find resources
|
|
473
550
|
* beyond the loaded subset.
|
|
@@ -498,8 +575,79 @@ router.post("/telemetry/traces/facets", UserMiddleware.getUserMiddleware, async
|
|
|
498
575
|
next(err);
|
|
499
576
|
}
|
|
500
577
|
});
|
|
578
|
+
// --- Trace Analytics Endpoint ---
|
|
579
|
+
router.post("/telemetry/traces/analytics", ...requireTraceReadAccess, async (req, res, next) => {
|
|
580
|
+
try {
|
|
581
|
+
const databaseProps = await CommonAPI.getDatabaseCommonInteractionProps(req);
|
|
582
|
+
if (!(databaseProps === null || databaseProps === void 0 ? void 0 : databaseProps.tenantId)) {
|
|
583
|
+
return Response.sendErrorResponse(req, res, new BadDataException("Invalid Project ID"));
|
|
584
|
+
}
|
|
585
|
+
const body = req.body;
|
|
586
|
+
const chartType = body["chartType"] || "timeseries";
|
|
587
|
+
if (!["timeseries", "toplist", "table"].includes(chartType)) {
|
|
588
|
+
return Response.sendErrorResponse(req, res, new BadDataException("Invalid chartType"));
|
|
589
|
+
}
|
|
590
|
+
const metric = body["metric"] || "count";
|
|
591
|
+
if (!TraceAggregationService.isValidAnalyticsMetric(metric)) {
|
|
592
|
+
return Response.sendErrorResponse(req, res, new BadDataException("Invalid metric"));
|
|
593
|
+
}
|
|
594
|
+
const startTime = body["startTime"]
|
|
595
|
+
? OneUptimeDate.fromString(body["startTime"])
|
|
596
|
+
: OneUptimeDate.addRemoveHours(OneUptimeDate.getCurrentDate(), -1);
|
|
597
|
+
const endTime = body["endTime"]
|
|
598
|
+
? OneUptimeDate.fromString(body["endTime"])
|
|
599
|
+
: OneUptimeDate.getCurrentDate();
|
|
600
|
+
const rawBucketSize = Number(body["bucketSizeInMinutes"]);
|
|
601
|
+
const bucketSizeInMinutes = Number.isFinite(rawBucketSize) && rawBucketSize >= 1
|
|
602
|
+
? Math.trunc(rawBucketSize)
|
|
603
|
+
: computeDefaultBucketSize(startTime, endTime);
|
|
604
|
+
const groupBy = Array.isArray(body["groupBy"])
|
|
605
|
+
? body["groupBy"].filter((v) => {
|
|
606
|
+
return typeof v === "string" && v.length > 0;
|
|
607
|
+
})
|
|
608
|
+
: undefined;
|
|
609
|
+
/*
|
|
610
|
+
* Clamp to a sane integer range — `limit` flows into LIMIT and the
|
|
611
|
+
* timeseries series cap, so negative/fractional values would 500 in
|
|
612
|
+
* ClickHouse and huge values would explode the result set. Numeric
|
|
613
|
+
* strings are accepted (dashboard widget arguments are stored as
|
|
614
|
+
* strings).
|
|
615
|
+
*/
|
|
616
|
+
const rawLimit = Number(body["limit"]);
|
|
617
|
+
const limit = Number.isFinite(rawLimit)
|
|
618
|
+
? Math.min(Math.max(Math.trunc(rawLimit), 1), 1000)
|
|
619
|
+
: undefined;
|
|
620
|
+
const traceFilters = parseTraceFilterBody(body);
|
|
621
|
+
const request = Object.assign({ projectId: databaseProps.tenantId, startTime,
|
|
622
|
+
endTime,
|
|
623
|
+
bucketSizeInMinutes,
|
|
624
|
+
chartType,
|
|
625
|
+
metric,
|
|
626
|
+
groupBy,
|
|
627
|
+
limit }, traceFilters);
|
|
628
|
+
if (chartType === "timeseries") {
|
|
629
|
+
const data = await TraceAggregationService.getAnalyticsTimeseries(request);
|
|
630
|
+
return Response.sendJsonObjectResponse(req, res, {
|
|
631
|
+
data: data,
|
|
632
|
+
});
|
|
633
|
+
}
|
|
634
|
+
if (chartType === "toplist") {
|
|
635
|
+
const data = await TraceAggregationService.getAnalyticsTopList(request);
|
|
636
|
+
return Response.sendJsonObjectResponse(req, res, {
|
|
637
|
+
data: data,
|
|
638
|
+
});
|
|
639
|
+
}
|
|
640
|
+
const data = await TraceAggregationService.getAnalyticsTable(request);
|
|
641
|
+
return Response.sendJsonObjectResponse(req, res, {
|
|
642
|
+
data: data,
|
|
643
|
+
});
|
|
644
|
+
}
|
|
645
|
+
catch (err) {
|
|
646
|
+
next(err);
|
|
647
|
+
}
|
|
648
|
+
});
|
|
501
649
|
// --- Exception Histogram Endpoint ---
|
|
502
|
-
router.post("/telemetry/exceptions/histogram",
|
|
650
|
+
router.post("/telemetry/exceptions/histogram", ...requireExceptionReadAccess, async (req, res, next) => {
|
|
503
651
|
try {
|
|
504
652
|
const databaseProps = await CommonAPI.getDatabaseCommonInteractionProps(req);
|
|
505
653
|
if (!(databaseProps === null || databaseProps === void 0 ? void 0 : databaseProps.tenantId)) {
|
|
@@ -558,7 +706,7 @@ router.post("/telemetry/exceptions/histogram", UserMiddleware.getUserMiddleware,
|
|
|
558
706
|
}
|
|
559
707
|
});
|
|
560
708
|
// --- Exception Facets Endpoint ---
|
|
561
|
-
router.post("/telemetry/exceptions/facets",
|
|
709
|
+
router.post("/telemetry/exceptions/facets", ...requireExceptionReadAccess, async (req, res, next) => {
|
|
562
710
|
try {
|
|
563
711
|
const databaseProps = await CommonAPI.getDatabaseCommonInteractionProps(req);
|
|
564
712
|
if (!(databaseProps === null || databaseProps === void 0 ? void 0 : databaseProps.tenantId)) {
|
|
@@ -568,7 +716,7 @@ router.post("/telemetry/exceptions/facets", UserMiddleware.getUserMiddleware, as
|
|
|
568
716
|
const facetKeys = body["facetKeys"]
|
|
569
717
|
? body["facetKeys"]
|
|
570
718
|
: [
|
|
571
|
-
"
|
|
719
|
+
"primaryEntityId",
|
|
572
720
|
"hostId",
|
|
573
721
|
"dockerHostId",
|
|
574
722
|
"kubernetesClusterId",
|
|
@@ -676,7 +824,7 @@ router.post("/telemetry/exceptions/facets", UserMiddleware.getUserMiddleware, as
|
|
|
676
824
|
}
|
|
677
825
|
});
|
|
678
826
|
// --- Metric Facets Endpoint ---
|
|
679
|
-
router.post("/telemetry/metrics/facets",
|
|
827
|
+
router.post("/telemetry/metrics/facets", ...requireMetricReadAccess, async (req, res, next) => {
|
|
680
828
|
try {
|
|
681
829
|
const databaseProps = await CommonAPI.getDatabaseCommonInteractionProps(req);
|
|
682
830
|
if (!(databaseProps === null || databaseProps === void 0 ? void 0 : databaseProps.tenantId)) {
|
|
@@ -685,7 +833,7 @@ router.post("/telemetry/metrics/facets", UserMiddleware.getUserMiddleware, async
|
|
|
685
833
|
const body = req.body;
|
|
686
834
|
const facetKeys = body["facetKeys"]
|
|
687
835
|
? body["facetKeys"]
|
|
688
|
-
: ["
|
|
836
|
+
: ["primaryEntityId", "hostId", "dockerHostId", "kubernetesClusterId"];
|
|
689
837
|
const startTime = body["startTime"]
|
|
690
838
|
? OneUptimeDate.fromString(body["startTime"])
|
|
691
839
|
: OneUptimeDate.addRemoveHours(OneUptimeDate.getCurrentDate(), -1);
|
|
@@ -764,7 +912,7 @@ router.post("/telemetry/metrics/facets", UserMiddleware.getUserMiddleware, async
|
|
|
764
912
|
}
|
|
765
913
|
});
|
|
766
914
|
// --- Log Analytics Endpoint ---
|
|
767
|
-
router.post("/telemetry/logs/analytics",
|
|
915
|
+
router.post("/telemetry/logs/analytics", ...requireLogReadAccess, async (req, res, next) => {
|
|
768
916
|
try {
|
|
769
917
|
const databaseProps = await CommonAPI.getDatabaseCommonInteractionProps(req);
|
|
770
918
|
if (!(databaseProps === null || databaseProps === void 0 ? void 0 : databaseProps.tenantId)) {
|
|
@@ -852,7 +1000,7 @@ router.post("/telemetry/logs/analytics", UserMiddleware.getUserMiddleware, async
|
|
|
852
1000
|
}
|
|
853
1001
|
});
|
|
854
1002
|
// --- Log Export Endpoint ---
|
|
855
|
-
router.post("/telemetry/logs/export",
|
|
1003
|
+
router.post("/telemetry/logs/export", ...requireLogReadAccess, async (req, res, next) => {
|
|
856
1004
|
try {
|
|
857
1005
|
const databaseProps = await CommonAPI.getDatabaseCommonInteractionProps(req);
|
|
858
1006
|
if (!(databaseProps === null || databaseProps === void 0 ? void 0 : databaseProps.tenantId)) {
|
|
@@ -896,7 +1044,7 @@ router.post("/telemetry/logs/export", UserMiddleware.getUserMiddleware, async (r
|
|
|
896
1044
|
spanIds,
|
|
897
1045
|
});
|
|
898
1046
|
if (format === "csv") {
|
|
899
|
-
const header = "time,
|
|
1047
|
+
const header = "time,primaryEntityId,severityText,severityNumber,body,traceId,spanId,attributes";
|
|
900
1048
|
const csvRows = rows.map((row) => {
|
|
901
1049
|
const escapeCsv = (val) => {
|
|
902
1050
|
const str = val === null || val === undefined ? "" : String(val);
|
|
@@ -907,7 +1055,7 @@ router.post("/telemetry/logs/export", UserMiddleware.getUserMiddleware, async (r
|
|
|
907
1055
|
};
|
|
908
1056
|
return [
|
|
909
1057
|
escapeCsv(row["time"]),
|
|
910
|
-
escapeCsv(row["
|
|
1058
|
+
escapeCsv(row["primaryEntityId"]),
|
|
911
1059
|
escapeCsv(row["severityText"]),
|
|
912
1060
|
escapeCsv(row["severityNumber"]),
|
|
913
1061
|
escapeCsv(row["body"]),
|
|
@@ -932,7 +1080,7 @@ router.post("/telemetry/logs/export", UserMiddleware.getUserMiddleware, async (r
|
|
|
932
1080
|
}
|
|
933
1081
|
});
|
|
934
1082
|
// --- Log Context Endpoint ---
|
|
935
|
-
router.post("/telemetry/logs/context",
|
|
1083
|
+
router.post("/telemetry/logs/context", ...requireLogReadAccess, async (req, res, next) => {
|
|
936
1084
|
try {
|
|
937
1085
|
const databaseProps = await CommonAPI.getDatabaseCommonInteractionProps(req);
|
|
938
1086
|
if (!(databaseProps === null || databaseProps === void 0 ? void 0 : databaseProps.tenantId)) {
|
|
@@ -940,15 +1088,17 @@ router.post("/telemetry/logs/context", UserMiddleware.getUserMiddleware, async (
|
|
|
940
1088
|
}
|
|
941
1089
|
const body = req.body;
|
|
942
1090
|
const logId = body["logId"];
|
|
943
|
-
|
|
1091
|
+
// `serviceId` is the pre-rename alias kept for stale clients.
|
|
1092
|
+
const primaryEntityId = (body["primaryEntityId"] ||
|
|
1093
|
+
body["serviceId"]);
|
|
944
1094
|
const time = body["time"];
|
|
945
|
-
if (!logId || !
|
|
946
|
-
return Response.sendErrorResponse(req, res, new BadDataException("logId,
|
|
1095
|
+
if (!logId || !primaryEntityId || !time) {
|
|
1096
|
+
return Response.sendErrorResponse(req, res, new BadDataException("logId, primaryEntityId, and time are required"));
|
|
947
1097
|
}
|
|
948
1098
|
const count = body["count"] || 5;
|
|
949
1099
|
const result = await LogAggregationService.getLogContext({
|
|
950
1100
|
projectId: databaseProps.tenantId,
|
|
951
|
-
|
|
1101
|
+
primaryEntityId: new ObjectID(primaryEntityId),
|
|
952
1102
|
time: OneUptimeDate.fromString(time),
|
|
953
1103
|
logId,
|
|
954
1104
|
count,
|
|
@@ -963,7 +1113,7 @@ router.post("/telemetry/logs/context", UserMiddleware.getUserMiddleware, async (
|
|
|
963
1113
|
}
|
|
964
1114
|
});
|
|
965
1115
|
// --- Drop Filter Estimate Endpoint ---
|
|
966
|
-
router.post("/telemetry/logs/drop-filter-estimate",
|
|
1116
|
+
router.post("/telemetry/logs/drop-filter-estimate", ...requireLogReadAccess, async (req, res, next) => {
|
|
967
1117
|
try {
|
|
968
1118
|
const databaseProps = await CommonAPI.getDatabaseCommonInteractionProps(req);
|
|
969
1119
|
if (!(databaseProps === null || databaseProps === void 0 ? void 0 : databaseProps.tenantId)) {
|
|
@@ -1028,11 +1178,11 @@ function computeDefaultBucketSize(startTime, endTime) {
|
|
|
1028
1178
|
return 1440;
|
|
1029
1179
|
}
|
|
1030
1180
|
// --- Profile Get Attributes Endpoint ---
|
|
1031
|
-
router.post("/telemetry/profiles/get-attributes",
|
|
1181
|
+
router.post("/telemetry/profiles/get-attributes", ...requireProfileReadAccess, async (req, res, next) => {
|
|
1032
1182
|
return getAttributes(req, res, next, TelemetryType.Profile);
|
|
1033
1183
|
});
|
|
1034
1184
|
// --- Profile Flamegraph Endpoint ---
|
|
1035
|
-
router.post("/telemetry/profiles/flamegraph",
|
|
1185
|
+
router.post("/telemetry/profiles/flamegraph", ...requireProfileReadAccess, async (req, res, next) => {
|
|
1036
1186
|
try {
|
|
1037
1187
|
const databaseProps = await CommonAPI.getDatabaseCommonInteractionProps(req);
|
|
1038
1188
|
if (!(databaseProps === null || databaseProps === void 0 ? void 0 : databaseProps.tenantId)) {
|
|
@@ -1066,9 +1216,10 @@ router.post("/telemetry/profiles/flamegraph", UserMiddleware.getUserMiddleware,
|
|
|
1066
1216
|
}
|
|
1067
1217
|
const request = Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({ projectId: databaseProps.tenantId }, (profileId !== undefined && { profileId })), (startTime !== undefined && { startTime })), (endTime !== undefined && { endTime })), (serviceIds !== undefined && { serviceIds })), (profileType !== undefined && { profileType })), (profileTypes !== undefined &&
|
|
1068
1218
|
profileTypes.length > 0 && { profileTypes }));
|
|
1069
|
-
const
|
|
1219
|
+
const result = await ProfileAggregationService.getFlamegraph(request);
|
|
1070
1220
|
return Response.sendJsonObjectResponse(req, res, {
|
|
1071
|
-
flamegraph: flamegraph,
|
|
1221
|
+
flamegraph: result.flamegraph,
|
|
1222
|
+
truncated: result.truncated,
|
|
1072
1223
|
});
|
|
1073
1224
|
}
|
|
1074
1225
|
catch (err) {
|
|
@@ -1076,19 +1227,35 @@ router.post("/telemetry/profiles/flamegraph", UserMiddleware.getUserMiddleware,
|
|
|
1076
1227
|
}
|
|
1077
1228
|
});
|
|
1078
1229
|
// --- Profile Function List Endpoint ---
|
|
1079
|
-
router.post("/telemetry/profiles/function-list",
|
|
1230
|
+
router.post("/telemetry/profiles/function-list", ...requireProfileReadAccess, async (req, res, next) => {
|
|
1080
1231
|
try {
|
|
1081
1232
|
const databaseProps = await CommonAPI.getDatabaseCommonInteractionProps(req);
|
|
1082
1233
|
if (!(databaseProps === null || databaseProps === void 0 ? void 0 : databaseProps.tenantId)) {
|
|
1083
1234
|
return Response.sendErrorResponse(req, res, new BadDataException("Invalid Project ID"));
|
|
1084
1235
|
}
|
|
1085
1236
|
const body = req.body;
|
|
1237
|
+
const profileId = body["profileId"]
|
|
1238
|
+
? body["profileId"]
|
|
1239
|
+
: undefined;
|
|
1240
|
+
/*
|
|
1241
|
+
* Only default the window when no profileId is given: a profile's
|
|
1242
|
+
* samples are bounded by the profile itself, and a defaulted
|
|
1243
|
+
* last-hour window would silently exclude any profile captured
|
|
1244
|
+
* before the window started.
|
|
1245
|
+
*/
|
|
1086
1246
|
const startTime = body["startTime"]
|
|
1087
1247
|
? OneUptimeDate.fromString(body["startTime"])
|
|
1088
|
-
:
|
|
1248
|
+
: profileId
|
|
1249
|
+
? undefined
|
|
1250
|
+
: OneUptimeDate.addRemoveHours(OneUptimeDate.getCurrentDate(), -1);
|
|
1089
1251
|
const endTime = body["endTime"]
|
|
1090
1252
|
? OneUptimeDate.fromString(body["endTime"])
|
|
1091
|
-
:
|
|
1253
|
+
: profileId
|
|
1254
|
+
? undefined
|
|
1255
|
+
: OneUptimeDate.getCurrentDate();
|
|
1256
|
+
if (!profileId && !startTime) {
|
|
1257
|
+
return Response.sendErrorResponse(req, res, new BadDataException("Either profileId or startTime must be provided"));
|
|
1258
|
+
}
|
|
1092
1259
|
const serviceIds = body["serviceIds"]
|
|
1093
1260
|
? body["serviceIds"].map((id) => {
|
|
1094
1261
|
return new ObjectID(id);
|
|
@@ -1108,12 +1275,13 @@ router.post("/telemetry/profiles/function-list", UserMiddleware.getUserMiddlewar
|
|
|
1108
1275
|
const sortBy = body["sortBy"]
|
|
1109
1276
|
? body["sortBy"]
|
|
1110
1277
|
: undefined;
|
|
1111
|
-
const request = Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({ projectId: databaseProps.tenantId, startTime,
|
|
1112
|
-
endTime }, (serviceIds !== undefined && { serviceIds })), (profileType !== undefined && { profileType })), (profileTypes !== undefined &&
|
|
1278
|
+
const request = Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({ projectId: databaseProps.tenantId }, (startTime !== undefined && { startTime })), (endTime !== undefined && { endTime })), (profileId !== undefined && { profileId })), (serviceIds !== undefined && { serviceIds })), (profileType !== undefined && { profileType })), (profileTypes !== undefined &&
|
|
1113
1279
|
profileTypes.length > 0 && { profileTypes })), (limit !== undefined && { limit })), (sortBy !== undefined && { sortBy }));
|
|
1114
|
-
const
|
|
1280
|
+
const result = await ProfileAggregationService.getFunctionList(request);
|
|
1115
1281
|
return Response.sendJsonObjectResponse(req, res, {
|
|
1116
|
-
functions: functions,
|
|
1282
|
+
functions: result.functions,
|
|
1283
|
+
windowTotal: result.windowTotal,
|
|
1284
|
+
truncated: result.truncated,
|
|
1117
1285
|
});
|
|
1118
1286
|
}
|
|
1119
1287
|
catch (err) {
|
|
@@ -1121,7 +1289,7 @@ router.post("/telemetry/profiles/function-list", UserMiddleware.getUserMiddlewar
|
|
|
1121
1289
|
}
|
|
1122
1290
|
});
|
|
1123
1291
|
// --- Profile Service Activity Endpoint ---
|
|
1124
|
-
router.post("/telemetry/profiles/service-activity",
|
|
1292
|
+
router.post("/telemetry/profiles/service-activity", ...requireProfileReadAccess, async (req, res, next) => {
|
|
1125
1293
|
try {
|
|
1126
1294
|
const databaseProps = await CommonAPI.getDatabaseCommonInteractionProps(req);
|
|
1127
1295
|
if (!(databaseProps === null || databaseProps === void 0 ? void 0 : databaseProps.tenantId)) {
|
|
@@ -1155,7 +1323,7 @@ router.post("/telemetry/profiles/service-activity", UserMiddleware.getUserMiddle
|
|
|
1155
1323
|
}
|
|
1156
1324
|
});
|
|
1157
1325
|
// --- Profile pprof Export Endpoint ---
|
|
1158
|
-
router.get("/telemetry/profiles/:profileId/pprof",
|
|
1326
|
+
router.get("/telemetry/profiles/:profileId/pprof", ...requireProfileReadAccess, async (req, res, next) => {
|
|
1159
1327
|
try {
|
|
1160
1328
|
const databaseProps = await CommonAPI.getDatabaseCommonInteractionProps(req);
|
|
1161
1329
|
if (!(databaseProps === null || databaseProps === void 0 ? void 0 : databaseProps.tenantId)) {
|
|
@@ -1244,7 +1412,7 @@ router.get("/telemetry/profiles/:profileId/pprof", UserMiddleware.getUserMiddlew
|
|
|
1244
1412
|
}
|
|
1245
1413
|
});
|
|
1246
1414
|
// --- Profile Diff Flamegraph Endpoint ---
|
|
1247
|
-
router.post("/telemetry/profiles/diff-flamegraph",
|
|
1415
|
+
router.post("/telemetry/profiles/diff-flamegraph", ...requireProfileReadAccess, async (req, res, next) => {
|
|
1248
1416
|
try {
|
|
1249
1417
|
const databaseProps = await CommonAPI.getDatabaseCommonInteractionProps(req);
|
|
1250
1418
|
if (!(databaseProps === null || databaseProps === void 0 ? void 0 : databaseProps.tenantId)) {
|
|
@@ -1287,9 +1455,137 @@ router.post("/telemetry/profiles/diff-flamegraph", UserMiddleware.getUserMiddlew
|
|
|
1287
1455
|
comparisonStartTime,
|
|
1288
1456
|
comparisonEndTime }, (serviceIds !== undefined && { serviceIds })), (profileType !== undefined && { profileType })), (profileTypes !== undefined &&
|
|
1289
1457
|
profileTypes.length > 0 && { profileTypes }));
|
|
1290
|
-
const
|
|
1458
|
+
const result = await ProfileAggregationService.getDiffFlamegraph(request);
|
|
1459
|
+
/*
|
|
1460
|
+
* `truncated` is surfaced so the UI can warn that the diff was built
|
|
1461
|
+
* from a capped sample set rather than the full window.
|
|
1462
|
+
*/
|
|
1463
|
+
return Response.sendJsonObjectResponse(req, res, {
|
|
1464
|
+
diffFlamegraph: result.diffFlamegraph,
|
|
1465
|
+
truncated: result.truncated,
|
|
1466
|
+
});
|
|
1467
|
+
}
|
|
1468
|
+
catch (err) {
|
|
1469
|
+
next(err);
|
|
1470
|
+
}
|
|
1471
|
+
});
|
|
1472
|
+
// --- Profile Function Focus Endpoint ---
|
|
1473
|
+
router.post("/telemetry/profiles/function-focus", ...requireProfileReadAccess, async (req, res, next) => {
|
|
1474
|
+
try {
|
|
1475
|
+
const databaseProps = await CommonAPI.getDatabaseCommonInteractionProps(req);
|
|
1476
|
+
if (!(databaseProps === null || databaseProps === void 0 ? void 0 : databaseProps.tenantId)) {
|
|
1477
|
+
return Response.sendErrorResponse(req, res, new BadDataException("Invalid Project ID"));
|
|
1478
|
+
}
|
|
1479
|
+
const body = req.body;
|
|
1480
|
+
const functionName = body["functionName"] && typeof body["functionName"] === "string"
|
|
1481
|
+
? body["functionName"]
|
|
1482
|
+
: undefined;
|
|
1483
|
+
if (!functionName) {
|
|
1484
|
+
return Response.sendErrorResponse(req, res, new BadDataException("functionName is required"));
|
|
1485
|
+
}
|
|
1486
|
+
/*
|
|
1487
|
+
* fileName participates in frame identity (frames match on
|
|
1488
|
+
* functionName + fileName; line numbers are ignored so identity
|
|
1489
|
+
* survives deploys) but may legitimately be empty: folded uploads
|
|
1490
|
+
* produce bare frames with no file information.
|
|
1491
|
+
*/
|
|
1492
|
+
const fileName = typeof body["fileName"] === "string"
|
|
1493
|
+
? body["fileName"]
|
|
1494
|
+
: "";
|
|
1495
|
+
const profileId = body["profileId"]
|
|
1496
|
+
? body["profileId"]
|
|
1497
|
+
: undefined;
|
|
1498
|
+
const startTime = body["startTime"]
|
|
1499
|
+
? OneUptimeDate.fromString(body["startTime"])
|
|
1500
|
+
: undefined;
|
|
1501
|
+
const endTime = body["endTime"]
|
|
1502
|
+
? OneUptimeDate.fromString(body["endTime"])
|
|
1503
|
+
: undefined;
|
|
1504
|
+
const serviceIds = body["serviceIds"]
|
|
1505
|
+
? body["serviceIds"].map((id) => {
|
|
1506
|
+
return new ObjectID(id);
|
|
1507
|
+
})
|
|
1508
|
+
: undefined;
|
|
1509
|
+
const profileType = body["profileType"]
|
|
1510
|
+
? body["profileType"]
|
|
1511
|
+
: undefined;
|
|
1512
|
+
const profileTypes = Array.isArray(body["profileTypes"])
|
|
1513
|
+
? body["profileTypes"].filter((t) => {
|
|
1514
|
+
return typeof t === "string" && t.length > 0;
|
|
1515
|
+
})
|
|
1516
|
+
: undefined;
|
|
1517
|
+
if (!profileId && !startTime) {
|
|
1518
|
+
return Response.sendErrorResponse(req, res, new BadDataException("Either profileId or startTime must be provided"));
|
|
1519
|
+
}
|
|
1520
|
+
const request = Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({ projectId: databaseProps.tenantId, functionName,
|
|
1521
|
+
fileName }, (profileId !== undefined && { profileId })), (startTime !== undefined && { startTime })), (endTime !== undefined && { endTime })), (serviceIds !== undefined && { serviceIds })), (profileType !== undefined && { profileType })), (profileTypes !== undefined &&
|
|
1522
|
+
profileTypes.length > 0 && { profileTypes }));
|
|
1523
|
+
const result = await ProfileAggregationService.getFunctionFocus(request);
|
|
1524
|
+
return Response.sendJsonObjectResponse(req, res, {
|
|
1525
|
+
functionName: result.functionName,
|
|
1526
|
+
fileName: result.fileName,
|
|
1527
|
+
totalValue: result.totalValue,
|
|
1528
|
+
selfValue: result.selfValue,
|
|
1529
|
+
sampleCount: result.sampleCount,
|
|
1530
|
+
windowTotal: result.windowTotal,
|
|
1531
|
+
callers: result.callers,
|
|
1532
|
+
callees: result.callees,
|
|
1533
|
+
truncated: result.truncated,
|
|
1534
|
+
});
|
|
1535
|
+
}
|
|
1536
|
+
catch (err) {
|
|
1537
|
+
next(err);
|
|
1538
|
+
}
|
|
1539
|
+
});
|
|
1540
|
+
// --- Profile Breakdown Endpoint ---
|
|
1541
|
+
router.post("/telemetry/profiles/breakdown", ...requireProfileReadAccess, async (req, res, next) => {
|
|
1542
|
+
try {
|
|
1543
|
+
const databaseProps = await CommonAPI.getDatabaseCommonInteractionProps(req);
|
|
1544
|
+
if (!(databaseProps === null || databaseProps === void 0 ? void 0 : databaseProps.tenantId)) {
|
|
1545
|
+
return Response.sendErrorResponse(req, res, new BadDataException("Invalid Project ID"));
|
|
1546
|
+
}
|
|
1547
|
+
const body = req.body;
|
|
1548
|
+
const startTime = body["startTime"]
|
|
1549
|
+
? OneUptimeDate.fromString(body["startTime"])
|
|
1550
|
+
: undefined;
|
|
1551
|
+
const endTime = body["endTime"]
|
|
1552
|
+
? OneUptimeDate.fromString(body["endTime"])
|
|
1553
|
+
: undefined;
|
|
1554
|
+
/*
|
|
1555
|
+
* breakdownBy is either the reserved key 'service' (grouping by
|
|
1556
|
+
* primaryEntityId, resolved to display names by the UI) or a Profile
|
|
1557
|
+
* attribute key.
|
|
1558
|
+
*/
|
|
1559
|
+
const breakdownBy = body["breakdownBy"] && typeof body["breakdownBy"] === "string"
|
|
1560
|
+
? body["breakdownBy"]
|
|
1561
|
+
: undefined;
|
|
1562
|
+
if (!startTime || !endTime || !breakdownBy) {
|
|
1563
|
+
return Response.sendErrorResponse(req, res, new BadDataException("startTime, endTime, and breakdownBy are all required"));
|
|
1564
|
+
}
|
|
1565
|
+
const serviceIds = body["serviceIds"]
|
|
1566
|
+
? body["serviceIds"].map((id) => {
|
|
1567
|
+
return new ObjectID(id);
|
|
1568
|
+
})
|
|
1569
|
+
: undefined;
|
|
1570
|
+
const profileType = body["profileType"]
|
|
1571
|
+
? body["profileType"]
|
|
1572
|
+
: undefined;
|
|
1573
|
+
const profileTypes = Array.isArray(body["profileTypes"])
|
|
1574
|
+
? body["profileTypes"].filter((t) => {
|
|
1575
|
+
return typeof t === "string" && t.length > 0;
|
|
1576
|
+
})
|
|
1577
|
+
: undefined;
|
|
1578
|
+
const limit = body["limit"]
|
|
1579
|
+
? body["limit"]
|
|
1580
|
+
: undefined;
|
|
1581
|
+
const request = Object.assign(Object.assign(Object.assign(Object.assign({ projectId: databaseProps.tenantId, startTime,
|
|
1582
|
+
endTime,
|
|
1583
|
+
breakdownBy }, (serviceIds !== undefined && { serviceIds })), (profileType !== undefined && { profileType })), (profileTypes !== undefined &&
|
|
1584
|
+
profileTypes.length > 0 && { profileTypes })), (limit !== undefined && { limit }));
|
|
1585
|
+
const result = await ProfileAggregationService.getBreakdown(request);
|
|
1291
1586
|
return Response.sendJsonObjectResponse(req, res, {
|
|
1292
|
-
|
|
1587
|
+
items: result.items,
|
|
1588
|
+
totalSampleCount: result.totalSampleCount,
|
|
1293
1589
|
});
|
|
1294
1590
|
}
|
|
1295
1591
|
catch (err) {
|