@oneuptime/common 12.0.33 → 12.0.34
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/RumSession.ts +117 -1
- package/Models/AnalyticsModels/RumSessionChunk.ts +13 -0
- package/Models/DatabaseModels/AlertCustomField.ts +77 -3
- package/Models/DatabaseModels/ApiKeyPermission.ts +3 -27
- package/Models/DatabaseModels/IncidentCustomField.ts +77 -3
- package/Models/DatabaseModels/InventoryItemCustomField.ts +77 -3
- package/Models/DatabaseModels/MonitorCustomField.ts +77 -3
- package/Models/DatabaseModels/OnCallDutyPolicyCustomField.ts +77 -3
- package/Models/DatabaseModels/RumApplication.ts +6 -6
- package/Models/DatabaseModels/ScheduledMaintenanceCustomField.ts +77 -3
- package/Models/DatabaseModels/StatusPageCustomField.ts +77 -3
- package/Models/DatabaseModels/TeamCustomField.ts +77 -3
- package/Models/DatabaseModels/TeamMember.ts +0 -9
- package/Models/DatabaseModels/TeamMemberCustomField.ts +77 -3
- package/Models/DatabaseModels/TeamPermission.ts +3 -24
- package/Models/DatabaseModels/TelemetryIngestionKey.ts +260 -0
- package/Models/DatabaseModels/UserTelegram.ts +0 -4
- package/Scripts/benchmark-fanin-capacity.js +181 -0
- package/Server/API/TelemetryAPI.ts +1284 -164
- package/Server/API/UserNotificationSettingAPI.ts +55 -0
- package/Server/API/UserTelegramAPI.ts +48 -4
- package/Server/EnvironmentConfig.ts +35 -2
- package/Server/Infrastructure/Postgres/SchemaMigrations/1791300000000-AddTelemetryIngestionKeyType.ts +91 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1791400000000-SessionReplayRecordEverySessionByDefault.ts +67 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1791500000000-WidenCustomFieldDropdownOptions.ts +139 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1791600000000-AddCustomFieldValueMapping.ts +121 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +8 -0
- package/Server/Infrastructure/QueueWorker.ts +20 -14
- package/Server/Infrastructure/Semaphore.ts +2 -0
- package/Server/Middleware/TelemetryIngest.ts +453 -7
- package/Server/Services/AccessTokenService.ts +1 -0
- package/Server/Services/AlertCustomFieldService.ts +98 -0
- package/Server/Services/AlertService.ts +37 -0
- package/Server/Services/ApiKeyPermissionService.ts +461 -29
- package/Server/Services/CustomFieldMappingService.ts +879 -0
- package/Server/Services/GlobalConfigService.ts +194 -0
- package/Server/Services/IncidentCustomFieldService.ts +98 -0
- package/Server/Services/IncidentService.ts +35 -0
- package/Server/Services/MetricService.ts +194 -0
- package/Server/Services/MonitorService.ts +32 -0
- package/Server/Services/NetworkDeviceAutoImportRuleEngineService.ts +78 -25
- package/Server/Services/ProjectService.ts +22 -0
- package/Server/Services/RoutineEmailSettingsService.ts +73 -0
- package/Server/Services/RumSessionReplayViewService.ts +104 -24
- package/Server/Services/ScheduledMaintenanceCustomFieldService.ts +98 -0
- package/Server/Services/ScheduledMaintenanceService.ts +32 -0
- package/Server/Services/TeamMemberService.ts +78 -0
- package/Server/Services/TeamPermissionService.ts +235 -3
- package/Server/Services/TelemetryIngestionKeyService.ts +722 -19
- package/Server/Services/UserNotificationSettingService.ts +34 -6
- package/Server/Services/UserTelegramService.ts +326 -5
- package/Server/Types/Database/QueryHelper.ts +2 -0
- package/Server/Utils/APIKey/AccessPermission.ts +5 -2
- package/Server/Utils/CustomField/CustomFieldDefinitionMappingHooks.ts +54 -0
- package/Server/Utils/CustomField/CustomFieldMappingRegistry.ts +415 -0
- package/Server/Utils/CustomField/CustomFieldMappingValidator.ts +335 -0
- package/Server/Utils/DataSource/EgressGuard.ts +177 -8
- package/Server/Utils/EmailRollup/EmailRollupConstants.ts +38 -5
- package/Server/Utils/EmailRollup/EmailRollupFlushRunner.ts +57 -4
- package/Server/Utils/FrontendEnvironment.ts +40 -0
- package/Server/Utils/LogRedaction.ts +20 -0
- package/Server/Utils/Logger.ts +11 -0
- package/Server/Utils/Monitor/Criteria/CompareCriteria.ts +338 -77
- package/Server/Utils/Monitor/Criteria/IncomingRequestCriteria.ts +30 -4
- package/Server/Utils/Monitor/MonitorAlert.ts +29 -6
- package/Server/Utils/Monitor/MonitorCriteriaEvaluator.ts +110 -15
- package/Server/Utils/Monitor/MonitorIncident.ts +22 -6
- package/Server/Utils/Monitor/MonitorTemplateUtil.ts +29 -0
- package/Server/Utils/Monitor/SeriesContextEnricher.ts +304 -0
- package/Server/Utils/SSRFProtection.ts +217 -10
- package/Server/Utils/SessionReplay/SessionReplayGateCache.ts +239 -138
- package/Server/Utils/SessionReplay/SessionReplayHealthCounters.ts +305 -0
- package/Server/Utils/SessionReplay/SessionReplayReadService.ts +1430 -289
- package/Server/Utils/StartServer.ts +2 -17
- package/Server/Utils/TelegramVerificationToken.ts +185 -0
- package/Server/Utils/Telemetry/PinServiceName.ts +197 -0
- package/Server/Utils/Telemetry/TelemetryFanInWriter.ts +38 -16
- package/Server/Utils/Telemetry/TelemetryIngestionKeyGuard.ts +92 -0
- package/Server/Utils/Telemetry/TelemetryIngestionKeyRateLimiter.ts +217 -0
- package/Server/Utils/VM/VMAPI.ts +1 -0
- package/Server/Utils/VM/VMRunner.ts +975 -95
- package/Tests/App/AdminDashboard/AdminHeaderSmallScreens.test.tsx +202 -0
- package/Tests/App/Dashboard/DashboardHeaderSmallScreens.test.tsx +404 -0
- package/Tests/App/Dashboard/DiscoveryScanWizardValidation.test.tsx +468 -0
- package/Tests/App/Dashboard/NotificationEmailPreferences.test.tsx +399 -0
- package/Tests/App/StatusPage/StatusPageLastUpdated.test.tsx +263 -0
- package/Tests/App/StatusPage/StatusPageOverviewLiveAndSearch.test.tsx +753 -0
- package/Tests/App/StatusPage/StatusPageResourceSearchBox.test.tsx +224 -0
- package/Tests/Models/AnalyticsModels/RumSessionReplayColumns.test.ts +262 -0
- package/Tests/Models/CustomFieldMappingColumns.test.ts +166 -0
- package/Tests/Models/DatabaseModels/SessionReplayModels.test.ts +20 -6
- package/Tests/ResponsiveVisibility.test.ts +115 -0
- package/Tests/ResponsiveVisibility.ts +183 -0
- package/Tests/Server/API/SessionReplayAPI.test.ts +1940 -216
- package/Tests/Server/API/UserNotificationSettingAPI.test.ts +186 -0
- package/Tests/Server/API/UserTelegramAPISecurity.test.ts +231 -0
- package/Tests/Server/EnvironmentConfigFrontendSecurity.test.ts +234 -0
- package/Tests/Server/Infrastructure/Postgres/CustomFieldValueMappingMigration.test.ts +202 -0
- package/Tests/Server/Infrastructure/Postgres/InventoryItemArchiveMigration.test.ts +41 -0
- package/Tests/Server/Infrastructure/Postgres/SessionReplayRecordEverySessionByDefaultMigration.test.ts +169 -0
- package/Tests/Server/Infrastructure/QueueWorkerTimeout.test.ts +210 -0
- package/Tests/Server/Infrastructure/TelemetryExporterDeploymentConfig.test.ts +130 -0
- package/Tests/Server/Middleware/ProjectAuthorizationApiKeyMiddleware.test.ts +4 -1
- package/Tests/Server/Middleware/TelemetryIngestBrowserKey.test.ts +1163 -0
- package/Tests/Server/Middleware/TelemetryIngestTokenLog.test.ts +5 -3
- package/Tests/Server/Services/AddTelemetryIngestionKeyTypeMigration.test.ts +555 -0
- package/Tests/Server/Services/ApiKeyPermissionSecurity.test.ts +678 -0
- package/Tests/Server/Services/ApiKeyPermissionService.test.ts +276 -28
- package/Tests/Server/Services/CustomFieldDropdownOptionsColumnWidth.test.ts +431 -0
- package/Tests/Server/Services/CustomFieldMappingService.test.ts +850 -0
- package/Tests/Server/Services/DiscoveryScanClaimHookFreeSafety.test.ts +32 -0
- package/Tests/Server/Services/GlobalConfigService.test.ts +414 -1
- package/Tests/Server/Services/MetricRawEntityKeyPrune.test.ts +592 -0
- package/Tests/Server/Services/NetworkDeviceAutoImportRuleEngineService.test.ts +226 -1
- package/Tests/Server/Services/RoutineEmailSettingsPostgres.test.ts +329 -0
- package/Tests/Server/Services/RumSessionReplayViewService.test.ts +267 -0
- package/Tests/Server/Services/TeamMemberAutoAcceptInvitation.test.ts +9 -0
- package/Tests/Server/Services/TeamMemberInviteRegistrationToken.test.ts +9 -0
- package/Tests/Server/Services/TeamPrivilegeEscalation.test.ts +834 -0
- package/Tests/Server/Services/TelemetryIngestionKeyPolicyResolution.test.ts +814 -0
- package/Tests/Server/Services/TelemetryIngestionKeyValidation.test.ts +998 -0
- package/Tests/Server/Services/UserNotificationSettingRollupRouting.test.ts +141 -0
- package/Tests/Server/Services/UserNotificationSettingWorkspaceChannels.test.ts +18 -10
- package/Tests/Server/Services/UserTelegramVerificationSecurity.test.ts +688 -0
- package/Tests/Server/Utils/AI/SRE/Insights/FixRouting.test.ts +497 -0
- package/Tests/Server/Utils/AI/Toolbox/Serializer.test.ts +383 -0
- package/Tests/Server/Utils/APIKey/AccessPermission.test.ts +7 -3
- package/Tests/Server/Utils/AnalyticsDatabase/ClusterConfig.test.ts +315 -0
- package/Tests/Server/Utils/CustomField/CustomFieldMappingValidator.test.ts +437 -0
- package/Tests/Server/Utils/DataSource/EgressGuard.test.ts +300 -11
- package/Tests/Server/Utils/EmailRollup/EmailRollupBurstWindow.test.ts +83 -0
- package/Tests/Server/Utils/EmailRollup/EmailRollupFlushRunnerBehaviour.test.ts +1 -1
- package/Tests/Server/Utils/EmailRollup/EmailRollupFlushRunnerPreferences.test.ts +362 -0
- package/Tests/Server/Utils/EmailRollup/EmailRollupTestHarness.ts +77 -1
- package/Tests/Server/Utils/FrontendEnvironment.test.ts +190 -0
- package/Tests/Server/Utils/LogRedaction.test.ts +26 -0
- package/Tests/Server/Utils/LoggerCredentialLeak.test.ts +23 -9
- package/Tests/Server/Utils/Monitor/Criteria/CompareCriteriaAggregation.test.ts +584 -0
- package/Tests/Server/Utils/Monitor/Criteria/IncomingRequestHeaderCriteria.test.ts +236 -0
- package/Tests/Server/Utils/Monitor/MonitorCriteriaEvaluator.test.ts +437 -0
- package/Tests/Server/Utils/Monitor/MonitorTemplateUtilSeriesContext.test.ts +176 -0
- package/Tests/Server/Utils/Monitor/SeriesContextEnricher.test.ts +356 -0
- package/Tests/Server/Utils/SSRFProtectionCloudServiceAddresses.test.ts +595 -0
- package/Tests/Server/Utils/SessionReplay/SessionReplayGateCachePolicy.test.ts +198 -1
- package/Tests/Server/Utils/SessionReplay/SessionReplayHealthCounters.test.ts +453 -0
- package/Tests/Server/Utils/SessionReplay/SessionReplayReadServiceQueries.test.ts +1378 -0
- package/Tests/Server/Utils/SessionReplayOriginAllowListRefactor.test.ts +420 -0
- package/Tests/Server/Utils/TelegramVerificationToken.test.ts +253 -0
- package/Tests/Server/Utils/Telemetry/PinServiceName.test.ts +666 -0
- package/Tests/Server/Utils/Telemetry/TelemetryFanInWriterCapacity.test.ts +458 -0
- package/Tests/Server/Utils/Telemetry/TelemetryIngestionKeyGuard.test.ts +424 -0
- package/Tests/Server/Utils/Telemetry/TelemetryIngestionKeyRateLimiter.test.ts +528 -0
- package/Tests/Server/Utils/TelemetryExporterEnvironment.test.ts +56 -0
- package/Tests/Server/Utils/VM/VMRunnerHostBridgeLatency.test.ts +74 -0
- package/Tests/Server/Utils/VM/VMRunnerPrivateNetworkWiring.test.ts +100 -7
- package/Tests/Server/Utils/VM/VMRunnerSsrf.test.ts +1176 -6
- package/Tests/Types/CustomField/CustomFieldMappingCatalog.test.ts +220 -0
- package/Tests/Types/CustomField/CustomFieldValueMapping.test.ts +348 -0
- package/Tests/Types/JSONFunctions.test.ts +260 -0
- package/Tests/Types/Monitor/CephAlertTemplates.test.ts +422 -53
- package/Tests/Types/Monitor/DockerAlertTemplates.test.ts +495 -15
- package/Tests/Types/Monitor/DockerSwarmAlertTemplates.test.ts +191 -45
- package/Tests/Types/Monitor/HostAlertTemplates.test.ts +370 -42
- package/Tests/Types/Monitor/IotAlertTemplates.test.ts +375 -20
- package/Tests/Types/Monitor/KubernetesAlertTemplates.test.ts +636 -42
- package/Tests/Types/Monitor/KubernetesMetricCatalog.test.ts +189 -0
- package/Tests/Types/Monitor/KubernetesTemplateGroupByKeys.test.ts +95 -14
- package/Tests/Types/Monitor/PodmanAlertTemplates.test.ts +190 -21
- package/Tests/Types/Monitor/ProxmoxAlertTemplates.test.ts +352 -22
- package/Tests/Types/Monitor/Recommendation/MonitorRecommendationAlertDebuggability.test.ts +363 -0
- package/Tests/Types/Monitor/Recommendation/MonitorRecommendationNotificationMode.test.ts +93 -18
- package/Tests/Types/Monitor/Recommendation/MonitorRecommendationSeverityMapper.test.ts +259 -0
- package/Tests/Types/Monitor/Recommendation/RecommendationCriteriaBuilder.test.ts +476 -0
- package/Tests/Types/Monitor/RumAlertTemplates.test.ts +136 -0
- package/Tests/Types/Monitor/SeriesContext/SeriesDebugHints.test.ts +661 -0
- package/Tests/Types/Monitor/SeriesContext/SeriesLabelDisplay.test.ts +507 -0
- package/Tests/Types/Monitor/ServiceAlertTemplates.test.ts +270 -0
- package/Tests/Types/Monitor/TemplateGroupByKeys.test.ts +38 -10
- package/Tests/Types/Monitor/Utils/RecommendationCriteriaAssertions.ts +102 -0
- package/Tests/Types/NotificationSetting/RoutineEmailEvents.test.ts +47 -0
- package/Tests/Types/Rum/SessionReplayApiContracts.test.ts +608 -0
- package/Tests/Types/Rum/SessionReplayCustomEvents.test.ts +434 -0
- package/Tests/Types/WebsiteRequest.test.ts +285 -3
- package/Tests/UI/Components/Charts/ChartBucketIdentity.test.ts +16 -3
- package/Tests/UI/Components/Charts/ChartTrailingBucketGap.test.ts +691 -0
- package/Tests/UI/Components/ComponentsModal.test.tsx +12 -4
- package/Tests/UI/Components/ComponentsModalUsability.test.tsx +518 -0
- package/Tests/UI/Components/CustomFields/CustomFieldsDetailMapping.test.tsx +324 -0
- package/Tests/UI/Components/CustomFields/MapFromCustomFieldInput.test.tsx +176 -0
- package/Tests/UI/Components/Graphs/DayUptimeGraph.test.tsx +484 -0
- package/Tests/UI/Components/HeaderRightRail.test.tsx +157 -0
- package/Tests/UI/Components/IconDropdownItem.test.tsx +102 -0
- package/Tests/UI/Components/JSONTablePrototypePollution.test.tsx +117 -0
- package/Tests/UI/Components/KeyboardShortcutsModal.test.tsx +214 -0
- package/Tests/UI/Components/ModelTable/ModelTableWrapContent.test.tsx +561 -0
- package/Tests/UI/Components/MonitorGraphs/UptimeBarDayModal.test.tsx +302 -0
- package/Tests/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.test.ts +28 -12
- package/Tests/UI/Components/ShortcutDialogGuard.test.tsx +74 -0
- package/Tests/UI/Components/StatusPage/ResourceGroupSectionAutoExpand.test.tsx +248 -0
- package/Tests/UI/Components/TableCellWrapping.test.tsx +625 -0
- package/Tests/UI/Components/TableLoadingStates.test.tsx +205 -0
- package/Tests/UI/Components/Workflow/NodePlacement.test.ts +148 -0
- package/Tests/UI/Components/Workflow/Workflow.test.tsx +981 -0
- package/Tests/UI/ConfigBrowserTelemetry.test.ts +70 -0
- package/Tests/UI/Rum/ChunkLoader.test.ts +1036 -2
- package/Tests/UI/Rum/FidelityNotices.test.ts +187 -0
- package/Tests/UI/Rum/InactivityMap.test.ts +341 -0
- package/Tests/UI/Rum/PrivacySummaryCard.test.tsx +259 -0
- package/Tests/UI/Rum/RecordingHealthCard.test.tsx +855 -0
- package/Tests/UI/Rum/RecordingHealthStrip.test.tsx +594 -0
- package/Tests/UI/Rum/ReplayCard.test.tsx +451 -0
- package/Tests/UI/Rum/ReplayCorrelationPanel.test.tsx +536 -0
- package/Tests/UI/Rum/ReplayEngine.test.ts +2503 -0
- package/Tests/UI/Rum/ReplayEngineTypes.test.ts +171 -0
- package/Tests/UI/Rum/ReplayHeader.test.tsx +711 -0
- package/Tests/UI/Rum/ReplayLink.test.tsx +119 -0
- package/Tests/UI/Rum/ReplayPinControl.test.tsx +408 -0
- package/Tests/UI/Rum/ReplayPlaybackIntent.test.ts +152 -0
- package/Tests/UI/Rum/ReplayRail.test.tsx +1296 -0
- package/Tests/UI/Rum/ReplayRailDetail.test.tsx +900 -0
- package/Tests/UI/Rum/ReplayScrubber.test.tsx +763 -147
- package/Tests/UI/Rum/ReplaySignalTypes.test.ts +189 -0
- package/Tests/UI/Rum/ReplaySignals.test.ts +1579 -0
- package/Tests/UI/Rum/ReplayStage.test.tsx +396 -473
- package/Tests/UI/Rum/ReplayStageOverlays.test.tsx +918 -0
- package/Tests/UI/Rum/ReplayTimeline.test.tsx +696 -0
- package/Tests/UI/Rum/SessionReplayEmptyState.test.tsx +499 -0
- package/Tests/UI/Rum/SessionReplaySearchBar.test.tsx +346 -0
- package/Tests/UI/Rum/SessionReplaySetupGuide.test.tsx +545 -0
- package/Tests/UI/Rum/SessionReplayTable.test.tsx +991 -0
- package/Tests/UI/Rum/TargetedCapturePanel.test.tsx +254 -0
- package/Tests/UI/Telemetry/BrowserExporterIsolation.test.ts +71 -0
- package/Tests/UI/Utils/GlobalKeyboardShortcut.test.ts +344 -0
- package/Tests/Utils/API.test.ts +308 -0
- package/Tests/Utils/HTTPResponseBodyReader.test.ts +323 -0
- package/Tests/Utils/NetworkDiscovery/DiscoveryScanStatus.test.ts +117 -0
- package/Tests/Utils/Rum/ChunkMath.test.ts +83 -0
- package/Tests/Utils/Rum/SessionReplayHealthDiagnosis.test.ts +993 -0
- package/Tests/Utils/Rum/SessionReplayStringMap.test.ts +245 -0
- package/Tests/Utils/StatusPage/ResourceSearch.test.ts +631 -0
- package/Tests/Utils/Telemetry/OriginAllowList.test.ts +633 -0
- package/Tests/Utils/Uptime/DayUptimeGraphUtil.test.ts +461 -0
- package/Tests/Utils/ValueFormatter.test.ts +148 -0
- package/Types/CustomField/CustomFieldMappingCatalog.ts +161 -0
- package/Types/CustomField/CustomFieldMappingSourceResource.ts +19 -0
- package/Types/CustomField/CustomFieldValueMapping.ts +288 -0
- package/Types/Icon/IconProp.ts +1 -0
- package/Types/JSONFunctions.ts +189 -43
- package/Types/Monitor/CephAlertTemplates.ts +157 -195
- package/Types/Monitor/DockerAlertTemplates.ts +338 -128
- package/Types/Monitor/DockerSwarmAlertTemplates.ts +95 -112
- package/Types/Monitor/HostAlertTemplates.ts +302 -130
- package/Types/Monitor/IotAlertTemplates.ts +112 -104
- package/Types/Monitor/KubernetesAlertTemplates.ts +415 -224
- package/Types/Monitor/KubernetesMetricCatalog.ts +23 -19
- package/Types/Monitor/PodmanAlertTemplates.ts +116 -163
- package/Types/Monitor/ProxmoxAlertTemplates.ts +217 -99
- package/Types/Monitor/Recommendation/MonitorRecommendationSeverityMapper.ts +98 -6
- package/Types/Monitor/Recommendation/MonitorRecommendationUtil.ts +44 -7
- package/Types/Monitor/Recommendation/RecommendationCriteriaBuilder.ts +383 -0
- package/Types/Monitor/RumAlertTemplates.ts +46 -7
- package/Types/Monitor/SeriesContext/SeriesDebugHints.ts +596 -0
- package/Types/Monitor/SeriesContext/SeriesLabelDisplay.ts +554 -0
- package/Types/Monitor/ServiceAlertTemplates.ts +98 -11
- package/Types/Monitor/UptimeHistoryLabels.ts +56 -0
- package/Types/NotificationSetting/RoutineEmailEvents.ts +30 -0
- package/Types/Rum/SessionReplay.ts +209 -0
- package/Types/Rum/SessionReplayApi.ts +722 -0
- package/Types/Rum/SessionReplayCaptureTrigger.ts +21 -12
- package/Types/Rum/SessionReplayConsentMode.ts +11 -7
- package/Types/Rum/SessionReplayCustomEvents.ts +549 -0
- package/Types/Rum/SessionReplayHealth.ts +238 -0
- package/Types/Telemetry/TelemetryIngestSurface.ts +95 -0
- package/Types/Telemetry/TelemetryIngestionKeyPolicy.ts +75 -0
- package/Types/Telemetry/TelemetryIngestionKeyType.ts +29 -0
- package/Types/WebsiteRequest.ts +85 -3
- package/UI/Components/Charts/Area/AreaChart.tsx +13 -2
- package/UI/Components/Charts/Bar/BarChart.tsx +6 -2
- package/UI/Components/Charts/Line/LineChart.tsx +13 -2
- package/UI/Components/Charts/Types/XAxis/XAxis.ts +29 -0
- package/UI/Components/Charts/Utils/DataPoint.ts +22 -3
- package/UI/Components/Charts/Utils/TimeAnnotation.ts +76 -9
- package/UI/Components/Charts/Utils/XAxis.ts +217 -0
- package/UI/Components/CustomFields/CustomFieldsDetail.tsx +143 -25
- package/UI/Components/CustomFields/MapFromCustomFieldInput.tsx +216 -0
- package/UI/Components/Graphs/DayUptimeGraph.tsx +173 -8
- package/UI/Components/Graphs/UptimeBarTooltip.tsx +22 -278
- package/UI/Components/Graphs/UptimeDaySummary.tsx +327 -0
- package/UI/Components/Header/Header.tsx +25 -9
- package/UI/Components/Header/IconDropdown/IconDropdownItem.tsx +10 -1
- package/UI/Components/Header/IconDropdown/IconDropdownMenu.tsx +6 -1
- package/UI/Components/Header/ProjectPicker/ProjectPicker.tsx +6 -1
- package/UI/Components/HeaderAlert/NotificationBell/NotificationBellDropdown.tsx +6 -1
- package/UI/Components/Icon/Icon.tsx +11 -0
- package/UI/Components/JSONTable/JSONTable.tsx +2 -2
- package/UI/Components/KeyboardShortcut/KeyboardShortcutsModal.tsx +125 -0
- package/UI/Components/KeyboardShortcut/Screenshots/README.md +19 -0
- package/UI/Components/KeyboardShortcut/Screenshots/keyboard-shortcuts-command-palette.png +0 -0
- package/UI/Components/KeyboardShortcut/Screenshots/keyboard-shortcuts-dialog-dark.png +0 -0
- package/UI/Components/KeyboardShortcut/Screenshots/keyboard-shortcuts-dialog.png +0 -0
- package/UI/Components/KeyboardShortcut/Screenshots/keyboard-shortcuts-help-menu.png +0 -0
- package/UI/Components/KeyboardShortcut/Screenshots/keyboard-shortcuts-narrow.png +0 -0
- package/UI/Components/ModelTable/Column.ts +15 -0
- package/UI/Components/Monitor/SeriesDebugCommandsViewer.tsx +64 -0
- package/UI/Components/Monitor/SeriesLabelsViewer.tsx +93 -0
- package/UI/Components/MonitorGraphs/Uptime.tsx +14 -2
- package/UI/Components/MonitorGraphs/UptimeBarDayModal.tsx +63 -10
- package/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.ts +44 -0
- package/UI/Components/StatusPage/ResourceGroupSection.tsx +40 -0
- package/UI/Components/Table/CellClassName.ts +81 -0
- package/UI/Components/Table/TableRow.tsx +20 -14
- package/UI/Components/Table/TableSkeletonRows.tsx +9 -9
- package/UI/Components/Table/Types/Column.ts +36 -0
- package/UI/Components/Tooltip/Tooltip.tsx +11 -1
- package/UI/Components/Workflow/ComponentsModal.tsx +60 -39
- package/UI/Components/Workflow/NodePlacement.ts +57 -0
- package/UI/Components/Workflow/Workflow.tsx +47 -18
- package/UI/Config.ts +15 -33
- package/UI/Utils/GlobalKeyboardShortcut.ts +208 -0
- package/UI/Utils/Telemetry/BrowserTelemetryConfig.ts +28 -0
- package/UI/Utils/Telemetry/Telemetry.ts +10 -8
- package/Utils/API.ts +129 -3
- package/Utils/HTTPResponseBodyReader.ts +221 -0
- package/Utils/NetworkDiscovery/DiscoveryScanStatus.ts +77 -0
- package/Utils/Rum/ChunkMath.ts +106 -0
- package/Utils/Rum/SessionReplayHealth.ts +732 -0
- package/Utils/Rum/SessionReplayStringMap.ts +226 -0
- package/Utils/Schema/ModelSchema.ts +1 -0
- package/Utils/StatusPage/ResourceSearch.ts +290 -0
- package/Utils/Telemetry/OriginAllowList.ts +355 -0
- package/Utils/Uptime/DayUptimeGraphUtil.ts +205 -0
- package/Utils/ValueFormatter.ts +35 -1
- package/build/dist/Models/AnalyticsModels/RumSession.js +102 -19
- package/build/dist/Models/AnalyticsModels/RumSession.js.map +1 -1
- package/build/dist/Models/AnalyticsModels/RumSessionChunk.js +11 -9
- package/build/dist/Models/AnalyticsModels/RumSessionChunk.js.map +1 -1
- package/build/dist/Models/DatabaseModels/AlertCustomField.js +79 -3
- package/build/dist/Models/DatabaseModels/AlertCustomField.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ApiKeyPermission.js +3 -27
- package/build/dist/Models/DatabaseModels/ApiKeyPermission.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncidentCustomField.js +79 -3
- package/build/dist/Models/DatabaseModels/IncidentCustomField.js.map +1 -1
- package/build/dist/Models/DatabaseModels/InventoryItemCustomField.js +79 -3
- package/build/dist/Models/DatabaseModels/InventoryItemCustomField.js.map +1 -1
- package/build/dist/Models/DatabaseModels/MonitorCustomField.js +79 -3
- package/build/dist/Models/DatabaseModels/MonitorCustomField.js.map +1 -1
- package/build/dist/Models/DatabaseModels/OnCallDutyPolicyCustomField.js +79 -3
- package/build/dist/Models/DatabaseModels/OnCallDutyPolicyCustomField.js.map +1 -1
- package/build/dist/Models/DatabaseModels/RumApplication.js +6 -6
- package/build/dist/Models/DatabaseModels/RumApplication.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ScheduledMaintenanceCustomField.js +79 -3
- package/build/dist/Models/DatabaseModels/ScheduledMaintenanceCustomField.js.map +1 -1
- package/build/dist/Models/DatabaseModels/StatusPageCustomField.js +79 -3
- package/build/dist/Models/DatabaseModels/StatusPageCustomField.js.map +1 -1
- package/build/dist/Models/DatabaseModels/TeamCustomField.js +79 -3
- package/build/dist/Models/DatabaseModels/TeamCustomField.js.map +1 -1
- package/build/dist/Models/DatabaseModels/TeamMember.js +0 -9
- package/build/dist/Models/DatabaseModels/TeamMember.js.map +1 -1
- package/build/dist/Models/DatabaseModels/TeamMemberCustomField.js +79 -3
- package/build/dist/Models/DatabaseModels/TeamMemberCustomField.js.map +1 -1
- package/build/dist/Models/DatabaseModels/TeamPermission.js +3 -24
- package/build/dist/Models/DatabaseModels/TeamPermission.js.map +1 -1
- package/build/dist/Models/DatabaseModels/TelemetryIngestionKey.js +267 -0
- package/build/dist/Models/DatabaseModels/TelemetryIngestionKey.js.map +1 -1
- package/build/dist/Models/DatabaseModels/UserTelegram.js +0 -4
- package/build/dist/Models/DatabaseModels/UserTelegram.js.map +1 -1
- package/build/dist/Server/API/TelemetryAPI.js +769 -109
- package/build/dist/Server/API/TelemetryAPI.js.map +1 -1
- package/build/dist/Server/API/UserNotificationSettingAPI.js +35 -0
- package/build/dist/Server/API/UserNotificationSettingAPI.js.map +1 -0
- package/build/dist/Server/API/UserTelegramAPI.js +28 -6
- package/build/dist/Server/API/UserTelegramAPI.js.map +1 -1
- package/build/dist/Server/EnvironmentConfig.js +29 -2
- package/build/dist/Server/EnvironmentConfig.js.map +1 -1
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1791300000000-AddTelemetryIngestionKeyType.js +60 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1791300000000-AddTelemetryIngestionKeyType.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1791400000000-SessionReplayRecordEverySessionByDefault.js +53 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1791400000000-SessionReplayRecordEverySessionByDefault.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1791500000000-WidenCustomFieldDropdownOptions.js +82 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1791500000000-WidenCustomFieldDropdownOptions.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1791600000000-AddCustomFieldValueMapping.js +46 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1791600000000-AddCustomFieldValueMapping.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +8 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
- package/build/dist/Server/Infrastructure/QueueWorker.js +19 -7
- package/build/dist/Server/Infrastructure/QueueWorker.js.map +1 -1
- package/build/dist/Server/Infrastructure/Semaphore.js +1 -0
- package/build/dist/Server/Infrastructure/Semaphore.js.map +1 -1
- package/build/dist/Server/Middleware/TelemetryIngest.js +315 -8
- package/build/dist/Server/Middleware/TelemetryIngest.js.map +1 -1
- package/build/dist/Server/Services/AccessTokenService.js +1 -0
- package/build/dist/Server/Services/AccessTokenService.js.map +1 -1
- package/build/dist/Server/Services/AlertCustomFieldService.js +93 -0
- package/build/dist/Server/Services/AlertCustomFieldService.js.map +1 -1
- package/build/dist/Server/Services/AlertService.js +34 -0
- package/build/dist/Server/Services/AlertService.js.map +1 -1
- package/build/dist/Server/Services/ApiKeyPermissionService.js +331 -28
- package/build/dist/Server/Services/ApiKeyPermissionService.js.map +1 -1
- package/build/dist/Server/Services/CustomFieldMappingService.js +614 -0
- package/build/dist/Server/Services/CustomFieldMappingService.js.map +1 -0
- package/build/dist/Server/Services/GlobalConfigService.js +133 -0
- package/build/dist/Server/Services/GlobalConfigService.js.map +1 -1
- package/build/dist/Server/Services/IncidentCustomFieldService.js +93 -0
- package/build/dist/Server/Services/IncidentCustomFieldService.js.map +1 -1
- package/build/dist/Server/Services/IncidentService.js +32 -0
- package/build/dist/Server/Services/IncidentService.js.map +1 -1
- package/build/dist/Server/Services/MetricService.js +163 -0
- package/build/dist/Server/Services/MetricService.js.map +1 -1
- package/build/dist/Server/Services/MonitorService.js +29 -0
- package/build/dist/Server/Services/MonitorService.js.map +1 -1
- package/build/dist/Server/Services/NetworkDeviceAutoImportRuleEngineService.js +79 -27
- package/build/dist/Server/Services/NetworkDeviceAutoImportRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/ProjectService.js +22 -0
- package/build/dist/Server/Services/ProjectService.js.map +1 -1
- package/build/dist/Server/Services/RoutineEmailSettingsService.js +69 -0
- package/build/dist/Server/Services/RoutineEmailSettingsService.js.map +1 -0
- package/build/dist/Server/Services/RumSessionReplayViewService.js +86 -24
- package/build/dist/Server/Services/RumSessionReplayViewService.js.map +1 -1
- package/build/dist/Server/Services/ScheduledMaintenanceCustomFieldService.js +93 -0
- package/build/dist/Server/Services/ScheduledMaintenanceCustomFieldService.js.map +1 -1
- package/build/dist/Server/Services/ScheduledMaintenanceService.js +29 -0
- package/build/dist/Server/Services/ScheduledMaintenanceService.js.map +1 -1
- package/build/dist/Server/Services/TeamMemberService.js +62 -2
- package/build/dist/Server/Services/TeamMemberService.js.map +1 -1
- package/build/dist/Server/Services/TeamPermissionService.js +166 -3
- package/build/dist/Server/Services/TeamPermissionService.js.map +1 -1
- package/build/dist/Server/Services/TelemetryIngestionKeyService.js +562 -18
- package/build/dist/Server/Services/TelemetryIngestionKeyService.js.map +1 -1
- package/build/dist/Server/Services/UserNotificationSettingService.js +26 -6
- package/build/dist/Server/Services/UserNotificationSettingService.js.map +1 -1
- package/build/dist/Server/Services/UserTelegramService.js +257 -4
- package/build/dist/Server/Services/UserTelegramService.js.map +1 -1
- package/build/dist/Server/Types/Database/QueryHelper.js.map +1 -1
- package/build/dist/Server/Utils/APIKey/AccessPermission.js +2 -2
- package/build/dist/Server/Utils/APIKey/AccessPermission.js.map +1 -1
- package/build/dist/Server/Utils/CustomField/CustomFieldDefinitionMappingHooks.js +27 -0
- package/build/dist/Server/Utils/CustomField/CustomFieldDefinitionMappingHooks.js.map +1 -0
- package/build/dist/Server/Utils/CustomField/CustomFieldMappingRegistry.js +226 -0
- package/build/dist/Server/Utils/CustomField/CustomFieldMappingRegistry.js.map +1 -0
- package/build/dist/Server/Utils/CustomField/CustomFieldMappingValidator.js +189 -0
- package/build/dist/Server/Utils/CustomField/CustomFieldMappingValidator.js.map +1 -0
- package/build/dist/Server/Utils/DataSource/EgressGuard.js +121 -7
- package/build/dist/Server/Utils/DataSource/EgressGuard.js.map +1 -1
- package/build/dist/Server/Utils/EmailRollup/EmailRollupConstants.js +38 -5
- package/build/dist/Server/Utils/EmailRollup/EmailRollupConstants.js.map +1 -1
- package/build/dist/Server/Utils/EmailRollup/EmailRollupFlushRunner.js +44 -2
- package/build/dist/Server/Utils/EmailRollup/EmailRollupFlushRunner.js.map +1 -1
- package/build/dist/Server/Utils/FrontendEnvironment.js +33 -0
- package/build/dist/Server/Utils/FrontendEnvironment.js.map +1 -0
- package/build/dist/Server/Utils/LogRedaction.js +20 -0
- package/build/dist/Server/Utils/LogRedaction.js.map +1 -1
- package/build/dist/Server/Utils/Logger.js +10 -0
- package/build/dist/Server/Utils/Logger.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/Criteria/CompareCriteria.js +287 -68
- package/build/dist/Server/Utils/Monitor/Criteria/CompareCriteria.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/Criteria/IncomingRequestCriteria.js +20 -4
- package/build/dist/Server/Utils/Monitor/Criteria/IncomingRequestCriteria.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorAlert.js +29 -6
- package/build/dist/Server/Utils/Monitor/MonitorAlert.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js +88 -13
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorIncident.js +22 -6
- package/build/dist/Server/Utils/Monitor/MonitorIncident.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorTemplateUtil.js +22 -0
- package/build/dist/Server/Utils/Monitor/MonitorTemplateUtil.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/SeriesContextEnricher.js +237 -0
- package/build/dist/Server/Utils/Monitor/SeriesContextEnricher.js.map +1 -0
- package/build/dist/Server/Utils/SSRFProtection.js +136 -9
- package/build/dist/Server/Utils/SSRFProtection.js.map +1 -1
- package/build/dist/Server/Utils/SessionReplay/SessionReplayGateCache.js +174 -89
- package/build/dist/Server/Utils/SessionReplay/SessionReplayGateCache.js.map +1 -1
- package/build/dist/Server/Utils/SessionReplay/SessionReplayHealthCounters.js +223 -0
- package/build/dist/Server/Utils/SessionReplay/SessionReplayHealthCounters.js.map +1 -0
- package/build/dist/Server/Utils/SessionReplay/SessionReplayReadService.js +945 -164
- package/build/dist/Server/Utils/SessionReplay/SessionReplayReadService.js.map +1 -1
- package/build/dist/Server/Utils/StartServer.js +3 -14
- package/build/dist/Server/Utils/StartServer.js.map +1 -1
- package/build/dist/Server/Utils/TelegramVerificationToken.js +129 -0
- package/build/dist/Server/Utils/TelegramVerificationToken.js.map +1 -0
- package/build/dist/Server/Utils/Telemetry/PinServiceName.js +163 -0
- package/build/dist/Server/Utils/Telemetry/PinServiceName.js.map +1 -0
- package/build/dist/Server/Utils/Telemetry/TelemetryFanInWriter.js +28 -15
- package/build/dist/Server/Utils/Telemetry/TelemetryFanInWriter.js.map +1 -1
- package/build/dist/Server/Utils/Telemetry/TelemetryIngestionKeyGuard.js +64 -0
- package/build/dist/Server/Utils/Telemetry/TelemetryIngestionKeyGuard.js.map +1 -0
- package/build/dist/Server/Utils/Telemetry/TelemetryIngestionKeyRateLimiter.js +171 -0
- package/build/dist/Server/Utils/Telemetry/TelemetryIngestionKeyRateLimiter.js.map +1 -0
- package/build/dist/Server/Utils/VM/VMAPI.js.map +1 -1
- package/build/dist/Server/Utils/VM/VMRunner.js +780 -69
- package/build/dist/Server/Utils/VM/VMRunner.js.map +1 -1
- package/build/dist/Types/CustomField/CustomFieldMappingCatalog.js +60 -0
- package/build/dist/Types/CustomField/CustomFieldMappingCatalog.js.map +1 -0
- package/build/dist/Types/CustomField/CustomFieldMappingSourceResource.js +20 -0
- package/build/dist/Types/CustomField/CustomFieldMappingSourceResource.js.map +1 -0
- package/build/dist/Types/CustomField/CustomFieldValueMapping.js +141 -0
- package/build/dist/Types/CustomField/CustomFieldValueMapping.js.map +1 -0
- package/build/dist/Types/Icon/IconProp.js +1 -0
- package/build/dist/Types/Icon/IconProp.js.map +1 -1
- package/build/dist/Types/JSONFunctions.js +118 -37
- package/build/dist/Types/JSONFunctions.js.map +1 -1
- package/build/dist/Types/Monitor/CephAlertTemplates.js +130 -171
- package/build/dist/Types/Monitor/CephAlertTemplates.js.map +1 -1
- package/build/dist/Types/Monitor/DockerAlertTemplates.js +286 -121
- package/build/dist/Types/Monitor/DockerAlertTemplates.js.map +1 -1
- package/build/dist/Types/Monitor/DockerSwarmAlertTemplates.js +84 -105
- package/build/dist/Types/Monitor/DockerSwarmAlertTemplates.js.map +1 -1
- package/build/dist/Types/Monitor/HostAlertTemplates.js +250 -122
- package/build/dist/Types/Monitor/HostAlertTemplates.js.map +1 -1
- package/build/dist/Types/Monitor/IotAlertTemplates.js +81 -81
- package/build/dist/Types/Monitor/IotAlertTemplates.js.map +1 -1
- package/build/dist/Types/Monitor/KubernetesAlertTemplates.js +375 -215
- package/build/dist/Types/Monitor/KubernetesAlertTemplates.js.map +1 -1
- package/build/dist/Types/Monitor/KubernetesMetricCatalog.js +19 -19
- package/build/dist/Types/Monitor/KubernetesMetricCatalog.js.map +1 -1
- package/build/dist/Types/Monitor/PodmanAlertTemplates.js +104 -153
- package/build/dist/Types/Monitor/PodmanAlertTemplates.js.map +1 -1
- package/build/dist/Types/Monitor/ProxmoxAlertTemplates.js +156 -91
- package/build/dist/Types/Monitor/ProxmoxAlertTemplates.js.map +1 -1
- package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationSeverityMapper.js +67 -6
- package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationSeverityMapper.js.map +1 -1
- package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationUtil.js +38 -7
- package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationUtil.js.map +1 -1
- package/build/dist/Types/Monitor/Recommendation/RecommendationCriteriaBuilder.js +261 -0
- package/build/dist/Types/Monitor/Recommendation/RecommendationCriteriaBuilder.js.map +1 -0
- package/build/dist/Types/Monitor/RumAlertTemplates.js +46 -7
- package/build/dist/Types/Monitor/RumAlertTemplates.js.map +1 -1
- package/build/dist/Types/Monitor/SeriesContext/SeriesDebugHints.js +422 -0
- package/build/dist/Types/Monitor/SeriesContext/SeriesDebugHints.js.map +1 -0
- package/build/dist/Types/Monitor/SeriesContext/SeriesLabelDisplay.js +441 -0
- package/build/dist/Types/Monitor/SeriesContext/SeriesLabelDisplay.js.map +1 -0
- package/build/dist/Types/Monitor/ServiceAlertTemplates.js +79 -15
- package/build/dist/Types/Monitor/ServiceAlertTemplates.js.map +1 -1
- package/build/dist/Types/Monitor/UptimeHistoryLabels.js +17 -0
- package/build/dist/Types/Monitor/UptimeHistoryLabels.js.map +1 -0
- package/build/dist/Types/NotificationSetting/RoutineEmailEvents.js +29 -0
- package/build/dist/Types/NotificationSetting/RoutineEmailEvents.js.map +1 -0
- package/build/dist/Types/Rum/SessionReplay.js +117 -0
- package/build/dist/Types/Rum/SessionReplay.js.map +1 -1
- package/build/dist/Types/Rum/SessionReplayApi.js +181 -0
- package/build/dist/Types/Rum/SessionReplayApi.js.map +1 -0
- package/build/dist/Types/Rum/SessionReplayCaptureTrigger.js +21 -12
- package/build/dist/Types/Rum/SessionReplayCaptureTrigger.js.map +1 -1
- package/build/dist/Types/Rum/SessionReplayConsentMode.js +11 -7
- package/build/dist/Types/Rum/SessionReplayConsentMode.js.map +1 -1
- package/build/dist/Types/Rum/SessionReplayCustomEvents.js +172 -0
- package/build/dist/Types/Rum/SessionReplayCustomEvents.js.map +1 -0
- package/build/dist/Types/Rum/SessionReplayHealth.js +37 -0
- package/build/dist/Types/Rum/SessionReplayHealth.js.map +1 -0
- package/build/dist/Types/Telemetry/TelemetryIngestSurface.js +85 -0
- package/build/dist/Types/Telemetry/TelemetryIngestSurface.js.map +1 -0
- package/build/dist/Types/Telemetry/TelemetryIngestionKeyPolicy.js +15 -0
- package/build/dist/Types/Telemetry/TelemetryIngestionKeyPolicy.js.map +1 -0
- package/build/dist/Types/Telemetry/TelemetryIngestionKeyType.js +30 -0
- package/build/dist/Types/Telemetry/TelemetryIngestionKeyType.js.map +1 -0
- package/build/dist/Types/WebsiteRequest.js +55 -3
- package/build/dist/Types/WebsiteRequest.js.map +1 -1
- package/build/dist/UI/Components/Charts/Area/AreaChart.js +13 -2
- package/build/dist/UI/Components/Charts/Area/AreaChart.js.map +1 -1
- package/build/dist/UI/Components/Charts/Bar/BarChart.js +6 -2
- package/build/dist/UI/Components/Charts/Bar/BarChart.js.map +1 -1
- package/build/dist/UI/Components/Charts/Line/LineChart.js +13 -2
- package/build/dist/UI/Components/Charts/Line/LineChart.js.map +1 -1
- package/build/dist/UI/Components/Charts/Types/XAxis/XAxis.js.map +1 -1
- package/build/dist/UI/Components/Charts/Utils/DataPoint.js +15 -3
- package/build/dist/UI/Components/Charts/Utils/DataPoint.js.map +1 -1
- package/build/dist/UI/Components/Charts/Utils/TimeAnnotation.js +40 -9
- package/build/dist/UI/Components/Charts/Utils/TimeAnnotation.js.map +1 -1
- package/build/dist/UI/Components/Charts/Utils/XAxis.js +186 -0
- package/build/dist/UI/Components/Charts/Utils/XAxis.js.map +1 -1
- package/build/dist/UI/Components/CustomFields/CustomFieldsDetail.js +80 -6
- package/build/dist/UI/Components/CustomFields/CustomFieldsDetail.js.map +1 -1
- package/build/dist/UI/Components/CustomFields/MapFromCustomFieldInput.js +118 -0
- package/build/dist/UI/Components/CustomFields/MapFromCustomFieldInput.js.map +1 -0
- package/build/dist/UI/Components/Graphs/DayUptimeGraph.js +112 -7
- package/build/dist/UI/Components/Graphs/DayUptimeGraph.js.map +1 -1
- package/build/dist/UI/Components/Graphs/UptimeBarTooltip.js +5 -162
- package/build/dist/UI/Components/Graphs/UptimeBarTooltip.js.map +1 -1
- package/build/dist/UI/Components/Graphs/UptimeDaySummary.js +181 -0
- package/build/dist/UI/Components/Graphs/UptimeDaySummary.js.map +1 -0
- package/build/dist/UI/Components/Header/Header.js +2 -3
- package/build/dist/UI/Components/Header/Header.js.map +1 -1
- package/build/dist/UI/Components/Header/IconDropdown/IconDropdownItem.js +2 -1
- package/build/dist/UI/Components/Header/IconDropdown/IconDropdownItem.js.map +1 -1
- package/build/dist/UI/Components/Header/IconDropdown/IconDropdownMenu.js +7 -1
- package/build/dist/UI/Components/Header/IconDropdown/IconDropdownMenu.js.map +1 -1
- package/build/dist/UI/Components/Header/ProjectPicker/ProjectPicker.js +7 -1
- package/build/dist/UI/Components/Header/ProjectPicker/ProjectPicker.js.map +1 -1
- package/build/dist/UI/Components/HeaderAlert/NotificationBell/NotificationBellDropdown.js +7 -1
- package/build/dist/UI/Components/HeaderAlert/NotificationBell/NotificationBellDropdown.js.map +1 -1
- package/build/dist/UI/Components/Icon/Icon.js +5 -0
- package/build/dist/UI/Components/Icon/Icon.js.map +1 -1
- package/build/dist/UI/Components/JSONTable/JSONTable.js +2 -2
- package/build/dist/UI/Components/JSONTable/JSONTable.js.map +1 -1
- package/build/dist/UI/Components/KeyboardShortcut/KeyboardShortcutsModal.js +35 -0
- package/build/dist/UI/Components/KeyboardShortcut/KeyboardShortcutsModal.js.map +1 -0
- package/build/dist/UI/Components/Monitor/SeriesDebugCommandsViewer.js +34 -0
- package/build/dist/UI/Components/Monitor/SeriesDebugCommandsViewer.js.map +1 -0
- package/build/dist/UI/Components/Monitor/SeriesLabelsViewer.js +49 -0
- package/build/dist/UI/Components/Monitor/SeriesLabelsViewer.js.map +1 -0
- package/build/dist/UI/Components/MonitorGraphs/Uptime.js +1 -1
- package/build/dist/UI/Components/MonitorGraphs/Uptime.js.map +1 -1
- package/build/dist/UI/Components/MonitorGraphs/UptimeBarDayModal.js +32 -6
- package/build/dist/UI/Components/MonitorGraphs/UptimeBarDayModal.js.map +1 -1
- package/build/dist/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.js +38 -0
- package/build/dist/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.js.map +1 -1
- package/build/dist/UI/Components/StatusPage/ResourceGroupSection.js +22 -1
- package/build/dist/UI/Components/StatusPage/ResourceGroupSection.js.map +1 -1
- package/build/dist/UI/Components/Table/CellClassName.js +55 -0
- package/build/dist/UI/Components/Table/CellClassName.js.map +1 -0
- package/build/dist/UI/Components/Table/TableRow.js +16 -13
- package/build/dist/UI/Components/Table/TableRow.js.map +1 -1
- package/build/dist/UI/Components/Table/TableSkeletonRows.js +9 -8
- package/build/dist/UI/Components/Table/TableSkeletonRows.js.map +1 -1
- package/build/dist/UI/Components/Tooltip/Tooltip.js +25 -1
- package/build/dist/UI/Components/Tooltip/Tooltip.js.map +1 -1
- package/build/dist/UI/Components/Workflow/ComponentsModal.js +47 -30
- package/build/dist/UI/Components/Workflow/ComponentsModal.js.map +1 -1
- package/build/dist/UI/Components/Workflow/NodePlacement.js +37 -0
- package/build/dist/UI/Components/Workflow/NodePlacement.js.map +1 -0
- package/build/dist/UI/Components/Workflow/Workflow.js +35 -18
- package/build/dist/UI/Components/Workflow/Workflow.js.map +1 -1
- package/build/dist/UI/Config.js +10 -20
- package/build/dist/UI/Config.js.map +1 -1
- package/build/dist/UI/Utils/GlobalKeyboardShortcut.js +138 -0
- package/build/dist/UI/Utils/GlobalKeyboardShortcut.js.map +1 -0
- package/build/dist/UI/Utils/Telemetry/BrowserTelemetryConfig.js +14 -0
- package/build/dist/UI/Utils/Telemetry/BrowserTelemetryConfig.js.map +1 -0
- package/build/dist/UI/Utils/Telemetry/Telemetry.js +7 -5
- package/build/dist/UI/Utils/Telemetry/Telemetry.js.map +1 -1
- package/build/dist/Utils/API.js +67 -5
- package/build/dist/Utils/API.js.map +1 -1
- package/build/dist/Utils/HTTPResponseBodyReader.js +157 -0
- package/build/dist/Utils/HTTPResponseBodyReader.js.map +1 -0
- package/build/dist/Utils/NetworkDiscovery/DiscoveryScanStatus.js +69 -0
- package/build/dist/Utils/NetworkDiscovery/DiscoveryScanStatus.js.map +1 -0
- package/build/dist/Utils/Rum/ChunkMath.js +76 -0
- package/build/dist/Utils/Rum/ChunkMath.js.map +1 -1
- package/build/dist/Utils/Rum/SessionReplayHealth.js +534 -0
- package/build/dist/Utils/Rum/SessionReplayHealth.js.map +1 -0
- package/build/dist/Utils/Rum/SessionReplayStringMap.js +165 -0
- package/build/dist/Utils/Rum/SessionReplayStringMap.js.map +1 -0
- package/build/dist/Utils/Schema/ModelSchema.js +1 -0
- package/build/dist/Utils/Schema/ModelSchema.js.map +1 -1
- package/build/dist/Utils/StatusPage/ResourceSearch.js +200 -0
- package/build/dist/Utils/StatusPage/ResourceSearch.js.map +1 -0
- package/build/dist/Utils/Telemetry/OriginAllowList.js +299 -0
- package/build/dist/Utils/Telemetry/OriginAllowList.js.map +1 -0
- package/build/dist/Utils/Uptime/DayUptimeGraphUtil.js +147 -0
- package/build/dist/Utils/Uptime/DayUptimeGraphUtil.js.map +1 -0
- package/build/dist/Utils/ValueFormatter.js +32 -1
- package/build/dist/Utils/ValueFormatter.js.map +1 -1
- package/package.json +1 -1
|
@@ -3,6 +3,7 @@ import User from "./User";
|
|
|
3
3
|
import BaseModel from "./DatabaseBaseModel/DatabaseBaseModel";
|
|
4
4
|
import Route from "../../Types/API/Route";
|
|
5
5
|
import { PlanType } from "../../Types/Billing/SubscriptionPlan";
|
|
6
|
+
import CustomFieldMappingSourceResource from "../../Types/CustomField/CustomFieldMappingSourceResource";
|
|
6
7
|
import CustomFieldType from "../../Types/CustomField/CustomFieldType";
|
|
7
8
|
import ColumnAccessControl from "../../Types/Database/AccessControl/ColumnAccessControl";
|
|
8
9
|
import TableAccessControl from "../../Types/Database/AccessControl/TableAccessControl";
|
|
@@ -272,7 +273,7 @@ export default class TeamMemberCustomField extends BaseModel {
|
|
|
272
273
|
})
|
|
273
274
|
@TableColumn({
|
|
274
275
|
required: false,
|
|
275
|
-
type: TableColumnType.
|
|
276
|
+
type: TableColumnType.VeryLongText,
|
|
276
277
|
title: "Dropdown Options",
|
|
277
278
|
description:
|
|
278
279
|
"Options and optional colors for dropdown fields. Plain one-per-line values remain supported.",
|
|
@@ -280,11 +281,84 @@ export default class TeamMemberCustomField extends BaseModel {
|
|
|
280
281
|
})
|
|
281
282
|
@Column({
|
|
282
283
|
nullable: true,
|
|
283
|
-
type: ColumnType.
|
|
284
|
-
length: ColumnLength.LongText,
|
|
284
|
+
type: ColumnType.VeryLongText,
|
|
285
285
|
})
|
|
286
286
|
public dropdownOptions?: string = undefined;
|
|
287
287
|
|
|
288
|
+
@ColumnAccessControl({
|
|
289
|
+
create: [
|
|
290
|
+
Permission.ProjectOwner,
|
|
291
|
+
Permission.ProjectAdmin,
|
|
292
|
+
Permission.CreateTeamMemberCustomField,
|
|
293
|
+
],
|
|
294
|
+
read: [
|
|
295
|
+
Permission.ProjectOwner,
|
|
296
|
+
Permission.ProjectAdmin,
|
|
297
|
+
Permission.ProjectMember,
|
|
298
|
+
Permission.Viewer,
|
|
299
|
+
Permission.SettingsAdmin,
|
|
300
|
+
Permission.SettingsMember,
|
|
301
|
+
Permission.SettingsViewer,
|
|
302
|
+
Permission.ReadTeamMemberCustomField,
|
|
303
|
+
],
|
|
304
|
+
update: [
|
|
305
|
+
Permission.ProjectOwner,
|
|
306
|
+
Permission.ProjectAdmin,
|
|
307
|
+
Permission.EditTeamMemberCustomField,
|
|
308
|
+
],
|
|
309
|
+
})
|
|
310
|
+
@TableColumn({
|
|
311
|
+
required: false,
|
|
312
|
+
type: TableColumnType.ShortText,
|
|
313
|
+
title: "Map Value From",
|
|
314
|
+
description:
|
|
315
|
+
"Related resource this field copies its value from. Empty means values are entered by hand.",
|
|
316
|
+
example: "Monitor",
|
|
317
|
+
})
|
|
318
|
+
@Column({
|
|
319
|
+
nullable: true,
|
|
320
|
+
type: ColumnType.ShortText,
|
|
321
|
+
length: ColumnLength.ShortText,
|
|
322
|
+
})
|
|
323
|
+
public mapFromResourceType?: CustomFieldMappingSourceResource = undefined;
|
|
324
|
+
|
|
325
|
+
@ColumnAccessControl({
|
|
326
|
+
create: [
|
|
327
|
+
Permission.ProjectOwner,
|
|
328
|
+
Permission.ProjectAdmin,
|
|
329
|
+
Permission.CreateTeamMemberCustomField,
|
|
330
|
+
],
|
|
331
|
+
read: [
|
|
332
|
+
Permission.ProjectOwner,
|
|
333
|
+
Permission.ProjectAdmin,
|
|
334
|
+
Permission.ProjectMember,
|
|
335
|
+
Permission.Viewer,
|
|
336
|
+
Permission.SettingsAdmin,
|
|
337
|
+
Permission.SettingsMember,
|
|
338
|
+
Permission.SettingsViewer,
|
|
339
|
+
Permission.ReadTeamMemberCustomField,
|
|
340
|
+
],
|
|
341
|
+
update: [
|
|
342
|
+
Permission.ProjectOwner,
|
|
343
|
+
Permission.ProjectAdmin,
|
|
344
|
+
Permission.EditTeamMemberCustomField,
|
|
345
|
+
],
|
|
346
|
+
})
|
|
347
|
+
@TableColumn({
|
|
348
|
+
required: false,
|
|
349
|
+
type: TableColumnType.ShortText,
|
|
350
|
+
title: "Map Value From Field",
|
|
351
|
+
description:
|
|
352
|
+
"Name of the custom field on the related resource this field copies its value from.",
|
|
353
|
+
example: "Vendor",
|
|
354
|
+
})
|
|
355
|
+
@Column({
|
|
356
|
+
nullable: true,
|
|
357
|
+
type: ColumnType.ShortText,
|
|
358
|
+
length: ColumnLength.ShortText,
|
|
359
|
+
})
|
|
360
|
+
public mapFromCustomFieldName?: string = undefined;
|
|
361
|
+
|
|
288
362
|
@ColumnAccessControl({
|
|
289
363
|
create: [
|
|
290
364
|
Permission.ProjectOwner,
|
|
@@ -42,7 +42,6 @@ import {
|
|
|
42
42
|
create: [
|
|
43
43
|
Permission.ProjectOwner,
|
|
44
44
|
Permission.ProjectAdmin,
|
|
45
|
-
Permission.CreateProjectTeam,
|
|
46
45
|
Permission.EditProjectTeamPermissions,
|
|
47
46
|
],
|
|
48
47
|
read: [
|
|
@@ -92,7 +91,6 @@ export default class TeamPermission extends BaseModel {
|
|
|
92
91
|
create: [
|
|
93
92
|
Permission.ProjectOwner,
|
|
94
93
|
Permission.ProjectAdmin,
|
|
95
|
-
Permission.CreateProjectTeam,
|
|
96
94
|
Permission.EditProjectTeamPermissions,
|
|
97
95
|
],
|
|
98
96
|
read: [
|
|
@@ -133,7 +131,6 @@ export default class TeamPermission extends BaseModel {
|
|
|
133
131
|
create: [
|
|
134
132
|
Permission.ProjectOwner,
|
|
135
133
|
Permission.ProjectAdmin,
|
|
136
|
-
Permission.CreateProjectTeam,
|
|
137
134
|
Permission.EditProjectTeamPermissions,
|
|
138
135
|
],
|
|
139
136
|
read: [
|
|
@@ -168,7 +165,6 @@ export default class TeamPermission extends BaseModel {
|
|
|
168
165
|
create: [
|
|
169
166
|
Permission.ProjectOwner,
|
|
170
167
|
Permission.ProjectAdmin,
|
|
171
|
-
Permission.CreateProjectTeam,
|
|
172
168
|
Permission.EditProjectTeamPermissions,
|
|
173
169
|
],
|
|
174
170
|
read: [
|
|
@@ -209,7 +205,6 @@ export default class TeamPermission extends BaseModel {
|
|
|
209
205
|
create: [
|
|
210
206
|
Permission.ProjectOwner,
|
|
211
207
|
Permission.ProjectAdmin,
|
|
212
|
-
Permission.CreateProjectTeam,
|
|
213
208
|
Permission.EditProjectTeamPermissions,
|
|
214
209
|
],
|
|
215
210
|
read: [
|
|
@@ -239,11 +234,7 @@ export default class TeamPermission extends BaseModel {
|
|
|
239
234
|
public teamId?: ObjectID = undefined;
|
|
240
235
|
|
|
241
236
|
@ColumnAccessControl({
|
|
242
|
-
create: [
|
|
243
|
-
Permission.ProjectOwner,
|
|
244
|
-
Permission.ProjectAdmin,
|
|
245
|
-
Permission.CreateProjectTeam,
|
|
246
|
-
],
|
|
237
|
+
create: [Permission.ProjectOwner, Permission.ProjectAdmin],
|
|
247
238
|
read: [
|
|
248
239
|
Permission.ProjectOwner,
|
|
249
240
|
Permission.ProjectAdmin,
|
|
@@ -280,11 +271,7 @@ export default class TeamPermission extends BaseModel {
|
|
|
280
271
|
public createdByUser?: User = undefined;
|
|
281
272
|
|
|
282
273
|
@ColumnAccessControl({
|
|
283
|
-
create: [
|
|
284
|
-
Permission.ProjectOwner,
|
|
285
|
-
Permission.ProjectAdmin,
|
|
286
|
-
Permission.CreateProjectTeam,
|
|
287
|
-
],
|
|
274
|
+
create: [Permission.ProjectOwner, Permission.ProjectAdmin],
|
|
288
275
|
read: [
|
|
289
276
|
Permission.ProjectOwner,
|
|
290
277
|
Permission.ProjectAdmin,
|
|
@@ -312,11 +299,7 @@ export default class TeamPermission extends BaseModel {
|
|
|
312
299
|
public createdByUserId?: ObjectID = undefined;
|
|
313
300
|
|
|
314
301
|
@ColumnAccessControl({
|
|
315
|
-
create: [
|
|
316
|
-
Permission.ProjectOwner,
|
|
317
|
-
Permission.ProjectAdmin,
|
|
318
|
-
Permission.CreateProjectTeam,
|
|
319
|
-
],
|
|
302
|
+
create: [Permission.ProjectOwner, Permission.ProjectAdmin],
|
|
320
303
|
read: [
|
|
321
304
|
Permission.ProjectOwner,
|
|
322
305
|
Permission.ProjectAdmin,
|
|
@@ -376,7 +359,6 @@ export default class TeamPermission extends BaseModel {
|
|
|
376
359
|
create: [
|
|
377
360
|
Permission.ProjectOwner,
|
|
378
361
|
Permission.ProjectAdmin,
|
|
379
|
-
Permission.CreateProjectTeam,
|
|
380
362
|
Permission.EditProjectTeamPermissions,
|
|
381
363
|
],
|
|
382
364
|
read: [
|
|
@@ -416,7 +398,6 @@ export default class TeamPermission extends BaseModel {
|
|
|
416
398
|
create: [
|
|
417
399
|
Permission.ProjectOwner,
|
|
418
400
|
Permission.ProjectAdmin,
|
|
419
|
-
Permission.CreateProjectTeam,
|
|
420
401
|
Permission.EditProjectTeamPermissions,
|
|
421
402
|
],
|
|
422
403
|
read: [
|
|
@@ -467,7 +448,6 @@ export default class TeamPermission extends BaseModel {
|
|
|
467
448
|
create: [
|
|
468
449
|
Permission.ProjectOwner,
|
|
469
450
|
Permission.ProjectAdmin,
|
|
470
|
-
Permission.CreateProjectTeam,
|
|
471
451
|
Permission.EditProjectTeamPermissions,
|
|
472
452
|
],
|
|
473
453
|
read: [
|
|
@@ -503,7 +483,6 @@ export default class TeamPermission extends BaseModel {
|
|
|
503
483
|
create: [
|
|
504
484
|
Permission.ProjectOwner,
|
|
505
485
|
Permission.ProjectAdmin,
|
|
506
|
-
Permission.CreateProjectTeam,
|
|
507
486
|
Permission.EditProjectTeamPermissions,
|
|
508
487
|
],
|
|
509
488
|
read: [
|
|
@@ -15,6 +15,7 @@ import TenantColumn from "../../Types/Database/TenantColumn";
|
|
|
15
15
|
import IconProp from "../../Types/Icon/IconProp";
|
|
16
16
|
import ObjectID from "../../Types/ObjectID";
|
|
17
17
|
import Permission from "../../Types/Permission";
|
|
18
|
+
import TelemetryIngestionKeyType from "../../Types/Telemetry/TelemetryIngestionKeyType";
|
|
18
19
|
import { Column, Entity, Index, JoinColumn, ManyToOne } from "typeorm";
|
|
19
20
|
|
|
20
21
|
@EnableDocumentation()
|
|
@@ -321,4 +322,263 @@ export default class TelemetryIngestionKey extends BaseModel {
|
|
|
321
322
|
transformer: ObjectID.getDatabaseTransformer(),
|
|
322
323
|
})
|
|
323
324
|
public secretKey?: ObjectID = undefined;
|
|
325
|
+
|
|
326
|
+
/*
|
|
327
|
+
* Deliberately IMMUTABLE: create and read, but `update: []`.
|
|
328
|
+
*
|
|
329
|
+
* The type of a key is what every ingest-time guard keys off - which
|
|
330
|
+
* surfaces it may reach, whether an origin allowlist is enforced, whether a
|
|
331
|
+
* default rate limit applies. Editing it in place would silently change what
|
|
332
|
+
* a credential that is already deployed is allowed to do, in either
|
|
333
|
+
* direction: flipping Server -> Browser breaks a collector that has been
|
|
334
|
+
* shipping traces for a year the moment it sends from no Origin, and
|
|
335
|
+
* flipping Browser -> Server strips the origin binding off a key that is
|
|
336
|
+
* still sitting in a public page, which is the single control stopping
|
|
337
|
+
* anyone who scraped it from writing forged telemetry.
|
|
338
|
+
*
|
|
339
|
+
* Neither is a change anyone should be able to make by ticking a box in a
|
|
340
|
+
* form, and both have a safe alternative that is barely more work: create a
|
|
341
|
+
* second key of the right type, move traffic to it, delete the old one.
|
|
342
|
+
*/
|
|
343
|
+
@ColumnAccessControl({
|
|
344
|
+
create: [
|
|
345
|
+
Permission.ProjectOwner,
|
|
346
|
+
Permission.ProjectAdmin,
|
|
347
|
+
Permission.CreateTelemetryIngestionKey,
|
|
348
|
+
],
|
|
349
|
+
read: [
|
|
350
|
+
Permission.ProjectOwner,
|
|
351
|
+
Permission.ProjectAdmin,
|
|
352
|
+
Permission.ReadTelemetryIngestionKey,
|
|
353
|
+
],
|
|
354
|
+
update: [],
|
|
355
|
+
})
|
|
356
|
+
@TableColumn({
|
|
357
|
+
isDefaultValueColumn: true,
|
|
358
|
+
required: true,
|
|
359
|
+
type: TableColumnType.ShortText,
|
|
360
|
+
title: "Key Type",
|
|
361
|
+
description:
|
|
362
|
+
"Server keys are for backend services and OpenTelemetry collectors: full ingest, no origin checks. Browser keys are meant to be published in a web page, so they are write-only, restricted to trace / log / metric / session replay ingest, and are only accepted from the origins you list below. This cannot be changed after the key is created - create a new key instead.",
|
|
363
|
+
defaultValue: TelemetryIngestionKeyType.Server,
|
|
364
|
+
example: TelemetryIngestionKeyType.Server,
|
|
365
|
+
})
|
|
366
|
+
@Column({
|
|
367
|
+
type: ColumnType.ShortText,
|
|
368
|
+
length: ColumnLength.ShortText,
|
|
369
|
+
nullable: false,
|
|
370
|
+
default: TelemetryIngestionKeyType.Server,
|
|
371
|
+
})
|
|
372
|
+
public keyType?: TelemetryIngestionKeyType = undefined;
|
|
373
|
+
|
|
374
|
+
/*
|
|
375
|
+
* Required in practice on a Browser key even though the column itself is
|
|
376
|
+
* `required: false`. The database cannot express "non-empty only when
|
|
377
|
+
* keyType is Browser", so the emptiness rule is enforced on the write path
|
|
378
|
+
* and again at ingest time; the column keeps a '[]' default so that every
|
|
379
|
+
* pre-existing Server row backfills without a value and behaves exactly as
|
|
380
|
+
* it always has.
|
|
381
|
+
*
|
|
382
|
+
* Note the polarity is the OPPOSITE of
|
|
383
|
+
* RumApplication.sessionReplayAllowedOrigins, where an empty list accepts
|
|
384
|
+
* any origin. That column is an optional hardening control retrofitted onto
|
|
385
|
+
* a shipped feature and could not be tightened without breaking live
|
|
386
|
+
* installations. A Browser key is new, so it starts closed: a public
|
|
387
|
+
* credential with no origin binding is not a credential at all.
|
|
388
|
+
*/
|
|
389
|
+
@ColumnAccessControl({
|
|
390
|
+
create: [
|
|
391
|
+
Permission.ProjectOwner,
|
|
392
|
+
Permission.ProjectAdmin,
|
|
393
|
+
Permission.CreateTelemetryIngestionKey,
|
|
394
|
+
],
|
|
395
|
+
read: [
|
|
396
|
+
Permission.ProjectOwner,
|
|
397
|
+
Permission.ProjectAdmin,
|
|
398
|
+
Permission.ReadTelemetryIngestionKey,
|
|
399
|
+
],
|
|
400
|
+
update: [
|
|
401
|
+
Permission.ProjectOwner,
|
|
402
|
+
Permission.ProjectAdmin,
|
|
403
|
+
Permission.EditTelemetryIngestionKey,
|
|
404
|
+
],
|
|
405
|
+
})
|
|
406
|
+
@TableColumn({
|
|
407
|
+
required: false,
|
|
408
|
+
type: TableColumnType.JSON,
|
|
409
|
+
title: "Allowed Origins",
|
|
410
|
+
description:
|
|
411
|
+
"Browser origins (scheme + host + port, for example https://app.example.com, or https://*.example.com for one level of subdomain) that may use this key. Required and strictly enforced on a Browser key: a request from an unlisted origin, or with no Origin header at all, is refused. Ignored entirely on a Server key.",
|
|
412
|
+
})
|
|
413
|
+
@Column({
|
|
414
|
+
type: ColumnType.JSON,
|
|
415
|
+
nullable: false,
|
|
416
|
+
default: () => {
|
|
417
|
+
return "'[]'";
|
|
418
|
+
},
|
|
419
|
+
})
|
|
420
|
+
public allowedOrigins?: Array<string> = undefined;
|
|
421
|
+
|
|
422
|
+
@ColumnAccessControl({
|
|
423
|
+
create: [
|
|
424
|
+
Permission.ProjectOwner,
|
|
425
|
+
Permission.ProjectAdmin,
|
|
426
|
+
Permission.CreateTelemetryIngestionKey,
|
|
427
|
+
],
|
|
428
|
+
read: [
|
|
429
|
+
Permission.ProjectOwner,
|
|
430
|
+
Permission.ProjectAdmin,
|
|
431
|
+
Permission.ReadTelemetryIngestionKey,
|
|
432
|
+
],
|
|
433
|
+
update: [
|
|
434
|
+
Permission.ProjectOwner,
|
|
435
|
+
Permission.ProjectAdmin,
|
|
436
|
+
Permission.EditTelemetryIngestionKey,
|
|
437
|
+
],
|
|
438
|
+
})
|
|
439
|
+
@TableColumn({
|
|
440
|
+
required: false,
|
|
441
|
+
type: TableColumnType.ShortText,
|
|
442
|
+
title: "Pinned Service Name",
|
|
443
|
+
description:
|
|
444
|
+
"When set, every OpenTelemetry resource ingested with this key has its service.name REPLACED with this value. This is what stops data written with a scraped key from masquerading as another service: forged spans land in one service you can see and mute, instead of poisoning your backend services' dashboards and alerts.",
|
|
445
|
+
example: "checkout-web",
|
|
446
|
+
})
|
|
447
|
+
@Column({
|
|
448
|
+
nullable: true,
|
|
449
|
+
type: ColumnType.ShortText,
|
|
450
|
+
length: ColumnLength.ShortText,
|
|
451
|
+
})
|
|
452
|
+
public pinnedServiceName?: string = undefined;
|
|
453
|
+
|
|
454
|
+
/*
|
|
455
|
+
* The kill switch. Separate from deleting the key because the response to
|
|
456
|
+
* "this key is being abused" and the response to "this key is no longer
|
|
457
|
+
* needed" are different: turning it off stops the writes in one edit and is
|
|
458
|
+
* reversible if you were wrong, while keeping the row (and its id) around so
|
|
459
|
+
* the ingest logs still name something that exists.
|
|
460
|
+
*/
|
|
461
|
+
@ColumnAccessControl({
|
|
462
|
+
create: [
|
|
463
|
+
Permission.ProjectOwner,
|
|
464
|
+
Permission.ProjectAdmin,
|
|
465
|
+
Permission.CreateTelemetryIngestionKey,
|
|
466
|
+
],
|
|
467
|
+
read: [
|
|
468
|
+
Permission.ProjectOwner,
|
|
469
|
+
Permission.ProjectAdmin,
|
|
470
|
+
Permission.ReadTelemetryIngestionKey,
|
|
471
|
+
],
|
|
472
|
+
update: [
|
|
473
|
+
Permission.ProjectOwner,
|
|
474
|
+
Permission.ProjectAdmin,
|
|
475
|
+
Permission.EditTelemetryIngestionKey,
|
|
476
|
+
],
|
|
477
|
+
})
|
|
478
|
+
@TableColumn({
|
|
479
|
+
isDefaultValueColumn: true,
|
|
480
|
+
required: true,
|
|
481
|
+
type: TableColumnType.Boolean,
|
|
482
|
+
title: "Enabled",
|
|
483
|
+
description:
|
|
484
|
+
"Turn this off to immediately stop accepting telemetry written with this key, without deleting it. Turn it back on to resume.",
|
|
485
|
+
defaultValue: true,
|
|
486
|
+
})
|
|
487
|
+
@Column({
|
|
488
|
+
type: ColumnType.Boolean,
|
|
489
|
+
nullable: false,
|
|
490
|
+
default: true,
|
|
491
|
+
})
|
|
492
|
+
public isEnabled?: boolean = undefined;
|
|
493
|
+
|
|
494
|
+
@ColumnAccessControl({
|
|
495
|
+
create: [
|
|
496
|
+
Permission.ProjectOwner,
|
|
497
|
+
Permission.ProjectAdmin,
|
|
498
|
+
Permission.CreateTelemetryIngestionKey,
|
|
499
|
+
],
|
|
500
|
+
read: [
|
|
501
|
+
Permission.ProjectOwner,
|
|
502
|
+
Permission.ProjectAdmin,
|
|
503
|
+
Permission.ReadTelemetryIngestionKey,
|
|
504
|
+
],
|
|
505
|
+
update: [
|
|
506
|
+
Permission.ProjectOwner,
|
|
507
|
+
Permission.ProjectAdmin,
|
|
508
|
+
Permission.EditTelemetryIngestionKey,
|
|
509
|
+
],
|
|
510
|
+
})
|
|
511
|
+
@TableColumn({
|
|
512
|
+
required: false,
|
|
513
|
+
type: TableColumnType.Date,
|
|
514
|
+
title: "Expires At",
|
|
515
|
+
description:
|
|
516
|
+
"Date and time after which this key stops being accepted. Empty means it never expires, which is how every key behaved before this column existed. Setting one on a Browser key bounds how long a scraped copy stays useful.",
|
|
517
|
+
example: "2025-12-31T23:59:59Z",
|
|
518
|
+
})
|
|
519
|
+
@Column({
|
|
520
|
+
type: ColumnType.Date,
|
|
521
|
+
nullable: true,
|
|
522
|
+
})
|
|
523
|
+
public expiresAt?: Date = undefined;
|
|
524
|
+
|
|
525
|
+
/*
|
|
526
|
+
* Written by the ingest path only, hence `create: []` and `update: []`: a
|
|
527
|
+
* value a customer could set by hand would be worthless for the one question
|
|
528
|
+
* it exists to answer - "is anything still using this key, and can I safely
|
|
529
|
+
* delete or rotate it?"
|
|
530
|
+
*/
|
|
531
|
+
@ColumnAccessControl({
|
|
532
|
+
create: [],
|
|
533
|
+
read: [
|
|
534
|
+
Permission.ProjectOwner,
|
|
535
|
+
Permission.ProjectAdmin,
|
|
536
|
+
Permission.ReadTelemetryIngestionKey,
|
|
537
|
+
],
|
|
538
|
+
update: [],
|
|
539
|
+
})
|
|
540
|
+
@TableColumn({
|
|
541
|
+
required: false,
|
|
542
|
+
type: TableColumnType.Date,
|
|
543
|
+
title: "Last Used At",
|
|
544
|
+
description:
|
|
545
|
+
"The last time telemetry was accepted with this key. Empty means it has never been used since this was recorded. Use it to find keys that are safe to rotate or delete.",
|
|
546
|
+
example: "2025-12-31T23:59:59Z",
|
|
547
|
+
})
|
|
548
|
+
@Column({
|
|
549
|
+
type: ColumnType.Date,
|
|
550
|
+
nullable: true,
|
|
551
|
+
})
|
|
552
|
+
public lastUsedAt?: Date = undefined;
|
|
553
|
+
|
|
554
|
+
@ColumnAccessControl({
|
|
555
|
+
create: [
|
|
556
|
+
Permission.ProjectOwner,
|
|
557
|
+
Permission.ProjectAdmin,
|
|
558
|
+
Permission.CreateTelemetryIngestionKey,
|
|
559
|
+
],
|
|
560
|
+
read: [
|
|
561
|
+
Permission.ProjectOwner,
|
|
562
|
+
Permission.ProjectAdmin,
|
|
563
|
+
Permission.ReadTelemetryIngestionKey,
|
|
564
|
+
],
|
|
565
|
+
update: [
|
|
566
|
+
Permission.ProjectOwner,
|
|
567
|
+
Permission.ProjectAdmin,
|
|
568
|
+
Permission.EditTelemetryIngestionKey,
|
|
569
|
+
],
|
|
570
|
+
})
|
|
571
|
+
@TableColumn({
|
|
572
|
+
required: false,
|
|
573
|
+
type: TableColumnType.Number,
|
|
574
|
+
title: "Requests Per Minute Limit",
|
|
575
|
+
description:
|
|
576
|
+
"Maximum ingest requests per minute accepted with this key. Leave empty to use the shipped default for a Browser key, and to leave a Server key unlimited. The limit is per key, across every client using it, so it has to clear your whole fleet - see DEFAULT_BROWSER_KEY_REQUESTS_PER_MINUTE for the default and the reasoning behind its size.",
|
|
577
|
+
example: 6000,
|
|
578
|
+
})
|
|
579
|
+
@Column({
|
|
580
|
+
type: ColumnType.Number,
|
|
581
|
+
nullable: true,
|
|
582
|
+
})
|
|
583
|
+
public requestsPerMinuteLimit?: number = undefined;
|
|
324
584
|
}
|
|
@@ -17,7 +17,6 @@ import TenantColumn from "../../Types/Database/TenantColumn";
|
|
|
17
17
|
import IconProp from "../../Types/Icon/IconProp";
|
|
18
18
|
import ObjectID from "../../Types/ObjectID";
|
|
19
19
|
import Permission from "../../Types/Permission";
|
|
20
|
-
import Text from "../../Types/Text";
|
|
21
20
|
import { Column, Entity, Index, JoinColumn, ManyToOne } from "typeorm";
|
|
22
21
|
|
|
23
22
|
/*
|
|
@@ -356,9 +355,6 @@ class UserTelegram extends BaseModel {
|
|
|
356
355
|
computed: true,
|
|
357
356
|
required: true,
|
|
358
357
|
type: TableColumnType.ShortText,
|
|
359
|
-
forceGetDefaultValueOnCreate: () => {
|
|
360
|
-
return Text.generateRandomNumber(6);
|
|
361
|
-
},
|
|
362
358
|
})
|
|
363
359
|
@Column({
|
|
364
360
|
type: ColumnType.ShortText,
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Isolated fan-in admission benchmark against the actual writer source.
|
|
3
|
+
* Run with the supported Node runtime from the repository root:
|
|
4
|
+
*
|
|
5
|
+
* node --expose-gc Common/Scripts/benchmark-fanin-capacity.js
|
|
6
|
+
*
|
|
7
|
+
* Compare in separate processes, extracting the previous source without
|
|
8
|
+
* modifying the checkout (the revision is the pre-change master):
|
|
9
|
+
*
|
|
10
|
+
* git show 0b23baed11:Common/Server/Utils/Telemetry/TelemetryFanInWriter.ts > /tmp/oneuptime-fanin-before.ts
|
|
11
|
+
* node --expose-gc Common/Scripts/benchmark-fanin-capacity.js /tmp/oneuptime-fanin-before.ts
|
|
12
|
+
*
|
|
13
|
+
* 200 producers submit chunks sequentially and await all their acceptance
|
|
14
|
+
* acknowledgements at the end, as ingest jobs do. ClickHouse remains blocked
|
|
15
|
+
* during measurement. The only changes between runs are the selected writer
|
|
16
|
+
* source. I/O, logging, shutdown registration and token generation are stubbed.
|
|
17
|
+
* Heap deltas include rows still held by blocked callers, not just admitted
|
|
18
|
+
* buffers; exact values vary with V8. These are isolated workload measurements,
|
|
19
|
+
* not estimates of total deployment memory savings or throughput.
|
|
20
|
+
*/
|
|
21
|
+
|
|
22
|
+
const fs = require("fs");
|
|
23
|
+
const path = require("path");
|
|
24
|
+
const vm = require("vm");
|
|
25
|
+
const ts = require("typescript");
|
|
26
|
+
|
|
27
|
+
if (typeof global.gc !== "function") {
|
|
28
|
+
throw new Error("Run this benchmark with node --expose-gc.");
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
const sourcePath = path.resolve(
|
|
32
|
+
process.argv[2] ||
|
|
33
|
+
path.join(__dirname, "../Server/Utils/Telemetry/TelemetryFanInWriter.ts"),
|
|
34
|
+
);
|
|
35
|
+
const code = ts.transpileModule(fs.readFileSync(sourcePath, "utf8"), {
|
|
36
|
+
compilerOptions: {
|
|
37
|
+
module: ts.ModuleKind.CommonJS,
|
|
38
|
+
target: ts.ScriptTarget.ES2020,
|
|
39
|
+
esModuleInterop: true,
|
|
40
|
+
},
|
|
41
|
+
}).outputText;
|
|
42
|
+
let nextToken = 0;
|
|
43
|
+
const overrides = {
|
|
44
|
+
"../Logger": { debug() {}, info() {}, warn() {}, error() {} },
|
|
45
|
+
"../../../Types/Sleep": {
|
|
46
|
+
sleep: (ms) => new Promise((resolve) => setTimeout(resolve, ms)),
|
|
47
|
+
},
|
|
48
|
+
"../../../Utils/UUID": {
|
|
49
|
+
generateTimeOrdered: () => String(nextToken++),
|
|
50
|
+
},
|
|
51
|
+
"../GracefulShutdown": {
|
|
52
|
+
__esModule: true,
|
|
53
|
+
default: { registerHandler() {} },
|
|
54
|
+
ShutdownPriority: { Buffers: 1 },
|
|
55
|
+
},
|
|
56
|
+
"../AnalyticsDatabase/InsertDedupContext": {
|
|
57
|
+
nextInsertDedupToken: () => undefined,
|
|
58
|
+
},
|
|
59
|
+
"@clickhouse/client": { ClickHouseError: class extends Error {} },
|
|
60
|
+
};
|
|
61
|
+
const sandbox = {
|
|
62
|
+
exports: {},
|
|
63
|
+
process,
|
|
64
|
+
setTimeout,
|
|
65
|
+
clearTimeout,
|
|
66
|
+
require: (name) => {
|
|
67
|
+
if (!(name in overrides)) {
|
|
68
|
+
throw new Error(`Unexpected writer dependency: ${name}`);
|
|
69
|
+
}
|
|
70
|
+
return overrides[name];
|
|
71
|
+
},
|
|
72
|
+
};
|
|
73
|
+
vm.runInNewContext(code, sandbox, { filename: sourcePath });
|
|
74
|
+
|
|
75
|
+
async function nextTurn() {
|
|
76
|
+
await new Promise((resolve) => setImmediate(resolve));
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
async function collect() {
|
|
80
|
+
for (let i = 0; i < 3; i++) {
|
|
81
|
+
global.gc();
|
|
82
|
+
await nextTurn();
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
async function main() {
|
|
87
|
+
const producerCount = 200;
|
|
88
|
+
const chunksPerProducer = 3;
|
|
89
|
+
const rowsPerChunk = 100;
|
|
90
|
+
const rowBodyBytes = 512;
|
|
91
|
+
const maxPendingRows = 1000;
|
|
92
|
+
const writer = new sandbox.exports.TelemetryFanInWriter({
|
|
93
|
+
maxBatchRows: 500,
|
|
94
|
+
maxPendingRows,
|
|
95
|
+
maxConcurrentInserts: 4,
|
|
96
|
+
maxWaitMs: 60_000,
|
|
97
|
+
retryMaxAttempts: 1,
|
|
98
|
+
retryBaseDelayMs: 1,
|
|
99
|
+
retryMaxDelayMs: 1,
|
|
100
|
+
});
|
|
101
|
+
let release;
|
|
102
|
+
const gate = new Promise((resolve) => {
|
|
103
|
+
release = resolve;
|
|
104
|
+
});
|
|
105
|
+
let insertedRows = 0;
|
|
106
|
+
const target = {
|
|
107
|
+
model: { tableName: "CapacityBenchmark" },
|
|
108
|
+
insertJsonRows: async (rows) => {
|
|
109
|
+
await gate;
|
|
110
|
+
insertedRows += rows.length;
|
|
111
|
+
},
|
|
112
|
+
};
|
|
113
|
+
|
|
114
|
+
await collect();
|
|
115
|
+
const heapBefore = process.memoryUsage().heapUsed;
|
|
116
|
+
let createdRows = 0;
|
|
117
|
+
let acceptedSubmissions = 0;
|
|
118
|
+
const producers = Array.from(
|
|
119
|
+
{ length: producerCount },
|
|
120
|
+
async (_, producer) => {
|
|
121
|
+
const acks = [];
|
|
122
|
+
for (let chunk = 0; chunk < chunksPerProducer; chunk++) {
|
|
123
|
+
const rows = Array.from({ length: rowsPerChunk }, (_, row) => {
|
|
124
|
+
createdRows++;
|
|
125
|
+
return {
|
|
126
|
+
producer,
|
|
127
|
+
chunk,
|
|
128
|
+
row,
|
|
129
|
+
// A flat, separately allocated body for each row.
|
|
130
|
+
body: Buffer.alloc(rowBodyBytes / 2, row % 256).toString("hex"),
|
|
131
|
+
};
|
|
132
|
+
});
|
|
133
|
+
const { flushed } = await writer.submit(target, rows);
|
|
134
|
+
acceptedSubmissions++;
|
|
135
|
+
acks.push(flushed);
|
|
136
|
+
}
|
|
137
|
+
await Promise.all(acks);
|
|
138
|
+
},
|
|
139
|
+
);
|
|
140
|
+
|
|
141
|
+
try {
|
|
142
|
+
await nextTurn();
|
|
143
|
+
await collect();
|
|
144
|
+
const heapDeltaMiB =
|
|
145
|
+
(process.memoryUsage().heapUsed - heapBefore) / 1024 / 1024;
|
|
146
|
+
process.stdout.write(
|
|
147
|
+
`${JSON.stringify(
|
|
148
|
+
{
|
|
149
|
+
node: process.version,
|
|
150
|
+
sourcePath,
|
|
151
|
+
producerCount,
|
|
152
|
+
chunksPerProducer,
|
|
153
|
+
rowsPerChunk,
|
|
154
|
+
rowBodyBytes,
|
|
155
|
+
maxPendingRows,
|
|
156
|
+
createdRows,
|
|
157
|
+
acceptedSubmissions,
|
|
158
|
+
...writer.getStats(),
|
|
159
|
+
heapDeltaMiB: Number(heapDeltaMiB.toFixed(2)),
|
|
160
|
+
},
|
|
161
|
+
null,
|
|
162
|
+
2,
|
|
163
|
+
)}\n`,
|
|
164
|
+
);
|
|
165
|
+
} finally {
|
|
166
|
+
release();
|
|
167
|
+
await writer.flushAll();
|
|
168
|
+
await Promise.all(producers);
|
|
169
|
+
if (insertedRows !== producerCount * chunksPerProducer * rowsPerChunk) {
|
|
170
|
+
throw new Error(`Writer lost rows: inserted ${insertedRows}.`);
|
|
171
|
+
}
|
|
172
|
+
if (writer.getStats().pendingRows !== 0) {
|
|
173
|
+
throw new Error("Writer retained pending rows after drain.");
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
main().catch((error) => {
|
|
179
|
+
process.stderr.write(`${error.stack || error}\n`);
|
|
180
|
+
process.exitCode = 1;
|
|
181
|
+
});
|