@oneuptime/common 10.8.2 → 11.0.1
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/ModelImportExport.test.ts +366 -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/ImportExport/ExportModelCard.tsx +90 -0
- package/UI/Components/ImportExport/ImportModelsModal.tsx +239 -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/ModelTable/ModelTable.tsx +294 -143
- 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/ModelImportExport.ts +207 -0
- 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/ModelImportExport.ts +369 -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/ImportExport/ExportModelCard.js +50 -0
- package/build/dist/UI/Components/ImportExport/ExportModelCard.js.map +1 -0
- package/build/dist/UI/Components/ImportExport/ImportModelsModal.js +115 -0
- package/build/dist/UI/Components/ImportExport/ImportModelsModal.js.map +1 -0
- 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/ModelTable/ModelTable.js +166 -74
- package/build/dist/UI/Components/ModelTable/ModelTable.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/ModelImportExport.js +142 -0
- package/build/dist/UI/Utils/ModelImportExport.js.map +1 -0
- 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/ModelImportExport.js +257 -0
- package/build/dist/Utils/ModelImportExport.js.map +1 -0
- 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
|
@@ -0,0 +1,369 @@
|
|
|
1
|
+
import BaseModel, {
|
|
2
|
+
DatabaseBaseModelType,
|
|
3
|
+
} from "../Models/DatabaseModels/DatabaseBaseModel/DatabaseBaseModel";
|
|
4
|
+
import { ColumnAccessControl } from "../Types/BaseDatabase/AccessControl";
|
|
5
|
+
import Select from "../Types/BaseDatabase/Select";
|
|
6
|
+
import { TableColumnMetadata } from "../Types/Database/TableColumn";
|
|
7
|
+
import TableColumnType from "../Types/Database/TableColumnType";
|
|
8
|
+
import OneUptimeDate from "../Types/Date";
|
|
9
|
+
import Dictionary from "../Types/Dictionary";
|
|
10
|
+
import Recurring from "../Types/Events/Recurring";
|
|
11
|
+
import BadDataException from "../Types/Exception/BadDataException";
|
|
12
|
+
import { JSONArray, JSONObject } from "../Types/JSON";
|
|
13
|
+
|
|
14
|
+
export const MODEL_EXPORT_FILE_TYPE: string = "oneuptime-resource-export";
|
|
15
|
+
export const MODEL_EXPORT_SCHEMA_VERSION: number = 1;
|
|
16
|
+
|
|
17
|
+
/*
|
|
18
|
+
* Columns that are always server-managed and must never be exported or
|
|
19
|
+
* imported, regardless of model metadata.
|
|
20
|
+
*/
|
|
21
|
+
const SYSTEM_COLUMNS: Array<string> = [
|
|
22
|
+
"_id",
|
|
23
|
+
"createdAt",
|
|
24
|
+
"updatedAt",
|
|
25
|
+
"deletedAt",
|
|
26
|
+
"version",
|
|
27
|
+
];
|
|
28
|
+
|
|
29
|
+
/*
|
|
30
|
+
* Column types that never make sense in an export file: relations to other
|
|
31
|
+
* entities (their ids would not resolve in another project or instance),
|
|
32
|
+
* binary data, and secrets.
|
|
33
|
+
*/
|
|
34
|
+
const EXCLUDED_COLUMN_TYPES: Array<TableColumnType> = [
|
|
35
|
+
TableColumnType.Entity,
|
|
36
|
+
TableColumnType.EntityArray,
|
|
37
|
+
TableColumnType.File,
|
|
38
|
+
TableColumnType.Buffer,
|
|
39
|
+
TableColumnType.Slug,
|
|
40
|
+
TableColumnType.HashedString,
|
|
41
|
+
TableColumnType.Password,
|
|
42
|
+
TableColumnType.OTP,
|
|
43
|
+
];
|
|
44
|
+
|
|
45
|
+
/*
|
|
46
|
+
* Columns that pass the generic metadata filters but must still never be
|
|
47
|
+
* exported: plain-text credentials and server-managed runtime state that
|
|
48
|
+
* would either leak secrets into export files or seed imported resources
|
|
49
|
+
* with stale state from the source resource.
|
|
50
|
+
*/
|
|
51
|
+
const EXCLUDED_COLUMNS_BY_TABLE: Dictionary<Array<string>> = {
|
|
52
|
+
StatusPage: ["embeddedOverallStatusToken"],
|
|
53
|
+
Monitor: [
|
|
54
|
+
"incomingMonitorRequest",
|
|
55
|
+
"serverMonitorResponse",
|
|
56
|
+
"incomingRequestMonitorHeartbeatCheckedAt",
|
|
57
|
+
"serverMonitorRequestReceivedAt",
|
|
58
|
+
"telemetryMonitorNextMonitorAt",
|
|
59
|
+
"telemetryMonitorLastMonitorAt",
|
|
60
|
+
],
|
|
61
|
+
};
|
|
62
|
+
|
|
63
|
+
export default class ModelImportExport {
|
|
64
|
+
/*
|
|
65
|
+
* Derives the list of columns that can safely round-trip through an export
|
|
66
|
+
* file from the model's own metadata. A column qualifies when the current
|
|
67
|
+
* caller could both read it and set it on create, it is not computed or
|
|
68
|
+
* server-generated, it holds no secret, and it does not reference another
|
|
69
|
+
* entity (foreign keys of Entity relations are excluded along with the
|
|
70
|
+
* relations themselves).
|
|
71
|
+
*/
|
|
72
|
+
public static getImportExportableColumnNames(
|
|
73
|
+
modelType: DatabaseBaseModelType,
|
|
74
|
+
): Array<string> {
|
|
75
|
+
const model: BaseModel = new modelType();
|
|
76
|
+
|
|
77
|
+
const tenantColumn: string | null = model.getTenantColumn();
|
|
78
|
+
|
|
79
|
+
const foreignKeyColumns: Array<string> = [];
|
|
80
|
+
|
|
81
|
+
for (const columnName of model.getTableColumns().columns) {
|
|
82
|
+
const metadata: TableColumnMetadata | undefined =
|
|
83
|
+
model.getTableColumnMetadata(columnName);
|
|
84
|
+
|
|
85
|
+
if (metadata?.manyToOneRelationColumn) {
|
|
86
|
+
foreignKeyColumns.push(metadata.manyToOneRelationColumn);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
const excludedColumnsForTable: Array<string> =
|
|
91
|
+
EXCLUDED_COLUMNS_BY_TABLE[model.tableName || ""] || [];
|
|
92
|
+
|
|
93
|
+
const exportableColumns: Array<string> = [];
|
|
94
|
+
|
|
95
|
+
for (const columnName of model.getTableColumns().columns) {
|
|
96
|
+
if (SYSTEM_COLUMNS.includes(columnName)) {
|
|
97
|
+
continue;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
if (excludedColumnsForTable.includes(columnName)) {
|
|
101
|
+
continue;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
if (tenantColumn && columnName === tenantColumn) {
|
|
105
|
+
continue;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
if (foreignKeyColumns.includes(columnName)) {
|
|
109
|
+
continue;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
const metadata: TableColumnMetadata | undefined =
|
|
113
|
+
model.getTableColumnMetadata(columnName);
|
|
114
|
+
|
|
115
|
+
if (!metadata) {
|
|
116
|
+
continue;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
if (EXCLUDED_COLUMN_TYPES.includes(metadata.type)) {
|
|
120
|
+
continue;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
if (metadata.computed || metadata.hashed || metadata.encrypted) {
|
|
124
|
+
continue;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
if (metadata.forceGetDefaultValueOnCreate) {
|
|
128
|
+
continue;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
const accessControl: ColumnAccessControl | null =
|
|
132
|
+
model.getColumnAccessControlFor(columnName);
|
|
133
|
+
|
|
134
|
+
if (
|
|
135
|
+
!accessControl ||
|
|
136
|
+
accessControl.read.length === 0 ||
|
|
137
|
+
accessControl.create.length === 0
|
|
138
|
+
) {
|
|
139
|
+
continue;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
exportableColumns.push(columnName);
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
return exportableColumns;
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
public static getImportExportSelect<TBaseModel extends BaseModel>(modelType: {
|
|
149
|
+
new (): TBaseModel;
|
|
150
|
+
}): Select<TBaseModel> {
|
|
151
|
+
const select: JSONObject = {};
|
|
152
|
+
|
|
153
|
+
for (const columnName of this.getImportExportableColumnNames(modelType)) {
|
|
154
|
+
select[columnName] = true;
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
return select as Select<TBaseModel>;
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
public static toExportJSON<TBaseModel extends BaseModel>(
|
|
161
|
+
item: TBaseModel,
|
|
162
|
+
modelType: { new (): TBaseModel },
|
|
163
|
+
): JSONObject {
|
|
164
|
+
const json: JSONObject = BaseModel.toJSON(item, modelType);
|
|
165
|
+
|
|
166
|
+
const exportableColumns: Array<string> =
|
|
167
|
+
this.getImportExportableColumnNames(modelType);
|
|
168
|
+
|
|
169
|
+
const exportJson: JSONObject = {};
|
|
170
|
+
|
|
171
|
+
for (const key of Object.keys(json)) {
|
|
172
|
+
if (exportableColumns.includes(key)) {
|
|
173
|
+
exportJson[key] = json[key];
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
return exportJson;
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
public static buildExportEnvelope<TBaseModel extends BaseModel>(data: {
|
|
181
|
+
modelType: { new (): TBaseModel };
|
|
182
|
+
items: Array<TBaseModel>;
|
|
183
|
+
exportedAt: Date;
|
|
184
|
+
}): JSONObject {
|
|
185
|
+
const model: BaseModel = new data.modelType();
|
|
186
|
+
|
|
187
|
+
return {
|
|
188
|
+
fileType: MODEL_EXPORT_FILE_TYPE,
|
|
189
|
+
schemaVersion: MODEL_EXPORT_SCHEMA_VERSION,
|
|
190
|
+
resourceType: model.tableName || "",
|
|
191
|
+
exportedAt: data.exportedAt.toISOString(),
|
|
192
|
+
items: data.items.map((item: TBaseModel) => {
|
|
193
|
+
return this.toExportJSON(item, data.modelType);
|
|
194
|
+
}),
|
|
195
|
+
};
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
/*
|
|
199
|
+
* Accepts an export envelope, a plain array of items, or a single item
|
|
200
|
+
* object, and returns the list of item JSONs to import. Throws
|
|
201
|
+
* BadDataException with a user-facing message when the payload is not
|
|
202
|
+
* usable for this model type.
|
|
203
|
+
*/
|
|
204
|
+
public static parseImportPayload(data: {
|
|
205
|
+
modelType: DatabaseBaseModelType;
|
|
206
|
+
payload: JSONObject | JSONArray;
|
|
207
|
+
}): Array<JSONObject> {
|
|
208
|
+
const model: BaseModel = new data.modelType();
|
|
209
|
+
const resourceName: string = model.singularName || "resource";
|
|
210
|
+
|
|
211
|
+
let items: JSONArray | null = null;
|
|
212
|
+
|
|
213
|
+
if (Array.isArray(data.payload)) {
|
|
214
|
+
items = data.payload;
|
|
215
|
+
} else if (data.payload && typeof data.payload === "object") {
|
|
216
|
+
if (Array.isArray(data.payload["items"])) {
|
|
217
|
+
const resourceType: unknown = data.payload["resourceType"];
|
|
218
|
+
|
|
219
|
+
if (
|
|
220
|
+
resourceType &&
|
|
221
|
+
model.tableName &&
|
|
222
|
+
resourceType !== model.tableName
|
|
223
|
+
) {
|
|
224
|
+
throw new BadDataException(
|
|
225
|
+
`This file contains ${resourceType.toString()} resources and cannot be imported here. Please select a ${resourceName} export file.`,
|
|
226
|
+
);
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
items = data.payload["items"] as JSONArray;
|
|
230
|
+
} else {
|
|
231
|
+
// a single item object exported by hand.
|
|
232
|
+
items = [data.payload];
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
if (!items) {
|
|
237
|
+
throw new BadDataException(
|
|
238
|
+
`This file is not a valid ${resourceName} export file.`,
|
|
239
|
+
);
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
if (items.length === 0) {
|
|
243
|
+
throw new BadDataException(
|
|
244
|
+
`This file does not contain any ${resourceName} to import.`,
|
|
245
|
+
);
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
for (const item of items) {
|
|
249
|
+
if (!item || typeof item !== "object" || Array.isArray(item)) {
|
|
250
|
+
throw new BadDataException(
|
|
251
|
+
`This file is not a valid ${resourceName} export file.`,
|
|
252
|
+
);
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
return items as Array<JSONObject>;
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
/*
|
|
260
|
+
* Builds a model instance from an import item, keeping only columns that
|
|
261
|
+
* are importable for this model. Anything else in the file - ids, slugs,
|
|
262
|
+
* timestamps, relations, unknown keys - is dropped so the server create
|
|
263
|
+
* API treats the item as a brand new resource.
|
|
264
|
+
*/
|
|
265
|
+
public static fromImportJSON<TBaseModel extends BaseModel>(data: {
|
|
266
|
+
json: JSONObject;
|
|
267
|
+
modelType: { new (): TBaseModel };
|
|
268
|
+
}): TBaseModel {
|
|
269
|
+
const item: TBaseModel = BaseModel.fromJSON(
|
|
270
|
+
data.json,
|
|
271
|
+
data.modelType,
|
|
272
|
+
) as TBaseModel;
|
|
273
|
+
|
|
274
|
+
const exportableColumns: Array<string> =
|
|
275
|
+
this.getImportExportableColumnNames(data.modelType);
|
|
276
|
+
|
|
277
|
+
for (const columnName of item.getTableColumns().columns) {
|
|
278
|
+
if (exportableColumns.includes(columnName)) {
|
|
279
|
+
continue;
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
if ((item as any)[columnName] !== undefined) {
|
|
283
|
+
item.removeValue(columnName);
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
this.normalizeImportItem(item);
|
|
288
|
+
|
|
289
|
+
return item;
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
/*
|
|
293
|
+
* Model-specific fixups so imported items pass server-side create
|
|
294
|
+
* validation. Currently: recurring scheduled maintenance templates are
|
|
295
|
+
* rejected on create when their first-event dates are in the past (the
|
|
296
|
+
* normal case for an export taken from an established template), so the
|
|
297
|
+
* dates are advanced by the recurrence interval until they are in the
|
|
298
|
+
* future, preserving the offsets between them.
|
|
299
|
+
*/
|
|
300
|
+
private static normalizeImportItem(item: BaseModel): void {
|
|
301
|
+
if (item.tableName !== "ScheduledMaintenanceTemplate") {
|
|
302
|
+
return;
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
const isRecurringEvent: unknown = item.getValue("isRecurringEvent");
|
|
306
|
+
const recurringInterval: unknown = item.getValue("recurringInterval");
|
|
307
|
+
|
|
308
|
+
if (!isRecurringEvent || !recurringInterval) {
|
|
309
|
+
return;
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
const dateColumns: Array<string> = [
|
|
313
|
+
"firstEventScheduledAt",
|
|
314
|
+
"firstEventStartsAt",
|
|
315
|
+
"firstEventEndsAt",
|
|
316
|
+
];
|
|
317
|
+
|
|
318
|
+
const dates: Array<Date> = [];
|
|
319
|
+
|
|
320
|
+
for (const dateColumn of dateColumns) {
|
|
321
|
+
const value: unknown = item.getValue(dateColumn);
|
|
322
|
+
|
|
323
|
+
if (value instanceof Date) {
|
|
324
|
+
dates.push(value);
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
if (dates.length === 0) {
|
|
329
|
+
return;
|
|
330
|
+
}
|
|
331
|
+
|
|
332
|
+
/*
|
|
333
|
+
* Anchor the advance on the earliest date so every date ends up in the
|
|
334
|
+
* future once shifted by the same amount.
|
|
335
|
+
*/
|
|
336
|
+
const earliestDate: Date = dates.reduce((a: Date, b: Date) => {
|
|
337
|
+
return a.getTime() <= b.getTime() ? a : b;
|
|
338
|
+
});
|
|
339
|
+
|
|
340
|
+
if (OneUptimeDate.isInTheFuture(earliestDate)) {
|
|
341
|
+
return;
|
|
342
|
+
}
|
|
343
|
+
|
|
344
|
+
const interval: Recurring =
|
|
345
|
+
recurringInterval instanceof Recurring
|
|
346
|
+
? recurringInterval
|
|
347
|
+
: Recurring.fromJSON(recurringInterval as JSONObject);
|
|
348
|
+
|
|
349
|
+
const nextEarliestDate: Date = Recurring.getNextDate(
|
|
350
|
+
earliestDate,
|
|
351
|
+
interval,
|
|
352
|
+
);
|
|
353
|
+
|
|
354
|
+
const advanceByMs: number =
|
|
355
|
+
nextEarliestDate.getTime() - earliestDate.getTime();
|
|
356
|
+
|
|
357
|
+
if (advanceByMs <= 0) {
|
|
358
|
+
return;
|
|
359
|
+
}
|
|
360
|
+
|
|
361
|
+
for (const dateColumn of dateColumns) {
|
|
362
|
+
const value: unknown = item.getValue(dateColumn);
|
|
363
|
+
|
|
364
|
+
if (value instanceof Date) {
|
|
365
|
+
(item as any)[dateColumn] = new Date(value.getTime() + advanceByMs);
|
|
366
|
+
}
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
}
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
import Crypto from "../Crypto";
|
|
2
|
+
import Dictionary from "../../Types/Dictionary";
|
|
3
|
+
import EntityType from "../../Types/Telemetry/EntityType";
|
|
4
|
+
|
|
5
|
+
/*
|
|
6
|
+
* Isomorphic OpenTelemetry entity-key computation — the single source of
|
|
7
|
+
* truth shared by ingest (server, stamping `entityKeys`) and reads
|
|
8
|
+
* (server or browser, building `has(entityKeys, :key)` predicates).
|
|
9
|
+
* Hashing goes through an injectable SHA-256 provider: the default is
|
|
10
|
+
* `Common/Utils/Crypto` (crypto-js, pure JS) so this module works in the
|
|
11
|
+
* browser, and the server swaps in node:crypto for the ingest hot path
|
|
12
|
+
* (see TelemetryEntity.ts). Any provider MUST produce the same
|
|
13
|
+
* lowercase-hex SHA-256 — a hard requirement: a read-side key that
|
|
14
|
+
* doesn't byte-match the ingest-side stamp finds nothing.
|
|
15
|
+
*
|
|
16
|
+
* See Internal/Docs/OpenTelemetryEntities.md.
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
/** Canonical identity-value form: trimmed + lowercased. */
|
|
20
|
+
export function canonicalizeEntityValue(value: string | undefined): string {
|
|
21
|
+
return String(value === undefined || value === null ? "" : value)
|
|
22
|
+
.trim()
|
|
23
|
+
.toLowerCase();
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export type Sha256HexProvider = (input: string) => string;
|
|
27
|
+
|
|
28
|
+
let sha256HexProvider: Sha256HexProvider = (input: string): string => {
|
|
29
|
+
return Crypto.getSha256Hash(input);
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Swap the SHA-256 implementation (e.g. node:crypto on the server). The
|
|
34
|
+
* provider must return the full lowercase-hex digest, byte-identical to
|
|
35
|
+
* the crypto-js default, or ingest-stamped and read-side keys fork.
|
|
36
|
+
*/
|
|
37
|
+
export function setSha256Provider(provider: Sha256HexProvider): void {
|
|
38
|
+
sha256HexProvider = provider;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/*
|
|
42
|
+
* '|' separates preimage segments and '=' separates key from value, so
|
|
43
|
+
* both — and the escape character itself — are backslash-escaped inside
|
|
44
|
+
* keys and values. This keeps the preimage injective (a value like
|
|
45
|
+
* `a|service.namespace=b` cannot collide with a two-attribute identity)
|
|
46
|
+
* while leaving values WITHOUT these characters byte-identical to the
|
|
47
|
+
* historical preimage, so already-stamped keys for normal data are
|
|
48
|
+
* unchanged.
|
|
49
|
+
*/
|
|
50
|
+
function escapeIdentityToken(token: string): string {
|
|
51
|
+
return token.replace(/([\\|=])/g, "\\$1");
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* Stable 16-hex-char identity key for an entity. Pure: same inputs → same
|
|
56
|
+
* key. Keys are sorted so attribute order is irrelevant; values are
|
|
57
|
+
* canonicalized so casing/whitespace drift does not fork identity;
|
|
58
|
+
* projectId is folded in so keys are tenant-unique (and a
|
|
59
|
+
* `has(entityKeys, key)` predicate is implicitly project-scoped).
|
|
60
|
+
*/
|
|
61
|
+
export function computeEntityKey(data: {
|
|
62
|
+
projectId: string;
|
|
63
|
+
entityType: EntityType;
|
|
64
|
+
identifyingAttributes: Dictionary<string>;
|
|
65
|
+
}): string {
|
|
66
|
+
const keys: Array<string> = Object.keys(
|
|
67
|
+
data.identifyingAttributes || {},
|
|
68
|
+
).sort();
|
|
69
|
+
|
|
70
|
+
const parts: Array<string> = [];
|
|
71
|
+
for (const key of keys) {
|
|
72
|
+
parts.push(
|
|
73
|
+
`${escapeIdentityToken(key)}=${escapeIdentityToken(
|
|
74
|
+
canonicalizeEntityValue(data.identifyingAttributes[key]),
|
|
75
|
+
)}`,
|
|
76
|
+
);
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
const preimage: string = `${data.projectId}|${data.entityType}|${parts.join(
|
|
80
|
+
"|",
|
|
81
|
+
)}`;
|
|
82
|
+
|
|
83
|
+
return sha256HexProvider(preimage).slice(0, 16);
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
/*
|
|
87
|
+
* ---- Read-side helpers ---------------------------------------------------
|
|
88
|
+
*
|
|
89
|
+
* Given a OneUptime resource's identifying value, compute the entity key
|
|
90
|
+
* to query `has(entityKeys, :key)`. Each MUST mirror the corresponding
|
|
91
|
+
* ingest-side resolver in `TelemetryEntity.extractEntities` exactly.
|
|
92
|
+
*/
|
|
93
|
+
|
|
94
|
+
/**
|
|
95
|
+
* `host.name` is the host identity (matches the Host row's `hostIdentifier`,
|
|
96
|
+
* which is the canonicalized host.name). Pass `Host.hostIdentifier`.
|
|
97
|
+
*/
|
|
98
|
+
export function keyForHost(projectId: string, hostIdentifier: string): string {
|
|
99
|
+
return computeEntityKey({
|
|
100
|
+
projectId,
|
|
101
|
+
entityType: EntityType.Host,
|
|
102
|
+
identifyingAttributes: { "host.name": hostIdentifier },
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
/**
|
|
107
|
+
* `service.name` (+ `service.namespace` when the resource carries one) is
|
|
108
|
+
* the service identity — the ingest resolver folds the namespace into the
|
|
109
|
+
* key, so a namespaced service is only matchable when the same namespace
|
|
110
|
+
* is passed here. Pass `Service.name` (+ the namespace if known).
|
|
111
|
+
*/
|
|
112
|
+
export function keyForService(
|
|
113
|
+
projectId: string,
|
|
114
|
+
serviceName: string,
|
|
115
|
+
serviceNamespace?: string | undefined,
|
|
116
|
+
): string {
|
|
117
|
+
const identifyingAttributes: Dictionary<string> = {
|
|
118
|
+
"service.name": serviceName,
|
|
119
|
+
};
|
|
120
|
+
|
|
121
|
+
/*
|
|
122
|
+
* Mirrors the resolver's addIfPresent: blank/whitespace-only namespaces
|
|
123
|
+
* are not identity-bearing.
|
|
124
|
+
*/
|
|
125
|
+
if (serviceNamespace && serviceNamespace.trim().length > 0) {
|
|
126
|
+
identifyingAttributes["service.namespace"] = serviceNamespace;
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
return computeEntityKey({
|
|
130
|
+
projectId,
|
|
131
|
+
entityType: EntityType.Service,
|
|
132
|
+
identifyingAttributes,
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
/**
|
|
137
|
+
* `k8s.cluster.name` is the cluster identity (matches the KubernetesCluster
|
|
138
|
+
* row's `clusterIdentifier`; the ingest resolver is name-only — see
|
|
139
|
+
* `TelemetryEntity.k8sClusterIdentity`). Pass
|
|
140
|
+
* `KubernetesCluster.clusterIdentifier`.
|
|
141
|
+
*/
|
|
142
|
+
export function keyForKubernetesCluster(
|
|
143
|
+
projectId: string,
|
|
144
|
+
clusterIdentifier: string,
|
|
145
|
+
): string {
|
|
146
|
+
return computeEntityKey({
|
|
147
|
+
projectId,
|
|
148
|
+
entityType: EntityType.KubernetesCluster,
|
|
149
|
+
identifyingAttributes: { "k8s.cluster.name": clusterIdentifier },
|
|
150
|
+
});
|
|
151
|
+
}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import EntityRelationshipType from "../../Types/Telemetry/EntityRelationshipType";
|
|
2
|
+
import EntityType from "../../Types/Telemetry/EntityType";
|
|
3
|
+
|
|
4
|
+
/*
|
|
5
|
+
* Co-occurrence relationship inference (phase 5 of the entity model —
|
|
6
|
+
* Internal/Docs/OpenTelemetryEntities.md §4). Every ingest batch yields an
|
|
7
|
+
* entity set; the directed pairs that co-occur in one resource are, by
|
|
8
|
+
* construction, related. `relType` is inferred from the *type* pair, not
|
|
9
|
+
* any standardized wire signal (the OTel relationship taxonomy is
|
|
10
|
+
* undefined), giving an infrastructure topology graph for free. Pure +
|
|
11
|
+
* synchronous: operates on already-computed entity keys, no DB round trip.
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
/** A single directed relationship edge between two entities. */
|
|
15
|
+
export interface EntityRelationshipEdge {
|
|
16
|
+
fromEntityKey: string;
|
|
17
|
+
toEntityKey: string;
|
|
18
|
+
relationshipType: EntityRelationshipType;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
/*
|
|
22
|
+
* Directed rules: a `from`-type that co-occurs with a `to`-type implies the
|
|
23
|
+
* given relationship. Only the meaningful direction has a rule (e.g. pod →
|
|
24
|
+
* cluster is `member-of`; cluster → pod yields nothing), so iterating all
|
|
25
|
+
* ordered pairs and keeping the non-null results produces a correctly
|
|
26
|
+
* directed edge set without double-counting. Extend as new entity types
|
|
27
|
+
* graduate from membership-only to first-class.
|
|
28
|
+
*
|
|
29
|
+
* `depends-on` is deliberately absent: a caller service and its callee
|
|
30
|
+
* never share one resource, so it cannot be co-occurrence-inferred. Those
|
|
31
|
+
* edges are derived from cross-service parent/child span pairs by the
|
|
32
|
+
* TelemetryEntity:ComputeServiceDependencies worker cron.
|
|
33
|
+
*/
|
|
34
|
+
const RULES: Record<string, EntityRelationshipType> = {
|
|
35
|
+
[`${EntityType.ServiceInstance}|${EntityType.Service}`]:
|
|
36
|
+
EntityRelationshipType.InstanceOf,
|
|
37
|
+
[`${EntityType.Service}|${EntityType.Host}`]: EntityRelationshipType.HostedOn,
|
|
38
|
+
[`${EntityType.Service}|${EntityType.KubernetesPod}`]:
|
|
39
|
+
EntityRelationshipType.RunsOn,
|
|
40
|
+
[`${EntityType.Container}|${EntityType.KubernetesPod}`]:
|
|
41
|
+
EntityRelationshipType.PartOf,
|
|
42
|
+
[`${EntityType.Container}|${EntityType.Host}`]: EntityRelationshipType.PartOf,
|
|
43
|
+
[`${EntityType.Process}|${EntityType.Container}`]:
|
|
44
|
+
EntityRelationshipType.PartOf,
|
|
45
|
+
[`${EntityType.Process}|${EntityType.Host}`]: EntityRelationshipType.RunsOn,
|
|
46
|
+
[`${EntityType.KubernetesPod}|${EntityType.KubernetesNode}`]:
|
|
47
|
+
EntityRelationshipType.RunsOn,
|
|
48
|
+
[`${EntityType.KubernetesPod}|${EntityType.KubernetesNamespace}`]:
|
|
49
|
+
EntityRelationshipType.MemberOf,
|
|
50
|
+
[`${EntityType.KubernetesPod}|${EntityType.KubernetesCluster}`]:
|
|
51
|
+
EntityRelationshipType.MemberOf,
|
|
52
|
+
[`${EntityType.KubernetesNode}|${EntityType.KubernetesCluster}`]:
|
|
53
|
+
EntityRelationshipType.MemberOf,
|
|
54
|
+
[`${EntityType.KubernetesNamespace}|${EntityType.KubernetesCluster}`]:
|
|
55
|
+
EntityRelationshipType.MemberOf,
|
|
56
|
+
[`${EntityType.KubernetesDeployment}|${EntityType.KubernetesNamespace}`]:
|
|
57
|
+
EntityRelationshipType.MemberOf,
|
|
58
|
+
[`${EntityType.KubernetesDeployment}|${EntityType.KubernetesCluster}`]:
|
|
59
|
+
EntityRelationshipType.MemberOf,
|
|
60
|
+
};
|
|
61
|
+
|
|
62
|
+
/** The relationship `fromType` → `toType` implies, or null if none. */
|
|
63
|
+
export function inferRelationshipType(
|
|
64
|
+
fromType: EntityType,
|
|
65
|
+
toType: EntityType,
|
|
66
|
+
): EntityRelationshipType | null {
|
|
67
|
+
return RULES[`${fromType}|${toType}`] || null;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* Derive every directed relationship edge implied by an entity set (one
|
|
72
|
+
* resource batch). Deduped; self-pairs and same-key pairs skipped.
|
|
73
|
+
*/
|
|
74
|
+
export function deriveRelationships(
|
|
75
|
+
entities: Array<{ entityType: EntityType; entityKey: string }>,
|
|
76
|
+
): Array<EntityRelationshipEdge> {
|
|
77
|
+
const edges: Array<EntityRelationshipEdge> = [];
|
|
78
|
+
const seen: Set<string> = new Set<string>();
|
|
79
|
+
|
|
80
|
+
for (let i: number = 0; i < entities.length; i++) {
|
|
81
|
+
for (let j: number = 0; j < entities.length; j++) {
|
|
82
|
+
if (i === j) {
|
|
83
|
+
continue;
|
|
84
|
+
}
|
|
85
|
+
const from: { entityType: EntityType; entityKey: string } = entities[i]!;
|
|
86
|
+
const to: { entityType: EntityType; entityKey: string } = entities[j]!;
|
|
87
|
+
|
|
88
|
+
if (from.entityKey === to.entityKey) {
|
|
89
|
+
continue;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
const relationshipType: EntityRelationshipType | null =
|
|
93
|
+
inferRelationshipType(from.entityType, to.entityType);
|
|
94
|
+
if (!relationshipType) {
|
|
95
|
+
continue;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
const dedupeKey: string = `${from.entityKey}|${to.entityKey}|${relationshipType}`;
|
|
99
|
+
if (seen.has(dedupeKey)) {
|
|
100
|
+
continue;
|
|
101
|
+
}
|
|
102
|
+
seen.add(dedupeKey);
|
|
103
|
+
|
|
104
|
+
edges.push({
|
|
105
|
+
fromEntityKey: from.entityKey,
|
|
106
|
+
toEntityKey: to.entityKey,
|
|
107
|
+
relationshipType,
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
return edges;
|
|
113
|
+
}
|
|
@@ -9,7 +9,7 @@ export interface SpanData {
|
|
|
9
9
|
startTimeUnixNano: number;
|
|
10
10
|
endTimeUnixNano: number;
|
|
11
11
|
durationUnixNano: number;
|
|
12
|
-
|
|
12
|
+
primaryEntityId: string | undefined;
|
|
13
13
|
name: string | undefined;
|
|
14
14
|
}
|
|
15
15
|
|
|
@@ -28,7 +28,7 @@ export interface CriticalPathResult {
|
|
|
28
28
|
}
|
|
29
29
|
|
|
30
30
|
export interface ServiceBreakdown {
|
|
31
|
-
|
|
31
|
+
primaryEntityId: string;
|
|
32
32
|
totalDurationUnixNano: number;
|
|
33
33
|
selfTimeUnixNano: number;
|
|
34
34
|
spanCount: number;
|
|
@@ -308,12 +308,12 @@ export default class CriticalPathUtil {
|
|
|
308
308
|
> = new Map();
|
|
309
309
|
|
|
310
310
|
for (const span of spans) {
|
|
311
|
-
const
|
|
311
|
+
const primaryEntityId: string = span.primaryEntityId || "unknown";
|
|
312
312
|
const entry: {
|
|
313
313
|
totalDuration: number;
|
|
314
314
|
selfTime: number;
|
|
315
315
|
spanCount: number;
|
|
316
|
-
} = serviceMap.get(
|
|
316
|
+
} = serviceMap.get(primaryEntityId) || {
|
|
317
317
|
totalDuration: 0,
|
|
318
318
|
selfTime: 0,
|
|
319
319
|
spanCount: 0,
|
|
@@ -323,13 +323,13 @@ export default class CriticalPathUtil {
|
|
|
323
323
|
const selfTime: SpanSelfTime | undefined = selfTimes.get(span.spanId);
|
|
324
324
|
entry.selfTime += selfTime ? selfTime.selfTimeUnixNano : 0;
|
|
325
325
|
entry.spanCount += 1;
|
|
326
|
-
serviceMap.set(
|
|
326
|
+
serviceMap.set(primaryEntityId, entry);
|
|
327
327
|
}
|
|
328
328
|
|
|
329
329
|
const result: ServiceBreakdown[] = [];
|
|
330
|
-
for (const [
|
|
330
|
+
for (const [primaryEntityId, data] of serviceMap.entries()) {
|
|
331
331
|
result.push({
|
|
332
|
-
|
|
332
|
+
primaryEntityId,
|
|
333
333
|
totalDurationUnixNano: data.totalDuration,
|
|
334
334
|
selfTimeUnixNano: data.selfTime,
|
|
335
335
|
spanCount: data.spanCount,
|