@oneuptime/common 13.0.6 → 13.0.7
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/DatabaseModels/AIAgentOwnerTeam.ts +6 -0
- package/Models/DatabaseModels/AIAgentOwnerUser.ts +6 -0
- package/Models/DatabaseModels/Alert.ts +12 -0
- package/Models/DatabaseModels/AlertEpisodeOwnerTeam.ts +6 -1
- package/Models/DatabaseModels/AlertEpisodeOwnerUser.ts +6 -1
- package/Models/DatabaseModels/AlertOwnerTeam.ts +6 -1
- package/Models/DatabaseModels/AlertOwnerUser.ts +6 -1
- package/Models/DatabaseModels/CephClusterOwnerTeam.ts +6 -0
- package/Models/DatabaseModels/CephClusterOwnerUser.ts +6 -0
- package/Models/DatabaseModels/CloudResourceOwnerTeam.ts +6 -0
- package/Models/DatabaseModels/CloudResourceOwnerUser.ts +6 -0
- package/Models/DatabaseModels/DashboardOwnerTeam.ts +6 -1
- package/Models/DatabaseModels/DashboardOwnerUser.ts +6 -1
- package/Models/DatabaseModels/DatabaseBaseModel/DatabaseBaseModel.ts +8 -0
- package/Models/DatabaseModels/DockerHostOwnerTeam.ts +6 -0
- package/Models/DatabaseModels/DockerHostOwnerUser.ts +6 -0
- package/Models/DatabaseModels/DockerSwarmClusterOwnerTeam.ts +6 -0
- package/Models/DatabaseModels/DockerSwarmClusterOwnerUser.ts +6 -0
- package/Models/DatabaseModels/HostOwnerTeam.ts +6 -0
- package/Models/DatabaseModels/HostOwnerUser.ts +6 -0
- package/Models/DatabaseModels/Incident.ts +12 -0
- package/Models/DatabaseModels/IncidentEpisodeOwnerTeam.ts +6 -1
- package/Models/DatabaseModels/IncidentEpisodeOwnerUser.ts +6 -1
- package/Models/DatabaseModels/IncidentOwnerTeam.ts +6 -1
- package/Models/DatabaseModels/IncidentOwnerUser.ts +6 -1
- package/Models/DatabaseModels/IncidentTemplateOwnerTeam.ts +6 -0
- package/Models/DatabaseModels/IncidentTemplateOwnerUser.ts +6 -0
- package/Models/DatabaseModels/IncomingCallPolicyOwnerTeam.ts +6 -1
- package/Models/DatabaseModels/IncomingCallPolicyOwnerUser.ts +6 -1
- package/Models/DatabaseModels/IoTFleetOwnerTeam.ts +6 -0
- package/Models/DatabaseModels/IoTFleetOwnerUser.ts +6 -0
- package/Models/DatabaseModels/KubernetesClusterOwnerTeam.ts +6 -0
- package/Models/DatabaseModels/KubernetesClusterOwnerUser.ts +6 -0
- package/Models/DatabaseModels/Monitor.ts +2 -3
- package/Models/DatabaseModels/MonitorGroupOwnerTeam.ts +6 -0
- package/Models/DatabaseModels/MonitorGroupOwnerUser.ts +6 -0
- package/Models/DatabaseModels/MonitorOwnerTeam.ts +6 -1
- package/Models/DatabaseModels/MonitorOwnerUser.ts +6 -1
- package/Models/DatabaseModels/MonitorTemplate.ts +2 -3
- package/Models/DatabaseModels/NetworkDeviceOwnerTeam.ts +6 -0
- package/Models/DatabaseModels/NetworkDeviceOwnerUser.ts +6 -0
- package/Models/DatabaseModels/OnCallDutyPolicyOwnerTeam.ts +6 -1
- package/Models/DatabaseModels/OnCallDutyPolicyOwnerUser.ts +6 -1
- package/Models/DatabaseModels/OnCallDutyPolicyScheduleOwnerTeam.ts +6 -1
- package/Models/DatabaseModels/OnCallDutyPolicyScheduleOwnerUser.ts +6 -1
- package/Models/DatabaseModels/PodmanHostOwnerTeam.ts +6 -0
- package/Models/DatabaseModels/PodmanHostOwnerUser.ts +6 -0
- package/Models/DatabaseModels/ProbeOwnerTeam.ts +6 -0
- package/Models/DatabaseModels/ProbeOwnerUser.ts +6 -0
- package/Models/DatabaseModels/ProxmoxClusterOwnerTeam.ts +6 -0
- package/Models/DatabaseModels/ProxmoxClusterOwnerUser.ts +6 -0
- package/Models/DatabaseModels/RumApplicationOwnerTeam.ts +6 -0
- package/Models/DatabaseModels/RumApplicationOwnerUser.ts +6 -0
- package/Models/DatabaseModels/RunbookOwnerTeam.ts +6 -1
- package/Models/DatabaseModels/RunbookOwnerUser.ts +6 -1
- package/Models/DatabaseModels/RunnerOwnerTeam.ts +6 -1
- package/Models/DatabaseModels/RunnerOwnerUser.ts +6 -1
- package/Models/DatabaseModels/ScheduledMaintenanceOwnerTeam.ts +6 -1
- package/Models/DatabaseModels/ScheduledMaintenanceOwnerUser.ts +6 -1
- package/Models/DatabaseModels/ScheduledMaintenanceTemplateOwnerTeam.ts +8 -0
- package/Models/DatabaseModels/ScheduledMaintenanceTemplateOwnerUser.ts +8 -0
- package/Models/DatabaseModels/ServerlessFunctionOwnerTeam.ts +6 -0
- package/Models/DatabaseModels/ServerlessFunctionOwnerUser.ts +6 -0
- package/Models/DatabaseModels/ServiceLevelObjectiveOwnerTeam.ts +6 -1
- package/Models/DatabaseModels/ServiceLevelObjectiveOwnerUser.ts +6 -1
- package/Models/DatabaseModels/ServiceOwnerTeam.ts +6 -0
- package/Models/DatabaseModels/ServiceOwnerUser.ts +6 -0
- package/Models/DatabaseModels/StatusPageOwnerTeam.ts +6 -1
- package/Models/DatabaseModels/StatusPageOwnerUser.ts +6 -1
- package/Models/DatabaseModels/VMwareVCenterOwnerTeam.ts +6 -0
- package/Models/DatabaseModels/VMwareVCenterOwnerUser.ts +6 -0
- package/Models/DatabaseModels/WorkflowOwnerTeam.ts +6 -1
- package/Models/DatabaseModels/WorkflowOwnerUser.ts +6 -1
- package/Scripts/benchmark-fanin-capacity.js +2 -2
- package/Server/API/AIAgentDataAPI.ts +1 -1
- package/Server/API/AIChatAPI.ts +6 -4
- package/Server/API/AIInvestigationAPI.ts +7 -0
- package/Server/API/StatusPageAPI.ts +13 -0
- package/Server/Infrastructure/Postgres/LocalMigrationGenerationDataSource.ts +1 -1
- package/Server/Infrastructure/Postgres/SchemaMigrations/1793500000000-MakeOwnerRowsUnique.ts +1057 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1793700000000-AddAIInvestigationDecision.ts +25 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1793800000000-RemoveMonitorDescriptionLengthLimit.ts +31 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +6 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/Readme.md +6 -4
- package/Server/Middleware/IdentityRateLimit.ts +34 -1
- package/Server/Middleware/PublicDashboardRateLimit.ts +169 -39
- package/Server/Services/AlertEpisodeService.ts +13 -34
- package/Server/Services/AlertGroupingEngineService.ts +7 -4
- package/Server/Services/AlertService.ts +13 -32
- package/Server/Services/CephClusterOwnerRuleEngineService.ts +18 -10
- package/Server/Services/CloudResourceOwnerRuleEngineService.ts +18 -10
- package/Server/Services/DashboardOwnerRuleEngineService.ts +18 -10
- package/Server/Services/DatabaseService.ts +101 -1
- package/Server/Services/DockerHostOwnerRuleEngineService.ts +18 -10
- package/Server/Services/DockerSwarmClusterOwnerRuleEngineService.ts +18 -10
- package/Server/Services/HostOwnerRuleEngineService.ts +18 -10
- package/Server/Services/IncidentEpisodeOwnerRuleEngineService.ts +6 -4
- package/Server/Services/IncidentEpisodeService.ts +15 -75
- package/Server/Services/IncidentGroupingEngineService.ts +7 -4
- package/Server/Services/IncidentService.ts +13 -32
- package/Server/Services/IncidentTemplateService.ts +13 -36
- package/Server/Services/IncomingCallPolicyOwnerRuleEngineService.ts +18 -10
- package/Server/Services/IoTFleetOwnerRuleEngineService.ts +18 -10
- package/Server/Services/KubernetesClusterOwnerRuleEngineService.ts +18 -10
- package/Server/Services/MonitorService.ts +13 -32
- package/Server/Services/NetworkDeviceOwnerRuleEngineService.ts +18 -10
- package/Server/Services/OnCallDutyPolicyOwnerRuleEngineService.ts +18 -10
- package/Server/Services/OnCallDutyPolicyScheduleOwnerRuleEngineService.ts +18 -10
- package/Server/Services/PodmanHostOwnerRuleEngineService.ts +18 -10
- package/Server/Services/ProxmoxClusterOwnerRuleEngineService.ts +18 -10
- package/Server/Services/RumApplicationOwnerRuleEngineService.ts +18 -10
- package/Server/Services/RunbookOwnerRuleEngineService.ts +18 -10
- package/Server/Services/ScheduledMaintenanceService.ts +13 -34
- package/Server/Services/ScheduledMaintenanceTemplateService.ts +12 -34
- package/Server/Services/ServerlessFunctionOwnerRuleEngineService.ts +18 -10
- package/Server/Services/ServiceOwnerRuleEngineService.ts +18 -10
- package/Server/Services/StatusPagePrivateUserService.ts +38 -29
- package/Server/Services/StatusPagePrivateUserSessionService.ts +49 -1
- package/Server/Services/StatusPageService.ts +59 -36
- package/Server/Services/UserSessionService.ts +6 -0
- package/Server/Services/VMwareVCenterOwnerRuleEngineService.ts +18 -10
- package/Server/Services/WorkflowOwnerRuleEngineService.ts +18 -10
- package/Server/Static/Brand/README.md +7 -7
- package/Server/Static/Vendor/README.md +7 -7
- package/Server/Types/Database/Permissions/OwnedScopePermission.ts +18 -9
- package/Server/Types/Database/Permissions/OwnerTableRegistry.ts +82 -0
- package/Server/Utils/AI/Chat/ChatAgentRunner.ts +21 -8
- package/Server/Utils/AI/Chat/ObservabilityChatPrompt.ts +41 -4
- package/Server/Utils/AI/CodeFix/CodeAgentWorkspaceGuard.ts +1 -1
- package/Server/Utils/AI/CodeFix/CodeFixAgentCompletion.ts +1 -1
- package/Server/Utils/AI/SRE/AIInvestigationEngine.ts +13 -5
- package/Server/Utils/AI/SRE/AlertInvestigationRunner.ts +53 -13
- package/Server/Utils/AI/SRE/IncidentInvestigationRunner.ts +51 -14
- package/Server/Utils/AI/SRE/InvestigationEligibility.ts +292 -0
- package/Server/Utils/AI/SRE/InvestigationQueue.ts +25 -0
- package/Server/Utils/AI/Toolbox/Index.ts +43 -13
- package/Server/Utils/AI/Toolbox/ResourceTools.ts +952 -0
- package/Server/Utils/AI/Toolbox/RumTools.ts +424 -0
- package/Server/Utils/AI/Toolbox/ToolTypes.ts +10 -0
- package/Server/Utils/AI/Toolbox/TraceTools.ts +2 -1
- package/Server/Utils/Database/PostgresErrorTranslator.ts +14 -0
- package/Server/Utils/Monitor/Criteria/CompareCriteria.ts +137 -126
- package/Server/Utils/Monitor/Criteria/MetricMonitorCriteria.ts +4 -1
- package/Server/Utils/Rules/OwnerRuleAssignment.ts +157 -6
- package/Server/Utils/Telemetry/TelemetryEntity.ts +205 -6
- package/SslCertificates/GlobalSign.crt +26 -0
- package/SslCertificates/Readme.md +3 -0
- package/Tests/App/AdminDashboard/EnterpriseLicenseInstanceActivity.test.tsx +451 -0
- package/Tests/App/Dashboard/AIInsightsChatPanel.test.tsx +881 -0
- package/Tests/App/Dashboard/AIInsightsPageContext.test.ts +458 -0
- package/Tests/App/Dashboard/AIInsightsResourceCitations.test.ts +124 -0
- package/Tests/App/Dashboard/AIInsightsResourcePageContext.test.ts +798 -0
- package/Tests/App/Dashboard/AskAiSuggestedPrompts.test.ts +7 -0
- package/Tests/App/Dashboard/DashboardChartWidgetZoom.test.tsx +104 -0
- package/Tests/App/Dashboard/DashboardCommandPalette.test.tsx +156 -64
- package/Tests/App/Dashboard/DiscoveryScanStatusMessage.test.tsx +970 -0
- package/Tests/App/Dashboard/DiscoveryScanWizardValidation.test.tsx +406 -12
- package/Tests/App/Dashboard/EmbeddedMetricEventScope.test.tsx +358 -0
- package/Tests/App/Dashboard/ErrorPatternEventScope.test.tsx +148 -0
- package/Tests/App/Dashboard/EventOverlayAdditionalResourceScope.test.ts +255 -0
- package/Tests/App/Dashboard/EventOverlayScope.test.ts +845 -0
- package/Tests/App/Dashboard/EventOverlayScopeHook.test.tsx +903 -0
- package/Tests/App/Dashboard/ExternalStatusPageCriteriaFilter.test.ts +3 -3
- package/Tests/App/Dashboard/InvestigationDrawer.test.tsx +21 -0
- package/Tests/App/Dashboard/InvestigationNotStarted.test.tsx +761 -0
- package/Tests/App/Dashboard/InvestigationPanel.test.tsx +7 -4
- package/Tests/App/Dashboard/InvestigationPanelStatus.test.tsx +15 -7
- package/Tests/App/Dashboard/MetricsViewerEventScopeNavigation.test.tsx +264 -0
- package/Tests/App/Dashboard/MonitorSummaryTestMonitorButton.test.tsx +342 -0
- package/Tests/App/Dashboard/MonitorTestForm.test.tsx +612 -0
- package/Tests/App/Dashboard/NavigationSearchKeywords.test.tsx +301 -0
- package/Tests/App/Dashboard/ServiceMapGraph.test.tsx +74 -2
- package/Tests/App/Dashboard/TextClampLayoutHarness.ts +224 -0
- package/Tests/Models/InventoryItemNaming.test.ts +54 -0
- package/Tests/Server/API/AIChatRouteAuthorization.test.ts +161 -0
- package/Tests/Server/API/AIInvestigationAPI.test.ts +14 -0
- package/Tests/Server/API/AIInvestigationAvailabilityAuthorization.test.ts +260 -0
- package/Tests/Server/API/EnterpriseLicenseReportUserCount.test.ts +133 -0
- package/Tests/Server/API/StatusPageMasterPasswordRateLimit.test.ts +482 -0
- package/Tests/Server/EnvironmentConfigOnCallCalendarFeed.test.ts +1 -1
- package/Tests/Server/Infrastructure/ClickhouseKeepAliveOptions.test.ts +1 -1
- package/Tests/Server/Infrastructure/ContainerBootConfiguration.test.ts +38 -16
- package/Tests/Server/Infrastructure/E2EClickHouseFixtureAccess.test.ts +106 -31
- package/Tests/Server/Infrastructure/ExampleDockerfiles.test.ts +46 -12
- package/Tests/Server/Infrastructure/Postgres/MonitorDescriptionMigration.test.ts +422 -0
- package/Tests/Server/Infrastructure/TelemetryExporterDeploymentConfig.test.ts +1 -1
- package/Tests/Server/Infrastructure/ValkeyDeploymentConfig.test.ts +25 -4
- package/Tests/Server/Middleware/IdentityRateLimit.test.ts +72 -0
- package/Tests/Server/Middleware/PublicDashboardRateLimit.test.ts +12 -12
- package/Tests/Server/Middleware/PublicDashboardRateLimitStatusPage.test.ts +800 -0
- package/Tests/Server/Services/AIInvestigationDecisionPostgres.test.ts +346 -0
- package/Tests/Server/Services/AddOwnersIdempotency.test.ts +471 -0
- package/Tests/Server/Services/DatabaseServiceAutoOwnerOnCreate.test.ts +250 -0
- package/Tests/Server/Services/DatabaseServiceUniqueColumnsTogether.test.ts +622 -0
- package/Tests/Server/Services/MonitorDescriptionValidation.test.ts +211 -0
- package/Tests/Server/Services/MonitorTemplateDescriptionPropagation.test.ts +269 -0
- package/Tests/Server/Services/OwnerRowUniqueness.test.ts +504 -0
- package/Tests/Server/Services/RuleRun/OwnerRuleEnginesGroupARun.test.ts +43 -0
- package/Tests/Server/Services/SessionRetention.test.ts +334 -0
- package/Tests/Server/Services/StatusPagePrivateUserInvitationPolicy.test.ts +172 -0
- package/Tests/Server/Services/StatusPagePrivateUserReadAccess.test.ts +178 -0
- package/Tests/Server/Services/StatusPagePrivateUserReadAccessPostgres.test.ts +311 -0
- package/Tests/Server/Services/StatusPagePrivateUserSessionService.test.ts +216 -1
- package/Tests/Server/Services/TeamComplianceServiceBehaviour.test.ts +1 -1
- package/Tests/Server/Services/UserOnCallLogNoNotificationRules.test.ts +1 -1
- package/Tests/Server/Types/Database/EventOverlayScopePostgres.test.ts +626 -0
- package/Tests/Server/Types/Database/Permissions/InfrastructureOwnershipScope.test.ts +668 -0
- package/Tests/Server/Types/Database/Permissions/SelectRejectionMessageContract.test.ts +1 -0
- package/Tests/Server/Types/Database/Permissions/UserNotificationRuleScoping.test.ts +1 -1
- package/Tests/Server/Utils/AI/AIIncidentGating.test.ts +16 -9
- package/Tests/Server/Utils/AI/ChatAgentRunner.test.ts +137 -1
- package/Tests/Server/Utils/AI/InvestigationEligibility.test.ts +697 -0
- package/Tests/Server/Utils/AI/ObservabilityChatPrompt.test.ts +105 -0
- package/Tests/Server/Utils/AI/RemediationHandoff.test.ts +16 -5
- package/Tests/Server/Utils/AI/ResourceTools.test.ts +1304 -0
- package/Tests/Server/Utils/AI/RumTools.test.ts +769 -0
- package/Tests/Server/Utils/Database/PostgresErrorTranslator.test.ts +63 -0
- package/Tests/Server/Utils/Monitor/Criteria/APIRequestCriteriaEvaluateOverTime.test.ts +11 -9
- package/Tests/Server/Utils/Monitor/Criteria/CompareCriteria.test.ts +62 -45
- package/Tests/Server/Utils/Monitor/Criteria/CompareCriteriaAggregation.test.ts +25 -24
- package/Tests/Server/Utils/Monitor/Criteria/CompareCriteriaHumanMessages.test.ts +513 -0
- package/Tests/Server/Utils/Monitor/Criteria/CustomCodeMonitorCriteria.test.ts +2 -2
- package/Tests/Server/Utils/Monitor/Criteria/DnsMonitorCriteria.test.ts +1 -1
- package/Tests/Server/Utils/Monitor/Criteria/ExternalStatusPageMonitorCriteria.test.ts +9 -9
- package/Tests/Server/Utils/Monitor/Criteria/MetricMonitorCriteria.test.ts +7 -5
- package/Tests/Server/Utils/Monitor/Criteria/ProfileMonitorCriteria.test.ts +2 -2
- package/Tests/Server/Utils/Monitor/Criteria/ServerMonitorCriteria.test.ts +4 -3
- package/Tests/Server/Utils/Monitor/Criteria/SnmpMonitorCriteria.test.ts +2 -2
- package/Tests/Server/Utils/Monitor/MonitorCriteriaEvaluatorMetricUnits.test.ts +3 -2
- package/Tests/Server/Utils/Monitor/MonitorCriteriaHumanMessages.test.ts +529 -0
- package/Tests/Server/Utils/Rules/OwnerRuleAssignment.test.ts +412 -4
- package/Tests/Server/Utils/SecurityEvent/Connectors/GoogleSecOps/GoogleSecOpsPollingClickhouseIntegration.test.ts +1 -1
- package/Tests/Server/Utils/TailwindBuildCopy.test.ts +14 -2
- package/Tests/Server/Utils/Telemetry/HostAssetAttributesFromOtlp.test.ts +235 -0
- package/Tests/Server/Utils/Telemetry/TelemetryEntity.test.ts +385 -2
- package/Tests/Server/Utils/VendorAssets.test.ts +17 -3
- package/Tests/Types/AI/AIChatPageContext.test.ts +0 -0
- package/Tests/Types/AI/AIResourceContext.test.ts +312 -0
- package/Tests/Types/Database/UniqueColumnsTogether.test.ts +100 -0
- package/Tests/Types/Monitor/MetricAndProfileDefaultCriteria.test.ts +4 -4
- package/Tests/Types/Monitor/MonitorStepRetryPersistence.test.ts +125 -0
- package/Tests/Types/WebsiteRequest.test.ts +44 -0
- package/Tests/UI/Components/Forms/MonitorDescriptionForm.test.tsx +410 -0
- package/Tests/UI/Components/ModelTable/BaseModelTableReadPermissions.test.tsx +439 -0
- package/Tests/UI/Components/NavBarMenuSearch.test.tsx +372 -0
- package/Tests/UI/EsbuildConfig.test.ts +1 -1
- package/Tests/UI/Monitor/MonitorStepRetrySettings.test.tsx +616 -0
- package/Tests/UI/ReactRouterSingletonBuild.test.ts +4 -2
- package/Tests/UI/Rum/ReplayEngine.test.ts +179 -0
- package/Tests/UI/Rum/ReplayHeader.test.tsx +23 -0
- package/Tests/UI/Rum/ReplayScrubber.test.tsx +88 -0
- package/Tests/UI/Rum/ReplayStageOverlays.test.tsx +83 -0
- package/Tests/UI/Rum/ReplayTabSwitcher.test.tsx +33 -0
- package/Tests/Utils/API.test.ts +96 -0
- package/Tests/Utils/HTTPResponseBodyReader.test.ts +188 -1
- package/Tests/Utils/Metrics/MetricEventScopeUrl.test.ts +101 -0
- package/Tests/Utils/Monitor/MonitorTestAvailabilityUtil.test.ts +256 -0
- package/Tests/Utils/Telemetry/HostIpAddresses.test.ts +105 -0
- package/Types/AI/AIChatPageContext.ts +87 -2
- package/Types/AI/AIChatTypes.ts +4 -0
- package/Types/AI/AIResourceContext.ts +198 -0
- package/Types/AI/InvestigationNotStartedReason.ts +30 -0
- package/Types/Database/UniqueColumnsTogether.ts +55 -0
- package/Types/Metrics/MetricQueryConfigData.ts +8 -0
- package/Types/Rum/WebVitals.ts +71 -0
- package/Types/WebsiteRequest.ts +2 -0
- package/UI/Components/EditionLabel/EditionLabel.tsx +7 -5
- package/UI/Components/KeyboardShortcut/Screenshots/README.md +1 -1
- package/UI/Components/ModelTable/BaseModelTable.tsx +8 -0
- package/UI/Components/Navbar/NavBar.tsx +2 -0
- package/UI/Components/Navbar/NavBarMenuModal.tsx +6 -2
- package/UI/esbuild-config.js +4 -4
- package/Utils/API.ts +10 -1
- package/Utils/Dashboard/HtmlWidgetDocument.ts +1 -1
- package/Utils/HTTPResponseBodyReader.ts +64 -8
- package/Utils/Metrics/MetricExplorerUrl.ts +19 -0
- package/Utils/Monitor/MonitorTestAvailabilityUtil.ts +92 -0
- package/Utils/Telemetry/HostIpAddresses.ts +46 -2
- package/build/dist/Models/DatabaseModels/AIAgentOwnerTeam.js +4 -1
- package/build/dist/Models/DatabaseModels/AIAgentOwnerTeam.js.map +1 -1
- package/build/dist/Models/DatabaseModels/AIAgentOwnerUser.js +4 -1
- package/build/dist/Models/DatabaseModels/AIAgentOwnerUser.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Alert.js +12 -0
- package/build/dist/Models/DatabaseModels/Alert.js.map +1 -1
- package/build/dist/Models/DatabaseModels/AlertEpisodeOwnerTeam.js +3 -1
- package/build/dist/Models/DatabaseModels/AlertEpisodeOwnerTeam.js.map +1 -1
- package/build/dist/Models/DatabaseModels/AlertEpisodeOwnerUser.js +3 -1
- package/build/dist/Models/DatabaseModels/AlertEpisodeOwnerUser.js.map +1 -1
- package/build/dist/Models/DatabaseModels/AlertOwnerTeam.js +3 -1
- package/build/dist/Models/DatabaseModels/AlertOwnerTeam.js.map +1 -1
- package/build/dist/Models/DatabaseModels/AlertOwnerUser.js +3 -1
- package/build/dist/Models/DatabaseModels/AlertOwnerUser.js.map +1 -1
- package/build/dist/Models/DatabaseModels/CephClusterOwnerTeam.js +4 -1
- package/build/dist/Models/DatabaseModels/CephClusterOwnerTeam.js.map +1 -1
- package/build/dist/Models/DatabaseModels/CephClusterOwnerUser.js +4 -1
- package/build/dist/Models/DatabaseModels/CephClusterOwnerUser.js.map +1 -1
- package/build/dist/Models/DatabaseModels/CloudResourceOwnerTeam.js +4 -1
- package/build/dist/Models/DatabaseModels/CloudResourceOwnerTeam.js.map +1 -1
- package/build/dist/Models/DatabaseModels/CloudResourceOwnerUser.js +4 -1
- package/build/dist/Models/DatabaseModels/CloudResourceOwnerUser.js.map +1 -1
- package/build/dist/Models/DatabaseModels/DashboardOwnerTeam.js +3 -1
- package/build/dist/Models/DatabaseModels/DashboardOwnerTeam.js.map +1 -1
- package/build/dist/Models/DatabaseModels/DashboardOwnerUser.js +3 -1
- package/build/dist/Models/DatabaseModels/DashboardOwnerUser.js.map +1 -1
- package/build/dist/Models/DatabaseModels/DatabaseBaseModel/DatabaseBaseModel.js +3 -0
- package/build/dist/Models/DatabaseModels/DatabaseBaseModel/DatabaseBaseModel.js.map +1 -1
- package/build/dist/Models/DatabaseModels/DockerHostOwnerTeam.js +4 -1
- package/build/dist/Models/DatabaseModels/DockerHostOwnerTeam.js.map +1 -1
- package/build/dist/Models/DatabaseModels/DockerHostOwnerUser.js +4 -1
- package/build/dist/Models/DatabaseModels/DockerHostOwnerUser.js.map +1 -1
- package/build/dist/Models/DatabaseModels/DockerSwarmClusterOwnerTeam.js +4 -1
- package/build/dist/Models/DatabaseModels/DockerSwarmClusterOwnerTeam.js.map +1 -1
- package/build/dist/Models/DatabaseModels/DockerSwarmClusterOwnerUser.js +4 -1
- package/build/dist/Models/DatabaseModels/DockerSwarmClusterOwnerUser.js.map +1 -1
- package/build/dist/Models/DatabaseModels/HostOwnerTeam.js +4 -1
- package/build/dist/Models/DatabaseModels/HostOwnerTeam.js.map +1 -1
- package/build/dist/Models/DatabaseModels/HostOwnerUser.js +4 -1
- package/build/dist/Models/DatabaseModels/HostOwnerUser.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Incident.js +12 -0
- package/build/dist/Models/DatabaseModels/Incident.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncidentEpisodeOwnerTeam.js +3 -1
- package/build/dist/Models/DatabaseModels/IncidentEpisodeOwnerTeam.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncidentEpisodeOwnerUser.js +3 -1
- package/build/dist/Models/DatabaseModels/IncidentEpisodeOwnerUser.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncidentOwnerTeam.js +3 -1
- package/build/dist/Models/DatabaseModels/IncidentOwnerTeam.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncidentOwnerUser.js +3 -1
- package/build/dist/Models/DatabaseModels/IncidentOwnerUser.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncidentTemplateOwnerTeam.js +4 -1
- package/build/dist/Models/DatabaseModels/IncidentTemplateOwnerTeam.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncidentTemplateOwnerUser.js +4 -1
- package/build/dist/Models/DatabaseModels/IncidentTemplateOwnerUser.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncomingCallPolicyOwnerTeam.js +3 -1
- package/build/dist/Models/DatabaseModels/IncomingCallPolicyOwnerTeam.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncomingCallPolicyOwnerUser.js +3 -1
- package/build/dist/Models/DatabaseModels/IncomingCallPolicyOwnerUser.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IoTFleetOwnerTeam.js +4 -1
- package/build/dist/Models/DatabaseModels/IoTFleetOwnerTeam.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IoTFleetOwnerUser.js +4 -1
- package/build/dist/Models/DatabaseModels/IoTFleetOwnerUser.js.map +1 -1
- package/build/dist/Models/DatabaseModels/KubernetesClusterOwnerTeam.js +4 -1
- package/build/dist/Models/DatabaseModels/KubernetesClusterOwnerTeam.js.map +1 -1
- package/build/dist/Models/DatabaseModels/KubernetesClusterOwnerUser.js +4 -1
- package/build/dist/Models/DatabaseModels/KubernetesClusterOwnerUser.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Monitor.js +2 -3
- package/build/dist/Models/DatabaseModels/Monitor.js.map +1 -1
- package/build/dist/Models/DatabaseModels/MonitorGroupOwnerTeam.js +4 -1
- package/build/dist/Models/DatabaseModels/MonitorGroupOwnerTeam.js.map +1 -1
- package/build/dist/Models/DatabaseModels/MonitorGroupOwnerUser.js +4 -1
- package/build/dist/Models/DatabaseModels/MonitorGroupOwnerUser.js.map +1 -1
- package/build/dist/Models/DatabaseModels/MonitorOwnerTeam.js +3 -1
- package/build/dist/Models/DatabaseModels/MonitorOwnerTeam.js.map +1 -1
- package/build/dist/Models/DatabaseModels/MonitorOwnerUser.js +3 -1
- package/build/dist/Models/DatabaseModels/MonitorOwnerUser.js.map +1 -1
- package/build/dist/Models/DatabaseModels/MonitorTemplate.js +2 -3
- package/build/dist/Models/DatabaseModels/MonitorTemplate.js.map +1 -1
- package/build/dist/Models/DatabaseModels/NetworkDeviceOwnerTeam.js +4 -1
- package/build/dist/Models/DatabaseModels/NetworkDeviceOwnerTeam.js.map +1 -1
- package/build/dist/Models/DatabaseModels/NetworkDeviceOwnerUser.js +4 -1
- package/build/dist/Models/DatabaseModels/NetworkDeviceOwnerUser.js.map +1 -1
- package/build/dist/Models/DatabaseModels/OnCallDutyPolicyOwnerTeam.js +3 -1
- package/build/dist/Models/DatabaseModels/OnCallDutyPolicyOwnerTeam.js.map +1 -1
- package/build/dist/Models/DatabaseModels/OnCallDutyPolicyOwnerUser.js +3 -1
- package/build/dist/Models/DatabaseModels/OnCallDutyPolicyOwnerUser.js.map +1 -1
- package/build/dist/Models/DatabaseModels/OnCallDutyPolicyScheduleOwnerTeam.js +3 -1
- package/build/dist/Models/DatabaseModels/OnCallDutyPolicyScheduleOwnerTeam.js.map +1 -1
- package/build/dist/Models/DatabaseModels/OnCallDutyPolicyScheduleOwnerUser.js +3 -1
- package/build/dist/Models/DatabaseModels/OnCallDutyPolicyScheduleOwnerUser.js.map +1 -1
- package/build/dist/Models/DatabaseModels/PodmanHostOwnerTeam.js +4 -1
- package/build/dist/Models/DatabaseModels/PodmanHostOwnerTeam.js.map +1 -1
- package/build/dist/Models/DatabaseModels/PodmanHostOwnerUser.js +4 -1
- package/build/dist/Models/DatabaseModels/PodmanHostOwnerUser.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ProbeOwnerTeam.js +4 -1
- package/build/dist/Models/DatabaseModels/ProbeOwnerTeam.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ProbeOwnerUser.js +4 -1
- package/build/dist/Models/DatabaseModels/ProbeOwnerUser.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ProxmoxClusterOwnerTeam.js +4 -1
- package/build/dist/Models/DatabaseModels/ProxmoxClusterOwnerTeam.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ProxmoxClusterOwnerUser.js +4 -1
- package/build/dist/Models/DatabaseModels/ProxmoxClusterOwnerUser.js.map +1 -1
- package/build/dist/Models/DatabaseModels/RumApplicationOwnerTeam.js +4 -1
- package/build/dist/Models/DatabaseModels/RumApplicationOwnerTeam.js.map +1 -1
- package/build/dist/Models/DatabaseModels/RumApplicationOwnerUser.js +4 -1
- package/build/dist/Models/DatabaseModels/RumApplicationOwnerUser.js.map +1 -1
- package/build/dist/Models/DatabaseModels/RunbookOwnerTeam.js +3 -1
- package/build/dist/Models/DatabaseModels/RunbookOwnerTeam.js.map +1 -1
- package/build/dist/Models/DatabaseModels/RunbookOwnerUser.js +3 -1
- package/build/dist/Models/DatabaseModels/RunbookOwnerUser.js.map +1 -1
- package/build/dist/Models/DatabaseModels/RunnerOwnerTeam.js +3 -1
- package/build/dist/Models/DatabaseModels/RunnerOwnerTeam.js.map +1 -1
- package/build/dist/Models/DatabaseModels/RunnerOwnerUser.js +3 -1
- package/build/dist/Models/DatabaseModels/RunnerOwnerUser.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ScheduledMaintenanceOwnerTeam.js +3 -1
- package/build/dist/Models/DatabaseModels/ScheduledMaintenanceOwnerTeam.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ScheduledMaintenanceOwnerUser.js +3 -1
- package/build/dist/Models/DatabaseModels/ScheduledMaintenanceOwnerUser.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ScheduledMaintenanceTemplateOwnerTeam.js +6 -1
- package/build/dist/Models/DatabaseModels/ScheduledMaintenanceTemplateOwnerTeam.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ScheduledMaintenanceTemplateOwnerUser.js +6 -1
- package/build/dist/Models/DatabaseModels/ScheduledMaintenanceTemplateOwnerUser.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ServerlessFunctionOwnerTeam.js +4 -1
- package/build/dist/Models/DatabaseModels/ServerlessFunctionOwnerTeam.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ServerlessFunctionOwnerUser.js +4 -1
- package/build/dist/Models/DatabaseModels/ServerlessFunctionOwnerUser.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ServiceLevelObjectiveOwnerTeam.js +3 -1
- package/build/dist/Models/DatabaseModels/ServiceLevelObjectiveOwnerTeam.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ServiceLevelObjectiveOwnerUser.js +3 -1
- package/build/dist/Models/DatabaseModels/ServiceLevelObjectiveOwnerUser.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ServiceOwnerTeam.js +4 -1
- package/build/dist/Models/DatabaseModels/ServiceOwnerTeam.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ServiceOwnerUser.js +4 -1
- package/build/dist/Models/DatabaseModels/ServiceOwnerUser.js.map +1 -1
- package/build/dist/Models/DatabaseModels/StatusPageOwnerTeam.js +3 -1
- package/build/dist/Models/DatabaseModels/StatusPageOwnerTeam.js.map +1 -1
- package/build/dist/Models/DatabaseModels/StatusPageOwnerUser.js +3 -1
- package/build/dist/Models/DatabaseModels/StatusPageOwnerUser.js.map +1 -1
- package/build/dist/Models/DatabaseModels/VMwareVCenterOwnerTeam.js +4 -1
- package/build/dist/Models/DatabaseModels/VMwareVCenterOwnerTeam.js.map +1 -1
- package/build/dist/Models/DatabaseModels/VMwareVCenterOwnerUser.js +4 -1
- package/build/dist/Models/DatabaseModels/VMwareVCenterOwnerUser.js.map +1 -1
- package/build/dist/Models/DatabaseModels/WorkflowOwnerTeam.js +3 -1
- package/build/dist/Models/DatabaseModels/WorkflowOwnerTeam.js.map +1 -1
- package/build/dist/Models/DatabaseModels/WorkflowOwnerUser.js +3 -1
- package/build/dist/Models/DatabaseModels/WorkflowOwnerUser.js.map +1 -1
- package/build/dist/Server/API/AIAgentDataAPI.js +1 -1
- package/build/dist/Server/API/AIChatAPI.js +3 -1
- package/build/dist/Server/API/AIChatAPI.js.map +1 -1
- package/build/dist/Server/API/AIInvestigationAPI.js +3 -0
- package/build/dist/Server/API/AIInvestigationAPI.js.map +1 -1
- package/build/dist/Server/API/StatusPageAPI.js +9 -1
- package/build/dist/Server/API/StatusPageAPI.js.map +1 -1
- package/build/dist/Server/Infrastructure/Postgres/LocalMigrationGenerationDataSource.js +1 -1
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1793500000000-MakeOwnerRowsUnique.js +602 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1793500000000-MakeOwnerRowsUnique.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1793700000000-AddAIInvestigationDecision.js +14 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1793700000000-AddAIInvestigationDecision.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1793800000000-RemoveMonitorDescriptionLengthLimit.js +20 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1793800000000-RemoveMonitorDescriptionLengthLimit.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +6 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
- package/build/dist/Server/Middleware/IdentityRateLimit.js +22 -1
- package/build/dist/Server/Middleware/IdentityRateLimit.js.map +1 -1
- package/build/dist/Server/Middleware/PublicDashboardRateLimit.js +117 -36
- package/build/dist/Server/Middleware/PublicDashboardRateLimit.js.map +1 -1
- package/build/dist/Server/Services/AlertEpisodeService.js +13 -31
- package/build/dist/Server/Services/AlertEpisodeService.js.map +1 -1
- package/build/dist/Server/Services/AlertGroupingEngineService.js +7 -4
- package/build/dist/Server/Services/AlertGroupingEngineService.js.map +1 -1
- package/build/dist/Server/Services/AlertService.js +13 -31
- package/build/dist/Server/Services/AlertService.js.map +1 -1
- package/build/dist/Server/Services/CephClusterOwnerRuleEngineService.js +12 -8
- package/build/dist/Server/Services/CephClusterOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/CloudResourceOwnerRuleEngineService.js +12 -8
- package/build/dist/Server/Services/CloudResourceOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/DashboardOwnerRuleEngineService.js +12 -8
- package/build/dist/Server/Services/DashboardOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/DatabaseService.js +71 -1
- package/build/dist/Server/Services/DatabaseService.js.map +1 -1
- package/build/dist/Server/Services/DockerHostOwnerRuleEngineService.js +12 -8
- package/build/dist/Server/Services/DockerHostOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/DockerSwarmClusterOwnerRuleEngineService.js +12 -8
- package/build/dist/Server/Services/DockerSwarmClusterOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/HostOwnerRuleEngineService.js +12 -8
- package/build/dist/Server/Services/HostOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/IncidentEpisodeOwnerRuleEngineService.js +6 -4
- package/build/dist/Server/Services/IncidentEpisodeOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/IncidentEpisodeService.js +15 -68
- package/build/dist/Server/Services/IncidentEpisodeService.js.map +1 -1
- package/build/dist/Server/Services/IncidentGroupingEngineService.js +7 -4
- package/build/dist/Server/Services/IncidentGroupingEngineService.js.map +1 -1
- package/build/dist/Server/Services/IncidentService.js +13 -31
- package/build/dist/Server/Services/IncidentService.js.map +1 -1
- package/build/dist/Server/Services/IncidentTemplateService.js +13 -31
- package/build/dist/Server/Services/IncidentTemplateService.js.map +1 -1
- package/build/dist/Server/Services/IncomingCallPolicyOwnerRuleEngineService.js +12 -8
- package/build/dist/Server/Services/IncomingCallPolicyOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/IoTFleetOwnerRuleEngineService.js +12 -8
- package/build/dist/Server/Services/IoTFleetOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/KubernetesClusterOwnerRuleEngineService.js +12 -8
- package/build/dist/Server/Services/KubernetesClusterOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/MonitorService.js +13 -31
- package/build/dist/Server/Services/MonitorService.js.map +1 -1
- package/build/dist/Server/Services/NetworkDeviceOwnerRuleEngineService.js +12 -8
- package/build/dist/Server/Services/NetworkDeviceOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/OnCallDutyPolicyOwnerRuleEngineService.js +12 -8
- package/build/dist/Server/Services/OnCallDutyPolicyOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/OnCallDutyPolicyScheduleOwnerRuleEngineService.js +12 -8
- package/build/dist/Server/Services/OnCallDutyPolicyScheduleOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/PodmanHostOwnerRuleEngineService.js +12 -8
- package/build/dist/Server/Services/PodmanHostOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/ProxmoxClusterOwnerRuleEngineService.js +12 -8
- package/build/dist/Server/Services/ProxmoxClusterOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/RumApplicationOwnerRuleEngineService.js +12 -8
- package/build/dist/Server/Services/RumApplicationOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/RunbookOwnerRuleEngineService.js +12 -8
- package/build/dist/Server/Services/RunbookOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/ScheduledMaintenanceService.js +13 -31
- package/build/dist/Server/Services/ScheduledMaintenanceService.js.map +1 -1
- package/build/dist/Server/Services/ScheduledMaintenanceTemplateService.js +12 -29
- package/build/dist/Server/Services/ScheduledMaintenanceTemplateService.js.map +1 -1
- package/build/dist/Server/Services/ServerlessFunctionOwnerRuleEngineService.js +12 -8
- package/build/dist/Server/Services/ServerlessFunctionOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/ServiceOwnerRuleEngineService.js +12 -8
- package/build/dist/Server/Services/ServiceOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/StatusPagePrivateUserService.js +33 -25
- package/build/dist/Server/Services/StatusPagePrivateUserService.js.map +1 -1
- package/build/dist/Server/Services/StatusPagePrivateUserSessionService.js +36 -1
- package/build/dist/Server/Services/StatusPagePrivateUserSessionService.js.map +1 -1
- package/build/dist/Server/Services/StatusPageService.js +50 -35
- package/build/dist/Server/Services/StatusPageService.js.map +1 -1
- package/build/dist/Server/Services/UserSessionService.js +5 -0
- package/build/dist/Server/Services/UserSessionService.js.map +1 -1
- package/build/dist/Server/Services/VMwareVCenterOwnerRuleEngineService.js +12 -8
- package/build/dist/Server/Services/VMwareVCenterOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/WorkflowOwnerRuleEngineService.js +12 -8
- package/build/dist/Server/Services/WorkflowOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Types/Database/Permissions/OwnedScopePermission.js +15 -10
- package/build/dist/Server/Types/Database/Permissions/OwnedScopePermission.js.map +1 -1
- package/build/dist/Server/Types/Database/Permissions/OwnerTableRegistry.js +82 -0
- package/build/dist/Server/Types/Database/Permissions/OwnerTableRegistry.js.map +1 -1
- package/build/dist/Server/Utils/AI/Chat/ChatAgentRunner.js +12 -3
- package/build/dist/Server/Utils/AI/Chat/ChatAgentRunner.js.map +1 -1
- package/build/dist/Server/Utils/AI/Chat/ObservabilityChatPrompt.js +32 -4
- package/build/dist/Server/Utils/AI/Chat/ObservabilityChatPrompt.js.map +1 -1
- package/build/dist/Server/Utils/AI/CodeFix/CodeAgentWorkspaceGuard.js +1 -1
- package/build/dist/Server/Utils/AI/CodeFix/CodeFixAgentCompletion.js +1 -1
- package/build/dist/Server/Utils/AI/SRE/AIInvestigationEngine.js +8 -5
- package/build/dist/Server/Utils/AI/SRE/AIInvestigationEngine.js.map +1 -1
- package/build/dist/Server/Utils/AI/SRE/AlertInvestigationRunner.js +33 -13
- package/build/dist/Server/Utils/AI/SRE/AlertInvestigationRunner.js.map +1 -1
- package/build/dist/Server/Utils/AI/SRE/IncidentInvestigationRunner.js +31 -10
- package/build/dist/Server/Utils/AI/SRE/IncidentInvestigationRunner.js.map +1 -1
- package/build/dist/Server/Utils/AI/SRE/InvestigationEligibility.js +205 -0
- package/build/dist/Server/Utils/AI/SRE/InvestigationEligibility.js.map +1 -0
- package/build/dist/Server/Utils/AI/SRE/InvestigationQueue.js +13 -0
- package/build/dist/Server/Utils/AI/SRE/InvestigationQueue.js.map +1 -1
- package/build/dist/Server/Utils/AI/Toolbox/Index.js +30 -6
- package/build/dist/Server/Utils/AI/Toolbox/Index.js.map +1 -1
- package/build/dist/Server/Utils/AI/Toolbox/ResourceTools.js +721 -0
- package/build/dist/Server/Utils/AI/Toolbox/ResourceTools.js.map +1 -0
- package/build/dist/Server/Utils/AI/Toolbox/RumTools.js +330 -0
- package/build/dist/Server/Utils/AI/Toolbox/RumTools.js.map +1 -0
- package/build/dist/Server/Utils/AI/Toolbox/ToolTypes.js.map +1 -1
- package/build/dist/Server/Utils/AI/Toolbox/TraceTools.js +1 -1
- package/build/dist/Server/Utils/AI/Toolbox/TraceTools.js.map +1 -1
- package/build/dist/Server/Utils/Database/PostgresErrorTranslator.js +11 -0
- package/build/dist/Server/Utils/Database/PostgresErrorTranslator.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/Criteria/CompareCriteria.js +106 -101
- package/build/dist/Server/Utils/Monitor/Criteria/CompareCriteria.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/Criteria/MetricMonitorCriteria.js +4 -2
- package/build/dist/Server/Utils/Monitor/Criteria/MetricMonitorCriteria.js.map +1 -1
- package/build/dist/Server/Utils/Rules/OwnerRuleAssignment.js +94 -0
- package/build/dist/Server/Utils/Rules/OwnerRuleAssignment.js.map +1 -1
- package/build/dist/Server/Utils/Telemetry/TelemetryEntity.js +171 -6
- package/build/dist/Server/Utils/Telemetry/TelemetryEntity.js.map +1 -1
- package/build/dist/Types/AI/AIChatPageContext.js +68 -2
- package/build/dist/Types/AI/AIChatPageContext.js.map +1 -1
- package/build/dist/Types/AI/AIChatTypes.js +4 -0
- package/build/dist/Types/AI/AIChatTypes.js.map +1 -1
- package/build/dist/Types/AI/AIResourceContext.js +162 -0
- package/build/dist/Types/AI/AIResourceContext.js.map +1 -0
- package/build/dist/Types/AI/InvestigationNotStartedReason.js +2 -0
- package/build/dist/Types/AI/InvestigationNotStartedReason.js.map +1 -0
- package/build/dist/Types/Database/UniqueColumnsTogether.js +19 -0
- package/build/dist/Types/Database/UniqueColumnsTogether.js.map +1 -0
- package/build/dist/Types/Metrics/MetricQueryConfigData.js.map +1 -1
- package/build/dist/Types/Rum/WebVitals.js +64 -0
- package/build/dist/Types/Rum/WebVitals.js.map +1 -0
- package/build/dist/Types/WebsiteRequest.js +2 -0
- package/build/dist/Types/WebsiteRequest.js.map +1 -1
- package/build/dist/UI/Components/EditionLabel/EditionLabel.js +7 -5
- package/build/dist/UI/Components/EditionLabel/EditionLabel.js.map +1 -1
- package/build/dist/UI/Components/ModelTable/BaseModelTable.js +7 -0
- package/build/dist/UI/Components/ModelTable/BaseModelTable.js.map +1 -1
- package/build/dist/UI/Components/Navbar/NavBar.js.map +1 -1
- package/build/dist/UI/Components/Navbar/NavBarMenuModal.js +4 -2
- package/build/dist/UI/Components/Navbar/NavBarMenuModal.js.map +1 -1
- package/build/dist/Utils/API.js +8 -4
- package/build/dist/Utils/API.js.map +1 -1
- package/build/dist/Utils/HTTPResponseBodyReader.js +50 -6
- package/build/dist/Utils/HTTPResponseBodyReader.js.map +1 -1
- package/build/dist/Utils/Metrics/MetricExplorerUrl.js +14 -3
- package/build/dist/Utils/Metrics/MetricExplorerUrl.js.map +1 -1
- package/build/dist/Utils/Monitor/MonitorTestAvailabilityUtil.js +68 -0
- package/build/dist/Utils/Monitor/MonitorTestAvailabilityUtil.js.map +1 -0
- package/build/dist/Utils/Telemetry/HostIpAddresses.js +42 -3
- package/build/dist/Utils/Telemetry/HostIpAddresses.js.map +1 -1
- package/package.json +5 -5
- package/test-setup.sh +2 -2
|
@@ -0,0 +1,721 @@
|
|
|
1
|
+
import Host from "../../../../Models/DatabaseModels/Host";
|
|
2
|
+
import DockerHost from "../../../../Models/DatabaseModels/DockerHost";
|
|
3
|
+
import PodmanHost from "../../../../Models/DatabaseModels/PodmanHost";
|
|
4
|
+
import KubernetesCluster from "../../../../Models/DatabaseModels/KubernetesCluster";
|
|
5
|
+
import DockerSwarmCluster from "../../../../Models/DatabaseModels/DockerSwarmCluster";
|
|
6
|
+
import ProxmoxCluster from "../../../../Models/DatabaseModels/ProxmoxCluster";
|
|
7
|
+
import VMwareVCenter from "../../../../Models/DatabaseModels/VMwareVCenter";
|
|
8
|
+
import CephCluster from "../../../../Models/DatabaseModels/CephCluster";
|
|
9
|
+
import ServerlessFunction from "../../../../Models/DatabaseModels/ServerlessFunction";
|
|
10
|
+
import CloudResource from "../../../../Models/DatabaseModels/CloudResource";
|
|
11
|
+
import IoTFleet from "../../../../Models/DatabaseModels/IoTFleet";
|
|
12
|
+
import NetworkDevice from "../../../../Models/DatabaseModels/NetworkDevice";
|
|
13
|
+
import Metric from "../../../../Models/AnalyticsModels/Metric";
|
|
14
|
+
import Log from "../../../../Models/AnalyticsModels/Log";
|
|
15
|
+
import Span from "../../../../Models/AnalyticsModels/Span";
|
|
16
|
+
import { AIResourceType, isAIResourceType, getAIResourceDefinition, } from "../../../../Types/AI/AIResourceContext";
|
|
17
|
+
import { AIChatCitationTargetType, } from "../../../../Types/AI/AIChatTypes";
|
|
18
|
+
import AggregationInterval from "../../../../Types/BaseDatabase/AggregationInterval";
|
|
19
|
+
import AggregationIntervalUtil from "../../../../Types/BaseDatabase/AggregationIntervalUtil";
|
|
20
|
+
import AggregationType from "../../../../Types/BaseDatabase/AggregationType";
|
|
21
|
+
import InBetween from "../../../../Types/BaseDatabase/InBetween";
|
|
22
|
+
import SortOrder from "../../../../Types/BaseDatabase/SortOrder";
|
|
23
|
+
import BadDataException from "../../../../Types/Exception/BadDataException";
|
|
24
|
+
import ObjectID from "../../../../Types/ObjectID";
|
|
25
|
+
import Permission from "../../../../Types/Permission";
|
|
26
|
+
import { keyForHost, keyForKubernetesCluster, keyForDockerSwarmCluster, keyForProxmoxCluster, keyForVMwareVCenter, keyForCephCluster, } from "../../../../Utils/Telemetry/EntityKey";
|
|
27
|
+
import HostService from "../../../Services/HostService";
|
|
28
|
+
import DockerHostService from "../../../Services/DockerHostService";
|
|
29
|
+
import PodmanHostService from "../../../Services/PodmanHostService";
|
|
30
|
+
import KubernetesClusterService from "../../../Services/KubernetesClusterService";
|
|
31
|
+
import DockerSwarmClusterService from "../../../Services/DockerSwarmClusterService";
|
|
32
|
+
import ProxmoxClusterService from "../../../Services/ProxmoxClusterService";
|
|
33
|
+
import VMwareVCenterService from "../../../Services/VMwareVCenterService";
|
|
34
|
+
import CephClusterService from "../../../Services/CephClusterService";
|
|
35
|
+
import ServerlessFunctionService from "../../../Services/ServerlessFunctionService";
|
|
36
|
+
import CloudResourceService from "../../../Services/CloudResourceService";
|
|
37
|
+
import IoTFleetService from "../../../Services/IoTFleetService";
|
|
38
|
+
import NetworkDeviceService from "../../../Services/NetworkDeviceService";
|
|
39
|
+
import MetricService from "../../../Services/MetricService";
|
|
40
|
+
import LogAggregationService from "../../../Services/LogAggregationService";
|
|
41
|
+
import TraceAggregationService from "../../../Services/TraceAggregationService";
|
|
42
|
+
import QueryHelper from "../../../Types/Database/QueryHelper";
|
|
43
|
+
import DatabaseRequestType from "../../../Types/BaseDatabase/DatabaseRequestType";
|
|
44
|
+
import ModelPermission from "../../../Types/AnalyticsDatabase/ModelPermission";
|
|
45
|
+
import ToolResultSerializer from "./Serializer";
|
|
46
|
+
import { TimeRangeSchemaProperties, ToolArgs, } from "./ToolTypes";
|
|
47
|
+
import WidgetBuilder from "./WidgetBuilder";
|
|
48
|
+
/*
|
|
49
|
+
* Explicit allowlists are essential here: resource records can also contain
|
|
50
|
+
* SSH, SNMP and integration credentials. Neither inventory nor scope
|
|
51
|
+
* resolution ever selects or serializes an entire model.
|
|
52
|
+
*/
|
|
53
|
+
const RESOURCE_DESCRIPTORS = {
|
|
54
|
+
[AIResourceType.Host]: {
|
|
55
|
+
model: Host,
|
|
56
|
+
findBy: (data) => {
|
|
57
|
+
return HostService.findBy(data);
|
|
58
|
+
},
|
|
59
|
+
fields: ["hostIdentifier", "cpuCores", "totalMemoryBytes", "processCount"],
|
|
60
|
+
identifier: "hostIdentifier",
|
|
61
|
+
attributeKey: "resource.host.name",
|
|
62
|
+
keyFor: keyForHost,
|
|
63
|
+
},
|
|
64
|
+
[AIResourceType.DockerHost]: {
|
|
65
|
+
model: DockerHost,
|
|
66
|
+
findBy: (data) => {
|
|
67
|
+
return DockerHostService.findBy(data);
|
|
68
|
+
},
|
|
69
|
+
fields: [
|
|
70
|
+
"hostIdentifier",
|
|
71
|
+
"containersRunning",
|
|
72
|
+
"containersStopped",
|
|
73
|
+
"containersPaused",
|
|
74
|
+
],
|
|
75
|
+
identifier: "hostIdentifier",
|
|
76
|
+
attributeKey: "resource.host.name",
|
|
77
|
+
keyFor: keyForHost,
|
|
78
|
+
runtime: "docker",
|
|
79
|
+
},
|
|
80
|
+
[AIResourceType.PodmanHost]: {
|
|
81
|
+
model: PodmanHost,
|
|
82
|
+
findBy: (data) => {
|
|
83
|
+
return PodmanHostService.findBy(data);
|
|
84
|
+
},
|
|
85
|
+
fields: [
|
|
86
|
+
"hostIdentifier",
|
|
87
|
+
"containersRunning",
|
|
88
|
+
"containersStopped",
|
|
89
|
+
"containersPaused",
|
|
90
|
+
],
|
|
91
|
+
identifier: "hostIdentifier",
|
|
92
|
+
attributeKey: "resource.host.name",
|
|
93
|
+
keyFor: keyForHost,
|
|
94
|
+
runtime: "podman",
|
|
95
|
+
},
|
|
96
|
+
[AIResourceType.KubernetesCluster]: {
|
|
97
|
+
model: KubernetesCluster,
|
|
98
|
+
findBy: (data) => {
|
|
99
|
+
return KubernetesClusterService.findBy(data);
|
|
100
|
+
},
|
|
101
|
+
fields: [
|
|
102
|
+
"clusterIdentifier",
|
|
103
|
+
"provider",
|
|
104
|
+
"nodeCount",
|
|
105
|
+
"podCount",
|
|
106
|
+
"namespaceCount",
|
|
107
|
+
],
|
|
108
|
+
identifier: "clusterIdentifier",
|
|
109
|
+
attributeKey: "resource.k8s.cluster.name",
|
|
110
|
+
keyFor: keyForKubernetesCluster,
|
|
111
|
+
},
|
|
112
|
+
[AIResourceType.DockerSwarmCluster]: {
|
|
113
|
+
model: DockerSwarmCluster,
|
|
114
|
+
findBy: (data) => {
|
|
115
|
+
return DockerSwarmClusterService.findBy(data);
|
|
116
|
+
},
|
|
117
|
+
fields: [
|
|
118
|
+
"nodeCount",
|
|
119
|
+
"readyNodeCount",
|
|
120
|
+
"managerNodeCount",
|
|
121
|
+
"serviceCount",
|
|
122
|
+
"taskCount",
|
|
123
|
+
"runningTaskCount",
|
|
124
|
+
"stackCount",
|
|
125
|
+
],
|
|
126
|
+
identifier: "name",
|
|
127
|
+
attributeKey: "resource.docker.swarm.cluster.name",
|
|
128
|
+
keyFor: keyForDockerSwarmCluster,
|
|
129
|
+
},
|
|
130
|
+
[AIResourceType.ProxmoxCluster]: {
|
|
131
|
+
model: ProxmoxCluster,
|
|
132
|
+
findBy: (data) => {
|
|
133
|
+
return ProxmoxClusterService.findBy(data);
|
|
134
|
+
},
|
|
135
|
+
fields: [
|
|
136
|
+
"nodeCount",
|
|
137
|
+
"onlineNodeCount",
|
|
138
|
+
"guestCount",
|
|
139
|
+
"storageCount",
|
|
140
|
+
"guestsWithoutBackupCount",
|
|
141
|
+
],
|
|
142
|
+
identifier: "name",
|
|
143
|
+
attributeKey: "resource.proxmox.cluster.name",
|
|
144
|
+
keyFor: keyForProxmoxCluster,
|
|
145
|
+
},
|
|
146
|
+
[AIResourceType.VMwareVCenter]: {
|
|
147
|
+
model: VMwareVCenter,
|
|
148
|
+
findBy: (data) => {
|
|
149
|
+
return VMwareVCenterService.findBy(data);
|
|
150
|
+
},
|
|
151
|
+
fields: [
|
|
152
|
+
"datacenterCount",
|
|
153
|
+
"clusterCount",
|
|
154
|
+
"hostCount",
|
|
155
|
+
"vmCount",
|
|
156
|
+
"poweredOnVmCount",
|
|
157
|
+
"datastoreCount",
|
|
158
|
+
],
|
|
159
|
+
identifier: "name",
|
|
160
|
+
attributeKey: "resource.vmware.vcenter.name",
|
|
161
|
+
keyFor: keyForVMwareVCenter,
|
|
162
|
+
},
|
|
163
|
+
[AIResourceType.CephCluster]: {
|
|
164
|
+
model: CephCluster,
|
|
165
|
+
findBy: (data) => {
|
|
166
|
+
return CephClusterService.findBy(data);
|
|
167
|
+
},
|
|
168
|
+
fields: [
|
|
169
|
+
"healthStatus",
|
|
170
|
+
"capacityUsedPercent",
|
|
171
|
+
"monCount",
|
|
172
|
+
"osdCount",
|
|
173
|
+
"osdUpCount",
|
|
174
|
+
"osdInCount",
|
|
175
|
+
"poolCount",
|
|
176
|
+
],
|
|
177
|
+
identifier: "name",
|
|
178
|
+
attributeKey: "resource.ceph.cluster.name",
|
|
179
|
+
keyFor: keyForCephCluster,
|
|
180
|
+
},
|
|
181
|
+
[AIResourceType.ServerlessFunction]: {
|
|
182
|
+
model: ServerlessFunction,
|
|
183
|
+
findBy: (data) => {
|
|
184
|
+
return ServerlessFunctionService.findBy(data);
|
|
185
|
+
},
|
|
186
|
+
fields: [
|
|
187
|
+
"functionIdentifier",
|
|
188
|
+
"cloudPlatform",
|
|
189
|
+
"cloudProvider",
|
|
190
|
+
"cloudRegion",
|
|
191
|
+
"runtimeName",
|
|
192
|
+
],
|
|
193
|
+
identifier: "functionIdentifier",
|
|
194
|
+
attributeKey: "resource.faas.name",
|
|
195
|
+
},
|
|
196
|
+
[AIResourceType.CloudResource]: {
|
|
197
|
+
model: CloudResource,
|
|
198
|
+
findBy: (data) => {
|
|
199
|
+
return CloudResourceService.findBy(data);
|
|
200
|
+
},
|
|
201
|
+
fields: [
|
|
202
|
+
"resourceIdentifier",
|
|
203
|
+
"cloudPlatform",
|
|
204
|
+
"cloudProvider",
|
|
205
|
+
"cloudAccountId",
|
|
206
|
+
"cloudRegion",
|
|
207
|
+
"runtimeName",
|
|
208
|
+
],
|
|
209
|
+
},
|
|
210
|
+
[AIResourceType.IoTFleet]: {
|
|
211
|
+
model: IoTFleet,
|
|
212
|
+
findBy: (data) => {
|
|
213
|
+
return IoTFleetService.findBy(data);
|
|
214
|
+
},
|
|
215
|
+
fields: ["deviceCount", "onlineDeviceCount"],
|
|
216
|
+
identifier: "name",
|
|
217
|
+
attributeKey: "resource.iot.fleet.name",
|
|
218
|
+
},
|
|
219
|
+
[AIResourceType.NetworkDevice]: {
|
|
220
|
+
model: NetworkDevice,
|
|
221
|
+
findBy: (data) => {
|
|
222
|
+
return NetworkDeviceService.findBy(data);
|
|
223
|
+
},
|
|
224
|
+
fields: [
|
|
225
|
+
"isReachable",
|
|
226
|
+
"isSnmpReachable",
|
|
227
|
+
"interfacesTotal",
|
|
228
|
+
"interfacesUp",
|
|
229
|
+
"interfacesDown",
|
|
230
|
+
"lastPolledAt",
|
|
231
|
+
],
|
|
232
|
+
},
|
|
233
|
+
};
|
|
234
|
+
function getResourceType(args) {
|
|
235
|
+
const value = ToolArgs.getString(args, "resourceType");
|
|
236
|
+
if (!isAIResourceType(value)) {
|
|
237
|
+
throw new BadDataException("resourceType must be a supported infrastructure model name.");
|
|
238
|
+
}
|
|
239
|
+
return value;
|
|
240
|
+
}
|
|
241
|
+
function getResourceId(args, required) {
|
|
242
|
+
if (args["resourceId"] === undefined && !required) {
|
|
243
|
+
return undefined;
|
|
244
|
+
}
|
|
245
|
+
const value = ToolArgs.getString(args, "resourceId");
|
|
246
|
+
if (!value || !ObjectID.isValidUUID(value)) {
|
|
247
|
+
throw new BadDataException("resourceId must be a valid OneUptime UUID. Resolve names with query_telemetry_resources.");
|
|
248
|
+
}
|
|
249
|
+
return new ObjectID(value);
|
|
250
|
+
}
|
|
251
|
+
function getSignal(args) {
|
|
252
|
+
const signal = ToolArgs.getString(args, "signal");
|
|
253
|
+
if (signal !== "metrics" && signal !== "logs" && signal !== "traces") {
|
|
254
|
+
throw new BadDataException("signal must be metrics, logs or traces.");
|
|
255
|
+
}
|
|
256
|
+
return signal;
|
|
257
|
+
}
|
|
258
|
+
function getFields(type) {
|
|
259
|
+
return [
|
|
260
|
+
"_id",
|
|
261
|
+
"name",
|
|
262
|
+
"lastSeenAt",
|
|
263
|
+
"isArchived",
|
|
264
|
+
...(type === AIResourceType.NetworkDevice ? [] : ["otelCollectorStatus"]),
|
|
265
|
+
...RESOURCE_DESCRIPTORS[type].fields,
|
|
266
|
+
];
|
|
267
|
+
}
|
|
268
|
+
function getResourcePermissions(args) {
|
|
269
|
+
const type = ToolArgs.getString(args, "resourceType");
|
|
270
|
+
return isAIResourceType(type)
|
|
271
|
+
? new RESOURCE_DESCRIPTORS[type].model().getReadPermissions()
|
|
272
|
+
: [];
|
|
273
|
+
}
|
|
274
|
+
function resourceTarget(type, id) {
|
|
275
|
+
return {
|
|
276
|
+
type: id
|
|
277
|
+
? AIChatCitationTargetType.TelemetryResourceView
|
|
278
|
+
: AIChatCitationTargetType.TelemetryResources,
|
|
279
|
+
params: Object.assign({ resourceType: type }, (id ? { resourceId: id.toString() } : {})),
|
|
280
|
+
};
|
|
281
|
+
}
|
|
282
|
+
const RESOURCE_SCHEMA_PROPERTIES = {
|
|
283
|
+
resourceType: {
|
|
284
|
+
type: "string",
|
|
285
|
+
enum: Object.values(AIResourceType),
|
|
286
|
+
description: "Infrastructure resource kind (required).",
|
|
287
|
+
},
|
|
288
|
+
resourceId: {
|
|
289
|
+
type: "string",
|
|
290
|
+
description: "OneUptime resource UUID, resolved with query_telemetry_resources.",
|
|
291
|
+
},
|
|
292
|
+
};
|
|
293
|
+
function resultForRows(data) {
|
|
294
|
+
const serialized = ToolResultSerializer.serializeRows(data.rows);
|
|
295
|
+
return {
|
|
296
|
+
dataForLlm: `${serialized.text || "No matching data."}\n${data.note}`,
|
|
297
|
+
rowCount: serialized.rowCount,
|
|
298
|
+
citationLabel: data.label,
|
|
299
|
+
citationTarget: data.target,
|
|
300
|
+
redactionCount: serialized.redactionCount,
|
|
301
|
+
isTruncated: serialized.isTruncated || Boolean(data.truncated),
|
|
302
|
+
widget: data.widget,
|
|
303
|
+
};
|
|
304
|
+
}
|
|
305
|
+
export const QueryTelemetryResourcesTool = {
|
|
306
|
+
name: "query_telemetry_resources",
|
|
307
|
+
description: "Discover infrastructure resources of one kind, their OneUptime IDs, last-seen timestamps, collector or reachability status and safe inventory counts. Pass resourceId for one resource. Counts are snapshots, not historical trends; collector connection does not establish workload health. No credentials or child configuration are returned.",
|
|
308
|
+
inputSchema: {
|
|
309
|
+
type: "object",
|
|
310
|
+
properties: Object.assign(Object.assign({}, RESOURCE_SCHEMA_PROPERTIES), { search: {
|
|
311
|
+
type: "string",
|
|
312
|
+
description: "Only resource names containing this text.",
|
|
313
|
+
}, includeArchived: {
|
|
314
|
+
type: "boolean",
|
|
315
|
+
description: "Include archived resources (default false; an explicit resourceId also includes archived).",
|
|
316
|
+
}, limit: {
|
|
317
|
+
type: "number",
|
|
318
|
+
description: "Maximum resources (default20, max50).",
|
|
319
|
+
}, skip: { type: "number", description: "Rows to skip (default0, max500)." } }),
|
|
320
|
+
required: ["resourceType"],
|
|
321
|
+
},
|
|
322
|
+
get requiredPermissions() {
|
|
323
|
+
return Array.from(new Set(Object.values(RESOURCE_DESCRIPTORS).flatMap((descriptor) => {
|
|
324
|
+
return new descriptor.model().getReadPermissions();
|
|
325
|
+
})));
|
|
326
|
+
},
|
|
327
|
+
getRequiredPermissionGroups: (args) => {
|
|
328
|
+
return [getResourcePermissions(args)];
|
|
329
|
+
},
|
|
330
|
+
execute: async (args, ctx) => {
|
|
331
|
+
const type = getResourceType(args);
|
|
332
|
+
const id = getResourceId(args, false);
|
|
333
|
+
const limit = id
|
|
334
|
+
? 1
|
|
335
|
+
: ToolArgs.getNumber(args, "limit", {
|
|
336
|
+
defaultValue: 20,
|
|
337
|
+
min: 1,
|
|
338
|
+
max: 50,
|
|
339
|
+
});
|
|
340
|
+
const query = { projectId: ctx.projectId };
|
|
341
|
+
if (id) {
|
|
342
|
+
query["_id"] = id.toString();
|
|
343
|
+
}
|
|
344
|
+
else if (!ToolArgs.getBoolean(args, "includeArchived")) {
|
|
345
|
+
query["isArchived"] = false;
|
|
346
|
+
}
|
|
347
|
+
const search = ToolArgs.getString(args, "search");
|
|
348
|
+
if (search) {
|
|
349
|
+
query["name"] = QueryHelper.search(search);
|
|
350
|
+
}
|
|
351
|
+
const fields = getFields(type);
|
|
352
|
+
const models = await RESOURCE_DESCRIPTORS[type].findBy({
|
|
353
|
+
query: query,
|
|
354
|
+
select: Object.fromEntries(fields.map((field) => {
|
|
355
|
+
return [field, true];
|
|
356
|
+
})),
|
|
357
|
+
sort: { name: SortOrder.Ascending },
|
|
358
|
+
limit,
|
|
359
|
+
skip: id
|
|
360
|
+
? 0
|
|
361
|
+
: ToolArgs.getNumber(args, "skip", {
|
|
362
|
+
defaultValue: 0,
|
|
363
|
+
min: 0,
|
|
364
|
+
max: 500,
|
|
365
|
+
}),
|
|
366
|
+
props: ctx.props,
|
|
367
|
+
});
|
|
368
|
+
const rows = models.map((model) => {
|
|
369
|
+
var _a;
|
|
370
|
+
const row = { resourceType: type };
|
|
371
|
+
const record = model;
|
|
372
|
+
for (const field of fields) {
|
|
373
|
+
// Reading own selected fields preserves real zero/false, unlike getColumnValue.
|
|
374
|
+
row[field === "_id" ? "resourceId" : field] =
|
|
375
|
+
(_a = record[field]) !== null && _a !== void 0 ? _a : "unknown";
|
|
376
|
+
}
|
|
377
|
+
return row;
|
|
378
|
+
});
|
|
379
|
+
return resultForRows({
|
|
380
|
+
rows,
|
|
381
|
+
label: getAIResourceDefinition(type).pluralLabel,
|
|
382
|
+
target: resourceTarget(type, id),
|
|
383
|
+
truncated: !id && rows.length >= limit,
|
|
384
|
+
note: "Inventory snapshots are as of lastSeenAt; missing values are unknown. Collector connection is not workload health. Results are limited to resources you can read." +
|
|
385
|
+
(!id && rows.length >= limit
|
|
386
|
+
? " Result limit reached; paginate before making fleet-wide claims."
|
|
387
|
+
: ""),
|
|
388
|
+
});
|
|
389
|
+
},
|
|
390
|
+
};
|
|
391
|
+
/*
|
|
392
|
+
* Build only from a project-pinned, permission-checked parent lookup. The
|
|
393
|
+
* membership OR deliberately covers primary agent rows, secondary OTLP entity
|
|
394
|
+
* keys and legacy attributes. A missing identifier must never become an
|
|
395
|
+
* unfiltered query or an apparently complete id-only answer.
|
|
396
|
+
*/
|
|
397
|
+
export function buildAIResourceTelemetryScope(data) {
|
|
398
|
+
const descriptor = RESOURCE_DESCRIPTORS[data.type];
|
|
399
|
+
const note = "Scope is the parent resource; no individual child identity or namespace was selected. Missing telemetry is not evidence of health.";
|
|
400
|
+
if (data.type === AIResourceType.CloudResource) {
|
|
401
|
+
const attributes = {};
|
|
402
|
+
for (const [column, key] of [
|
|
403
|
+
["cloudPlatform", "resource.cloud.platform"],
|
|
404
|
+
["cloudAccountId", "resource.cloud.account.id"],
|
|
405
|
+
["cloudRegion", "resource.cloud.region"],
|
|
406
|
+
]) {
|
|
407
|
+
const value = ToolArgs.getString(data.resource, column);
|
|
408
|
+
if (value) {
|
|
409
|
+
attributes[key] = value;
|
|
410
|
+
}
|
|
411
|
+
}
|
|
412
|
+
if (!attributes["resource.cloud.platform"]) {
|
|
413
|
+
throw new BadDataException("This cloud environment has no cloud platform identity yet; its telemetry cannot be scoped safely.");
|
|
414
|
+
}
|
|
415
|
+
return { attributes, note };
|
|
416
|
+
}
|
|
417
|
+
if (data.type === AIResourceType.NetworkDevice) {
|
|
418
|
+
return data.signal === "logs"
|
|
419
|
+
? { attributes: { "networkDevice.id": data.id.toString() }, note }
|
|
420
|
+
: {
|
|
421
|
+
resourceScopes: [{ entityIds: [data.id.toString()], entityKeys: [] }],
|
|
422
|
+
note: `${note} Network metrics use the device's primary ID; traces are only spans explicitly assigned to that device.`,
|
|
423
|
+
};
|
|
424
|
+
}
|
|
425
|
+
const identifier = ToolArgs.getString(data.resource, descriptor.identifier);
|
|
426
|
+
if (!identifier) {
|
|
427
|
+
throw new BadDataException("This resource has no telemetry identifier yet; its telemetry cannot be scoped safely.");
|
|
428
|
+
}
|
|
429
|
+
return {
|
|
430
|
+
resourceScopes: [
|
|
431
|
+
{
|
|
432
|
+
entityIds: [data.id.toString()],
|
|
433
|
+
entityKeys: descriptor.keyFor
|
|
434
|
+
? [descriptor.keyFor(data.projectId.toString(), identifier)]
|
|
435
|
+
: [],
|
|
436
|
+
attributeKey: descriptor.attributeKey,
|
|
437
|
+
attributeValues: [identifier],
|
|
438
|
+
},
|
|
439
|
+
],
|
|
440
|
+
attributes: descriptor.runtime && data.signal !== "traces"
|
|
441
|
+
? { "resource.container.runtime": descriptor.runtime }
|
|
442
|
+
: undefined,
|
|
443
|
+
note: descriptor.runtime && data.signal === "traces"
|
|
444
|
+
? `${note} Traces match the host, as in the resource dashboard; they are not attributed to a particular container runtime.`
|
|
445
|
+
: note,
|
|
446
|
+
};
|
|
447
|
+
}
|
|
448
|
+
function metricInterval(startTime, endTime) {
|
|
449
|
+
/*
|
|
450
|
+
* Keep the full window under the serializer's 50-row budget, including
|
|
451
|
+
* partial first/last buckets. Never truncate the tail of a trend chart.
|
|
452
|
+
*/
|
|
453
|
+
const intervals = [
|
|
454
|
+
AggregationInterval.Minute,
|
|
455
|
+
AggregationInterval.FiveMinutes,
|
|
456
|
+
AggregationInterval.FifteenMinutes,
|
|
457
|
+
AggregationInterval.ThirtyMinutes,
|
|
458
|
+
AggregationInterval.Hour,
|
|
459
|
+
AggregationInterval.Day,
|
|
460
|
+
];
|
|
461
|
+
return (intervals.find((interval) => {
|
|
462
|
+
return (Math.ceil((endTime.getTime() - startTime.getTime()) /
|
|
463
|
+
AggregationIntervalUtil.getAggregationIntervalMs(interval)) +
|
|
464
|
+
1 <=
|
|
465
|
+
49);
|
|
466
|
+
}) || AggregationInterval.Day);
|
|
467
|
+
}
|
|
468
|
+
export const QueryResourceTelemetryTool = {
|
|
469
|
+
name: "query_resource_telemetry",
|
|
470
|
+
description: "Query metrics, log severity volume or trace operation/error/latency summaries for one accessible infrastructure resource. Safely includes secondary resource membership. Metrics without metricName discover names seen in this resource/time window; with a name return a bounded trend (default) or whole-window summary. No child/pod/container rankings or raw log messages. Missing data cannot establish health.",
|
|
471
|
+
inputSchema: {
|
|
472
|
+
type: "object",
|
|
473
|
+
properties: Object.assign(Object.assign(Object.assign({}, RESOURCE_SCHEMA_PROPERTIES), TimeRangeSchemaProperties), { signal: { type: "string", enum: ["metrics", "logs", "traces"] }, metricName: {
|
|
474
|
+
type: "string",
|
|
475
|
+
description: "Exact metric name; omit to discover scoped metric names.",
|
|
476
|
+
}, aggregationType: {
|
|
477
|
+
type: "string",
|
|
478
|
+
enum: ["Avg", "Min", "Max", "Sum", "Count", "P50", "P90", "P95", "P99"],
|
|
479
|
+
description: "Metric aggregation (defaultAvg); counter sums are exported values, not derived rates.",
|
|
480
|
+
}, mode: {
|
|
481
|
+
type: "string",
|
|
482
|
+
enum: ["trend", "summary"],
|
|
483
|
+
description: "Metric mode (defaulttrend); trend uses at most49 time buckets.",
|
|
484
|
+
}, severityText: {
|
|
485
|
+
type: "string",
|
|
486
|
+
description: "Logs only: match this exact severity before counting.",
|
|
487
|
+
}, rootOnly: {
|
|
488
|
+
type: "boolean",
|
|
489
|
+
description: "Traces only: restrict to root spans.",
|
|
490
|
+
}, limit: {
|
|
491
|
+
type: "number",
|
|
492
|
+
description: "Maximum metric names or trace operation groups (default20, max50). Does not truncate time buckets.",
|
|
493
|
+
} }),
|
|
494
|
+
required: ["resourceType", "resourceId", "signal"],
|
|
495
|
+
},
|
|
496
|
+
get requiredPermissions() {
|
|
497
|
+
return QueryTelemetryResourcesTool.requiredPermissions;
|
|
498
|
+
},
|
|
499
|
+
getRequiredPermissionGroups: (args) => {
|
|
500
|
+
const signal = ToolArgs.getString(args, "signal");
|
|
501
|
+
const model = signal === "metrics"
|
|
502
|
+
? new Metric()
|
|
503
|
+
: signal === "logs"
|
|
504
|
+
? new Log()
|
|
505
|
+
: signal === "traces"
|
|
506
|
+
? new Span()
|
|
507
|
+
: undefined;
|
|
508
|
+
const permissions = model
|
|
509
|
+
? [...model.getReadPermissions()]
|
|
510
|
+
: [];
|
|
511
|
+
/*
|
|
512
|
+
* Match the analytics model's effective table/owned-scope permissions.
|
|
513
|
+
* Infrastructure parent models retain their separate literal read ACL;
|
|
514
|
+
* a telemetry wildcard must never authorize an unrelated parent record.
|
|
515
|
+
*/
|
|
516
|
+
if (model &&
|
|
517
|
+
model
|
|
518
|
+
.isOperationalResource &&
|
|
519
|
+
!permissions.includes(Permission.ReadAllOperationalResources)) {
|
|
520
|
+
permissions.push(Permission.ReadAllOperationalResources);
|
|
521
|
+
}
|
|
522
|
+
return [getResourcePermissions(args), permissions];
|
|
523
|
+
},
|
|
524
|
+
execute: async (args, ctx) => {
|
|
525
|
+
const type = getResourceType(args);
|
|
526
|
+
const id = getResourceId(args, true);
|
|
527
|
+
const signal = getSignal(args);
|
|
528
|
+
const { startTime, endTime } = ToolArgs.getTimeRange(args, {
|
|
529
|
+
defaultHours: 1,
|
|
530
|
+
maxDays: 30,
|
|
531
|
+
});
|
|
532
|
+
const limit = ToolArgs.getNumber(args, "limit", {
|
|
533
|
+
defaultValue: 20,
|
|
534
|
+
min: 1,
|
|
535
|
+
max: 50,
|
|
536
|
+
});
|
|
537
|
+
const descriptor = RESOURCE_DESCRIPTORS[type];
|
|
538
|
+
const resources = await descriptor.findBy({
|
|
539
|
+
query: { projectId: ctx.projectId, _id: id.toString() },
|
|
540
|
+
select: Object.fromEntries(getFields(type).map((field) => {
|
|
541
|
+
return [field, true];
|
|
542
|
+
})),
|
|
543
|
+
limit: 1,
|
|
544
|
+
skip: 0,
|
|
545
|
+
props: ctx.props,
|
|
546
|
+
});
|
|
547
|
+
if (!resources[0]) {
|
|
548
|
+
throw new BadDataException("Resource not found or you do not have access to it.");
|
|
549
|
+
}
|
|
550
|
+
const scope = buildAIResourceTelemetryScope({
|
|
551
|
+
type,
|
|
552
|
+
id,
|
|
553
|
+
resource: resources[0],
|
|
554
|
+
projectId: ctx.projectId,
|
|
555
|
+
signal,
|
|
556
|
+
});
|
|
557
|
+
const target = resourceTarget(type, id);
|
|
558
|
+
const label = `${getAIResourceDefinition(type).label} ${signal}, ${startTime.toISOString()} – ${endTime.toISOString()}`;
|
|
559
|
+
const note = `${scope.note} Requested window: ${startTime.toISOString()} – ${endTime.toISOString()}.`;
|
|
560
|
+
if (signal === "metrics") {
|
|
561
|
+
const name = ToolArgs.getString(args, "metricName");
|
|
562
|
+
const aggregation = ToolArgs.getString(args, "aggregationType") || "Avg";
|
|
563
|
+
const mode = ToolArgs.getString(args, "mode") || "trend";
|
|
564
|
+
if (!Object.values(AggregationType).includes(aggregation)) {
|
|
565
|
+
throw new BadDataException("Invalid aggregationType.");
|
|
566
|
+
}
|
|
567
|
+
if (mode !== "trend" && mode !== "summary") {
|
|
568
|
+
throw new BadDataException("mode must be trend or summary.");
|
|
569
|
+
}
|
|
570
|
+
const interval = !name || mode === "summary"
|
|
571
|
+
? AggregationInterval.Total
|
|
572
|
+
: metricInterval(startTime, endTime);
|
|
573
|
+
const query = Object.assign(Object.assign(Object.assign({ projectId: ctx.projectId, time: new InBetween(startTime, endTime) }, (name ? { name } : {})), (scope.resourceScopes
|
|
574
|
+
? {
|
|
575
|
+
resourceEntityScopes: scope.resourceScopes,
|
|
576
|
+
}
|
|
577
|
+
: {})), (scope.attributes ? { attributes: scope.attributes } : {}));
|
|
578
|
+
const aggregate = async (aggregationType) => {
|
|
579
|
+
return MetricService.aggregateBy(Object.assign(Object.assign({ query: query, aggregateColumnName: "value", aggregationTimestampColumnName: "time", aggregationType, aggregationInterval: interval, startTimestamp: startTime, endTimestamp: endTime }, (!name ? { groupBy: { name: true } } : {})), { sort: { time: SortOrder.Ascending }, limit: name ? 50 : limit, skip: 0, props: ctx.props }));
|
|
580
|
+
};
|
|
581
|
+
const result = await aggregate(name ? aggregation : AggregationType.Count);
|
|
582
|
+
/*
|
|
583
|
+
* Distribution exports with zero observations have an aggregate value of
|
|
584
|
+
* zero. Count distinguishes those from real zero-valued scalar samples.
|
|
585
|
+
*/
|
|
586
|
+
const counts = name && aggregation !== AggregationType.Count
|
|
587
|
+
? await aggregate(AggregationType.Count)
|
|
588
|
+
: result;
|
|
589
|
+
const countsByTime = new Map(counts.data.map((item) => {
|
|
590
|
+
return [String(item.timestamp), item.value];
|
|
591
|
+
}));
|
|
592
|
+
const rows = result.data.map((item) => {
|
|
593
|
+
if (!name) {
|
|
594
|
+
return { metricName: item["name"], observationCount: item.value };
|
|
595
|
+
}
|
|
596
|
+
const count = countsByTime.get(String(item.timestamp));
|
|
597
|
+
const hasValue = typeof count === "number" &&
|
|
598
|
+
count > 0 &&
|
|
599
|
+
typeof item.value === "number" &&
|
|
600
|
+
Number.isFinite(item.value);
|
|
601
|
+
return Object.assign({ timestamp: item.timestamp, value: hasValue ? item.value : null, observationCount: count !== null && count !== void 0 ? count : null }, (hasValue
|
|
602
|
+
? {}
|
|
603
|
+
: {
|
|
604
|
+
status: count === 0 ? "no observations" : "aggregate unavailable",
|
|
605
|
+
}));
|
|
606
|
+
});
|
|
607
|
+
const widget = name && mode === "trend" && rows.length > 0
|
|
608
|
+
? WidgetBuilder.timeSeries({
|
|
609
|
+
title: `${aggregation}(${name})`,
|
|
610
|
+
description: note,
|
|
611
|
+
series: [
|
|
612
|
+
{
|
|
613
|
+
name,
|
|
614
|
+
points: rows.map((row) => {
|
|
615
|
+
return {
|
|
616
|
+
x: new Date(row["timestamp"]).toISOString(),
|
|
617
|
+
y: typeof row["value"] === "number" ? row["value"] : null,
|
|
618
|
+
};
|
|
619
|
+
}),
|
|
620
|
+
},
|
|
621
|
+
],
|
|
622
|
+
link: target,
|
|
623
|
+
})
|
|
624
|
+
: undefined;
|
|
625
|
+
const truncated = Boolean(result.truncated || counts.truncated || (!name && rows.length >= limit));
|
|
626
|
+
return resultForRows({
|
|
627
|
+
rows,
|
|
628
|
+
label,
|
|
629
|
+
target,
|
|
630
|
+
widget,
|
|
631
|
+
truncated,
|
|
632
|
+
note: `${note} ${name ? `Metric ${aggregation}; ${mode}; interval ${interval}. Counter Sum is a sum of exported samples, not a rate or increase.` : "Names are observed in this resource/window; an empty result does not prove that the resource exports no metrics."}${truncated ? " Result limit reached or query truncated; do not treat this as complete." : ""}`,
|
|
633
|
+
});
|
|
634
|
+
}
|
|
635
|
+
/*
|
|
636
|
+
* These aggregators bypass the model query layer. Intersect their parent
|
|
637
|
+
* resource scope with the same allowed primary-entity IDs as that layer.
|
|
638
|
+
*/
|
|
639
|
+
const allowedIds = signal === "logs"
|
|
640
|
+
? await ModelPermission.getAccessibleServiceIdsForAnalyticsModel(Log, ctx.props, DatabaseRequestType.Read)
|
|
641
|
+
: await ModelPermission.getAccessibleServiceIdsForAnalyticsModel(Span, ctx.props, DatabaseRequestType.Read);
|
|
642
|
+
const serviceIds = ToolArgs.scopeServiceIds(allowedIds, undefined);
|
|
643
|
+
if (signal === "logs") {
|
|
644
|
+
/*
|
|
645
|
+
* The dashboard histogram includes whole boundary minutes so it can
|
|
646
|
+
* use minute projections. Describe that effective interval exactly.
|
|
647
|
+
*/
|
|
648
|
+
const effectiveStart = new Date(Math.floor(startTime.getTime() / 60000) * 60000);
|
|
649
|
+
const effectiveEndExclusive = new Date((Math.floor(endTime.getTime() / 60000) + 1) * 60000);
|
|
650
|
+
const severity = ToolArgs.getString(args, "severityText");
|
|
651
|
+
const buckets = await LogAggregationService.getHistogram({
|
|
652
|
+
projectId: ctx.projectId,
|
|
653
|
+
startTime,
|
|
654
|
+
endTime,
|
|
655
|
+
bucketSizeInMinutes: Math.max(1, Math.ceil((endTime.getTime() - startTime.getTime()) / 60000 / 48)),
|
|
656
|
+
serviceIds,
|
|
657
|
+
resourceScopes: scope.resourceScopes,
|
|
658
|
+
attributes: scope.attributes,
|
|
659
|
+
severityTexts: severity ? [severity] : undefined,
|
|
660
|
+
});
|
|
661
|
+
const rowsByTime = new Map();
|
|
662
|
+
for (const bucket of buckets) {
|
|
663
|
+
const row = rowsByTime.get(bucket.time) || {
|
|
664
|
+
time: bucket.time,
|
|
665
|
+
severities: [],
|
|
666
|
+
};
|
|
667
|
+
/*
|
|
668
|
+
* Severity is telemetry content, never a field name. Keeping it in
|
|
669
|
+
* values both redacts it and avoids collisions with the time column.
|
|
670
|
+
*/
|
|
671
|
+
row["severities"].push({
|
|
672
|
+
severity: bucket.severity || "Unspecified",
|
|
673
|
+
count: bucket.count,
|
|
674
|
+
});
|
|
675
|
+
rowsByTime.set(bucket.time, row);
|
|
676
|
+
}
|
|
677
|
+
const rows = Array.from(rowsByTime.values()).sort((a, b) => {
|
|
678
|
+
return String(a["time"]).localeCompare(String(b["time"]));
|
|
679
|
+
});
|
|
680
|
+
return resultForRows({
|
|
681
|
+
rows,
|
|
682
|
+
label,
|
|
683
|
+
target,
|
|
684
|
+
note: `${note} Log histogram includes whole boundary minutes: ${effectiveStart.toISOString()} (inclusive) – ${effectiveEndExclusive.toISOString()} (exclusive). Counts are log records by severity, not raw messages or unique failures.`,
|
|
685
|
+
});
|
|
686
|
+
}
|
|
687
|
+
const table = await TraceAggregationService.getAnalyticsTable({
|
|
688
|
+
projectId: ctx.projectId,
|
|
689
|
+
startTime,
|
|
690
|
+
endTime,
|
|
691
|
+
bucketSizeInMinutes: Math.max(1, Math.ceil((endTime.getTime() - startTime.getTime()) / 60000 / 48)),
|
|
692
|
+
chartType: "table",
|
|
693
|
+
metric: "count",
|
|
694
|
+
groupBy: ["name"],
|
|
695
|
+
limit,
|
|
696
|
+
serviceIds,
|
|
697
|
+
resourceScopes: scope.resourceScopes,
|
|
698
|
+
attributes: scope.attributes,
|
|
699
|
+
rootOnly: ToolArgs.getBoolean(args, "rootOnly"),
|
|
700
|
+
});
|
|
701
|
+
const rows = table.map((row) => {
|
|
702
|
+
return {
|
|
703
|
+
operation: row.groupValues["name"],
|
|
704
|
+
spanCount: row.count,
|
|
705
|
+
errorSpanCount: row.errorCount,
|
|
706
|
+
avgMs: row.count > 0 ? row.avgDurationMs : null,
|
|
707
|
+
p50Ms: row.count > 0 ? row.p50DurationMs : null,
|
|
708
|
+
p95Ms: row.count > 0 ? row.p95DurationMs : null,
|
|
709
|
+
p99Ms: row.count > 0 ? row.p99DurationMs : null,
|
|
710
|
+
};
|
|
711
|
+
});
|
|
712
|
+
return resultForRows({
|
|
713
|
+
rows,
|
|
714
|
+
label,
|
|
715
|
+
target,
|
|
716
|
+
truncated: rows.length >= limit,
|
|
717
|
+
note: `${note} Counts are spans, not unique requests. Operations ranked by span volume (the analytics table ordering), not error rate.${rows.length >= limit ? " Operation limit reached; this is a partial ranking, not the resource total." : ""}`,
|
|
718
|
+
});
|
|
719
|
+
},
|
|
720
|
+
};
|
|
721
|
+
//# sourceMappingURL=ResourceTools.js.map
|