@oneuptime/common 12.0.8 → 12.0.9
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/MetricItemAggMV1mByK8sCluster.ts +1 -1
- package/Models/AnalyticsModels/MetricItemAggMV1mByService.ts +1 -1
- package/Models/DatabaseModels/AIConversation.ts +32 -0
- package/Models/DatabaseModels/AIConversationMessage.ts +41 -0
- package/Models/DatabaseModels/AlertEpisodeMember.ts +27 -0
- package/Models/DatabaseModels/IncidentEpisodeMember.ts +28 -0
- package/Models/DatabaseModels/Index.ts +12 -4
- package/Models/DatabaseModels/{TelemetryEntity.ts → InventoryItem.ts} +139 -9
- package/Models/DatabaseModels/InventoryItemCustomField.ts +434 -0
- package/Models/DatabaseModels/{TelemetryEntityRelationship.ts → InventoryItemRelationship.ts} +8 -8
- package/Models/DatabaseModels/NetworkDevice.ts +141 -0
- package/Models/DatabaseModels/NetworkDeviceLink.ts +699 -0
- package/Models/DatabaseModels/NetworkDeviceLinkRule.ts +467 -0
- package/Models/DatabaseModels/NetworkTopologySuppression.ts +429 -0
- package/Models/DatabaseModels/OnCallDutyPolicyFeed.ts +9 -0
- package/Models/DatabaseModels/Project.ts +78 -0
- package/Models/DatabaseModels/UserCall.ts +42 -0
- package/Models/DatabaseModels/UserEmail.ts +44 -0
- package/Models/DatabaseModels/UserNotificationRule.ts +425 -55
- package/Models/DatabaseModels/UserOnCallLogTimeline.ts +24 -2
- package/Models/DatabaseModels/UserPush.ts +49 -0
- package/Models/DatabaseModels/UserSMS.ts +43 -0
- package/Models/DatabaseModels/UserTelegram.ts +59 -0
- package/Models/DatabaseModels/UserWebhook.ts +52 -0
- package/Models/DatabaseModels/UserWhatsApp.ts +41 -0
- package/Models/DatabaseModels/WorkflowVariable.ts +12 -0
- package/Server/API/AIChatAPI.ts +315 -1
- package/Server/API/DashboardAPI.ts +217 -1
- package/Server/API/OnCallReadinessAPI.ts +841 -0
- package/Server/API/TeamComplianceAPI.ts +69 -17
- package/Server/API/TelemetryAPI.ts +220 -12
- package/Server/EnvironmentConfig.ts +52 -0
- package/Server/Infrastructure/Postgres/DataSourceOptions.ts +22 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1786100000000-RestoreServiceLowerNameIndex.ts +4 -4
- package/Server/Infrastructure/Postgres/SchemaMigrations/1786200000000-RestoreDroppedUniqueIndexes.ts +5 -5
- package/Server/Infrastructure/Postgres/SchemaMigrations/1786625176831-AddMonitoringMethodToNetworkDevice.ts +35 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1786634985763-AddNetworkDeviceLink.ts +82 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1786639512056-AddNetworkDeviceLinkRule.ts +91 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1786639972982-AddNetworkTopologySuppression.ts +47 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1786800000000-RenameTelemetryEntityToInventoryItem.ts +255 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1786900000000-AddInventoryItemArchiveAndCustomFields.ts +107 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1787000000000-AddOnCallNotificationFallbackColumns.ts +90 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1787100000000-AddAIConversationPageContext.ts +39 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1787200000000-AddAIChatMessageFeedback.ts +33 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1787300000000-AddEpisodeMemberNotifyIndexes.ts +59 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +20 -0
- package/Server/Infrastructure/Queue.ts +78 -13
- package/Server/Middleware/PublicDashboardRateLimit.ts +593 -0
- package/Server/Services/AIService.ts +7 -0
- package/Server/Services/AlertEpisodeStateTimelineService.ts +29 -0
- package/Server/Services/AlertSeverityService.ts +63 -0
- package/Server/Services/DashboardService.ts +9 -10
- package/Server/Services/DatabaseService.ts +32 -2
- package/Server/Services/IncidentEpisodeStateTimelineService.ts +29 -0
- package/Server/Services/IncidentSeverityService.ts +76 -0
- package/Server/Services/Index.ts +12 -4
- package/Server/Services/InventoryItemCustomFieldService.ts +9 -0
- package/Server/Services/{TelemetryEntityRelationshipService.ts → InventoryItemRelationshipService.ts} +4 -4
- package/Server/Services/{TelemetryEntityService.ts → InventoryItemService.ts} +89 -20
- package/Server/Services/LogAggregationService.ts +45 -8
- package/Server/Services/MetricAggregationService.ts +121 -0
- package/Server/Services/MetricService.ts +7 -7
- package/Server/Services/NetworkDeviceLinkRuleService.ts +10 -0
- package/Server/Services/NetworkDeviceLinkService.ts +84 -0
- package/Server/Services/NetworkDeviceService.ts +140 -0
- package/Server/Services/NetworkSiteService.ts +77 -25
- package/Server/Services/NetworkTopologySuppressionService.ts +84 -0
- package/Server/Services/OnCallDutyPolicyEscalationRuleScheduleService.ts +41 -29
- package/Server/Services/OnCallDutyPolicyExecutionLogService.ts +8 -0
- package/Server/Services/OnCallDutyPolicyExecutionLogTimelineService.ts +62 -13
- package/Server/Services/OnCallDutyPolicyScheduleService.ts +61 -1
- package/Server/Services/OnCallNotificationAlertingService.ts +742 -0
- package/Server/Services/OnCallReadinessService.ts +2803 -0
- package/Server/Services/OnCallSetupReminderService.ts +955 -0
- package/Server/Services/ProfileAggregationService.ts +123 -0
- package/Server/Services/StatusPageService.ts +9 -10
- package/Server/Services/TeamComplianceService.ts +429 -252
- package/Server/Services/UserCallService.ts +26 -1
- package/Server/Services/UserEmailService.ts +26 -1
- package/Server/Services/UserNotificationRuleAdminService.ts +1183 -0
- package/Server/Services/UserNotificationRuleService.ts +3812 -333
- package/Server/Services/UserOnCallLogService.ts +561 -48
- package/Server/Services/UserPushService.ts +29 -0
- package/Server/Services/UserService.ts +11 -0
- package/Server/Services/UserSmsService.ts +26 -1
- package/Server/Services/UserTelegramService.ts +24 -1
- package/Server/Services/UserWebhookService.ts +28 -1
- package/Server/Services/UserWhatsAppService.ts +24 -1
- package/Server/Types/Database/Permissions/BasePermission.ts +19 -0
- package/Server/Types/Database/Permissions/CreatePermission.ts +164 -0
- package/Server/Types/Database/Permissions/OwnerOnlyColumnPermission.ts +340 -0
- package/Server/Types/Database/Permissions/QueryPermission.ts +48 -0
- package/Server/Types/Database/Permissions/TenantPermission.ts +8 -1
- package/Server/Types/Workflow/Components/API/Delete.ts +1 -1
- package/Server/Types/Workflow/Components/API/Get.ts +1 -1
- package/Server/Types/Workflow/Components/API/Patch.ts +1 -1
- package/Server/Types/Workflow/Components/API/Post.ts +1 -1
- package/Server/Types/Workflow/Components/API/Put.ts +1 -1
- package/Server/Types/Workflow/Components/BaseModel/CreateManyBaseModel.ts +29 -5
- package/Server/Types/Workflow/Components/BaseModel/CreateOneBaseModel.ts +18 -10
- package/Server/Types/Workflow/Components/BaseModel/ModelArguments.ts +55 -0
- package/Server/Types/Workflow/Components/Conditions/IfElse.ts +3 -17
- package/Server/Types/Workflow/Components/Email.ts +25 -7
- package/Server/Types/Workflow/Components/JavaScript.ts +10 -3
- package/Server/Types/Workflow/Components/MicrosoftTeams/SendMessageToChannel.ts +1 -1
- package/Server/Utils/AI/Chat/ChatAgentRunner.ts +643 -48
- package/Server/Utils/AI/Chat/ObservabilityAssistant.ts +32 -3
- package/Server/Utils/AI/Chat/ObservabilityChatPrompt.ts +20 -6
- package/Server/Utils/AI/SRE/AIInvestigationEngine.ts +7 -0
- package/Server/Utils/AI/Toolbox/AIActionTools.ts +2 -2
- package/Server/Utils/AI/Toolbox/AIMetaTools.ts +863 -0
- package/Server/Utils/AI/Toolbox/AlertTools.ts +177 -15
- package/Server/Utils/AI/Toolbox/IncidentTools.ts +191 -10
- package/Server/Utils/AI/Toolbox/Index.ts +48 -0
- package/Server/Utils/AI/Toolbox/MonitorTools.ts +298 -11
- package/Server/Utils/AI/Toolbox/NoteWriteTools.ts +295 -0
- package/Server/Utils/AI/Toolbox/OnCallTools.ts +1246 -0
- package/Server/Utils/AI/Toolbox/RunbookTools.ts +424 -0
- package/Server/Utils/AI/Toolbox/SloTools.ts +456 -0
- package/Server/Utils/AI/Toolbox/StatusPageTools.ts +559 -0
- package/Server/Utils/AI/Toolbox/TeamTools.ts +327 -0
- package/Server/Utils/AI/Toolbox/TimelineTools.ts +615 -0
- package/Server/Utils/AI/Toolbox/WorkflowProbeTools.ts +664 -0
- package/Server/Utils/ClientIp.ts +221 -0
- package/Server/Utils/Dashboard/PublicDashboardResourceListPolicy.ts +47 -0
- package/Server/Utils/Dashboard/PublicDashboardSloHistoryPolicy.ts +163 -0
- package/Server/Utils/Dashboard/PublicDashboardSloWidget.ts +147 -0
- package/Server/Utils/Express.ts +12 -17
- package/Server/Utils/LLM/LLMService.ts +85 -8
- package/Server/Utils/Monitor/MonitorCriteriaEvaluator.ts +204 -10
- package/Server/Utils/SSRFProtection.ts +98 -23
- package/Server/Utils/StartServer.ts +12 -3
- package/Server/Utils/Telemetry/EntityRegistry.ts +205 -18
- package/Server/Utils/Telemetry/InventoryEntityRegistry.ts +25 -25
- package/Server/Utils/Telemetry/TelemetryEntity.ts +160 -52
- package/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.ts +7 -3
- package/Tests/App/Dashboard/AdminNotificationRulesPage.test.tsx +2146 -0
- package/Tests/App/Dashboard/CreateWorkflowModal.test.tsx +561 -0
- package/Tests/App/Dashboard/EscalationRuleReadiness.test.tsx +2470 -0
- package/Tests/App/Dashboard/OnCallPreventionGuards.test.tsx +1897 -0
- package/Tests/App/Dashboard/OnCallReadinessSurfaces.test.tsx +3606 -0
- package/Tests/App/Dashboard/OnCallRulesDeleteGuard.test.tsx +784 -0
- package/Tests/App/Dashboard/OnCallRulesTable.test.tsx +1119 -0
- package/Tests/App/Dashboard/SloWidgetFetching.test.tsx +531 -0
- package/Tests/App/Dashboard/UserSettingsSetupChecklistModel.test.ts +1312 -0
- package/Tests/App/Dashboard/UserSettingsSetupChecklistPage.test.tsx +1390 -0
- package/Tests/Models/InventoryItemModel.test.ts +174 -0
- package/Tests/Models/InventoryItemNaming.test.ts +302 -0
- package/Tests/Server/API/AIChatCancelAndFeedback.test.ts +437 -0
- package/Tests/Server/API/DashboardPublicRateLimit.test.ts +659 -0
- package/Tests/Server/API/DashboardPublicResourceListAPI.test.ts +18 -0
- package/Tests/Server/API/DashboardPublicSloAPI.test.ts +880 -0
- package/Tests/Server/API/Helpers.ts +24 -15
- package/Tests/Server/API/OnCallReadinessAPI.test.ts +2680 -0
- package/Tests/Server/API/OnCallSetupReminderAPI.test.ts +915 -0
- package/Tests/Server/Infrastructure/Postgres/EpisodeMemberNotifyIndexesMigration.test.ts +533 -0
- package/Tests/Server/Infrastructure/Postgres/InventoryItemArchiveMigration.test.ts +213 -0
- package/Tests/Server/Infrastructure/Postgres/RenameInventoryItemMigration.test.ts +432 -0
- package/Tests/Server/Infrastructure/Queue.test.ts +293 -0
- package/Tests/Server/Middleware/PublicDashboardRateLimit.test.ts +1645 -0
- package/Tests/Server/Services/AdminRuleEditGuards.test.ts +2848 -0
- package/Tests/Server/Services/DeliverNotificationForRuleExtraction.test.ts +1393 -0
- package/Tests/Server/Services/EpisodeRuleSeverityRepair.test.ts +1802 -0
- package/Tests/Server/Services/EpisodeStateTimelineNote.test.ts +304 -0
- package/Tests/Server/Services/InventoryItemDisplayName.test.ts +339 -0
- package/Tests/Server/Services/{TelemetryEntityManualCreate.test.ts → InventoryItemManualCreate.test.ts} +27 -27
- package/Tests/Server/Services/IpAllowlistSpoofing.test.ts +450 -0
- package/Tests/Server/Services/LogAggregationService.test.ts +235 -1
- package/Tests/Server/Services/MetricAggregationService.test.ts +231 -0
- package/Tests/Server/Services/MetricEntityMVKeyParity.test.ts +80 -29
- package/Tests/Server/Services/MetricServiceAggregate.test.ts +30 -30
- package/Tests/Server/Services/NetworkSiteService.test.ts +18 -3
- package/Tests/Server/Services/NotificationChannelEventCoverage.test.ts +1728 -0
- package/Tests/Server/Services/NotificationDeletionImpact.test.ts +2402 -0
- package/Tests/Server/Services/OnCallDutyPolicyExecutionLogTimelineGapFeed.test.ts +394 -0
- package/Tests/Server/Services/OnCallNotificationFallback.test.ts +1744 -0
- package/Tests/Server/Services/OnCallReadinessService.test.ts +4295 -0
- package/Tests/Server/Services/OnCallSetupReminder.test.ts +1272 -0
- package/Tests/Server/Services/OnCallWeeklyReadinessDigest.test.ts +1021 -0
- package/Tests/Server/Services/ProfileAggregationService.test.ts +296 -0
- package/Tests/Server/Services/SeverityCreationRuleBackfill.test.ts +1536 -0
- package/Tests/Server/Services/SeverityRuleBackfill.test.ts +1818 -0
- package/Tests/Server/Services/TeamComplianceServiceBehaviour.test.ts +1845 -0
- package/Tests/Server/Services/UserNotificationRuleAdminGuards.test.ts +1394 -0
- package/Tests/Server/Services/UserNotificationRuleDefaultCreation.test.ts +1166 -0
- package/Tests/Server/Services/UserNotificationRuleExecuteItem.test.ts +1468 -0
- package/Tests/Server/Services/UserOnCallLogNoNotificationRules.test.ts +1457 -0
- package/Tests/Server/Types/Database/Permissions/AdminNotificationRuleAccess.test.ts +1546 -0
- package/Tests/Server/Types/Database/Permissions/CreateOwnershipScoping.test.ts +529 -0
- package/Tests/Server/Types/Database/Permissions/OwnerOnlyColumns.test.ts +1219 -0
- package/Tests/Server/Types/Database/Permissions/UserNotificationRuleScoping.test.ts +1089 -0
- package/Tests/Server/Types/Workflow/Components/ApiComponentErrorPort.test.ts +2 -1
- package/Tests/Server/Types/Workflow/Components/BaseModelDatabaseComponents.test.ts +190 -0
- package/Tests/Server/Types/Workflow/Components/ChatWebhookComponents.test.ts +44 -14
- package/Tests/Server/Types/Workflow/Components/Email.test.ts +151 -0
- package/Tests/Server/Types/Workflow/Components/IfElse.test.ts +98 -0
- package/Tests/Server/Types/Workflow/Components/JavaScript.test.ts +51 -0
- package/Tests/Server/Utils/AI/AIMetaTools.test.ts +586 -0
- package/Tests/Server/Utils/AI/AlertMonitorFilters.test.ts +582 -0
- package/Tests/Server/Utils/AI/ChatAgentRunner.test.ts +726 -0
- package/Tests/Server/Utils/AI/IncidentToolsFilters.test.ts +315 -0
- package/Tests/Server/Utils/AI/LLMServiceStopReason.test.ts +314 -0
- package/Tests/Server/Utils/AI/LLMServiceToolCalling.test.ts +26 -3
- package/Tests/Server/Utils/AI/NoteWriteTools.test.ts +268 -0
- package/Tests/Server/Utils/AI/ObservabilityChatPrompt.test.ts +169 -0
- package/Tests/Server/Utils/AI/OnCallTools.test.ts +664 -0
- package/Tests/Server/Utils/AI/RunbookTools.test.ts +325 -0
- package/Tests/Server/Utils/AI/SloTools.test.ts +306 -0
- package/Tests/Server/Utils/AI/StatusPageTools.test.ts +391 -0
- package/Tests/Server/Utils/AI/TeamTools.test.ts +257 -0
- package/Tests/Server/Utils/AI/TimelineTools.test.ts +472 -0
- package/Tests/Server/Utils/AI/WorkflowProbeTools.test.ts +428 -0
- package/Tests/Server/Utils/ClientIp.test.ts +438 -0
- package/Tests/Server/Utils/Dashboard/PublicDashboardResourceListPolicy.test.ts +171 -0
- package/Tests/Server/Utils/Dashboard/PublicDashboardSloHistoryPolicy.test.ts +383 -0
- package/Tests/Server/Utils/EntityRegistryRowFence.test.ts +23 -25
- package/Tests/Server/Utils/MicrosoftTeamsWebhookUrlValidation.test.ts +6 -0
- package/Tests/Server/Utils/Monitor/Criteria/DnssecMonitorCriteria.test.ts +307 -0
- package/Tests/Server/Utils/Monitor/Criteria/SSLMonitorCriteria.test.ts +468 -0
- package/Tests/Server/Utils/Monitor/MonitorCriteriaEvaluatorTelemetryDeepLinks.test.ts +460 -0
- package/Tests/Server/Utils/ResponseRateLimitStatusCodes.test.ts +137 -0
- package/Tests/Server/Utils/SSRFProtectionBypasses.test.ts +40 -8
- package/Tests/Server/Utils/SSRFProtectionUserInfo.test.ts +351 -0
- package/Tests/Server/Utils/Telemetry/EntityRegistryRetirement.test.ts +531 -0
- package/Tests/Server/Utils/Telemetry/InventoryEntityRegistry.test.ts +15 -15
- package/Tests/Server/Utils/Telemetry/TelemetryEntity.test.ts +356 -39
- package/Tests/Types/IP/IP.test.ts +263 -0
- package/Tests/Types/IP/IPWhitelist.test.ts +197 -0
- package/Tests/Types/IP/IPv6.test.ts +12 -1
- package/Tests/Types/Monitor/SnmpOid.test.ts +64 -0
- package/Tests/Types/NetworkDevice/NetworkDeviceMonitoringMethod.test.ts +110 -0
- package/Tests/Types/OnCallDutyPolicy/LayerUtilMergeAudit.test.ts +106 -0
- package/Tests/Types/OnCallDutyPolicy/LayerUtilMergeDifferential.test.ts +511 -0
- package/Tests/Types/OnCallDutyPolicy/ScheduleCoverageEndToEnd.test.ts +489 -0
- package/Tests/Types/OnCallDutyPolicy/ScheduleCoverageGapTolerance.test.ts +479 -0
- package/Tests/Types/OnCallDutyPolicy/ScheduleCoverageState.test.ts +822 -0
- package/Tests/Types/Telemetry/EntityTypeGroups.test.ts +6 -6
- package/Tests/Types/Workflow/BaseModelComponents.test.ts +429 -0
- package/Tests/Types/Workflow/Components/BaseModel.test.ts +225 -0
- package/Tests/Types/Workflow/IntegrationCredentialMetadata.test.ts +100 -0
- package/Tests/Types/Workflow/TemplateSyntax.test.ts +112 -0
- package/Tests/Types/Workflow/Templates.test.ts +916 -101
- package/Tests/UI/Components/ActiveFilterChipsOpenRoute.test.tsx +82 -0
- package/Tests/UI/Components/ComponentsModal.test.tsx +564 -7
- package/Tests/UI/Components/KeyboardShortcut.test.tsx +95 -0
- package/Tests/UI/Components/LogDetailsPanelCrossSignal.test.tsx +448 -0
- package/Tests/UI/Components/LogsTableCrossLinks.test.tsx +263 -0
- package/Tests/UI/Components/PendingProjectInvitations.test.tsx +913 -0
- package/Tests/UI/Components/SimpleLogViewer.test.tsx +228 -0
- package/Tests/UI/Components/TableRowSelectability.test.tsx +312 -0
- package/Tests/UI/Components/Workflow/GraphLint.test.ts +72 -0
- package/Tests/UI/Components/Workflow/GraphLintSummary.test.ts +755 -0
- package/Tests/UI/Components/Workflow/ModelColumnEditor.test.ts +242 -7
- package/Tests/UI/Components/Workflow/ModelColumnEditorServerContract.test.ts +15 -7
- package/Tests/UI/Components/Workflow/ModelSchema.test.ts +242 -28
- package/Tests/UI/Components/Workflow/RunStatusWatcher.test.ts +59 -1
- package/Tests/UI/Components/Workflow/StepTraceViewer.test.tsx +256 -0
- package/Tests/UI/Components/Workflow/UseRunWatch.test.tsx +665 -0
- package/Tests/UI/Components/Workflow/WorkflowIssuesModal.test.tsx +485 -0
- package/Tests/UI/Components/Workflow/WorkflowLogModal.test.tsx +478 -0
- package/Tests/UI/Components/Workflow/WorkflowStatusBar.test.tsx +379 -0
- package/Tests/UI/EsbuildConfig.test.ts +607 -0
- package/Tests/UI/Utils/Breadcrumb/fixtures/RealBreadcrumbTrails.ts +5 -0
- package/Tests/UI/Utils/Breadcrumb/fixtures/RealRoutePatterns.ts +11 -4
- package/Tests/UI/Utils/ModelAPICreateMiscData.test.ts +94 -0
- package/Tests/UI/Utils/Platform.test.ts +147 -0
- package/Tests/UI/Utils/ProjectInvitationDisplay.test.ts +357 -0
- package/Tests/Utils/Monitor/NetworkDeviceLinkRuleUtil.test.ts +198 -0
- package/Tests/Utils/Monitor/NetworkTopologyUtil.test.ts +487 -0
- package/Tests/Utils/Telemetry/CrossSignalScope.test.ts +698 -0
- package/Tests/__mocks__/bullmq.js +55 -0
- package/Types/AI/AIChatMessageStatus.ts +8 -1
- package/Types/AI/AIChatTypes.ts +12 -0
- package/Types/Database/AccessControl/OwnerOnlyColumn.ts +88 -0
- package/Types/Exception/ExceptionCode.ts +2 -0
- package/Types/Exception/ServiceUnavailableException.ts +8 -0
- package/Types/Exception/TooManyRequestsException.ts +8 -0
- package/Types/IP/IP.ts +93 -47
- package/Types/Monitor/SnmpMonitor/NetworkTopology.ts +49 -3
- package/Types/NetworkDevice/NetworkDeviceMonitoringMethod.ts +55 -0
- package/Types/OnCallDutyPolicy/Layer.ts +203 -149
- package/Types/OnCallDutyPolicy/OnCallDutyPolicyStatus.ts +13 -0
- package/Types/OnCallDutyPolicy/ScheduleShiftUtil.ts +155 -10
- package/Types/Permission.ts +193 -0
- package/Types/Telemetry/EntityRelationshipType.ts +1 -1
- package/Types/Telemetry/EntitySource.ts +1 -1
- package/Types/Telemetry/EntityType.ts +1 -1
- package/Types/Telemetry/EntityTypeGroups.ts +1 -1
- package/Types/Workflow/Components/BaseModel.ts +75 -29
- package/Types/Workflow/Components/Discord.ts +1 -0
- package/Types/Workflow/Components/Email.ts +12 -3
- package/Types/Workflow/Components/JavaScript.ts +7 -0
- package/Types/Workflow/Components/MicrosoftTeams.ts +3 -2
- package/Types/Workflow/Components/Slack.ts +1 -0
- package/Types/Workflow/Components/Telegram.ts +1 -0
- package/Types/Workflow/TemplateSyntax.ts +44 -0
- package/Types/Workflow/Templates.ts +2097 -45
- package/UI/Components/Calendar/Calendar.css +43 -0
- package/UI/Components/Calendar/Calendar.tsx +8 -0
- package/UI/Components/Card/Card.tsx +2 -2
- package/UI/Components/Checkbox/Checkbox.tsx +16 -0
- package/UI/Components/Dictionary/Dictionary.tsx +48 -9
- package/UI/Components/FormModal/BasicFormModal.tsx +2 -1
- package/UI/Components/Header/HeaderIconDropdownButton.tsx +53 -3
- package/UI/Components/Input/Input.tsx +1 -0
- package/UI/Components/KeyboardShortcut/KeyboardKey.ts +185 -0
- package/UI/Components/KeyboardShortcut/KeyboardShortcut.tsx +87 -0
- package/UI/Components/LogsViewer/LogsViewer.tsx +28 -0
- package/UI/Components/LogsViewer/components/ActiveFilterChips.tsx +31 -0
- package/UI/Components/LogsViewer/components/KeyboardShortcutsHelp.tsx +18 -18
- package/UI/Components/LogsViewer/components/LogDetailsPanel.tsx +363 -14
- package/UI/Components/LogsViewer/components/LogsAnalyticsView.tsx +11 -0
- package/UI/Components/LogsViewer/components/LogsTable.tsx +155 -12
- package/UI/Components/LogsViewer/components/LogsViewerToolbar.tsx +29 -0
- package/UI/Components/LogsViewer/types.ts +23 -0
- package/UI/Components/Markdown.tsx/MarkdownEditor.tsx +9 -2
- package/UI/Components/Navbar/NavBarMenuModal.tsx +15 -30
- package/UI/Components/ProjectInvitations/PendingProjectInvitations.tsx +442 -0
- package/UI/Components/SimpleLogViewer/SimpleLogViewer.tsx +23 -1
- package/UI/Components/Table/Table.tsx +49 -16
- package/UI/Components/Table/TableBody.tsx +53 -28
- package/UI/Components/Table/TableHeader.tsx +13 -0
- package/UI/Components/Table/TableRow.tsx +58 -26
- package/UI/Components/Workflow/ArgumentsForm.tsx +155 -9
- package/UI/Components/Workflow/ComponentReturnValueViewer.tsx +26 -0
- package/UI/Components/Workflow/ComponentSettingsModal.tsx +10 -1
- package/UI/Components/Workflow/ComponentValuePickerModal.tsx +135 -7
- package/UI/Components/Workflow/ComponentsModal.tsx +116 -22
- package/UI/Components/Workflow/DocumentationViewer.tsx +59 -9
- package/UI/Components/Workflow/GraphLint.ts +42 -5
- package/UI/Components/Workflow/GraphLintSummary.ts +390 -0
- package/UI/Components/Workflow/ModelColumnEditor.tsx +154 -22
- package/UI/Components/Workflow/ModelSchema.ts +115 -33
- package/UI/Components/Workflow/RunStatusWatcher.ts +1 -1
- package/UI/Components/Workflow/StepTraceViewer.tsx +1 -1
- package/UI/Components/Workflow/UseRunWatch.ts +212 -0
- package/UI/Components/Workflow/VariableModal.tsx +6 -2
- package/UI/Components/Workflow/Workflow.tsx +49 -3
- package/UI/Components/Workflow/WorkflowIssuesModal.tsx +255 -0
- package/UI/Components/Workflow/WorkflowLogModal.tsx +128 -0
- package/UI/Components/Workflow/WorkflowStatusBar.tsx +224 -0
- package/UI/Utils/AIChatExport/ConversationMarkdown.ts +10 -0
- package/UI/Utils/ModelAPI/ModelAPI.ts +7 -1
- package/UI/Utils/Platform.ts +149 -0
- package/UI/Utils/ProjectInvitationDisplay.ts +118 -0
- package/UI/esbuild-config.js +22 -1
- package/Utils/Monitor/NetworkDeviceLinkRuleUtil.ts +187 -0
- package/Utils/Monitor/NetworkTopologyUtil.ts +888 -164
- package/Utils/Telemetry/CrossSignalScope.ts +502 -0
- package/Utils/Telemetry/EntityKey.ts +5 -5
- package/Utils/Telemetry/EntityRelationship.ts +1 -1
- package/build/dist/Models/AnalyticsModels/MetricItemAggMV1mByK8sCluster.js +1 -1
- package/build/dist/Models/AnalyticsModels/MetricItemAggMV1mByService.js +1 -1
- package/build/dist/Models/DatabaseModels/AIConversation.js +32 -0
- package/build/dist/Models/DatabaseModels/AIConversation.js.map +1 -1
- package/build/dist/Models/DatabaseModels/AIConversationMessage.js +42 -0
- package/build/dist/Models/DatabaseModels/AIConversationMessage.js.map +1 -1
- package/build/dist/Models/DatabaseModels/AlertEpisodeMember.js +28 -0
- package/build/dist/Models/DatabaseModels/AlertEpisodeMember.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncidentEpisodeMember.js +29 -0
- package/build/dist/Models/DatabaseModels/IncidentEpisodeMember.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Index.js +12 -4
- package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
- package/build/dist/Models/DatabaseModels/{TelemetryEntity.js → InventoryItem.js} +167 -31
- package/build/dist/Models/DatabaseModels/InventoryItem.js.map +1 -0
- package/build/dist/Models/DatabaseModels/InventoryItemCustomField.js +454 -0
- package/build/dist/Models/DatabaseModels/InventoryItemCustomField.js.map +1 -0
- package/build/dist/Models/DatabaseModels/{TelemetryEntityRelationship.js → InventoryItemRelationship.js} +27 -27
- package/build/dist/Models/DatabaseModels/InventoryItemRelationship.js.map +1 -0
- package/build/dist/Models/DatabaseModels/NetworkDevice.js +141 -0
- package/build/dist/Models/DatabaseModels/NetworkDevice.js.map +1 -1
- package/build/dist/Models/DatabaseModels/NetworkDeviceLink.js +719 -0
- package/build/dist/Models/DatabaseModels/NetworkDeviceLink.js.map +1 -0
- package/build/dist/Models/DatabaseModels/NetworkDeviceLinkRule.js +475 -0
- package/build/dist/Models/DatabaseModels/NetworkDeviceLinkRule.js.map +1 -0
- package/build/dist/Models/DatabaseModels/NetworkTopologySuppression.js +446 -0
- package/build/dist/Models/DatabaseModels/NetworkTopologySuppression.js.map +1 -0
- package/build/dist/Models/DatabaseModels/OnCallDutyPolicyFeed.js +9 -0
- package/build/dist/Models/DatabaseModels/OnCallDutyPolicyFeed.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Project.js +80 -0
- package/build/dist/Models/DatabaseModels/Project.js.map +1 -1
- package/build/dist/Models/DatabaseModels/UserCall.js +46 -2
- package/build/dist/Models/DatabaseModels/UserCall.js.map +1 -1
- package/build/dist/Models/DatabaseModels/UserEmail.js +48 -2
- package/build/dist/Models/DatabaseModels/UserEmail.js.map +1 -1
- package/build/dist/Models/DatabaseModels/UserNotificationRule.js +424 -55
- package/build/dist/Models/DatabaseModels/UserNotificationRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/UserOnCallLogTimeline.js +24 -2
- package/build/dist/Models/DatabaseModels/UserOnCallLogTimeline.js.map +1 -1
- package/build/dist/Models/DatabaseModels/UserPush.js +51 -1
- package/build/dist/Models/DatabaseModels/UserPush.js.map +1 -1
- package/build/dist/Models/DatabaseModels/UserSMS.js +47 -2
- package/build/dist/Models/DatabaseModels/UserSMS.js.map +1 -1
- package/build/dist/Models/DatabaseModels/UserTelegram.js +65 -3
- package/build/dist/Models/DatabaseModels/UserTelegram.js.map +1 -1
- package/build/dist/Models/DatabaseModels/UserWebhook.js +56 -2
- package/build/dist/Models/DatabaseModels/UserWebhook.js.map +1 -1
- package/build/dist/Models/DatabaseModels/UserWhatsApp.js +45 -2
- package/build/dist/Models/DatabaseModels/UserWhatsApp.js.map +1 -1
- package/build/dist/Models/DatabaseModels/WorkflowVariable.js +12 -0
- package/build/dist/Models/DatabaseModels/WorkflowVariable.js.map +1 -1
- package/build/dist/Server/API/AIChatAPI.js +237 -1
- package/build/dist/Server/API/AIChatAPI.js.map +1 -1
- package/build/dist/Server/API/DashboardAPI.js +165 -13
- package/build/dist/Server/API/DashboardAPI.js.map +1 -1
- package/build/dist/Server/API/OnCallReadinessAPI.js +599 -0
- package/build/dist/Server/API/OnCallReadinessAPI.js.map +1 -0
- package/build/dist/Server/API/TeamComplianceAPI.js +68 -9
- package/build/dist/Server/API/TeamComplianceAPI.js.map +1 -1
- package/build/dist/Server/API/TelemetryAPI.js +129 -18
- package/build/dist/Server/API/TelemetryAPI.js.map +1 -1
- package/build/dist/Server/EnvironmentConfig.js +45 -0
- package/build/dist/Server/EnvironmentConfig.js.map +1 -1
- package/build/dist/Server/Infrastructure/Postgres/DataSourceOptions.js +22 -0
- package/build/dist/Server/Infrastructure/Postgres/DataSourceOptions.js.map +1 -1
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786100000000-RestoreServiceLowerNameIndex.js +4 -4
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786625176831-AddMonitoringMethodToNetworkDevice.js +18 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786625176831-AddMonitoringMethodToNetworkDevice.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786634985763-AddNetworkDeviceLink.js +39 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786634985763-AddNetworkDeviceLink.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786639512056-AddNetworkDeviceLinkRule.js +38 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786639512056-AddNetworkDeviceLinkRule.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786639972982-AddNetworkTopologySuppression.js +22 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786639972982-AddNetworkTopologySuppression.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786800000000-RenameTelemetryEntityToInventoryItem.js +150 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786800000000-RenameTelemetryEntityToInventoryItem.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786900000000-AddInventoryItemArchiveAndCustomFields.js +57 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786900000000-AddInventoryItemArchiveAndCustomFields.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1787000000000-AddOnCallNotificationFallbackColumns.js +69 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1787000000000-AddOnCallNotificationFallbackColumns.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1787100000000-AddAIConversationPageContext.js +32 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1787100000000-AddAIConversationPageContext.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1787200000000-AddAIChatMessageFeedback.js +26 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1787200000000-AddAIChatMessageFeedback.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1787300000000-AddEpisodeMemberNotifyIndexes.js +48 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1787300000000-AddEpisodeMemberNotifyIndexes.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +20 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
- package/build/dist/Server/Infrastructure/Queue.js +72 -13
- package/build/dist/Server/Infrastructure/Queue.js.map +1 -1
- package/build/dist/Server/Middleware/PublicDashboardRateLimit.js +399 -0
- package/build/dist/Server/Middleware/PublicDashboardRateLimit.js.map +1 -0
- package/build/dist/Server/Services/AIService.js +1 -0
- package/build/dist/Server/Services/AIService.js.map +1 -1
- package/build/dist/Server/Services/AlertEpisodeStateTimelineService.js +24 -3
- package/build/dist/Server/Services/AlertEpisodeStateTimelineService.js.map +1 -1
- package/build/dist/Server/Services/AlertSeverityService.js +54 -0
- package/build/dist/Server/Services/AlertSeverityService.js.map +1 -1
- package/build/dist/Server/Services/DashboardService.js +10 -9
- package/build/dist/Server/Services/DashboardService.js.map +1 -1
- package/build/dist/Server/Services/DatabaseService.js +24 -2
- package/build/dist/Server/Services/DatabaseService.js.map +1 -1
- package/build/dist/Server/Services/IncidentEpisodeStateTimelineService.js +24 -3
- package/build/dist/Server/Services/IncidentEpisodeStateTimelineService.js.map +1 -1
- package/build/dist/Server/Services/IncidentSeverityService.js +67 -0
- package/build/dist/Server/Services/IncidentSeverityService.js.map +1 -1
- package/build/dist/Server/Services/Index.js +12 -4
- package/build/dist/Server/Services/Index.js.map +1 -1
- package/build/dist/Server/Services/InventoryItemCustomFieldService.js +9 -0
- package/build/dist/Server/Services/InventoryItemCustomFieldService.js.map +1 -0
- package/build/dist/Server/Services/{TelemetryEntityRelationshipService.js → InventoryItemRelationshipService.js} +6 -6
- package/build/dist/Server/Services/InventoryItemRelationshipService.js.map +1 -0
- package/build/dist/Server/Services/{TelemetryEntityService.js → InventoryItemService.js} +68 -23
- package/build/dist/Server/Services/InventoryItemService.js.map +1 -0
- package/build/dist/Server/Services/LogAggregationService.js +27 -8
- package/build/dist/Server/Services/LogAggregationService.js.map +1 -1
- package/build/dist/Server/Services/MetricAggregationService.js +80 -0
- package/build/dist/Server/Services/MetricAggregationService.js.map +1 -1
- package/build/dist/Server/Services/MetricService.js +6 -6
- package/build/dist/Server/Services/MetricService.js.map +1 -1
- package/build/dist/Server/Services/NetworkDeviceLinkRuleService.js +9 -0
- package/build/dist/Server/Services/NetworkDeviceLinkRuleService.js.map +1 -0
- package/build/dist/Server/Services/NetworkDeviceLinkService.js +71 -0
- package/build/dist/Server/Services/NetworkDeviceLinkService.js.map +1 -0
- package/build/dist/Server/Services/NetworkDeviceService.js +113 -0
- package/build/dist/Server/Services/NetworkDeviceService.js.map +1 -1
- package/build/dist/Server/Services/NetworkSiteService.js +53 -13
- package/build/dist/Server/Services/NetworkSiteService.js.map +1 -1
- package/build/dist/Server/Services/NetworkTopologySuppressionService.js +85 -0
- package/build/dist/Server/Services/NetworkTopologySuppressionService.js.map +1 -0
- package/build/dist/Server/Services/OnCallDutyPolicyEscalationRuleScheduleService.js +48 -32
- package/build/dist/Server/Services/OnCallDutyPolicyEscalationRuleScheduleService.js.map +1 -1
- package/build/dist/Server/Services/OnCallDutyPolicyExecutionLogService.js +8 -0
- package/build/dist/Server/Services/OnCallDutyPolicyExecutionLogService.js.map +1 -1
- package/build/dist/Server/Services/OnCallDutyPolicyExecutionLogTimelineService.js +51 -12
- package/build/dist/Server/Services/OnCallDutyPolicyExecutionLogTimelineService.js.map +1 -1
- package/build/dist/Server/Services/OnCallDutyPolicyScheduleService.js +57 -13
- package/build/dist/Server/Services/OnCallDutyPolicyScheduleService.js.map +1 -1
- package/build/dist/Server/Services/OnCallNotificationAlertingService.js +548 -0
- package/build/dist/Server/Services/OnCallNotificationAlertingService.js.map +1 -0
- package/build/dist/Server/Services/OnCallReadinessService.js +1961 -0
- package/build/dist/Server/Services/OnCallReadinessService.js.map +1 -0
- package/build/dist/Server/Services/OnCallSetupReminderService.js +738 -0
- package/build/dist/Server/Services/OnCallSetupReminderService.js.map +1 -0
- package/build/dist/Server/Services/ProfileAggregationService.js +68 -4
- package/build/dist/Server/Services/ProfileAggregationService.js.map +1 -1
- package/build/dist/Server/Services/StatusPageService.js +11 -10
- package/build/dist/Server/Services/StatusPageService.js.map +1 -1
- package/build/dist/Server/Services/TeamComplianceService.js +312 -160
- package/build/dist/Server/Services/TeamComplianceService.js.map +1 -1
- package/build/dist/Server/Services/UserCallService.js +24 -1
- package/build/dist/Server/Services/UserCallService.js.map +1 -1
- package/build/dist/Server/Services/UserEmailService.js +24 -1
- package/build/dist/Server/Services/UserEmailService.js.map +1 -1
- package/build/dist/Server/Services/UserNotificationRuleAdminService.js +858 -0
- package/build/dist/Server/Services/UserNotificationRuleAdminService.js.map +1 -0
- package/build/dist/Server/Services/UserNotificationRuleService.js +2830 -175
- package/build/dist/Server/Services/UserNotificationRuleService.js.map +1 -1
- package/build/dist/Server/Services/UserOnCallLogService.js +488 -43
- package/build/dist/Server/Services/UserOnCallLogService.js.map +1 -1
- package/build/dist/Server/Services/UserPushService.js +26 -0
- package/build/dist/Server/Services/UserPushService.js.map +1 -1
- package/build/dist/Server/Services/UserService.js +10 -0
- package/build/dist/Server/Services/UserService.js.map +1 -1
- package/build/dist/Server/Services/UserSmsService.js +24 -1
- package/build/dist/Server/Services/UserSmsService.js.map +1 -1
- package/build/dist/Server/Services/UserTelegramService.js +22 -1
- package/build/dist/Server/Services/UserTelegramService.js.map +1 -1
- package/build/dist/Server/Services/UserWebhookService.js +25 -1
- package/build/dist/Server/Services/UserWebhookService.js.map +1 -1
- package/build/dist/Server/Services/UserWhatsAppService.js +22 -1
- package/build/dist/Server/Services/UserWhatsAppService.js.map +1 -1
- package/build/dist/Server/Types/Database/Permissions/BasePermission.js +12 -1
- package/build/dist/Server/Types/Database/Permissions/BasePermission.js.map +1 -1
- package/build/dist/Server/Types/Database/Permissions/CreatePermission.js +126 -0
- package/build/dist/Server/Types/Database/Permissions/CreatePermission.js.map +1 -1
- package/build/dist/Server/Types/Database/Permissions/OwnerOnlyColumnPermission.js +254 -0
- package/build/dist/Server/Types/Database/Permissions/OwnerOnlyColumnPermission.js.map +1 -0
- package/build/dist/Server/Types/Database/Permissions/QueryPermission.js +47 -2
- package/build/dist/Server/Types/Database/Permissions/QueryPermission.js.map +1 -1
- package/build/dist/Server/Types/Database/Permissions/TenantPermission.js +7 -0
- package/build/dist/Server/Types/Database/Permissions/TenantPermission.js.map +1 -1
- package/build/dist/Server/Types/Workflow/Components/API/Delete.js +1 -1
- package/build/dist/Server/Types/Workflow/Components/API/Delete.js.map +1 -1
- package/build/dist/Server/Types/Workflow/Components/API/Get.js +1 -1
- package/build/dist/Server/Types/Workflow/Components/API/Get.js.map +1 -1
- package/build/dist/Server/Types/Workflow/Components/API/Patch.js +1 -1
- package/build/dist/Server/Types/Workflow/Components/API/Patch.js.map +1 -1
- package/build/dist/Server/Types/Workflow/Components/API/Post.js +1 -1
- package/build/dist/Server/Types/Workflow/Components/API/Post.js.map +1 -1
- package/build/dist/Server/Types/Workflow/Components/API/Put.js +1 -1
- package/build/dist/Server/Types/Workflow/Components/API/Put.js.map +1 -1
- package/build/dist/Server/Types/Workflow/Components/BaseModel/CreateManyBaseModel.js +21 -5
- package/build/dist/Server/Types/Workflow/Components/BaseModel/CreateManyBaseModel.js.map +1 -1
- package/build/dist/Server/Types/Workflow/Components/BaseModel/CreateOneBaseModel.js +14 -10
- package/build/dist/Server/Types/Workflow/Components/BaseModel/CreateOneBaseModel.js.map +1 -1
- package/build/dist/Server/Types/Workflow/Components/BaseModel/ModelArguments.js +31 -0
- package/build/dist/Server/Types/Workflow/Components/BaseModel/ModelArguments.js.map +1 -1
- package/build/dist/Server/Types/Workflow/Components/Conditions/IfElse.js +3 -9
- package/build/dist/Server/Types/Workflow/Components/Conditions/IfElse.js.map +1 -1
- package/build/dist/Server/Types/Workflow/Components/Email.js +15 -4
- package/build/dist/Server/Types/Workflow/Components/Email.js.map +1 -1
- package/build/dist/Server/Types/Workflow/Components/JavaScript.js +7 -2
- package/build/dist/Server/Types/Workflow/Components/JavaScript.js.map +1 -1
- package/build/dist/Server/Types/Workflow/Components/MicrosoftTeams/SendMessageToChannel.js +1 -1
- package/build/dist/Server/Types/Workflow/Components/MicrosoftTeams/SendMessageToChannel.js.map +1 -1
- package/build/dist/Server/Utils/AI/Chat/ChatAgentRunner.js +514 -56
- package/build/dist/Server/Utils/AI/Chat/ChatAgentRunner.js.map +1 -1
- package/build/dist/Server/Utils/AI/Chat/ObservabilityAssistant.js +20 -3
- package/build/dist/Server/Utils/AI/Chat/ObservabilityAssistant.js.map +1 -1
- package/build/dist/Server/Utils/AI/Chat/ObservabilityChatPrompt.js +19 -6
- package/build/dist/Server/Utils/AI/Chat/ObservabilityChatPrompt.js.map +1 -1
- package/build/dist/Server/Utils/AI/SRE/AIInvestigationEngine.js +7 -0
- package/build/dist/Server/Utils/AI/SRE/AIInvestigationEngine.js.map +1 -1
- package/build/dist/Server/Utils/AI/Toolbox/AIActionTools.js +2 -2
- package/build/dist/Server/Utils/AI/Toolbox/AIActionTools.js.map +1 -1
- package/build/dist/Server/Utils/AI/Toolbox/AIMetaTools.js +692 -0
- package/build/dist/Server/Utils/AI/Toolbox/AIMetaTools.js.map +1 -0
- package/build/dist/Server/Utils/AI/Toolbox/AlertTools.js +148 -12
- package/build/dist/Server/Utils/AI/Toolbox/AlertTools.js.map +1 -1
- package/build/dist/Server/Utils/AI/Toolbox/IncidentTools.js +157 -10
- package/build/dist/Server/Utils/AI/Toolbox/IncidentTools.js.map +1 -1
- package/build/dist/Server/Utils/AI/Toolbox/Index.js +37 -0
- package/build/dist/Server/Utils/AI/Toolbox/Index.js.map +1 -1
- package/build/dist/Server/Utils/AI/Toolbox/MonitorTools.js +259 -14
- package/build/dist/Server/Utils/AI/Toolbox/MonitorTools.js.map +1 -1
- package/build/dist/Server/Utils/AI/Toolbox/NoteWriteTools.js +235 -0
- package/build/dist/Server/Utils/AI/Toolbox/NoteWriteTools.js.map +1 -0
- package/build/dist/Server/Utils/AI/Toolbox/OnCallTools.js +1000 -0
- package/build/dist/Server/Utils/AI/Toolbox/OnCallTools.js.map +1 -0
- package/build/dist/Server/Utils/AI/Toolbox/RunbookTools.js +356 -0
- package/build/dist/Server/Utils/AI/Toolbox/RunbookTools.js.map +1 -0
- package/build/dist/Server/Utils/AI/Toolbox/SloTools.js +394 -0
- package/build/dist/Server/Utils/AI/Toolbox/SloTools.js.map +1 -0
- package/build/dist/Server/Utils/AI/Toolbox/StatusPageTools.js +465 -0
- package/build/dist/Server/Utils/AI/Toolbox/StatusPageTools.js.map +1 -0
- package/build/dist/Server/Utils/AI/Toolbox/TeamTools.js +280 -0
- package/build/dist/Server/Utils/AI/Toolbox/TeamTools.js.map +1 -0
- package/build/dist/Server/Utils/AI/Toolbox/TimelineTools.js +527 -0
- package/build/dist/Server/Utils/AI/Toolbox/TimelineTools.js.map +1 -0
- package/build/dist/Server/Utils/AI/Toolbox/WorkflowProbeTools.js +548 -0
- package/build/dist/Server/Utils/AI/Toolbox/WorkflowProbeTools.js.map +1 -0
- package/build/dist/Server/Utils/ClientIp.js +137 -0
- package/build/dist/Server/Utils/ClientIp.js.map +1 -0
- package/build/dist/Server/Utils/Dashboard/PublicDashboardResourceListPolicy.js +38 -0
- package/build/dist/Server/Utils/Dashboard/PublicDashboardResourceListPolicy.js.map +1 -1
- package/build/dist/Server/Utils/Dashboard/PublicDashboardSloHistoryPolicy.js +89 -0
- package/build/dist/Server/Utils/Dashboard/PublicDashboardSloHistoryPolicy.js.map +1 -0
- package/build/dist/Server/Utils/Dashboard/PublicDashboardSloWidget.js +77 -0
- package/build/dist/Server/Utils/Dashboard/PublicDashboardSloWidget.js.map +1 -0
- package/build/dist/Server/Utils/Express.js +12 -12
- package/build/dist/Server/Utils/Express.js.map +1 -1
- package/build/dist/Server/Utils/LLM/LLMService.js +70 -7
- package/build/dist/Server/Utils/LLM/LLMService.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js +121 -11
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js.map +1 -1
- package/build/dist/Server/Utils/SSRFProtection.js +82 -21
- package/build/dist/Server/Utils/SSRFProtection.js.map +1 -1
- package/build/dist/Server/Utils/StartServer.js +12 -4
- package/build/dist/Server/Utils/StartServer.js.map +1 -1
- package/build/dist/Server/Utils/Telemetry/EntityRegistry.js +165 -18
- package/build/dist/Server/Utils/Telemetry/EntityRegistry.js.map +1 -1
- package/build/dist/Server/Utils/Telemetry/InventoryEntityRegistry.js +11 -11
- package/build/dist/Server/Utils/Telemetry/InventoryEntityRegistry.js.map +1 -1
- package/build/dist/Server/Utils/Telemetry/TelemetryEntity.js +122 -47
- package/build/dist/Server/Utils/Telemetry/TelemetryEntity.js.map +1 -1
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.js +7 -3
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.js.map +1 -1
- package/build/dist/Types/AI/AIChatMessageStatus.js +8 -1
- package/build/dist/Types/AI/AIChatMessageStatus.js.map +1 -1
- package/build/dist/Types/AI/AIChatTypes.js +12 -0
- package/build/dist/Types/AI/AIChatTypes.js.map +1 -1
- package/build/dist/Types/Database/AccessControl/OwnerOnlyColumn.js +60 -0
- package/build/dist/Types/Database/AccessControl/OwnerOnlyColumn.js.map +1 -0
- package/build/dist/Types/Exception/ExceptionCode.js +2 -0
- package/build/dist/Types/Exception/ExceptionCode.js.map +1 -1
- package/build/dist/Types/Exception/ServiceUnavailableException.js +8 -0
- package/build/dist/Types/Exception/ServiceUnavailableException.js.map +1 -0
- package/build/dist/Types/Exception/TooManyRequestsException.js +8 -0
- package/build/dist/Types/Exception/TooManyRequestsException.js.map +1 -0
- package/build/dist/Types/IP/IP.js +87 -43
- package/build/dist/Types/IP/IP.js.map +1 -1
- package/build/dist/Types/NetworkDevice/NetworkDeviceMonitoringMethod.js +50 -0
- package/build/dist/Types/NetworkDevice/NetworkDeviceMonitoringMethod.js.map +1 -0
- package/build/dist/Types/OnCallDutyPolicy/Layer.js +186 -123
- package/build/dist/Types/OnCallDutyPolicy/Layer.js.map +1 -1
- package/build/dist/Types/OnCallDutyPolicy/OnCallDutyPolicyStatus.js +13 -0
- package/build/dist/Types/OnCallDutyPolicy/OnCallDutyPolicyStatus.js.map +1 -1
- package/build/dist/Types/OnCallDutyPolicy/ScheduleShiftUtil.js +105 -11
- package/build/dist/Types/OnCallDutyPolicy/ScheduleShiftUtil.js.map +1 -1
- package/build/dist/Types/Permission.js +174 -0
- package/build/dist/Types/Permission.js.map +1 -1
- package/build/dist/Types/Telemetry/EntityRelationshipType.js +1 -1
- package/build/dist/Types/Telemetry/EntitySource.js +1 -1
- package/build/dist/Types/Telemetry/EntityType.js +1 -1
- package/build/dist/Types/Telemetry/EntityTypeGroups.js +1 -1
- package/build/dist/Types/Telemetry/EntityTypeGroups.js.map +1 -1
- package/build/dist/Types/Workflow/Components/BaseModel.js +66 -28
- package/build/dist/Types/Workflow/Components/BaseModel.js.map +1 -1
- package/build/dist/Types/Workflow/Components/Discord.js +1 -0
- package/build/dist/Types/Workflow/Components/Discord.js.map +1 -1
- package/build/dist/Types/Workflow/Components/Email.js +12 -3
- package/build/dist/Types/Workflow/Components/Email.js.map +1 -1
- package/build/dist/Types/Workflow/Components/JavaScript.js +7 -0
- package/build/dist/Types/Workflow/Components/JavaScript.js.map +1 -1
- package/build/dist/Types/Workflow/Components/MicrosoftTeams.js +3 -2
- package/build/dist/Types/Workflow/Components/MicrosoftTeams.js.map +1 -1
- package/build/dist/Types/Workflow/Components/Slack.js +1 -0
- package/build/dist/Types/Workflow/Components/Slack.js.map +1 -1
- package/build/dist/Types/Workflow/Components/Telegram.js +1 -0
- package/build/dist/Types/Workflow/Components/Telegram.js.map +1 -1
- package/build/dist/Types/Workflow/TemplateSyntax.js +12 -0
- package/build/dist/Types/Workflow/TemplateSyntax.js.map +1 -1
- package/build/dist/Types/Workflow/Templates.js +1931 -38
- package/build/dist/Types/Workflow/Templates.js.map +1 -1
- package/build/dist/UI/Components/Calendar/Calendar.js +1 -1
- package/build/dist/UI/Components/Calendar/Calendar.js.map +1 -1
- package/build/dist/UI/Components/Checkbox/Checkbox.js +1 -1
- package/build/dist/UI/Components/Checkbox/Checkbox.js.map +1 -1
- package/build/dist/UI/Components/Dictionary/Dictionary.js +25 -11
- package/build/dist/UI/Components/Dictionary/Dictionary.js.map +1 -1
- package/build/dist/UI/Components/FormModal/BasicFormModal.js.map +1 -1
- package/build/dist/UI/Components/Header/HeaderIconDropdownButton.js +27 -4
- package/build/dist/UI/Components/Header/HeaderIconDropdownButton.js.map +1 -1
- package/build/dist/UI/Components/Input/Input.js +1 -0
- package/build/dist/UI/Components/Input/Input.js.map +1 -1
- package/build/dist/UI/Components/KeyboardShortcut/KeyboardKey.js +163 -0
- package/build/dist/UI/Components/KeyboardShortcut/KeyboardKey.js.map +1 -0
- package/build/dist/UI/Components/KeyboardShortcut/KeyboardShortcut.js +47 -0
- package/build/dist/UI/Components/KeyboardShortcut/KeyboardShortcut.js.map +1 -0
- package/build/dist/UI/Components/LogsViewer/LogsViewer.js +4 -4
- package/build/dist/UI/Components/LogsViewer/LogsViewer.js.map +1 -1
- package/build/dist/UI/Components/LogsViewer/components/ActiveFilterChips.js +11 -1
- package/build/dist/UI/Components/LogsViewer/components/ActiveFilterChips.js.map +1 -1
- package/build/dist/UI/Components/LogsViewer/components/KeyboardShortcutsHelp.js +10 -8
- package/build/dist/UI/Components/LogsViewer/components/KeyboardShortcutsHelp.js.map +1 -1
- package/build/dist/UI/Components/LogsViewer/components/LogDetailsPanel.js +227 -14
- package/build/dist/UI/Components/LogsViewer/components/LogDetailsPanel.js.map +1 -1
- package/build/dist/UI/Components/LogsViewer/components/LogsAnalyticsView.js +5 -0
- package/build/dist/UI/Components/LogsViewer/components/LogsAnalyticsView.js.map +1 -1
- package/build/dist/UI/Components/LogsViewer/components/LogsTable.js +69 -5
- package/build/dist/UI/Components/LogsViewer/components/LogsTable.js.map +1 -1
- package/build/dist/UI/Components/LogsViewer/components/LogsViewerToolbar.js +8 -0
- package/build/dist/UI/Components/LogsViewer/components/LogsViewerToolbar.js.map +1 -1
- package/build/dist/UI/Components/LogsViewer/types.js.map +1 -1
- package/build/dist/UI/Components/Markdown.tsx/MarkdownEditor.js +9 -2
- package/build/dist/UI/Components/Markdown.tsx/MarkdownEditor.js.map +1 -1
- package/build/dist/UI/Components/Navbar/NavBarMenuModal.js +8 -21
- package/build/dist/UI/Components/Navbar/NavBarMenuModal.js.map +1 -1
- package/build/dist/UI/Components/ProjectInvitations/PendingProjectInvitations.js +251 -0
- package/build/dist/UI/Components/ProjectInvitations/PendingProjectInvitations.js.map +1 -0
- package/build/dist/UI/Components/SimpleLogViewer/SimpleLogViewer.js +9 -2
- package/build/dist/UI/Components/SimpleLogViewer/SimpleLogViewer.js.map +1 -1
- package/build/dist/UI/Components/Table/Table.js +27 -15
- package/build/dist/UI/Components/Table/Table.js.map +1 -1
- package/build/dist/UI/Components/Table/TableBody.js +24 -18
- package/build/dist/UI/Components/Table/TableBody.js.map +1 -1
- package/build/dist/UI/Components/Table/TableHeader.js +9 -1
- package/build/dist/UI/Components/Table/TableHeader.js.map +1 -1
- package/build/dist/UI/Components/Table/TableRow.js +29 -21
- package/build/dist/UI/Components/Table/TableRow.js.map +1 -1
- package/build/dist/UI/Components/Workflow/ArgumentsForm.js +130 -12
- package/build/dist/UI/Components/Workflow/ArgumentsForm.js.map +1 -1
- package/build/dist/UI/Components/Workflow/ComponentReturnValueViewer.js +10 -1
- package/build/dist/UI/Components/Workflow/ComponentReturnValueViewer.js.map +1 -1
- package/build/dist/UI/Components/Workflow/ComponentSettingsModal.js +4 -4
- package/build/dist/UI/Components/Workflow/ComponentSettingsModal.js.map +1 -1
- package/build/dist/UI/Components/Workflow/ComponentValuePickerModal.js +57 -7
- package/build/dist/UI/Components/Workflow/ComponentValuePickerModal.js.map +1 -1
- package/build/dist/UI/Components/Workflow/ComponentsModal.js +53 -18
- package/build/dist/UI/Components/Workflow/ComponentsModal.js.map +1 -1
- package/build/dist/UI/Components/Workflow/DocumentationViewer.js +19 -6
- package/build/dist/UI/Components/Workflow/DocumentationViewer.js.map +1 -1
- package/build/dist/UI/Components/Workflow/GraphLint.js +33 -4
- package/build/dist/UI/Components/Workflow/GraphLint.js.map +1 -1
- package/build/dist/UI/Components/Workflow/GraphLintSummary.js +231 -0
- package/build/dist/UI/Components/Workflow/GraphLintSummary.js.map +1 -0
- package/build/dist/UI/Components/Workflow/ModelColumnEditor.js +116 -21
- package/build/dist/UI/Components/Workflow/ModelColumnEditor.js.map +1 -1
- package/build/dist/UI/Components/Workflow/ModelSchema.js +72 -34
- package/build/dist/UI/Components/Workflow/ModelSchema.js.map +1 -1
- package/build/dist/UI/Components/Workflow/RunStatusWatcher.js +1 -1
- package/build/dist/UI/Components/Workflow/RunStatusWatcher.js.map +1 -1
- package/build/dist/UI/Components/Workflow/StepTraceViewer.js +1 -1
- package/build/dist/UI/Components/Workflow/StepTraceViewer.js.map +1 -1
- package/build/dist/UI/Components/Workflow/UseRunWatch.js +123 -0
- package/build/dist/UI/Components/Workflow/UseRunWatch.js.map +1 -0
- package/build/dist/UI/Components/Workflow/VariableModal.js +3 -2
- package/build/dist/UI/Components/Workflow/VariableModal.js.map +1 -1
- package/build/dist/UI/Components/Workflow/Workflow.js +41 -1
- package/build/dist/UI/Components/Workflow/Workflow.js.map +1 -1
- package/build/dist/UI/Components/Workflow/WorkflowIssuesModal.js +99 -0
- package/build/dist/UI/Components/Workflow/WorkflowIssuesModal.js.map +1 -0
- package/build/dist/UI/Components/Workflow/WorkflowLogModal.js +56 -0
- package/build/dist/UI/Components/Workflow/WorkflowLogModal.js.map +1 -0
- package/build/dist/UI/Components/Workflow/WorkflowStatusBar.js +92 -0
- package/build/dist/UI/Components/Workflow/WorkflowStatusBar.js.map +1 -0
- package/build/dist/UI/Utils/AIChatExport/ConversationMarkdown.js +9 -0
- package/build/dist/UI/Utils/AIChatExport/ConversationMarkdown.js.map +1 -1
- package/build/dist/UI/Utils/ModelAPI/ModelAPI.js +1 -1
- package/build/dist/UI/Utils/ModelAPI/ModelAPI.js.map +1 -1
- package/build/dist/UI/Utils/Platform.js +118 -0
- package/build/dist/UI/Utils/Platform.js.map +1 -0
- package/build/dist/UI/Utils/ProjectInvitationDisplay.js +106 -0
- package/build/dist/UI/Utils/ProjectInvitationDisplay.js.map +1 -0
- package/build/dist/Utils/Monitor/NetworkDeviceLinkRuleUtil.js +108 -0
- package/build/dist/Utils/Monitor/NetworkDeviceLinkRuleUtil.js.map +1 -0
- package/build/dist/Utils/Monitor/NetworkTopologyUtil.js +642 -136
- package/build/dist/Utils/Monitor/NetworkTopologyUtil.js.map +1 -1
- package/build/dist/Utils/Telemetry/CrossSignalScope.js +328 -0
- package/build/dist/Utils/Telemetry/CrossSignalScope.js.map +1 -0
- package/build/dist/Utils/Telemetry/EntityKey.js +5 -5
- package/build/dist/Utils/Telemetry/EntityRelationship.js +1 -1
- package/jest.config.json +1 -0
- package/package.json +1 -1
- package/build/dist/Models/DatabaseModels/TelemetryEntity.js.map +0 -1
- package/build/dist/Models/DatabaseModels/TelemetryEntityRelationship.js.map +0 -1
- package/build/dist/Server/Services/TelemetryEntityRelationshipService.js.map +0 -1
- package/build/dist/Server/Services/TelemetryEntityService.js.map +0 -1
|
@@ -10,7 +10,18 @@ import LIMIT_MAX from "../../Types/Database/LimitMax";
|
|
|
10
10
|
import BadDataException from "../../Types/Exception/BadDataException";
|
|
11
11
|
import ObjectID from "../../Types/ObjectID";
|
|
12
12
|
import Model from "../../Models/DatabaseModels/AlertSeverity";
|
|
13
|
+
import Queue, { QueueName } from "../Infrastructure/Queue";
|
|
13
14
|
import CaptureSpan from "../Utils/Telemetry/CaptureSpan";
|
|
15
|
+
|
|
16
|
+
/*
|
|
17
|
+
* Must stay identical to the RunCron job name in
|
|
18
|
+
* App/FeatureSet/Workers/Jobs/OnCallDutyPolicy/BackfillNotificationRulesForNewSeverities.ts.
|
|
19
|
+
* Common cannot import from App, so the string is duplicated deliberately; the
|
|
20
|
+
* job file carries a matching comment naming its two enqueue sites.
|
|
21
|
+
*/
|
|
22
|
+
const BACKFILL_NOTIFICATION_RULES_JOB_NAME: string =
|
|
23
|
+
"OnCallDutyPolicy:BackfillNotificationRulesForNewSeverities";
|
|
24
|
+
|
|
14
25
|
export class Service extends DatabaseService<Model> {
|
|
15
26
|
public constructor() {
|
|
16
27
|
super(Model);
|
|
@@ -40,6 +51,58 @@ export class Service extends DatabaseService<Model> {
|
|
|
40
51
|
};
|
|
41
52
|
}
|
|
42
53
|
|
|
54
|
+
/**
|
|
55
|
+
* A severity created today is a severity every existing responder has no
|
|
56
|
+
* notification rule for. See the twin hook on IncidentSeverityService for the
|
|
57
|
+
* full reasoning; the short version is that default rules are only ever
|
|
58
|
+
* written when a responder joins or verifies a method, and both iterate the
|
|
59
|
+
* severities that exist AT THAT MOMENT, so a severity added later pages
|
|
60
|
+
* nobody until something backfills it.
|
|
61
|
+
*
|
|
62
|
+
* Queued rather than inline because a project can hold thousands of
|
|
63
|
+
* responders and this hook runs inside the request that created the severity.
|
|
64
|
+
* Best-effort because the severity must be created either way - the backfill
|
|
65
|
+
* job also sweeps recently-created severities on its own schedule, so a
|
|
66
|
+
* dropped enqueue costs latency, not coverage.
|
|
67
|
+
*/
|
|
68
|
+
@CaptureSpan()
|
|
69
|
+
protected override async onCreateSuccess(
|
|
70
|
+
_onCreate: OnCreate<Model>,
|
|
71
|
+
createdItem: Model,
|
|
72
|
+
): Promise<Model> {
|
|
73
|
+
try {
|
|
74
|
+
await Queue.addJob(
|
|
75
|
+
QueueName.Worker,
|
|
76
|
+
`${BACKFILL_NOTIFICATION_RULES_JOB_NAME}-${createdItem.id?.toString()}`,
|
|
77
|
+
BACKFILL_NOTIFICATION_RULES_JOB_NAME,
|
|
78
|
+
{
|
|
79
|
+
/*
|
|
80
|
+
* The Worker queue dispatches purely on job NAME and hands the job
|
|
81
|
+
* function no payload, so the job re-derives which severities need
|
|
82
|
+
* backfilling for itself. These ride along for the queue inspector and
|
|
83
|
+
* the failure log.
|
|
84
|
+
*/
|
|
85
|
+
projectId: createdItem.projectId?.toString() || "",
|
|
86
|
+
alertSeverityId: createdItem.id?.toString() || "",
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
// One active, one queued, latest payload wins - never N overlapping scans.
|
|
90
|
+
deduplication: {
|
|
91
|
+
id: BACKFILL_NOTIFICATION_RULES_JOB_NAME,
|
|
92
|
+
keepLastIfActive: true,
|
|
93
|
+
},
|
|
94
|
+
},
|
|
95
|
+
);
|
|
96
|
+
} catch (err) {
|
|
97
|
+
logger.error(
|
|
98
|
+
"Could not enqueue the on-call notification rule backfill for a newly created alert severity. The scheduled sweep will still pick it up.",
|
|
99
|
+
);
|
|
100
|
+
logger.error(err);
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
return createdItem;
|
|
104
|
+
}
|
|
105
|
+
|
|
43
106
|
@CaptureSpan()
|
|
44
107
|
protected override async onBeforeDelete(
|
|
45
108
|
deleteBy: DeleteBy<Model>,
|
|
@@ -24,6 +24,7 @@ import CaptureSpan from "../Utils/Telemetry/CaptureSpan";
|
|
|
24
24
|
import ObjectID from "../../Types/ObjectID";
|
|
25
25
|
import { JSONObject } from "../../Types/JSON";
|
|
26
26
|
import IP from "../../Types/IP/IP";
|
|
27
|
+
import { resolveClientIp } from "../Utils/ClientIp";
|
|
27
28
|
import {
|
|
28
29
|
DASHBOARD_MASTER_PASSWORD_COOKIE_IDENTIFIER,
|
|
29
30
|
DASHBOARD_MASTER_PASSWORD_REQUIRED_MESSAGE,
|
|
@@ -169,12 +170,13 @@ export class Service extends DatabaseService<Model> {
|
|
|
169
170
|
if (dashboard?.ipWhitelist && dashboard.ipWhitelist.length > 0) {
|
|
170
171
|
const ipWhitelist: Array<string> = dashboard.ipWhitelist?.split("\n");
|
|
171
172
|
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
173
|
+
/*
|
|
174
|
+
* One address, resolved from the trusted end of X-Forwarded-For.
|
|
175
|
+
* Never the raw header: a caller can prepend any address they like to
|
|
176
|
+
* it, so checking the chain rather than a single resolved address let
|
|
177
|
+
* anyone who knew an allowlisted address walk straight in.
|
|
178
|
+
*/
|
|
179
|
+
const ipAccessedFrom: string | undefined = resolveClientIp(req);
|
|
178
180
|
|
|
179
181
|
if (!ipAccessedFrom) {
|
|
180
182
|
logger.error("IP address not found in request.", {
|
|
@@ -189,10 +191,7 @@ export class Service extends DatabaseService<Model> {
|
|
|
189
191
|
}
|
|
190
192
|
|
|
191
193
|
const isIPWhitelisted: boolean = IP.isInWhitelist({
|
|
192
|
-
|
|
193
|
-
ipAccessedFrom?.split(",").map((i: string) => {
|
|
194
|
-
return i.trim();
|
|
195
|
-
}) || [],
|
|
194
|
+
ip: ipAccessedFrom,
|
|
196
195
|
whitelist: ipWhitelist,
|
|
197
196
|
});
|
|
198
197
|
|
|
@@ -18,6 +18,7 @@ import {
|
|
|
18
18
|
OnUpdate,
|
|
19
19
|
} from "../Types/Database/Hooks";
|
|
20
20
|
import ModelPermission from "../Types/Database/Permissions/Index";
|
|
21
|
+
import OwnerOnlyColumnPermission from "../Types/Database/Permissions/OwnerOnlyColumnPermission";
|
|
21
22
|
import { CheckReadPermissionType } from "../Types/Database/Permissions/ReadPermission";
|
|
22
23
|
import Query from "../Types/Database/Query";
|
|
23
24
|
import QueryHelper from "../Types/Database/QueryHelper";
|
|
@@ -913,7 +914,7 @@ class DatabaseService<TBaseModel extends BaseModel> extends BaseService {
|
|
|
913
914
|
* `Incident` -> `incidentId`, `Monitor` -> `monitorId`. Matches the keys in
|
|
914
915
|
* TelemetryContextAttributes so dashboards/queries stay consistent.
|
|
915
916
|
*/
|
|
916
|
-
private
|
|
917
|
+
private getInventoryItemIdKey(): string {
|
|
917
918
|
const name: string = this.modelName || "entity";
|
|
918
919
|
return name.charAt(0).toLowerCase() + name.slice(1) + "Id";
|
|
919
920
|
}
|
|
@@ -960,7 +961,7 @@ class DatabaseService<TBaseModel extends BaseModel> extends BaseService {
|
|
|
960
961
|
}
|
|
961
962
|
|
|
962
963
|
if (item.id) {
|
|
963
|
-
attributes[this.
|
|
964
|
+
attributes[this.getInventoryItemIdKey()] = item.id.toString();
|
|
964
965
|
}
|
|
965
966
|
|
|
966
967
|
if (Object.keys(attributes).length > 0) {
|
|
@@ -1905,6 +1906,17 @@ class DatabaseService<TBaseModel extends BaseModel> extends BaseService {
|
|
|
1905
1906
|
* permission-checked, so a column being sorted on is already reaching the
|
|
1906
1907
|
* database - adding it to the select must not be able to turn a query that
|
|
1907
1908
|
* worked into a permission error. The values never reach the caller.
|
|
1909
|
+
*
|
|
1910
|
+
* That last sentence is exactly why owner-only columns are excluded below.
|
|
1911
|
+
* Running after the gate means anything added here was never gated, so
|
|
1912
|
+
* `sort: { webhookUrl: "ASC" }` is a way of writing a column into the select
|
|
1913
|
+
* that ModelPermission has already finished looking at. The column is
|
|
1914
|
+
* stripped off the returned rows again, but "the caller only learns the
|
|
1915
|
+
* ORDER of everyone's webhook URLs" is not a defence - order is a comparison
|
|
1916
|
+
* oracle, and a handful of paged requests reconstructs the value. A caller
|
|
1917
|
+
* who may genuinely read the column has already put it in the select
|
|
1918
|
+
* themselves, in which case the first filter clause below has already
|
|
1919
|
+
* returned false and nothing here applies to them.
|
|
1908
1920
|
*/
|
|
1909
1921
|
private addSortColumnsToSelect(findBy: FindBy<TBaseModel>): Array<string> {
|
|
1910
1922
|
/*
|
|
@@ -1915,6 +1927,14 @@ class DatabaseService<TBaseModel extends BaseModel> extends BaseService {
|
|
|
1915
1927
|
return [];
|
|
1916
1928
|
}
|
|
1917
1929
|
|
|
1930
|
+
/*
|
|
1931
|
+
* Root and master admin keep the existing behaviour untouched: they are
|
|
1932
|
+
* past every permission check by definition, and notification delivery
|
|
1933
|
+
* reads and orders these columns as root in order to actually page people.
|
|
1934
|
+
*/
|
|
1935
|
+
const isPrivilegedInternalRead: boolean =
|
|
1936
|
+
Boolean(findBy.props.isRoot) || Boolean(findBy.props.isMasterAdmin);
|
|
1937
|
+
|
|
1918
1938
|
const sortColumnsToAdd: Array<string> = Object.keys(
|
|
1919
1939
|
findBy.sort || {},
|
|
1920
1940
|
).filter((sortColumn: string) => {
|
|
@@ -1922,6 +1942,16 @@ class DatabaseService<TBaseModel extends BaseModel> extends BaseService {
|
|
|
1922
1942
|
return false;
|
|
1923
1943
|
}
|
|
1924
1944
|
|
|
1945
|
+
if (
|
|
1946
|
+
!isPrivilegedInternalRead &&
|
|
1947
|
+
OwnerOnlyColumnPermission.isOwnerOnlyColumnOnModel(
|
|
1948
|
+
this.modelType,
|
|
1949
|
+
sortColumn,
|
|
1950
|
+
)
|
|
1951
|
+
) {
|
|
1952
|
+
return false;
|
|
1953
|
+
}
|
|
1954
|
+
|
|
1925
1955
|
/*
|
|
1926
1956
|
* Sorting by a relation orders through the joined table, which has its
|
|
1927
1957
|
* own alias - adding the relation to the select here would instead turn
|
|
@@ -20,6 +20,9 @@ import IncidentEpisodeFeedService from "./IncidentEpisodeFeedService";
|
|
|
20
20
|
import { IncidentEpisodeFeedEventType } from "../../Models/DatabaseModels/IncidentEpisodeFeed";
|
|
21
21
|
import Semaphore, { SemaphoreMutex } from "../Infrastructure/Semaphore";
|
|
22
22
|
import IncidentEpisodeService from "./IncidentEpisodeService";
|
|
23
|
+
import IncidentEpisodeInternalNote from "../../Models/DatabaseModels/IncidentEpisodeInternalNote";
|
|
24
|
+
import IncidentEpisodeInternalNoteService from "./IncidentEpisodeInternalNoteService";
|
|
25
|
+
import { JSONObject } from "../../Types/JSON";
|
|
23
26
|
|
|
24
27
|
export class Service extends DatabaseService<IncidentEpisodeStateTimeline> {
|
|
25
28
|
public constructor() {
|
|
@@ -188,11 +191,21 @@ export class Service extends DatabaseService<IncidentEpisodeStateTimeline> {
|
|
|
188
191
|
incidentEpisodeId: createBy.data.incidentEpisodeId?.toString(),
|
|
189
192
|
} as LogAttributes);
|
|
190
193
|
|
|
194
|
+
/*
|
|
195
|
+
* The note a user writes when they change the state. It is not a column
|
|
196
|
+
* on this model, so it travels alongside the create and becomes an
|
|
197
|
+
* internal note on the episode once the timeline row exists.
|
|
198
|
+
*/
|
|
199
|
+
const privateNote: string | undefined = (
|
|
200
|
+
createBy.miscDataProps as JSONObject | undefined
|
|
201
|
+
)?.["privateNote"] as string | undefined;
|
|
202
|
+
|
|
191
203
|
return {
|
|
192
204
|
createBy,
|
|
193
205
|
carryForward: {
|
|
194
206
|
statusTimelineBeforeThisStatus: stateBeforeThis || null,
|
|
195
207
|
statusTimelineAfterThisStatus: stateAfterThis || null,
|
|
208
|
+
privateNote: privateNote,
|
|
196
209
|
mutex: mutex,
|
|
197
210
|
},
|
|
198
211
|
};
|
|
@@ -442,6 +455,22 @@ export class Service extends DatabaseService<IncidentEpisodeStateTimeline> {
|
|
|
442
455
|
},
|
|
443
456
|
});
|
|
444
457
|
|
|
458
|
+
if (onCreate.carryForward.privateNote) {
|
|
459
|
+
const privateNote: string = onCreate.carryForward.privateNote;
|
|
460
|
+
|
|
461
|
+
const episodeInternalNote: IncidentEpisodeInternalNote =
|
|
462
|
+
new IncidentEpisodeInternalNote();
|
|
463
|
+
episodeInternalNote.incidentEpisodeId = createdItem.incidentEpisodeId;
|
|
464
|
+
episodeInternalNote.note = privateNote;
|
|
465
|
+
episodeInternalNote.createdAt = createdItem.startsAt!;
|
|
466
|
+
episodeInternalNote.projectId = createdItem.projectId!;
|
|
467
|
+
|
|
468
|
+
await IncidentEpisodeInternalNoteService.create({
|
|
469
|
+
data: episodeInternalNote,
|
|
470
|
+
props: onCreate.createBy.props,
|
|
471
|
+
});
|
|
472
|
+
}
|
|
473
|
+
|
|
445
474
|
return createdItem;
|
|
446
475
|
}
|
|
447
476
|
|
|
@@ -10,7 +10,18 @@ import LIMIT_MAX from "../../Types/Database/LimitMax";
|
|
|
10
10
|
import BadDataException from "../../Types/Exception/BadDataException";
|
|
11
11
|
import ObjectID from "../../Types/ObjectID";
|
|
12
12
|
import Model from "../../Models/DatabaseModels/IncidentSeverity";
|
|
13
|
+
import Queue, { QueueName } from "../Infrastructure/Queue";
|
|
13
14
|
import CaptureSpan from "../Utils/Telemetry/CaptureSpan";
|
|
15
|
+
|
|
16
|
+
/*
|
|
17
|
+
* Must stay identical to the RunCron job name in
|
|
18
|
+
* App/FeatureSet/Workers/Jobs/OnCallDutyPolicy/BackfillNotificationRulesForNewSeverities.ts.
|
|
19
|
+
* Common cannot import from App, so the string is duplicated deliberately; the
|
|
20
|
+
* job file carries a matching comment naming its two enqueue sites.
|
|
21
|
+
*/
|
|
22
|
+
const BACKFILL_NOTIFICATION_RULES_JOB_NAME: string =
|
|
23
|
+
"OnCallDutyPolicy:BackfillNotificationRulesForNewSeverities";
|
|
24
|
+
|
|
14
25
|
export class Service extends DatabaseService<Model> {
|
|
15
26
|
public constructor() {
|
|
16
27
|
super(Model);
|
|
@@ -40,6 +51,71 @@ export class Service extends DatabaseService<Model> {
|
|
|
40
51
|
};
|
|
41
52
|
}
|
|
42
53
|
|
|
54
|
+
/**
|
|
55
|
+
* A severity created today is a severity every existing responder has no
|
|
56
|
+
* notification rule for.
|
|
57
|
+
*
|
|
58
|
+
* The default rules a responder gets are written when they join the project
|
|
59
|
+
* and when they verify a notification method, and both of those iterate the
|
|
60
|
+
* severities that exist AT THAT MOMENT. Nothing revisited the question
|
|
61
|
+
* afterwards, so adding a "Sev4" a year into a project silently switched off
|
|
62
|
+
* paging for it: every Sev4 incident counted zero matching rules and dropped
|
|
63
|
+
* into an execution log nobody reads.
|
|
64
|
+
*
|
|
65
|
+
* The repair is queued rather than run inline. A project can hold thousands of
|
|
66
|
+
* responders, this hook sits inside the request that created the severity, and
|
|
67
|
+
* a fan-out that slow would either time the request out or fail half-finished
|
|
68
|
+
* with nothing to roll back. The worker owns the work; this only rings the
|
|
69
|
+
* bell.
|
|
70
|
+
*
|
|
71
|
+
* Ringing the bell is best-effort on purpose. If Redis is unreachable the
|
|
72
|
+
* severity must still be created - the backfill job also sweeps
|
|
73
|
+
* recently-created severities on its own schedule, so a dropped enqueue costs
|
|
74
|
+
* a few minutes of latency, not coverage.
|
|
75
|
+
*/
|
|
76
|
+
@CaptureSpan()
|
|
77
|
+
protected override async onCreateSuccess(
|
|
78
|
+
_onCreate: OnCreate<Model>,
|
|
79
|
+
createdItem: Model,
|
|
80
|
+
): Promise<Model> {
|
|
81
|
+
try {
|
|
82
|
+
await Queue.addJob(
|
|
83
|
+
QueueName.Worker,
|
|
84
|
+
`${BACKFILL_NOTIFICATION_RULES_JOB_NAME}-${createdItem.id?.toString()}`,
|
|
85
|
+
BACKFILL_NOTIFICATION_RULES_JOB_NAME,
|
|
86
|
+
{
|
|
87
|
+
/*
|
|
88
|
+
* The Worker queue dispatches purely on job NAME and hands the job
|
|
89
|
+
* function no payload, so the job re-derives which severities need
|
|
90
|
+
* backfilling for itself. These ride along for the queue inspector and
|
|
91
|
+
* the failure log, where "which severity was this?" is the first
|
|
92
|
+
* question anyone asks.
|
|
93
|
+
*/
|
|
94
|
+
projectId: createdItem.projectId?.toString() || "",
|
|
95
|
+
incidentSeverityId: createdItem.id?.toString() || "",
|
|
96
|
+
},
|
|
97
|
+
{
|
|
98
|
+
/*
|
|
99
|
+
* Seeding a project with four severities in one go must not start four
|
|
100
|
+
* overlapping scans that all see the same uncovered responders and all
|
|
101
|
+
* write the same rules. One active, one queued, latest payload wins.
|
|
102
|
+
*/
|
|
103
|
+
deduplication: {
|
|
104
|
+
id: BACKFILL_NOTIFICATION_RULES_JOB_NAME,
|
|
105
|
+
keepLastIfActive: true,
|
|
106
|
+
},
|
|
107
|
+
},
|
|
108
|
+
);
|
|
109
|
+
} catch (err) {
|
|
110
|
+
logger.error(
|
|
111
|
+
"Could not enqueue the on-call notification rule backfill for a newly created incident severity. The scheduled sweep will still pick it up.",
|
|
112
|
+
);
|
|
113
|
+
logger.error(err);
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
return createdItem;
|
|
117
|
+
}
|
|
118
|
+
|
|
43
119
|
@CaptureSpan()
|
|
44
120
|
protected override async onBeforeDelete(
|
|
45
121
|
deleteBy: DeleteBy<Model>,
|
package/Server/Services/Index.ts
CHANGED
|
@@ -49,6 +49,9 @@ import NetworkSiteTypeService from "./NetworkSiteTypeService";
|
|
|
49
49
|
import NetworkEndpointService from "./NetworkEndpointService";
|
|
50
50
|
import NetworkSiteStatusTimelineService from "./NetworkSiteStatusTimelineService";
|
|
51
51
|
import NetworkSiteLinkService from "./NetworkSiteLinkService";
|
|
52
|
+
import NetworkDeviceLinkService from "./NetworkDeviceLinkService";
|
|
53
|
+
import NetworkDeviceLinkRuleService from "./NetworkDeviceLinkRuleService";
|
|
54
|
+
import NetworkTopologySuppressionService from "./NetworkTopologySuppressionService";
|
|
52
55
|
import NetworkSiteAssignmentRuleService from "./NetworkSiteAssignmentRuleService";
|
|
53
56
|
import PodmanHostService from "./PodmanHostService";
|
|
54
57
|
import ProxmoxClusterService from "./ProxmoxClusterService";
|
|
@@ -213,8 +216,9 @@ import WorkflowService from "./WorkflowService";
|
|
|
213
216
|
import WorkflowVariablesService from "./WorkflowVariableService";
|
|
214
217
|
import AnalyticsBaseModel from "../../Models/AnalyticsModels/AnalyticsBaseModel/AnalyticsBaseModel";
|
|
215
218
|
import TelemetryExceptionService from "./TelemetryExceptionService";
|
|
216
|
-
import
|
|
217
|
-
import
|
|
219
|
+
import InventoryItemService from "./InventoryItemService";
|
|
220
|
+
import InventoryItemCustomFieldService from "./InventoryItemCustomFieldService";
|
|
221
|
+
import InventoryItemRelationshipService from "./InventoryItemRelationshipService";
|
|
218
222
|
import ExceptionInstanceService from "./ExceptionInstanceService";
|
|
219
223
|
import KubernetesCostAllocationService from "./KubernetesCostAllocationService";
|
|
220
224
|
import ScheduledMaintenanceTemplateService from "./ScheduledMaintenanceTemplateService";
|
|
@@ -351,6 +355,9 @@ const services: Array<BaseService> = [
|
|
|
351
355
|
NetworkEndpointService,
|
|
352
356
|
NetworkSiteStatusTimelineService,
|
|
353
357
|
NetworkSiteLinkService,
|
|
358
|
+
NetworkDeviceLinkService,
|
|
359
|
+
NetworkDeviceLinkRuleService,
|
|
360
|
+
NetworkTopologySuppressionService,
|
|
354
361
|
NetworkSiteAssignmentRuleService,
|
|
355
362
|
PodmanHostService,
|
|
356
363
|
ProxmoxClusterService,
|
|
@@ -498,8 +505,9 @@ const services: Array<BaseService> = [
|
|
|
498
505
|
ServiceOwnerUserService,
|
|
499
506
|
|
|
500
507
|
TelemetryExceptionService,
|
|
501
|
-
|
|
502
|
-
|
|
508
|
+
InventoryItemService,
|
|
509
|
+
InventoryItemCustomFieldService,
|
|
510
|
+
InventoryItemRelationshipService,
|
|
503
511
|
|
|
504
512
|
// scheduled maintenance templates
|
|
505
513
|
ScheduledMaintenanceTemplateService,
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import DatabaseService from "./DatabaseService";
|
|
2
|
-
import Model from "../../Models/DatabaseModels/
|
|
2
|
+
import Model from "../../Models/DatabaseModels/InventoryItemRelationship";
|
|
3
3
|
import ObjectID from "../../Types/ObjectID";
|
|
4
4
|
import OneUptimeDate from "../../Types/Date";
|
|
5
5
|
import logger from "../Utils/Logger";
|
|
@@ -9,7 +9,7 @@ import EntitySource from "../../Types/Telemetry/EntitySource";
|
|
|
9
9
|
import { reconcileByNaturalKey } from "../Utils/Telemetry/EntityRegistry";
|
|
10
10
|
import QueryDeepPartialEntity from "../../Types/Database/PartialEntity";
|
|
11
11
|
|
|
12
|
-
export class
|
|
12
|
+
export class InventoryItemRelationshipService extends DatabaseService<Model> {
|
|
13
13
|
public constructor() {
|
|
14
14
|
super(Model);
|
|
15
15
|
}
|
|
@@ -32,7 +32,7 @@ export class TelemetryEntityRelationshipService extends DatabaseService<Model> {
|
|
|
32
32
|
await this.upsertRelationship({ projectId: data.projectId, edge });
|
|
33
33
|
} catch (err) {
|
|
34
34
|
logger.error(
|
|
35
|
-
`
|
|
35
|
+
`InventoryItemRelationshipService: failed to upsert edge ${edge.fromEntityKey}-[${edge.relationshipType}]->${edge.toEntityKey}:`,
|
|
36
36
|
);
|
|
37
37
|
logger.error(err as Error);
|
|
38
38
|
}
|
|
@@ -95,4 +95,4 @@ export class TelemetryEntityRelationshipService extends DatabaseService<Model> {
|
|
|
95
95
|
}
|
|
96
96
|
}
|
|
97
97
|
|
|
98
|
-
export default new
|
|
98
|
+
export default new InventoryItemRelationshipService();
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import DatabaseService from "./DatabaseService";
|
|
2
|
-
import Model from "../../Models/DatabaseModels/
|
|
2
|
+
import Model from "../../Models/DatabaseModels/InventoryItem";
|
|
3
3
|
import Service from "../../Models/DatabaseModels/Service";
|
|
4
4
|
import ServiceService from "./ServiceService";
|
|
5
5
|
import QueryHelper from "../Types/Database/QueryHelper";
|
|
@@ -31,7 +31,7 @@ import {
|
|
|
31
31
|
shouldWarnEntityBudgetOnce,
|
|
32
32
|
} from "../Utils/Telemetry/EntityRegistry";
|
|
33
33
|
|
|
34
|
-
export class
|
|
34
|
+
export class InventoryItemService extends DatabaseService<Model> {
|
|
35
35
|
public constructor() {
|
|
36
36
|
super(Model);
|
|
37
37
|
}
|
|
@@ -161,7 +161,7 @@ export class TelemetryEntityService extends DatabaseService<Model> {
|
|
|
161
161
|
});
|
|
162
162
|
} catch (err) {
|
|
163
163
|
logger.error(
|
|
164
|
-
`
|
|
164
|
+
`InventoryItemService: failed to upsert entity ${entity.entityType}/${entity.entityKey}:`,
|
|
165
165
|
);
|
|
166
166
|
logger.error(err as Error);
|
|
167
167
|
}
|
|
@@ -184,7 +184,7 @@ export class TelemetryEntityService extends DatabaseService<Model> {
|
|
|
184
184
|
if (data.entity.entityType !== EntityType.Service) {
|
|
185
185
|
return null;
|
|
186
186
|
}
|
|
187
|
-
const name: string =
|
|
187
|
+
const name: string = InventoryItemService.deriveDisplayName(data.entity);
|
|
188
188
|
if (!name) {
|
|
189
189
|
return null;
|
|
190
190
|
}
|
|
@@ -206,7 +206,7 @@ export class TelemetryEntityService extends DatabaseService<Model> {
|
|
|
206
206
|
return service?._id ? new ObjectID(service._id.toString()) : null;
|
|
207
207
|
} catch (err) {
|
|
208
208
|
logger.error(
|
|
209
|
-
`
|
|
209
|
+
`InventoryItemService: failed to resolve Service row for entity name "${name}":`,
|
|
210
210
|
);
|
|
211
211
|
logger.error(err as Error);
|
|
212
212
|
return null;
|
|
@@ -234,10 +234,15 @@ export class TelemetryEntityService extends DatabaseService<Model> {
|
|
|
234
234
|
lastSeenAt: now,
|
|
235
235
|
describe: `entity ${entity.entityType}/${entity.entityKey}`,
|
|
236
236
|
rowFenceId: `${projectId.toString()}:${entity.entityType}:${entity.entityKey}`,
|
|
237
|
-
select: {
|
|
237
|
+
select: {
|
|
238
|
+
displayName: true,
|
|
239
|
+
descriptiveAttributes: true,
|
|
240
|
+
labels: true,
|
|
241
|
+
resourceId: true,
|
|
242
|
+
},
|
|
238
243
|
buildUpdate: (existing: Model): QueryDeepPartialEntity<Model> => {
|
|
239
244
|
const update: QueryDeepPartialEntity<Model> =
|
|
240
|
-
|
|
245
|
+
InventoryItemService.buildDescriptiveUpdate(entity, existing);
|
|
241
246
|
/*
|
|
242
247
|
* Stamp / refresh the pointer on the throttled bump too, so
|
|
243
248
|
* pre-existing rows converge and a deleted+recreated Service
|
|
@@ -295,7 +300,7 @@ export class TelemetryEntityService extends DatabaseService<Model> {
|
|
|
295
300
|
})
|
|
296
301
|
) {
|
|
297
302
|
logger.warn(
|
|
298
|
-
`
|
|
303
|
+
`InventoryItemService: entity budget reached for project ${projectId.toString()} type ${entity.entityType} (${count} >= ${budget}); skipping new registry rows. Membership keys still flow on signals.`,
|
|
299
304
|
);
|
|
300
305
|
}
|
|
301
306
|
return false;
|
|
@@ -319,10 +324,10 @@ export class TelemetryEntityService extends DatabaseService<Model> {
|
|
|
319
324
|
model.descriptiveAttributes = entity.descriptiveAttributes;
|
|
320
325
|
}
|
|
321
326
|
if (entity.labels && entity.labels.length > 0) {
|
|
322
|
-
model.labels =
|
|
327
|
+
model.labels = InventoryItemService.normalizeLabels(entity.labels);
|
|
323
328
|
}
|
|
324
329
|
// varchar(ShortText) column; k8s names can run to 253 chars.
|
|
325
|
-
model.displayName =
|
|
330
|
+
model.displayName = InventoryItemService.deriveDisplayName(
|
|
326
331
|
entity,
|
|
327
332
|
).substring(0, ColumnLength.ShortText);
|
|
328
333
|
if (serviceResourceId) {
|
|
@@ -337,11 +342,11 @@ export class TelemetryEntityService extends DatabaseService<Model> {
|
|
|
337
342
|
}
|
|
338
343
|
|
|
339
344
|
/**
|
|
340
|
-
* Extra fields for the `lastSeenAt` bump on an existing row:
|
|
341
|
-
*
|
|
342
|
-
*
|
|
343
|
-
*
|
|
344
|
-
* update (no jsonb churn).
|
|
345
|
+
* Extra fields for the `lastSeenAt` bump on an existing row: a legacy
|
|
346
|
+
* generated Kubernetes fallback display name can converge to the resource
|
|
347
|
+
* name, descriptive attributes merge last-writer-wins per key, and labels
|
|
348
|
+
* merge as a set union. Each is written ONLY when it actually changes, so a
|
|
349
|
+
* stable resource keeps its bump a one-column update (no text/jsonb churn).
|
|
345
350
|
*/
|
|
346
351
|
private static buildDescriptiveUpdate(
|
|
347
352
|
entity: ExtractedEntity,
|
|
@@ -353,10 +358,45 @@ export class TelemetryEntityService extends DatabaseService<Model> {
|
|
|
353
358
|
* recursive JSONObject mapping (TS2589).
|
|
354
359
|
*/
|
|
355
360
|
const update: {
|
|
361
|
+
displayName?: string;
|
|
356
362
|
descriptiveAttributes?: JSONObject;
|
|
357
363
|
labels?: Array<string>;
|
|
358
364
|
} = {};
|
|
359
365
|
|
|
366
|
+
const preferredNameKey: string | undefined =
|
|
367
|
+
InventoryItemService.preferredDisplayNameAttributeByType[
|
|
368
|
+
entity.entityType
|
|
369
|
+
];
|
|
370
|
+
/*
|
|
371
|
+
* Existing inventory display names may be user-edited. Only migrate a
|
|
372
|
+
* pod/node row when its current value is exactly the value the old generic
|
|
373
|
+
* algorithm generated. A sparse observation cannot erase a learned name,
|
|
374
|
+
* and an unrelated entity type never has its display name reconciled here.
|
|
375
|
+
*/
|
|
376
|
+
const preferredName: string | undefined = preferredNameKey
|
|
377
|
+
? entity.descriptiveAttributes?.[preferredNameKey] ||
|
|
378
|
+
entity.identifyingAttributes?.[preferredNameKey]
|
|
379
|
+
: undefined;
|
|
380
|
+
if (preferredName) {
|
|
381
|
+
const desiredDisplayName: string = preferredName.substring(
|
|
382
|
+
0,
|
|
383
|
+
ColumnLength.ShortText,
|
|
384
|
+
);
|
|
385
|
+
const legacyDisplayName: string =
|
|
386
|
+
InventoryItemService.deriveFallbackDisplayName(entity).substring(
|
|
387
|
+
0,
|
|
388
|
+
ColumnLength.ShortText,
|
|
389
|
+
);
|
|
390
|
+
const existingDisplayName: string = existing.displayName || "";
|
|
391
|
+
|
|
392
|
+
if (
|
|
393
|
+
existingDisplayName !== desiredDisplayName &&
|
|
394
|
+
(!existingDisplayName || existingDisplayName === legacyDisplayName)
|
|
395
|
+
) {
|
|
396
|
+
update.displayName = desiredDisplayName;
|
|
397
|
+
}
|
|
398
|
+
}
|
|
399
|
+
|
|
360
400
|
const incoming: Record<string, string> = entity.descriptiveAttributes || {};
|
|
361
401
|
if (Object.keys(incoming).length > 0) {
|
|
362
402
|
const current: Record<string, unknown> =
|
|
@@ -384,7 +424,7 @@ export class TelemetryEntityService extends DatabaseService<Model> {
|
|
|
384
424
|
});
|
|
385
425
|
|
|
386
426
|
if (hasNew) {
|
|
387
|
-
update.labels =
|
|
427
|
+
update.labels = InventoryItemService.normalizeLabels([
|
|
388
428
|
...currentLabels,
|
|
389
429
|
...incomingLabels,
|
|
390
430
|
]);
|
|
@@ -399,13 +439,42 @@ export class TelemetryEntityService extends DatabaseService<Model> {
|
|
|
399
439
|
return Array.from(new Set<string>(labels)).sort();
|
|
400
440
|
}
|
|
401
441
|
|
|
442
|
+
private static readonly preferredDisplayNameAttributeByType: Partial<
|
|
443
|
+
Record<EntityType, string>
|
|
444
|
+
> = {
|
|
445
|
+
[EntityType.KubernetesNode]: "k8s.node.name",
|
|
446
|
+
[EntityType.KubernetesPod]: "k8s.pod.name",
|
|
447
|
+
};
|
|
448
|
+
|
|
402
449
|
/**
|
|
403
|
-
* Best-effort human-readable name for
|
|
404
|
-
*
|
|
405
|
-
*
|
|
450
|
+
* Best-effort human-readable name for Inventory. Prefer the name belonging
|
|
451
|
+
* to this exact entity type, including a descriptive name paired with a
|
|
452
|
+
* stable UID identity (the normal Kubernetes pod/node shape). Falling back
|
|
453
|
+
* to the longest identifying `*.name` preserves the behaviour for types
|
|
454
|
+
* without a dedicated display-name rule.
|
|
406
455
|
*/
|
|
407
456
|
public static deriveDisplayName(entity: ExtractedEntity): string {
|
|
408
457
|
const id: Record<string, string> = entity.identifyingAttributes || {};
|
|
458
|
+
const descriptive: Record<string, string> =
|
|
459
|
+
entity.descriptiveAttributes || {};
|
|
460
|
+
const preferredKey: string | undefined =
|
|
461
|
+
this.preferredDisplayNameAttributeByType[entity.entityType];
|
|
462
|
+
|
|
463
|
+
if (preferredKey) {
|
|
464
|
+
const preferredValue: string | undefined =
|
|
465
|
+
descriptive[preferredKey] || id[preferredKey];
|
|
466
|
+
if (preferredValue) {
|
|
467
|
+
return preferredValue;
|
|
468
|
+
}
|
|
469
|
+
}
|
|
470
|
+
|
|
471
|
+
return this.deriveFallbackDisplayName(entity);
|
|
472
|
+
}
|
|
473
|
+
|
|
474
|
+
/** The generic display-name algorithm used before type-aware K8s names. */
|
|
475
|
+
private static deriveFallbackDisplayName(entity: ExtractedEntity): string {
|
|
476
|
+
const id: Record<string, string> = entity.identifyingAttributes || {};
|
|
477
|
+
|
|
409
478
|
const nameKeys: Array<string> = Object.keys(id)
|
|
410
479
|
.filter((k: string) => {
|
|
411
480
|
return k.endsWith(".name");
|
|
@@ -427,4 +496,4 @@ export class TelemetryEntityService extends DatabaseService<Model> {
|
|
|
427
496
|
}
|
|
428
497
|
}
|
|
429
498
|
|
|
430
|
-
export default new
|
|
499
|
+
export default new InventoryItemService();
|