@oneuptime/common 12.0.7 → 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} +184 -9
- package/Models/DatabaseModels/InventoryItemCustomField.ts +434 -0
- package/Models/DatabaseModels/{TelemetryEntityRelationship.ts → InventoryItemRelationship.ts} +33 -7
- 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/WorkflowLog.ts +38 -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/API/UserAPI.ts +16 -1
- 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/1786551733814-MigrationName.ts +41 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1786559879134-AddWorkflowLogStepTrace.ts +17 -0
- 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 +24 -0
- package/Server/Infrastructure/Queue.ts +78 -13
- package/Server/Middleware/MasterAdminAuthorization.ts +11 -6
- 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} +7 -4
- package/Server/Services/{TelemetryEntityService.ts → InventoryItemService.ts} +203 -21
- 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/API/Utils.ts +44 -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/Types/Workflow/TriggerCode.ts +12 -0
- package/Server/Types/Workflow/Workflow.ts +5 -0
- 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 +689 -0
- package/Server/Utils/Telemetry/TelemetryEntity.ts +160 -52
- package/Server/Utils/VM/VMAPI.ts +56 -8
- 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/MonitorCriteriaAttributeFilter.test.tsx +574 -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/API/UserProjectsAPI.test.ts +478 -4
- 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/InventoryItemManualCreate.test.ts +248 -0
- 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/ApiComponentHeaders.test.ts +192 -0
- 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/AnalyticsDatabase/QuerySettingsHelper.test.ts +152 -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 +322 -0
- package/Tests/Server/Utils/Telemetry/TelemetryEntity.test.ts +356 -39
- package/Tests/Server/Utils/VM/VMAPISubstitution.test.ts +243 -0
- 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/SerializableObjectDictionaryImportCycle.test.ts +197 -0
- package/Tests/Types/Telemetry/EntityTypeGroups.test.ts +140 -0
- 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/StepTrace.test.ts +235 -0
- package/Tests/Types/Workflow/TemplateSyntax.test.ts +491 -0
- package/Tests/Types/Workflow/Templates.test.ts +1218 -0
- package/Tests/UI/Components/ActiveFilterChipsOpenRoute.test.tsx +82 -0
- package/Tests/UI/Components/ComponentsModal.test.tsx +564 -7
- package/Tests/UI/Components/CustomTimeRangeModal.test.tsx +459 -0
- package/Tests/UI/Components/DictionaryAttributeFilterRow.test.tsx +477 -0
- package/Tests/UI/Components/Forms/AnchoredFieldPopupKeyboard.test.tsx +382 -0
- package/Tests/UI/Components/Forms/ColorPickerPicking.test.tsx +569 -0
- package/Tests/UI/Components/Forms/ValidationJSON.test.ts +241 -0
- package/Tests/UI/Components/KeyboardShortcut.test.tsx +95 -0
- package/Tests/UI/Components/LogDetailsPanelCrossSignal.test.tsx +448 -0
- package/Tests/UI/Components/LogTimeRangePicker.test.tsx +42 -0
- package/Tests/UI/Components/LogsTableCrossLinks.test.tsx +263 -0
- package/Tests/UI/Components/ModalPortalDismissal.test.tsx +90 -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/TelemetryTimeRangePicker.test.tsx +49 -7
- package/Tests/UI/Components/TimeRangePickerDropdown.test.tsx +325 -0
- package/Tests/UI/Components/Workflow/GraphLint.test.ts +893 -0
- package/Tests/UI/Components/Workflow/GraphLintSummary.test.ts +755 -0
- package/Tests/UI/Components/Workflow/ModelColumnEditor.test.ts +522 -0
- package/Tests/UI/Components/Workflow/ModelColumnEditorServerContract.test.ts +193 -0
- package/Tests/UI/Components/Workflow/ModelSchema.test.ts +388 -0
- package/Tests/UI/Components/Workflow/RunStatusWatcher.test.ts +210 -0
- 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/Utils.test.ts +192 -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/Monitor/MonitorStepCriteriaView.test.tsx +432 -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/NetworkDeviceRoleUtil.test.ts +514 -0
- package/Tests/Utils/Monitor/NetworkTopologyUtil.test.ts +727 -0
- package/Tests/Utils/Schema/AnalyticsModelSchema.test.ts +469 -0
- package/Tests/Utils/Schema/ModelSchema.test.ts +268 -0
- package/Tests/Utils/Telemetry/CrossSignalScope.test.ts +698 -0
- package/Tests/Utils/Telemetry/EntityKeyNonTelemetry.test.ts +193 -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 +80 -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/SerializableObjectDictionary.ts +133 -39
- package/Types/Telemetry/EntityRelationshipType.ts +1 -1
- package/Types/Telemetry/EntitySource.ts +40 -0
- package/Types/Telemetry/EntityType.ts +28 -1
- package/Types/Telemetry/EntityTypeGroups.ts +65 -0
- package/Types/Workflow/Component.ts +29 -0
- package/Types/Workflow/Components/API.ts +35 -0
- package/Types/Workflow/Components/BaseModel.ts +77 -27
- 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/StepTrace.ts +181 -0
- package/Types/Workflow/TemplateSyntax.ts +543 -0
- package/Types/Workflow/Templates.ts +2368 -0
- 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/Date/CustomTimeRangeModal.tsx +278 -0
- package/UI/Components/Date/TimeRangePickerDropdown.tsx +250 -0
- package/UI/Components/Dictionary/Dictionary.tsx +71 -15
- package/UI/Components/FormModal/BasicFormModal.tsx +2 -1
- package/UI/Components/Forms/Fields/ColorPicker.tsx +66 -10
- package/UI/Components/Forms/Fields/IconPicker.tsx +48 -10
- package/UI/Components/Forms/Types/Field.ts +7 -0
- package/UI/Components/Forms/Validation.ts +63 -1
- package/UI/Components/Header/HeaderIconDropdownButton.tsx +53 -3
- package/UI/Components/Input/Input.tsx +32 -3
- 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/LogTimeRangePicker.tsx +11 -216
- 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/Modal/Modal.tsx +37 -4
- 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/TelemetryViewer/components/TelemetryTimeRangePicker.tsx +11 -210
- package/UI/Components/Workflow/ArgumentsForm.tsx +341 -8
- package/UI/Components/Workflow/Component.tsx +28 -26
- package/UI/Components/Workflow/ComponentReturnValueViewer.tsx +26 -0
- package/UI/Components/Workflow/ComponentSettingsModal.tsx +79 -9
- 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 +628 -0
- package/UI/Components/Workflow/GraphLintSummary.ts +390 -0
- package/UI/Components/Workflow/ModelColumnEditor.tsx +528 -0
- package/UI/Components/Workflow/ModelSchema.ts +278 -0
- package/UI/Components/Workflow/RunForm.tsx +41 -7
- package/UI/Components/Workflow/RunStatusWatcher.ts +122 -0
- package/UI/Components/Workflow/StepTraceViewer.tsx +186 -0
- package/UI/Components/Workflow/UseRunWatch.ts +212 -0
- package/UI/Components/Workflow/Utils.ts +93 -1
- package/UI/Components/Workflow/VariableModal.tsx +6 -2
- package/UI/Components/Workflow/Workflow.tsx +126 -7
- 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/Types/LayeredDismissal.ts +31 -0
- package/UI/Types/UseAnchoredFieldPopup.ts +99 -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/NetworkDeviceRoleUtil.ts +533 -0
- package/Utils/Monitor/NetworkTopologyUtil.ts +917 -155
- package/Utils/Telemetry/CrossSignalScope.ts +502 -0
- package/Utils/Telemetry/EntityKey.ts +71 -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} +212 -29
- 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} +52 -25
- 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/WorkflowLog.js +39 -0
- package/build/dist/Models/DatabaseModels/WorkflowLog.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/API/UserAPI.js +16 -1
- package/build/dist/Server/API/UserAPI.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/1786551733814-MigrationName.js +20 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786551733814-MigrationName.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786559879134-AddWorkflowLogStepTrace.js +12 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786559879134-AddWorkflowLogStepTrace.js.map +1 -0
- 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 +24 -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/MasterAdminAuthorization.js +11 -6
- package/build/dist/Server/Middleware/MasterAdminAuthorization.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} +9 -6
- package/build/dist/Server/Services/InventoryItemRelationshipService.js.map +1 -0
- package/build/dist/Server/Services/{TelemetryEntityService.js → InventoryItemService.js} +158 -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/API/Utils.js +28 -0
- package/build/dist/Server/Types/Workflow/Components/API/Utils.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/Types/Workflow/TriggerCode.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 +507 -0
- package/build/dist/Server/Utils/Telemetry/InventoryEntityRegistry.js.map +1 -0
- 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/VM/VMAPI.js +51 -4
- package/build/dist/Server/Utils/VM/VMAPI.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/SerializableObjectDictionary.js +133 -39
- package/build/dist/Types/SerializableObjectDictionary.js.map +1 -1
- package/build/dist/Types/Telemetry/EntityRelationshipType.js +1 -1
- package/build/dist/Types/Telemetry/EntitySource.js +39 -0
- package/build/dist/Types/Telemetry/EntitySource.js.map +1 -0
- package/build/dist/Types/Telemetry/EntityType.js +28 -1
- package/build/dist/Types/Telemetry/EntityType.js.map +1 -1
- package/build/dist/Types/Telemetry/EntityTypeGroups.js +57 -0
- package/build/dist/Types/Telemetry/EntityTypeGroups.js.map +1 -0
- package/build/dist/Types/Workflow/Component.js +21 -0
- package/build/dist/Types/Workflow/Component.js.map +1 -1
- package/build/dist/Types/Workflow/Components/API.js +35 -0
- package/build/dist/Types/Workflow/Components/API.js.map +1 -1
- package/build/dist/Types/Workflow/Components/BaseModel.js +68 -26
- 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/StepTrace.js +104 -0
- package/build/dist/Types/Workflow/StepTrace.js.map +1 -0
- package/build/dist/Types/Workflow/TemplateSyntax.js +338 -0
- package/build/dist/Types/Workflow/TemplateSyntax.js.map +1 -0
- package/build/dist/Types/Workflow/Templates.js +2111 -0
- package/build/dist/Types/Workflow/Templates.js.map +1 -0
- 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/Date/CustomTimeRangeModal.js +126 -0
- package/build/dist/UI/Components/Date/CustomTimeRangeModal.js.map +1 -0
- package/build/dist/UI/Components/Date/TimeRangePickerDropdown.js +123 -0
- package/build/dist/UI/Components/Date/TimeRangePickerDropdown.js.map +1 -0
- package/build/dist/UI/Components/Dictionary/Dictionary.js +47 -17
- 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/Forms/Fields/ColorPicker.js +52 -13
- package/build/dist/UI/Components/Forms/Fields/ColorPicker.js.map +1 -1
- package/build/dist/UI/Components/Forms/Fields/IconPicker.js +28 -12
- package/build/dist/UI/Components/Forms/Fields/IconPicker.js.map +1 -1
- package/build/dist/UI/Components/Forms/Validation.js +44 -0
- package/build/dist/UI/Components/Forms/Validation.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 +13 -4
- 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/LogTimeRangePicker.js +5 -108
- package/build/dist/UI/Components/LogsViewer/components/LogTimeRangePicker.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/Modal/Modal.js +31 -5
- package/build/dist/UI/Components/Modal/Modal.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/TelemetryViewer/components/TelemetryTimeRangePicker.js +5 -105
- package/build/dist/UI/Components/TelemetryViewer/components/TelemetryTimeRangePicker.js.map +1 -1
- package/build/dist/UI/Components/Workflow/ArgumentsForm.js +261 -14
- package/build/dist/UI/Components/Workflow/ArgumentsForm.js.map +1 -1
- package/build/dist/UI/Components/Workflow/Component.js +20 -19
- package/build/dist/UI/Components/Workflow/Component.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 +35 -7
- 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 +425 -0
- package/build/dist/UI/Components/Workflow/GraphLint.js.map +1 -0
- 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 +320 -0
- package/build/dist/UI/Components/Workflow/ModelColumnEditor.js.map +1 -0
- package/build/dist/UI/Components/Workflow/ModelSchema.js +156 -0
- package/build/dist/UI/Components/Workflow/ModelSchema.js.map +1 -0
- package/build/dist/UI/Components/Workflow/RunForm.js +22 -6
- package/build/dist/UI/Components/Workflow/RunForm.js.map +1 -1
- package/build/dist/UI/Components/Workflow/RunStatusWatcher.js +76 -0
- package/build/dist/UI/Components/Workflow/RunStatusWatcher.js.map +1 -0
- package/build/dist/UI/Components/Workflow/StepTraceViewer.js +76 -0
- package/build/dist/UI/Components/Workflow/StepTraceViewer.js.map +1 -0
- 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/Utils.js +73 -1
- package/build/dist/UI/Components/Workflow/Utils.js.map +1 -1
- 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 +92 -7
- 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/Types/LayeredDismissal.js +21 -0
- package/build/dist/UI/Types/LayeredDismissal.js.map +1 -0
- package/build/dist/UI/Types/UseAnchoredFieldPopup.js +74 -1
- package/build/dist/UI/Types/UseAnchoredFieldPopup.js.map +1 -1
- 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/NetworkDeviceRoleUtil.js +386 -0
- package/build/dist/Utils/Monitor/NetworkDeviceRoleUtil.js.map +1 -0
- package/build/dist/Utils/Monitor/NetworkTopologyUtil.js +661 -126
- 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 +57 -5
- package/build/dist/Utils/Telemetry/EntityKey.js.map +1 -1
- 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,10 +10,14 @@ var __metadata = (this && this.__metadata) || function (k, v) {
|
|
|
10
10
|
import DatabaseService from "./DatabaseService";
|
|
11
11
|
import IncidentService from "./IncidentService";
|
|
12
12
|
import OnCallDutyPolicyExecutionLogTimelineService from "./OnCallDutyPolicyExecutionLogTimelineService";
|
|
13
|
-
import
|
|
13
|
+
import OnCallNotificationAlertingService from "./OnCallNotificationAlertingService";
|
|
14
|
+
import ProjectService from "./ProjectService";
|
|
15
|
+
import UserService from "./UserService";
|
|
16
|
+
import UserNotificationRuleService, { FallbackNotificationOutcome, } from "./UserNotificationRuleService";
|
|
14
17
|
import { LIMIT_PER_PROJECT } from "../../Types/Database/LimitMax";
|
|
15
18
|
import BadDataException from "../../Types/Exception/BadDataException";
|
|
16
19
|
import NotificationRuleType from "../../Types/NotificationRule/NotificationRuleType";
|
|
20
|
+
import QueryHelper from "../Types/Database/QueryHelper";
|
|
17
21
|
import CaptureSpan from "../Utils/Telemetry/CaptureSpan";
|
|
18
22
|
import OnCallDutyExecutionLogTimelineStatus from "../../Types/OnCallDutyPolicy/OnCalDutyExecutionLogTimelineStatus";
|
|
19
23
|
import PositiveNumber from "../../Types/PositiveNumber";
|
|
@@ -26,6 +30,50 @@ import AlertEpisodeService from "./AlertEpisodeService";
|
|
|
26
30
|
import IncidentEpisodeService from "./IncidentEpisodeService";
|
|
27
31
|
import OneUptimeDate from "../../Types/Date";
|
|
28
32
|
import logger from "../Utils/Logger";
|
|
33
|
+
/*
|
|
34
|
+
* The status message the zero-rule dead-end wrote before the fallback existed,
|
|
35
|
+
* kept verbatim. A project that sets `disableOnCallNotificationFallback` is
|
|
36
|
+
* asking for precisely the old behaviour, so it must still receive precisely
|
|
37
|
+
* the old words - operators grep their execution logs for this sentence, and a
|
|
38
|
+
* characterisation test pins it character for character.
|
|
39
|
+
*/
|
|
40
|
+
export const NO_NOTIFICATION_RULES_STATUS_MESSAGE = "No notification rules found for this user. User should add the rules in User Settings > On-Call Rules.";
|
|
41
|
+
/*
|
|
42
|
+
* "This row is not an opt-out row" - the predicate that EVERY query which
|
|
43
|
+
* counts notification rules or picks one to execute has to carry.
|
|
44
|
+
*
|
|
45
|
+
* An opt-out row is a UserNotificationRule that exists in order to send
|
|
46
|
+
* nothing. It carries exactly the columns those queries filter on - userId,
|
|
47
|
+
* projectId, ruleType and the severity - and holds no notification method at
|
|
48
|
+
* all. Without this predicate it is therefore indistinguishable from a real
|
|
49
|
+
* rule, and the damage is not a missing filter, it is a silent lie:
|
|
50
|
+
*
|
|
51
|
+
* - the count comes back 1, so the zero-rule branch is never entered. Both
|
|
52
|
+
* the opt-out handling and the whole fallback below become unreachable
|
|
53
|
+
* code - the opt-out feature would be dead the day it shipped;
|
|
54
|
+
* - the immediate-rule lookup then SELECTS the opt-out row and "executes"
|
|
55
|
+
* it. There is no method on it, so nothing is sent - and yet the
|
|
56
|
+
* escalation timeline is stamped Notification Sent / "Alert Sent",
|
|
57
|
+
* because that write happens unconditionally after the loop. The
|
|
58
|
+
* responder is never paged and the log tells the person reading it
|
|
59
|
+
* afterwards that they were.
|
|
60
|
+
*
|
|
61
|
+
* The predicate has to mean "not true", NULL included. `isOptOut` is NULLABLE
|
|
62
|
+
* and was added long after these rows started existing, so it is NULL on every
|
|
63
|
+
* rule written before the column and stays NULL on any row created through a
|
|
64
|
+
* path that does not mention it. A plain `isOptOut: false` compares NULL =
|
|
65
|
+
* false, which evaluates to NULL rather than true, so it would exclude every
|
|
66
|
+
* pre-existing rule in every existing install - it would not merely fail to
|
|
67
|
+
* fix this, it would stop all paging. QueryHelper.notInOrNull emits
|
|
68
|
+
* `(col NOT IN ($1) OR col IS NULL)`, which is the NULL-safe not-equals; it is
|
|
69
|
+
* the same helper Probe:UpdateConnectionStatus uses for exactly this reason
|
|
70
|
+
* (its tests pin the choice of notInOrNull over notEquals on that grounds).
|
|
71
|
+
* QueryHelper takes its values as strings and Postgres resolves the bound
|
|
72
|
+
* literal against the column's own boolean type.
|
|
73
|
+
*/
|
|
74
|
+
export const notOptOutRuleQuery = () => {
|
|
75
|
+
return QueryHelper.notInOrNull(["true"]);
|
|
76
|
+
};
|
|
29
77
|
export class Service extends DatabaseService {
|
|
30
78
|
constructor() {
|
|
31
79
|
super(Model);
|
|
@@ -34,27 +82,48 @@ export class Service extends DatabaseService {
|
|
|
34
82
|
}
|
|
35
83
|
}
|
|
36
84
|
/**
|
|
37
|
-
* Atomically claim the right to execute ONE notification rule for this
|
|
38
|
-
* log.
|
|
39
|
-
*
|
|
40
|
-
*
|
|
41
|
-
* given delayed rule's key, both write it, and both send — double-paging the
|
|
42
|
-
* responder for a single escalation (audit F7). This mirrors
|
|
43
|
-
* OnCallDutyPolicyExecutionLogService.claimEscalationAdvance: a single
|
|
44
|
-
* conditional UPDATE that sets executedNotificationRules[ruleId] only when the
|
|
45
|
-
* key is absent and RETURNs the affected row, so exactly one concurrent run
|
|
46
|
-
* wins and the loser skips.
|
|
47
|
-
*
|
|
48
|
-
* Fail-safe: if the atomic statement errors for any reason, fall back to the
|
|
49
|
-
* previous non-atomic read-modify-write so the rule is still marked and sent.
|
|
50
|
-
* For an on-call system a rare duplicate page (the pre-fix behavior) is far
|
|
51
|
-
* better than a missed page, so this never makes paging less reliable.
|
|
85
|
+
* Atomically claim the right to execute ONE notification rule for this
|
|
86
|
+
* on-call log. Rules are claimed under their own id; see
|
|
87
|
+
* claimNotificationExecution below for what the claim actually guarantees and
|
|
88
|
+
* why it is keyed by a string.
|
|
52
89
|
*
|
|
53
90
|
* Returns true when THIS call claimed the rule (caller should send), false when
|
|
54
91
|
* it was already executed/claimed (caller should skip) or the log is missing.
|
|
55
92
|
*/
|
|
56
93
|
async claimNotificationRuleExecution(data) {
|
|
57
|
-
|
|
94
|
+
return await this.claimNotificationExecution({
|
|
95
|
+
userOnCallLogId: data.userOnCallLogId,
|
|
96
|
+
claimKey: data.userNotificationRuleId.toString(),
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Atomically claim ONE delivery attempt against this on-call log, keyed by an
|
|
101
|
+
* arbitrary string. Overlapping UserOnCallLog:ExecutePendingExecutions runs (a
|
|
102
|
+
* tick that exceeds the 1-minute cadence, a stalled-job re-delivery, or a
|
|
103
|
+
* burst release across worker replicas) could both read
|
|
104
|
+
* executedNotificationRules without a given key, both write it, and both send
|
|
105
|
+
* — double-paging the responder for a single escalation (audit F7). This
|
|
106
|
+
* mirrors OnCallDutyPolicyExecutionLogService.claimEscalationAdvance: a single
|
|
107
|
+
* conditional UPDATE that sets executedNotificationRules[key] only when the
|
|
108
|
+
* key is absent and RETURNs the affected row, so exactly one concurrent run
|
|
109
|
+
* wins and the loser skips.
|
|
110
|
+
*
|
|
111
|
+
* The key is a string rather than a rule id because not every delivery attempt
|
|
112
|
+
* has a rule behind it. The verified-method fallback runs precisely BECAUSE no
|
|
113
|
+
* rule matched, so it has nothing to claim under and instead claims a reserved
|
|
114
|
+
* literal ("__fallback__"). executedNotificationRules is a jsonb map keyed by
|
|
115
|
+
* arbitrary text, so a reserved literal sits happily beside real rule uuids and
|
|
116
|
+
* can never collide with one. Keeping a single claim implementation means the
|
|
117
|
+
* fallback inherits this atomicity, its fail-safe and its audited SQL exactly,
|
|
118
|
+
* rather than growing a second, subtly different guard.
|
|
119
|
+
*
|
|
120
|
+
* Fail-safe: if the atomic statement errors for any reason, fall back to the
|
|
121
|
+
* previous non-atomic read-modify-write so the attempt is still marked and
|
|
122
|
+
* sent. For an on-call system a rare duplicate page (the pre-fix behavior) is
|
|
123
|
+
* far better than a missed page, so this never makes paging less reliable.
|
|
124
|
+
*/
|
|
125
|
+
async claimNotificationExecution(data) {
|
|
126
|
+
const ruleKey = data.claimKey;
|
|
58
127
|
try {
|
|
59
128
|
const nowIso = OneUptimeDate.getCurrentDate().toISOString();
|
|
60
129
|
const rows = await this.getRepository().manager.query(`UPDATE "UserOnCallLog"
|
|
@@ -157,6 +226,7 @@ export class Service extends DatabaseService {
|
|
|
157
226
|
return onUpdate;
|
|
158
227
|
}
|
|
159
228
|
async onCreateSuccess(_onCreate, createdItem) {
|
|
229
|
+
var _a, _b, _c, _d;
|
|
160
230
|
// update this item to be processed.
|
|
161
231
|
await this.updateOneById({
|
|
162
232
|
id: createdItem.id,
|
|
@@ -180,6 +250,17 @@ export class Service extends DatabaseService {
|
|
|
180
250
|
},
|
|
181
251
|
select: {
|
|
182
252
|
incidentSeverityId: true,
|
|
253
|
+
/*
|
|
254
|
+
* The severity NAME is only ever read on the no-rule path, where every
|
|
255
|
+
* message the responder or the operator sees has to say which severity
|
|
256
|
+
* had no rule ("no rule configured for Sev4"). It rides along on this
|
|
257
|
+
* lookup rather than being fetched separately because the join is free
|
|
258
|
+
* next to a second round trip, and because the no-rule path is already
|
|
259
|
+
* the slow, unhappy one.
|
|
260
|
+
*/
|
|
261
|
+
incidentSeverity: {
|
|
262
|
+
name: true,
|
|
263
|
+
},
|
|
183
264
|
},
|
|
184
265
|
});
|
|
185
266
|
// Check if there are any rules .
|
|
@@ -189,6 +270,14 @@ export class Service extends DatabaseService {
|
|
|
189
270
|
projectId: createdItem.projectId,
|
|
190
271
|
ruleType: notificationRuleType,
|
|
191
272
|
incidentSeverityId: incident === null || incident === void 0 ? void 0 : incident.incidentSeverityId,
|
|
273
|
+
/*
|
|
274
|
+
* An opt-out row would otherwise be counted as a rule here, and a
|
|
275
|
+
* count of 1 sends this log down the "you have rules, execute them"
|
|
276
|
+
* path where the only thing it can find to execute is the opt-out
|
|
277
|
+
* row itself: nothing is sent and the timeline says Alert Sent. See
|
|
278
|
+
* notOptOutRuleQuery above for the full consequence.
|
|
279
|
+
*/
|
|
280
|
+
isOptOut: notOptOutRuleQuery(),
|
|
192
281
|
},
|
|
193
282
|
skip: 0,
|
|
194
283
|
limit: LIMIT_PER_PROJECT,
|
|
@@ -206,6 +295,9 @@ export class Service extends DatabaseService {
|
|
|
206
295
|
},
|
|
207
296
|
select: {
|
|
208
297
|
alertSeverityId: true,
|
|
298
|
+
alertSeverity: {
|
|
299
|
+
name: true,
|
|
300
|
+
},
|
|
209
301
|
},
|
|
210
302
|
});
|
|
211
303
|
ruleCount = await UserNotificationRuleService.countBy({
|
|
@@ -214,6 +306,8 @@ export class Service extends DatabaseService {
|
|
|
214
306
|
projectId: createdItem.projectId,
|
|
215
307
|
ruleType: notificationRuleType,
|
|
216
308
|
alertSeverityId: alert === null || alert === void 0 ? void 0 : alert.alertSeverityId,
|
|
309
|
+
// Opt-out rows are not rules. See notOptOutRuleQuery above.
|
|
310
|
+
isOptOut: notOptOutRuleQuery(),
|
|
217
311
|
},
|
|
218
312
|
skip: 0,
|
|
219
313
|
limit: LIMIT_PER_PROJECT,
|
|
@@ -231,6 +325,9 @@ export class Service extends DatabaseService {
|
|
|
231
325
|
},
|
|
232
326
|
select: {
|
|
233
327
|
alertSeverityId: true,
|
|
328
|
+
alertSeverity: {
|
|
329
|
+
name: true,
|
|
330
|
+
},
|
|
234
331
|
},
|
|
235
332
|
});
|
|
236
333
|
ruleCount = await UserNotificationRuleService.countBy({
|
|
@@ -239,6 +336,8 @@ export class Service extends DatabaseService {
|
|
|
239
336
|
projectId: createdItem.projectId,
|
|
240
337
|
ruleType: notificationRuleType,
|
|
241
338
|
alertSeverityId: alertEpisode === null || alertEpisode === void 0 ? void 0 : alertEpisode.alertSeverityId,
|
|
339
|
+
// Opt-out rows are not rules. See notOptOutRuleQuery above.
|
|
340
|
+
isOptOut: notOptOutRuleQuery(),
|
|
242
341
|
},
|
|
243
342
|
skip: 0,
|
|
244
343
|
limit: LIMIT_PER_PROJECT,
|
|
@@ -257,6 +356,9 @@ export class Service extends DatabaseService {
|
|
|
257
356
|
},
|
|
258
357
|
select: {
|
|
259
358
|
incidentSeverityId: true,
|
|
359
|
+
incidentSeverity: {
|
|
360
|
+
name: true,
|
|
361
|
+
},
|
|
260
362
|
},
|
|
261
363
|
});
|
|
262
364
|
ruleCount = await UserNotificationRuleService.countBy({
|
|
@@ -265,6 +367,8 @@ export class Service extends DatabaseService {
|
|
|
265
367
|
projectId: createdItem.projectId,
|
|
266
368
|
ruleType: notificationRuleType,
|
|
267
369
|
incidentSeverityId: incidentEpisode === null || incidentEpisode === void 0 ? void 0 : incidentEpisode.incidentSeverityId,
|
|
370
|
+
// Opt-out rows are not rules. See notOptOutRuleQuery above.
|
|
371
|
+
isOptOut: notOptOutRuleQuery(),
|
|
268
372
|
},
|
|
269
373
|
skip: 0,
|
|
270
374
|
limit: LIMIT_PER_PROJECT,
|
|
@@ -273,35 +377,15 @@ export class Service extends DatabaseService {
|
|
|
273
377
|
},
|
|
274
378
|
});
|
|
275
379
|
}
|
|
276
|
-
if (ruleCount.toNumber() === 0) {
|
|
277
|
-
// update this item to be processed.
|
|
278
|
-
await this.updateOneById({
|
|
279
|
-
id: createdItem.id,
|
|
280
|
-
data: {
|
|
281
|
-
status: UserNotificationExecutionStatus.Error, // now the worker will pick this up and complete this or mark this as failed.
|
|
282
|
-
statusMessage: "No notification rules found for this user. User should add the rules in User Settings > On-Call Rules.",
|
|
283
|
-
},
|
|
284
|
-
props: {
|
|
285
|
-
isRoot: true,
|
|
286
|
-
},
|
|
287
|
-
});
|
|
288
|
-
// update oncall timeline item as well.
|
|
289
|
-
await OnCallDutyPolicyExecutionLogTimelineService.updateOneById({
|
|
290
|
-
id: createdItem.onCallDutyPolicyExecutionLogTimelineId,
|
|
291
|
-
data: {
|
|
292
|
-
status: OnCallDutyExecutionLogTimelineStatus.Error,
|
|
293
|
-
statusMessage: "No notification rules found for this user. User should add the rules in User Settings > On-Call Rules.",
|
|
294
|
-
},
|
|
295
|
-
props: {
|
|
296
|
-
isRoot: true,
|
|
297
|
-
},
|
|
298
|
-
});
|
|
299
|
-
return createdItem;
|
|
300
|
-
}
|
|
301
380
|
/*
|
|
302
|
-
* find immediate notification rule and alert the user.
|
|
303
381
|
* Determine the alertSeverityId - can come from alert or alertEpisode
|
|
304
382
|
* Determine the incidentSeverityId - can come from incident or incidentEpisode
|
|
383
|
+
*
|
|
384
|
+
* Resolved here, above the zero-rule branch, because BOTH paths need the
|
|
385
|
+
* same answer: the immediate-rule lookup below queries on it, and the
|
|
386
|
+
* no-rule handling has to look for an opt-out row against exactly the same
|
|
387
|
+
* (ruleType x severity) cell the count just came up empty for. Resolving it
|
|
388
|
+
* twice would be an invitation for the two to drift apart.
|
|
305
389
|
*/
|
|
306
390
|
const alertSeverityIdForQuery = alert && alert.alertSeverityId
|
|
307
391
|
? alert.alertSeverityId
|
|
@@ -313,6 +397,29 @@ export class Service extends DatabaseService {
|
|
|
313
397
|
: incidentEpisode && incidentEpisode.incidentSeverityId
|
|
314
398
|
? incidentEpisode.incidentSeverityId
|
|
315
399
|
: undefined;
|
|
400
|
+
/*
|
|
401
|
+
* Purely for prose. Every no-rule message names the severity, and an
|
|
402
|
+
* operator reading "no rule configured for Sev4" learns something that "no
|
|
403
|
+
* rule configured for 8f2c-..." does not. A parent entity whose severity row
|
|
404
|
+
* was deleted, or a mocked read that never selected the relation, leaves
|
|
405
|
+
* this blank, so there is a neutral phrase to fall back on.
|
|
406
|
+
*/
|
|
407
|
+
const severityNameForMessage = ((_a = incident === null || incident === void 0 ? void 0 : incident.incidentSeverity) === null || _a === void 0 ? void 0 : _a.name) ||
|
|
408
|
+
((_b = incidentEpisode === null || incidentEpisode === void 0 ? void 0 : incidentEpisode.incidentSeverity) === null || _b === void 0 ? void 0 : _b.name) ||
|
|
409
|
+
((_c = alert === null || alert === void 0 ? void 0 : alert.alertSeverity) === null || _c === void 0 ? void 0 : _c.name) ||
|
|
410
|
+
((_d = alertEpisode === null || alertEpisode === void 0 ? void 0 : alertEpisode.alertSeverity) === null || _d === void 0 ? void 0 : _d.name) ||
|
|
411
|
+
"this severity";
|
|
412
|
+
if (ruleCount.toNumber() === 0) {
|
|
413
|
+
await this.handleNoMatchingNotificationRule({
|
|
414
|
+
createdItem: createdItem,
|
|
415
|
+
notificationRuleType: notificationRuleType,
|
|
416
|
+
incidentSeverityId: incidentSeverityIdForQuery,
|
|
417
|
+
alertSeverityId: alertSeverityIdForQuery,
|
|
418
|
+
severityName: severityNameForMessage,
|
|
419
|
+
});
|
|
420
|
+
return createdItem;
|
|
421
|
+
}
|
|
422
|
+
// find immediate notification rule and alert the user.
|
|
316
423
|
const immediateNotificationRule = await UserNotificationRuleService.findBy({
|
|
317
424
|
query: {
|
|
318
425
|
userId: createdItem.userId,
|
|
@@ -321,6 +428,14 @@ export class Service extends DatabaseService {
|
|
|
321
428
|
ruleType: notificationRuleType,
|
|
322
429
|
incidentSeverityId: incidentSeverityIdForQuery,
|
|
323
430
|
alertSeverityId: alertSeverityIdForQuery,
|
|
431
|
+
/*
|
|
432
|
+
* The predicate matters most here. An opt-out row has
|
|
433
|
+
* notifyAfterMinutes 0 like any immediate rule, so without it this
|
|
434
|
+
* lookup returns the row that exists to send nothing, hands it to
|
|
435
|
+
* executeNotificationRuleItem, and the unconditional "Alert Sent"
|
|
436
|
+
* write below then reports a page that was never dispatched.
|
|
437
|
+
*/
|
|
438
|
+
isOptOut: notOptOutRuleQuery(),
|
|
324
439
|
},
|
|
325
440
|
select: {
|
|
326
441
|
_id: true,
|
|
@@ -371,6 +486,330 @@ export class Service extends DatabaseService {
|
|
|
371
486
|
});
|
|
372
487
|
return createdItem;
|
|
373
488
|
}
|
|
489
|
+
/**
|
|
490
|
+
* Nothing matched (ruleType x severity) for this responder.
|
|
491
|
+
*
|
|
492
|
+
* That state used to be treated as a single thing - "misconfigured" - and
|
|
493
|
+
* written off with an Error row nobody reads while the escalation timer ran
|
|
494
|
+
* down as though the responder had simply declined to acknowledge. It is
|
|
495
|
+
* actually three different situations wearing the same clothes, and telling
|
|
496
|
+
* them apart is the whole of Phase 1:
|
|
497
|
+
*
|
|
498
|
+
* 1. The responder said, out loud, "do not page me for this". That is an
|
|
499
|
+
* opt-out row: same ruleType, same severity, isOptOut true, no method.
|
|
500
|
+
* It is checked FIRST, before the project setting and before any
|
|
501
|
+
* delivery, and it ends the execution successfully - deliberate silence
|
|
502
|
+
* is not a failure.
|
|
503
|
+
* 2. The project asked for the old behaviour wholesale, via
|
|
504
|
+
* disableOnCallNotificationFallback. It gets the old behaviour exactly:
|
|
505
|
+
* the same status, the same terminal Error, the same sentence.
|
|
506
|
+
* 3. Everything else - overwhelmingly a severity created after the
|
|
507
|
+
* responder joined, or an episode rule type they never opened the page
|
|
508
|
+
* for. Somebody is expecting this page to arrive, so it is delivered on
|
|
509
|
+
* whatever verified method the responder does have.
|
|
510
|
+
*
|
|
511
|
+
* Note what "notified" can and cannot mean here. Every send downstream is
|
|
512
|
+
* fire-and-forget with a .catch that flips its own timeline row, so nothing
|
|
513
|
+
* on this path can observe whether a phone actually rang. `notified` means "a
|
|
514
|
+
* delivery was dispatched on at least one channel", and the per-channel
|
|
515
|
+
* timeline rows remain the record of what happened after that.
|
|
516
|
+
*
|
|
517
|
+
* Case 3 then splits again on WHY a fallback did not deliver, because the
|
|
518
|
+
* status this method writes is the difference between a log that is finished
|
|
519
|
+
* and a log that is merely unlucky - see the branch below. And every case 3
|
|
520
|
+
* ending, delivered or not, is reported to the humans who can fix the
|
|
521
|
+
* configuration through OnCallNotificationAlertingService; cases 1 and 2
|
|
522
|
+
* return before that, because neither is a surprise to anybody.
|
|
523
|
+
*/
|
|
524
|
+
async handleNoMatchingNotificationRule(data) {
|
|
525
|
+
var _a;
|
|
526
|
+
const createdItem = data.createdItem;
|
|
527
|
+
const optOutRule = await UserNotificationRuleService.findOneBy({
|
|
528
|
+
query: {
|
|
529
|
+
userId: createdItem.userId,
|
|
530
|
+
projectId: createdItem.projectId,
|
|
531
|
+
ruleType: data.notificationRuleType,
|
|
532
|
+
incidentSeverityId: data.incidentSeverityId,
|
|
533
|
+
alertSeverityId: data.alertSeverityId,
|
|
534
|
+
isOptOut: true,
|
|
535
|
+
},
|
|
536
|
+
select: {
|
|
537
|
+
_id: true,
|
|
538
|
+
},
|
|
539
|
+
props: {
|
|
540
|
+
isRoot: true,
|
|
541
|
+
},
|
|
542
|
+
});
|
|
543
|
+
if (optOutRule) {
|
|
544
|
+
const optOutMessage = `You have opted out of notifications for ${data.severityName} ${this.getRuleTypeLabelForMessage(data.notificationRuleType)}.`;
|
|
545
|
+
/*
|
|
546
|
+
* Completed, not Error: the system did exactly what it was told to do.
|
|
547
|
+
* The timeline says Skipped rather than Notification Sent because nothing
|
|
548
|
+
* was in fact sent, and an operator scanning the escalation needs to see
|
|
549
|
+
* the difference between "muted on purpose" and "delivered".
|
|
550
|
+
*/
|
|
551
|
+
await this.writeNoRuleOutcome({
|
|
552
|
+
createdItem: createdItem,
|
|
553
|
+
status: UserNotificationExecutionStatus.Completed,
|
|
554
|
+
timelineStatus: OnCallDutyExecutionLogTimelineStatus.Skipped,
|
|
555
|
+
statusMessage: optOutMessage,
|
|
556
|
+
});
|
|
557
|
+
return;
|
|
558
|
+
}
|
|
559
|
+
const project = await ProjectService.findOneById({
|
|
560
|
+
id: createdItem.projectId,
|
|
561
|
+
select: {
|
|
562
|
+
disableOnCallNotificationFallback: true,
|
|
563
|
+
},
|
|
564
|
+
props: {
|
|
565
|
+
isRoot: true,
|
|
566
|
+
},
|
|
567
|
+
});
|
|
568
|
+
if (project === null || project === void 0 ? void 0 : project.disableOnCallNotificationFallback) {
|
|
569
|
+
await this.writeNoRuleOutcome({
|
|
570
|
+
createdItem: createdItem,
|
|
571
|
+
status: UserNotificationExecutionStatus.Error,
|
|
572
|
+
timelineStatus: OnCallDutyExecutionLogTimelineStatus.Error,
|
|
573
|
+
statusMessage: NO_NOTIFICATION_RULES_STATUS_MESSAGE,
|
|
574
|
+
});
|
|
575
|
+
/*
|
|
576
|
+
* Alert the humans BEFORE returning. A project that has turned the
|
|
577
|
+
* fallback off is not a project with nothing to report - it is the one
|
|
578
|
+
* population still losing pages exactly the way they were lost before any
|
|
579
|
+
* of this existed, because it has explicitly opted back into the old
|
|
580
|
+
* dead-end. Returning early here would have made the owner notification
|
|
581
|
+
* reach every project except the one that needs it most.
|
|
582
|
+
*/
|
|
583
|
+
this.alertOfUndeliverablePage({
|
|
584
|
+
createdItem: createdItem,
|
|
585
|
+
notificationRuleType: data.notificationRuleType,
|
|
586
|
+
severityName: data.severityName,
|
|
587
|
+
fallbackChannelsUsed: [],
|
|
588
|
+
});
|
|
589
|
+
return;
|
|
590
|
+
}
|
|
591
|
+
let fallbackResult = null;
|
|
592
|
+
let fallbackThrew = false;
|
|
593
|
+
try {
|
|
594
|
+
fallbackResult =
|
|
595
|
+
await UserNotificationRuleService.executeFallbackNotification({
|
|
596
|
+
userId: createdItem.userId,
|
|
597
|
+
projectId: createdItem.projectId,
|
|
598
|
+
userOnCallLogId: createdItem.id,
|
|
599
|
+
ruleType: data.notificationRuleType,
|
|
600
|
+
severityName: data.severityName,
|
|
601
|
+
userNotificationLogId: createdItem.id,
|
|
602
|
+
triggeredByIncidentId: createdItem.triggeredByIncidentId,
|
|
603
|
+
triggeredByAlertId: createdItem.triggeredByAlertId,
|
|
604
|
+
triggeredByAlertEpisodeId: createdItem.triggeredByAlertEpisodeId,
|
|
605
|
+
triggeredByIncidentEpisodeId: createdItem.triggeredByIncidentEpisodeId,
|
|
606
|
+
userNotificationEventType: createdItem.userNotificationEventType,
|
|
607
|
+
onCallPolicyExecutionLogId: createdItem.onCallDutyPolicyExecutionLogId,
|
|
608
|
+
onCallPolicyId: createdItem.onCallDutyPolicyId,
|
|
609
|
+
onCallPolicyEscalationRuleId: createdItem.onCallDutyPolicyEscalationRuleId,
|
|
610
|
+
userBelongsToTeamId: createdItem.userBelongsToTeamId,
|
|
611
|
+
onCallDutyPolicyExecutionLogTimelineId: createdItem.onCallDutyPolicyExecutionLogTimelineId,
|
|
612
|
+
onCallScheduleId: createdItem.onCallDutyScheduleId,
|
|
613
|
+
});
|
|
614
|
+
}
|
|
615
|
+
catch (err) {
|
|
616
|
+
/*
|
|
617
|
+
* The caller is part-way through paging an entire escalation level. A
|
|
618
|
+
* throw out of here would abort the responders queued behind this one, so
|
|
619
|
+
* a fallback that fails is recorded against THIS log and no further.
|
|
620
|
+
*/
|
|
621
|
+
fallbackThrew = true;
|
|
622
|
+
logger.error(`On-call notification fallback failed for UserOnCallLog ${(_a = createdItem.id) === null || _a === void 0 ? void 0 : _a.toString()}`);
|
|
623
|
+
logger.error(err);
|
|
624
|
+
}
|
|
625
|
+
if (fallbackResult && fallbackResult.notified) {
|
|
626
|
+
const notifiedMessage = `No notification rule configured for ${data.severityName}; notified via fallback (${fallbackResult.channelsUsed.join(", ")}).`;
|
|
627
|
+
/*
|
|
628
|
+
* Executing, matching the normal path: there are no further rules to fire,
|
|
629
|
+
* so UserOnCallLog:ExecutePendingExecutions will find an empty rule list on
|
|
630
|
+
* its next tick and close the log out as Completed.
|
|
631
|
+
*/
|
|
632
|
+
await this.writeNoRuleOutcome({
|
|
633
|
+
createdItem: createdItem,
|
|
634
|
+
status: UserNotificationExecutionStatus.Executing,
|
|
635
|
+
timelineStatus: OnCallDutyExecutionLogTimelineStatus.NotificationSent,
|
|
636
|
+
statusMessage: notifiedMessage,
|
|
637
|
+
});
|
|
638
|
+
}
|
|
639
|
+
else {
|
|
640
|
+
const responderLabel = await this.getResponderLabelForMessage(createdItem.userId);
|
|
641
|
+
/*
|
|
642
|
+
* Nothing was delivered, and every reason for that ends the same way:
|
|
643
|
+
* terminally, saying so.
|
|
644
|
+
*
|
|
645
|
+
* The tempting alternative is to treat a raised delivery attempt as
|
|
646
|
+
* transient and leave the log Executing for a retry, mirroring
|
|
647
|
+
* App/FeatureSet/Workers/Jobs/UserOnCallLog/ExecutePendingExecutions,
|
|
648
|
+
* which deliberately marks Error only for permanent bad-data failures.
|
|
649
|
+
* That analogy does not hold here, and following it produces a worse bug
|
|
650
|
+
* than the one it avoids.
|
|
651
|
+
*
|
|
652
|
+
* ExecutePendingExecutions re-enters ITSELF: it selects logs in Executing
|
|
653
|
+
* every minute and re-fires their still-due rules, so a log left live
|
|
654
|
+
* genuinely gets another attempt. This function does not. It is called
|
|
655
|
+
* from onCreateSuccess, once, at the moment the log row is written, and
|
|
656
|
+
* nothing re-enters it - so "leave it Executing for the next tick" buys
|
|
657
|
+
* no retry at all. What it actually buys is this: on the next tick
|
|
658
|
+
* ExecutePendingExecutions picks the log up, queries for due rules, finds
|
|
659
|
+
* none (there were none to begin with - that is why we are here), takes
|
|
660
|
+
* its all-executed path and marks the log Completed. onUpdateSuccess then
|
|
661
|
+
* translates Completed into NotificationSent on the escalation timeline,
|
|
662
|
+
* and within a minute the record reads "Alert Sent" for a page that was
|
|
663
|
+
* never delivered.
|
|
664
|
+
*
|
|
665
|
+
* That is precisely the silent lie the opt-out exclusion was fixed to
|
|
666
|
+
* remove, reintroduced through a different door. So both endings are
|
|
667
|
+
* terminal, and only the message differs: a responder with no verified
|
|
668
|
+
* method needs a different action than a delivery that blew up, and
|
|
669
|
+
* whoever reads the log deserves to be told which happened.
|
|
670
|
+
*/
|
|
671
|
+
const isPermanentlyUndeliverable = !fallbackThrew &&
|
|
672
|
+
fallbackResult !== null &&
|
|
673
|
+
fallbackResult.outcome ===
|
|
674
|
+
FallbackNotificationOutcome.NoUsableNotificationMethod;
|
|
675
|
+
await this.writeNoRuleOutcome({
|
|
676
|
+
createdItem: createdItem,
|
|
677
|
+
status: UserNotificationExecutionStatus.Error,
|
|
678
|
+
timelineStatus: OnCallDutyExecutionLogTimelineStatus.Error,
|
|
679
|
+
statusMessage: isPermanentlyUndeliverable
|
|
680
|
+
? `${responderLabel} has no verified notification method, so this page could not be delivered. Ask them to add one in User Settings > Notification Methods.`
|
|
681
|
+
: `${responderLabel} has no notification rule for ${data.severityName} and the fallback delivery attempt failed, so this page was not delivered. Check the worker logs, then add a rule in User Settings > On-Call Rules.`,
|
|
682
|
+
});
|
|
683
|
+
}
|
|
684
|
+
/*
|
|
685
|
+
* Section 5: tell the humans who can fix this. The policy's owners own the
|
|
686
|
+
* configuration that is wrong; the responder owns the rules that are
|
|
687
|
+
* missing. Neither of them is reading execution logs.
|
|
688
|
+
*
|
|
689
|
+
* One call site rather than one per branch, because every path that reaches
|
|
690
|
+
* here is worth reporting and the difference between them is already
|
|
691
|
+
* carried by fallbackChannelsUsed: a non-empty list means "your
|
|
692
|
+
* configuration is wrong but nobody was dropped", an empty one means this
|
|
693
|
+
* responder was not reached at all - which is equally true of the
|
|
694
|
+
* no-verified-method ending and of the attempt that raised. The service
|
|
695
|
+
* throttles per (project, user, ruleType) per 24h, so a page storm down this
|
|
696
|
+
* branch cannot become a mail storm.
|
|
697
|
+
*
|
|
698
|
+
* Fire-and-forget with a .catch, exactly as
|
|
699
|
+
* startUserNotificationRulesExecution treats its workspace rules:
|
|
700
|
+
* notifyOfUndeliverablePage already swallows its own failures, and the
|
|
701
|
+
* .catch is the guarantee that even a bug in the explanation can never
|
|
702
|
+
* propagate into - or delay - the paging path that called it.
|
|
703
|
+
*/
|
|
704
|
+
this.alertOfUndeliverablePage({
|
|
705
|
+
createdItem: createdItem,
|
|
706
|
+
notificationRuleType: data.notificationRuleType,
|
|
707
|
+
severityName: data.severityName,
|
|
708
|
+
fallbackChannelsUsed: fallbackResult ? fallbackResult.channelsUsed : [],
|
|
709
|
+
});
|
|
710
|
+
}
|
|
711
|
+
/*
|
|
712
|
+
* Fire-and-forget, exactly as startUserNotificationRulesExecution treats its
|
|
713
|
+
* workspace rules: notifyOfUndeliverablePage already swallows its own
|
|
714
|
+
* failures, and the .catch is the guarantee that even a bug in the
|
|
715
|
+
* explanation can never propagate into - or delay - the paging path that
|
|
716
|
+
* called it. Extracted to a helper because there are two callers now, and a
|
|
717
|
+
* second inline copy is how one of them ends up silently drifting from the
|
|
718
|
+
* other.
|
|
719
|
+
*/
|
|
720
|
+
alertOfUndeliverablePage(data) {
|
|
721
|
+
OnCallNotificationAlertingService.notifyOfUndeliverablePage({
|
|
722
|
+
projectId: data.createdItem.projectId,
|
|
723
|
+
userId: data.createdItem.userId,
|
|
724
|
+
ruleType: data.notificationRuleType,
|
|
725
|
+
severityName: data.severityName,
|
|
726
|
+
onCallDutyPolicyId: data.createdItem.onCallDutyPolicyId,
|
|
727
|
+
fallbackChannelsUsed: data.fallbackChannelsUsed,
|
|
728
|
+
}).catch((err) => {
|
|
729
|
+
logger.error(err);
|
|
730
|
+
});
|
|
731
|
+
}
|
|
732
|
+
/*
|
|
733
|
+
* Both writes the no-rule path makes, in the order the pre-fallback code made
|
|
734
|
+
* them: the log first, then the on-call timeline. The log update's own
|
|
735
|
+
* onUpdateSuccess hook already maps the execution status onto the timeline, so
|
|
736
|
+
* the explicit second write is what lets this path say something the mapping
|
|
737
|
+
* cannot - Skipped for an opt-out, Notification Sent for a fallback that went
|
|
738
|
+
* out under an Executing log.
|
|
739
|
+
*/
|
|
740
|
+
async writeNoRuleOutcome(data) {
|
|
741
|
+
await this.updateOneById({
|
|
742
|
+
id: data.createdItem.id,
|
|
743
|
+
data: {
|
|
744
|
+
status: data.status,
|
|
745
|
+
statusMessage: data.statusMessage,
|
|
746
|
+
},
|
|
747
|
+
props: {
|
|
748
|
+
isRoot: true,
|
|
749
|
+
},
|
|
750
|
+
});
|
|
751
|
+
await OnCallDutyPolicyExecutionLogTimelineService.updateOneById({
|
|
752
|
+
id: data.createdItem.onCallDutyPolicyExecutionLogTimelineId,
|
|
753
|
+
data: {
|
|
754
|
+
status: data.timelineStatus,
|
|
755
|
+
statusMessage: data.statusMessage,
|
|
756
|
+
},
|
|
757
|
+
props: {
|
|
758
|
+
isRoot: true,
|
|
759
|
+
},
|
|
760
|
+
});
|
|
761
|
+
}
|
|
762
|
+
/*
|
|
763
|
+
* NotificationRuleType's values are whole sentences ("When incident on-call
|
|
764
|
+
* policy is executed"), which read badly mid-sentence. These are the noun
|
|
765
|
+
* forms for the messages this file writes. An unrecognised type falls back to
|
|
766
|
+
* the raw value rather than throwing - a status message is never worth losing
|
|
767
|
+
* a page over.
|
|
768
|
+
*/
|
|
769
|
+
getRuleTypeLabelForMessage(ruleType) {
|
|
770
|
+
switch (ruleType) {
|
|
771
|
+
case NotificationRuleType.ON_CALL_EXECUTED_INCIDENT:
|
|
772
|
+
return "incidents";
|
|
773
|
+
case NotificationRuleType.ON_CALL_EXECUTED_ALERT:
|
|
774
|
+
return "alerts";
|
|
775
|
+
case NotificationRuleType.ON_CALL_EXECUTED_INCIDENT_EPISODE:
|
|
776
|
+
return "incident episodes";
|
|
777
|
+
case NotificationRuleType.ON_CALL_EXECUTED_ALERT_EPISODE:
|
|
778
|
+
return "alert episodes";
|
|
779
|
+
default:
|
|
780
|
+
return ruleType;
|
|
781
|
+
}
|
|
782
|
+
}
|
|
783
|
+
/*
|
|
784
|
+
* "Jane Doe has no verified notification method" is actionable; "This user
|
|
785
|
+
* has no verified notification method" is a support ticket. The lookup is
|
|
786
|
+
* best-effort in every sense - it only feeds a string, so a missing user or a
|
|
787
|
+
* failed read degrades to a neutral phrase rather than propagating.
|
|
788
|
+
*/
|
|
789
|
+
async getResponderLabelForMessage(userId) {
|
|
790
|
+
var _a, _b;
|
|
791
|
+
if (!userId) {
|
|
792
|
+
return "This responder";
|
|
793
|
+
}
|
|
794
|
+
try {
|
|
795
|
+
const user = await UserService.findOneById({
|
|
796
|
+
id: userId,
|
|
797
|
+
select: {
|
|
798
|
+
name: true,
|
|
799
|
+
email: true,
|
|
800
|
+
},
|
|
801
|
+
props: {
|
|
802
|
+
isRoot: true,
|
|
803
|
+
},
|
|
804
|
+
});
|
|
805
|
+
const label = ((_a = user === null || user === void 0 ? void 0 : user.name) === null || _a === void 0 ? void 0 : _a.toString()) || ((_b = user === null || user === void 0 ? void 0 : user.email) === null || _b === void 0 ? void 0 : _b.toString());
|
|
806
|
+
return label || "This responder";
|
|
807
|
+
}
|
|
808
|
+
catch (err) {
|
|
809
|
+
logger.error(err);
|
|
810
|
+
return "This responder";
|
|
811
|
+
}
|
|
812
|
+
}
|
|
374
813
|
getNotificationRuleType(userNotificationEventType) {
|
|
375
814
|
if (userNotificationEventType === UserNotificationEventType.IncidentCreated) {
|
|
376
815
|
return NotificationRuleType.ON_CALL_EXECUTED_INCIDENT;
|
|
@@ -396,6 +835,12 @@ __decorate([
|
|
|
396
835
|
__metadata("design:paramtypes", [Object]),
|
|
397
836
|
__metadata("design:returntype", Promise)
|
|
398
837
|
], Service.prototype, "claimNotificationRuleExecution", null);
|
|
838
|
+
__decorate([
|
|
839
|
+
CaptureSpan(),
|
|
840
|
+
__metadata("design:type", Function),
|
|
841
|
+
__metadata("design:paramtypes", [Object]),
|
|
842
|
+
__metadata("design:returntype", Promise)
|
|
843
|
+
], Service.prototype, "claimNotificationExecution", null);
|
|
399
844
|
__decorate([
|
|
400
845
|
CaptureSpan(),
|
|
401
846
|
__metadata("design:type", Function),
|