@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
|
@@ -13,10 +13,16 @@
|
|
|
13
13
|
export type NetworkTopologyNodeStatus = "up" | "down" | "unknown";
|
|
14
14
|
|
|
15
15
|
/*
|
|
16
|
-
* Which source(s) reported a link — a discovery protocol,
|
|
17
|
-
* forwarding database (endpoint attachment).
|
|
16
|
+
* Which source(s) reported a link — a discovery protocol, the bridge
|
|
17
|
+
* forwarding database (endpoint attachment), or a person.
|
|
18
|
+
*
|
|
19
|
+
* "manual" is a NetworkDeviceLink an operator drew: a cable neither protocol
|
|
20
|
+
* can see, because one end has discovery disabled, does not speak LLDP or
|
|
21
|
+
* CDP, or is monitored by ping alone. It is a protocol like the others so a
|
|
22
|
+
* hand-drawn link and a later-discovered one MERGE into a single edge
|
|
23
|
+
* carrying both, rather than doubling the line on the map.
|
|
18
24
|
*/
|
|
19
|
-
export type NetworkTopologyLinkProtocol = "lldp" | "cdp" | "fdb";
|
|
25
|
+
export type NetworkTopologyLinkProtocol = "lldp" | "cdp" | "fdb" | "manual";
|
|
20
26
|
|
|
21
27
|
/*
|
|
22
28
|
* What a node represents. Older payloads carry no kind — readers should
|
|
@@ -26,6 +32,60 @@ export type NetworkTopologyLinkProtocol = "lldp" | "cdp" | "fdb";
|
|
|
26
32
|
*/
|
|
27
33
|
export type NetworkTopologyNodeKind = "device" | "unmanaged" | "endpoint";
|
|
28
34
|
|
|
35
|
+
/*
|
|
36
|
+
* What the node DOES on the network, as opposed to what we know about it
|
|
37
|
+
* (`kind`). Derived server-side from the identity SNMP and the discovery
|
|
38
|
+
* protocols already report — sysObjectId, sysDescr, model/platform, and
|
|
39
|
+
* finally the hostname — because a map on which a router, a switch and a
|
|
40
|
+
* camera are the same circle cannot be read at a glance.
|
|
41
|
+
*
|
|
42
|
+
* "unknown" is a real answer, not a failure: guessing a role from thin
|
|
43
|
+
* evidence is worse than drawing a neutral node, so the classifier only
|
|
44
|
+
* commits when the evidence names a product family or says the word.
|
|
45
|
+
*/
|
|
46
|
+
export type NetworkTopologyDeviceRole =
|
|
47
|
+
| "router"
|
|
48
|
+
| "switch"
|
|
49
|
+
| "firewall"
|
|
50
|
+
| "wirelessAccessPoint"
|
|
51
|
+
| "loadBalancer"
|
|
52
|
+
| "server"
|
|
53
|
+
| "storage"
|
|
54
|
+
| "printer"
|
|
55
|
+
| "camera"
|
|
56
|
+
| "phone"
|
|
57
|
+
| "host"
|
|
58
|
+
| "unknown";
|
|
59
|
+
|
|
60
|
+
/*
|
|
61
|
+
* Why a device is drawn with no links.
|
|
62
|
+
*
|
|
63
|
+
* "The router is not linked to any device" is a report we could previously
|
|
64
|
+
* only answer with a shrug — the map showed an isolated box and nothing about
|
|
65
|
+
* which of the several possible causes was the real one. These fields turn
|
|
66
|
+
* that into a sentence: discovery never ran, or it ran and the device
|
|
67
|
+
* reported nothing, or it reported neighbours that matched nothing we manage
|
|
68
|
+
* (and here is what they called themselves).
|
|
69
|
+
*
|
|
70
|
+
* Present on managed device nodes only; absent on older payloads.
|
|
71
|
+
*/
|
|
72
|
+
export interface NetworkTopologyNodeDiagnostics {
|
|
73
|
+
/*
|
|
74
|
+
* False when the device's interface walk is off. LLDP and CDP ride along
|
|
75
|
+
* with that walk, so a device with it disabled can never report a
|
|
76
|
+
* neighbour, however well it speaks either protocol.
|
|
77
|
+
*/
|
|
78
|
+
isNeighborDiscoveryEnabled?: boolean | undefined;
|
|
79
|
+
// How many neighbour entries the device's last poll reported.
|
|
80
|
+
reportedNeighborCount: number;
|
|
81
|
+
/*
|
|
82
|
+
* What the unresolved neighbours called themselves. This is the actionable
|
|
83
|
+
* half: an operator reading "advertised OLD-CORE-SW1" knows immediately
|
|
84
|
+
* that a device was renamed, which no amount of "no links found" conveys.
|
|
85
|
+
*/
|
|
86
|
+
unmatchedNeighborIdentifiers: Array<string>;
|
|
87
|
+
}
|
|
88
|
+
|
|
29
89
|
export interface NetworkTopologyNode {
|
|
30
90
|
// Device id for managed nodes; a synthetic "unmanaged:<key>" id otherwise.
|
|
31
91
|
id: string;
|
|
@@ -34,6 +94,12 @@ export interface NetworkTopologyNode {
|
|
|
34
94
|
status: NetworkTopologyNodeStatus;
|
|
35
95
|
// Missing on older payloads — derive from isManaged.
|
|
36
96
|
kind?: NetworkTopologyNodeKind | undefined;
|
|
97
|
+
/*
|
|
98
|
+
* What the node does on the network (router, switch, firewall, ...).
|
|
99
|
+
* Missing on older payloads, and "unknown" when the evidence did not
|
|
100
|
+
* name one — readers must treat both the same way.
|
|
101
|
+
*/
|
|
102
|
+
role?: NetworkTopologyDeviceRole | undefined;
|
|
37
103
|
interfacesUp?: number | undefined;
|
|
38
104
|
interfacesDown?: number | undefined;
|
|
39
105
|
// Extra device identity for search and the detail panel (managed nodes).
|
|
@@ -51,6 +117,8 @@ export interface NetworkTopologyNode {
|
|
|
51
117
|
ipAddress?: string | undefined;
|
|
52
118
|
classification?: string | undefined;
|
|
53
119
|
vlanId?: number | undefined;
|
|
120
|
+
// Why this device has no links. Managed device nodes only.
|
|
121
|
+
diagnostics?: NetworkTopologyNodeDiagnostics | undefined;
|
|
54
122
|
}
|
|
55
123
|
|
|
56
124
|
/*
|
|
@@ -79,6 +147,15 @@ export interface NetworkTopologyEdge {
|
|
|
79
147
|
// Operational data at each end, when the endpoint interface is known.
|
|
80
148
|
fromInterface?: NetworkTopologyEdgeEndpoint | undefined;
|
|
81
149
|
toInterface?: NetworkTopologyEdgeEndpoint | undefined;
|
|
150
|
+
/*
|
|
151
|
+
* Health for a link that has no interface counters of its own — a manual
|
|
152
|
+
* link with a Monitor bound to it. Readers prefer real interface data and
|
|
153
|
+
* fall back to this, so a discovered link never loses its measured state
|
|
154
|
+
* to a monitor's summary of it.
|
|
155
|
+
*/
|
|
156
|
+
monitorState?: "up" | "down" | undefined;
|
|
157
|
+
// Operator-supplied label, set only on manual links.
|
|
158
|
+
name?: string | undefined;
|
|
82
159
|
}
|
|
83
160
|
|
|
84
161
|
export default interface NetworkTopology {
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* How a NetworkDevice's health is established.
|
|
3
|
+
*
|
|
4
|
+
* The network product was built around SNMP: a device is a thing an assigned
|
|
5
|
+
* probe walks on a schedule, and everything downstream — the status pill, the
|
|
6
|
+
* site rollup, the topology map — reads freshness off `lastSeenAt`, which only
|
|
7
|
+
* a successful walk ever stamps.
|
|
8
|
+
*
|
|
9
|
+
* Plenty of real gear cannot be walked. Consumer APs, PDUs, cameras, anything
|
|
10
|
+
* with SNMP disabled by policy: an operator tracks those with an ordinary Ping
|
|
11
|
+
* or IP monitor. They are as real a part of the network as the switch they
|
|
12
|
+
* hang off, and before this existed they could not be recorded as devices at
|
|
13
|
+
* all — so they were absent from the site hierarchy and from the topology map,
|
|
14
|
+
* which is what issue #3023 is about.
|
|
15
|
+
*
|
|
16
|
+
* `Monitor` is that second answer: no probe, no credentials, no polling; the
|
|
17
|
+
* bound Monitor's status IS the device's status, stamped through the same
|
|
18
|
+
* bridge that already stamps SNMP devices watched by a Network Device monitor.
|
|
19
|
+
*
|
|
20
|
+
* Stored as free text on the column (the SnmpVersion precedent), so parse it
|
|
21
|
+
* through `NetworkDeviceMonitoringMethodUtil.parse` rather than comparing the
|
|
22
|
+
* raw column: rows written before this existed hold NULL and must read as
|
|
23
|
+
* `Snmp`, which is what they are.
|
|
24
|
+
*/
|
|
25
|
+
export enum NetworkDeviceMonitoringMethod {
|
|
26
|
+
// An assigned probe walks the device over SNMP on its own schedule.
|
|
27
|
+
Snmp = "SNMP",
|
|
28
|
+
// No polling; a bound Monitor (Ping, IP, Port, ...) reports its health.
|
|
29
|
+
Monitor = "Monitor",
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
export class NetworkDeviceMonitoringMethodUtil {
|
|
33
|
+
/*
|
|
34
|
+
* NULL, empty and anything unrecognised read as Snmp — that is what every
|
|
35
|
+
* device created before this column existed is, and defaulting a device
|
|
36
|
+
* into "monitor-backed" would silently stop it being polled.
|
|
37
|
+
*/
|
|
38
|
+
public static parse(
|
|
39
|
+
value: string | undefined | null,
|
|
40
|
+
): NetworkDeviceMonitoringMethod {
|
|
41
|
+
if ((value || "").trim().toLowerCase() === "monitor") {
|
|
42
|
+
return NetworkDeviceMonitoringMethod.Monitor;
|
|
43
|
+
}
|
|
44
|
+
return NetworkDeviceMonitoringMethod.Snmp;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
public static isMonitorBacked(value: string | undefined | null): boolean {
|
|
48
|
+
return (
|
|
49
|
+
NetworkDeviceMonitoringMethodUtil.parse(value) ===
|
|
50
|
+
NetworkDeviceMonitoringMethod.Monitor
|
|
51
|
+
);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
export default NetworkDeviceMonitoringMethod;
|
|
@@ -1517,181 +1517,237 @@ export default class LayerUtil {
|
|
|
1517
1517
|
events: PriorityCalendarEvents[],
|
|
1518
1518
|
): CalendarEvent[] {
|
|
1519
1519
|
/*
|
|
1520
|
-
*
|
|
1521
|
-
*
|
|
1522
|
-
*
|
|
1520
|
+
* Flatten overlapping events by priority. A LOWER priority number wins: an
|
|
1521
|
+
* event is trimmed back so it does not overlap any higher-priority (lower
|
|
1522
|
+
* numbered) event, and where a lower-priority event straddles a
|
|
1523
|
+
* higher-priority one it is split into a leading and a trailing segment.
|
|
1524
|
+
* Segments are separated by a 1-second seam.
|
|
1525
|
+
*
|
|
1526
|
+
* This runs on the browser's main thread on the on-call schedule screen,
|
|
1527
|
+
* over every event in the coverage window — an hourly rotation over three
|
|
1528
|
+
* months is thousands of events. The previous implementation had three
|
|
1529
|
+
* separate problems here, in increasing order of severity:
|
|
1530
|
+
*
|
|
1531
|
+
* - CONSTANT FACTOR. Every comparison went through `OneUptimeDate.*`,
|
|
1532
|
+
* which wraps each operand in a moment object (via `fromString`) —
|
|
1533
|
+
* roughly 8 allocations per overlap test, and it dominated the profile.
|
|
1534
|
+
* All comparisons below are numeric `getTime()` instead. Timestamps are
|
|
1535
|
+
* normalised once, up front, so string-typed inputs are still accepted.
|
|
1536
|
+
* - COMPLEXITY. The inner scan walked the whole of `finalEvents` for every
|
|
1537
|
+
* event placed, which is O(n^2): ~1000 hourly events took over a minute,
|
|
1538
|
+
* and every re-render of the schedule screen paid it again.
|
|
1539
|
+
* `activeEventIndexes` keeps the scan off events that can no longer
|
|
1540
|
+
* match. Events are processed in ascending start order and an event's
|
|
1541
|
+
* start only ever moves forward, so once a placed event ends at or
|
|
1542
|
+
* before the current start it cannot overlap this event or any later
|
|
1543
|
+
* one, and is dropped from the scan for good.
|
|
1544
|
+
* - TERMINATION. On some inputs it never finished at all — see the
|
|
1545
|
+
* exhausted-event break inside the scan below. That was the real bug;
|
|
1546
|
+
* the two above only made the schedule screen slow.
|
|
1523
1547
|
*/
|
|
1524
1548
|
|
|
1525
|
-
|
|
1526
|
-
|
|
1527
|
-
|
|
1528
|
-
|
|
1529
|
-
|
|
1549
|
+
/*
|
|
1550
|
+
* Normalise to real Dates once. Everything below reads `.getTime()`
|
|
1551
|
+
* directly, which is only safe if these are Date instances — callers may
|
|
1552
|
+
* hand us JSON-deserialised events whose start/end are strings, which the
|
|
1553
|
+
* old `OneUptimeDate.*` comparisons coerced on every single call.
|
|
1554
|
+
*/
|
|
1555
|
+
for (const event of events) {
|
|
1556
|
+
event.start = OneUptimeDate.fromString(event.start);
|
|
1557
|
+
event.end = OneUptimeDate.fromString(event.end);
|
|
1558
|
+
}
|
|
1530
1559
|
|
|
1560
|
+
// Drop zero-length and inverted events; the merge below assumes end > start.
|
|
1531
1561
|
events = events.filter((event: PriorityCalendarEvents) => {
|
|
1532
|
-
return
|
|
1562
|
+
return event.end.getTime() > event.start.getTime();
|
|
1533
1563
|
});
|
|
1534
1564
|
|
|
1535
|
-
|
|
1536
|
-
|
|
1537
|
-
|
|
1565
|
+
/*
|
|
1566
|
+
* Ascending start time. Array.prototype.sort is stable, so events that share
|
|
1567
|
+
* a start stay in insertion order — which is layer order, i.e. ascending
|
|
1568
|
+
* priority. The merge below depends on this ordering in both directions:
|
|
1569
|
+
* ascending starts let the active-set pruning work, and the priority tie
|
|
1570
|
+
* order decides which of two same-start events is the one that gets trimmed.
|
|
1571
|
+
*/
|
|
1572
|
+
events.sort((a: CalendarEvent, b: CalendarEvent) => {
|
|
1573
|
+
return a.start.getTime() - b.start.getTime();
|
|
1538
1574
|
});
|
|
1539
1575
|
|
|
1540
1576
|
const finalEvents: PriorityCalendarEvents[] = [];
|
|
1541
1577
|
|
|
1542
|
-
|
|
1543
|
-
|
|
1544
|
-
|
|
1545
|
-
|
|
1546
|
-
|
|
1547
|
-
|
|
1548
|
-
|
|
1549
|
-
|
|
1550
|
-
return 1;
|
|
1551
|
-
}
|
|
1578
|
+
/*
|
|
1579
|
+
* Indexes into finalEvents that may still overlap the event being placed,
|
|
1580
|
+
* in ascending index order — the same order the old full scan visited them
|
|
1581
|
+
* in. Order is load-bearing, not incidental: trimming a lower-priority final
|
|
1582
|
+
* event uses the current event's start, which a higher-priority final event
|
|
1583
|
+
* visited earlier in the same scan may already have pushed forward.
|
|
1584
|
+
*/
|
|
1585
|
+
const activeEventIndexes: number[] = [];
|
|
1552
1586
|
|
|
1553
|
-
|
|
1554
|
-
|
|
1587
|
+
// Tombstones. Splicing finalEvents mid-merge would invalidate these indexes.
|
|
1588
|
+
const removedEventIndexes: Set<number> = new Set<number>();
|
|
1555
1589
|
|
|
1556
1590
|
for (const event of events) {
|
|
1557
|
-
|
|
1591
|
+
const eventEndTime: number = event.end.getTime();
|
|
1558
1592
|
|
|
1559
|
-
|
|
1560
|
-
|
|
1561
|
-
|
|
1562
|
-
|
|
1563
|
-
|
|
1564
|
-
|
|
1565
|
-
|
|
1566
|
-
|
|
1567
|
-
}
|
|
1593
|
+
/*
|
|
1594
|
+
* Retire everything that ends at or before this event's start. Events
|
|
1595
|
+
* arrive in ascending start order, so nothing retired here can overlap any
|
|
1596
|
+
* later event either. Each index is examined once more after it stops
|
|
1597
|
+
* matching, making this O(1) amortised per placed event.
|
|
1598
|
+
*/
|
|
1599
|
+
const eventStartTime: number = event.start.getTime();
|
|
1600
|
+
let keptCount: number = 0;
|
|
1568
1601
|
|
|
1569
|
-
for (let i: number = 0; i <
|
|
1570
|
-
const
|
|
1602
|
+
for (let i: number = 0; i < activeEventIndexes.length; i++) {
|
|
1603
|
+
const index: number = activeEventIndexes[i]!;
|
|
1571
1604
|
|
|
1572
|
-
if (
|
|
1605
|
+
if (removedEventIndexes.has(index)) {
|
|
1573
1606
|
continue;
|
|
1574
1607
|
}
|
|
1575
1608
|
|
|
1576
|
-
|
|
1577
|
-
|
|
1578
|
-
OneUptimeDate.isOverlapping(
|
|
1579
|
-
finalEvent.start,
|
|
1580
|
-
finalEvent.end,
|
|
1581
|
-
event.start,
|
|
1582
|
-
event.end,
|
|
1583
|
-
)
|
|
1584
|
-
) {
|
|
1585
|
-
// if the current event has a higher priority than the final event, we need to trim the final event
|
|
1586
|
-
if (event.priority < finalEvent.priority) {
|
|
1587
|
-
/*
|
|
1588
|
-
* trim the final event based on the current event
|
|
1589
|
-
* end time of the final event will be the start time of the current event - 1 second
|
|
1590
|
-
*/
|
|
1591
|
-
const tempFinalEventEnd: Date = finalEvent.end;
|
|
1592
|
-
|
|
1593
|
-
/*
|
|
1594
|
-
* Reconstruct the trailing tail FIRST, before the front-collapse
|
|
1595
|
-
* removal below. If the lower-priority (fallback) event originally
|
|
1596
|
-
* extended past the higher-priority event, the portion AFTER the
|
|
1597
|
-
* higher-priority window must survive as its own segment — even when
|
|
1598
|
-
* the FRONT of the final event collapses to zero/negative length
|
|
1599
|
-
* (which happens when the higher-priority event starts at or before
|
|
1600
|
-
* the final event's start, e.g. two back-to-back higher-priority
|
|
1601
|
-
* rotation windows over a 24/7 fallback layer). Previously this block
|
|
1602
|
-
* ran only AFTER the collapse checks, whose `continue` skipped it,
|
|
1603
|
-
* silently deleting the fallback layer's coverage after the higher-
|
|
1604
|
-
* priority window and leaving on-call gaps where nobody is paged.
|
|
1605
|
-
*/
|
|
1606
|
-
if (OneUptimeDate.isAfter(tempFinalEventEnd, event.end)) {
|
|
1607
|
-
// add the trailing segment of the lower-priority event
|
|
1608
|
-
const trimmedEvent: PriorityCalendarEvents = {
|
|
1609
|
-
...finalEvent,
|
|
1610
|
-
priority: finalEvent.priority,
|
|
1611
|
-
start: OneUptimeDate.addRemoveSeconds(event.end, 1),
|
|
1612
|
-
end: tempFinalEventEnd,
|
|
1613
|
-
};
|
|
1614
|
-
|
|
1615
|
-
// only keep it if it has positive length
|
|
1616
|
-
if (OneUptimeDate.isAfter(trimmedEvent.end, trimmedEvent.start)) {
|
|
1617
|
-
finalEvents.push(trimmedEvent);
|
|
1618
|
-
}
|
|
1619
|
-
}
|
|
1620
|
-
|
|
1621
|
-
finalEvent.end = OneUptimeDate.addRemoveSeconds(event.start, -1);
|
|
1622
|
-
|
|
1623
|
-
/*
|
|
1624
|
-
* check if the final event end time is before the start time of the current event
|
|
1625
|
-
* if it is, we need to remove the final event from the final events array
|
|
1626
|
-
* (the trailing tail, if any, was already preserved above)
|
|
1627
|
-
*/
|
|
1628
|
-
if (OneUptimeDate.isBefore(finalEvent.end, finalEvent.start)) {
|
|
1629
|
-
finalEvents.splice(i, 1);
|
|
1630
|
-
i--; // Adjust index after removal
|
|
1631
|
-
continue;
|
|
1632
|
-
}
|
|
1633
|
-
|
|
1634
|
-
// if end and start time of the final event is same, we need to remove it
|
|
1635
|
-
if (OneUptimeDate.isSame(finalEvent.start, finalEvent.end)) {
|
|
1636
|
-
finalEvents.splice(i, 1);
|
|
1637
|
-
i--; // Adjust index after removal
|
|
1638
|
-
continue;
|
|
1639
|
-
}
|
|
1640
|
-
} else {
|
|
1641
|
-
/*
|
|
1642
|
-
* Trim the current (lower-priority) event: push its start past this
|
|
1643
|
-
* higher-priority window. Use getGreaterDate (a monotonic max)
|
|
1644
|
-
* instead of a bare assignment so the result does NOT depend on the
|
|
1645
|
-
* order finalEvents are visited. That makes it safe to hoist the
|
|
1646
|
-
* per-iteration finalEvents.sort() out of the loop (audit H2): with
|
|
1647
|
-
* the old in-loop ascending sort, successive overlaps already had
|
|
1648
|
-
* monotonically increasing ends, so max equals the old assignment and
|
|
1649
|
-
* the output is unchanged.
|
|
1650
|
-
*/
|
|
1651
|
-
event.start = OneUptimeDate.getGreaterDate(
|
|
1652
|
-
event.start,
|
|
1653
|
-
OneUptimeDate.addRemoveSeconds(finalEvent.end, 1),
|
|
1654
|
-
);
|
|
1655
|
-
}
|
|
1609
|
+
if (finalEvents[index]!.end.getTime() <= eventStartTime) {
|
|
1610
|
+
continue;
|
|
1656
1611
|
}
|
|
1657
|
-
}
|
|
1658
1612
|
|
|
1659
|
-
|
|
1660
|
-
|
|
1661
|
-
finalEvents.push(event);
|
|
1613
|
+
activeEventIndexes[keptCount] = index;
|
|
1614
|
+
keptCount++;
|
|
1662
1615
|
}
|
|
1663
1616
|
|
|
1617
|
+
activeEventIndexes.length = keptCount;
|
|
1618
|
+
|
|
1664
1619
|
/*
|
|
1665
|
-
*
|
|
1666
|
-
*
|
|
1667
|
-
*
|
|
1668
|
-
*
|
|
1669
|
-
* trim above now uses a monotonic max), so sorting once at the end yields
|
|
1670
|
-
* the same result. Audit H2.
|
|
1620
|
+
* Length is re-read each pass: trailing segments appended below join the
|
|
1621
|
+
* scan, exactly as they did when this walked finalEvents directly. They
|
|
1622
|
+
* start after this event ends, so they never match it — but the scan is
|
|
1623
|
+
* kept faithful rather than relying on that.
|
|
1671
1624
|
*/
|
|
1625
|
+
for (let i: number = 0; i < activeEventIndexes.length; i++) {
|
|
1626
|
+
const currentStart: number = event.start.getTime();
|
|
1672
1627
|
|
|
1673
|
-
|
|
1628
|
+
/*
|
|
1629
|
+
* Nothing left of this event. The else-branch below pushes its start
|
|
1630
|
+
* forward past each higher-priority window it meets, and that can
|
|
1631
|
+
* consume the event entirely — at which point it covers no time, will
|
|
1632
|
+
* not be placed, and must stop trimming other events.
|
|
1633
|
+
*
|
|
1634
|
+
* WITHOUT this stop the merge does not terminate, which is the bug this
|
|
1635
|
+
* whole rewrite exists to fix. `OneUptimeDate.isOverlapping` reports a
|
|
1636
|
+
* zero-length or inverted interval as overlapping anything that shares
|
|
1637
|
+
* an endpoint with it (its moment `isBetween` bounds are exclusive, but
|
|
1638
|
+
* it also has explicit start===start / end===end arms). So an exhausted
|
|
1639
|
+
* event kept matching the very tail segment it had just created, split
|
|
1640
|
+
* it again, matched the new tail, and so on forever. Empirically an
|
|
1641
|
+
* hourly grid with 3 priorities settled at 14 events and never returned
|
|
1642
|
+
* at 16.
|
|
1643
|
+
*
|
|
1644
|
+
* Stopping here is also the correct answer rather than merely a
|
|
1645
|
+
* terminating one: an event with no remaining duration represents nobody
|
|
1646
|
+
* on call, so letting it carve a second out of a lower-priority event
|
|
1647
|
+
* opened a 1-second hole in the fallback coverage for no reason.
|
|
1648
|
+
*/
|
|
1649
|
+
if (currentStart >= eventEndTime) {
|
|
1650
|
+
break;
|
|
1651
|
+
}
|
|
1674
1652
|
|
|
1675
|
-
|
|
1676
|
-
const finalEvent: PriorityCalendarEvents | undefined =
|
|
1677
|
-
finalEvents[index];
|
|
1653
|
+
const finalEventIndex: number = activeEventIndexes[i]!;
|
|
1678
1654
|
|
|
1679
|
-
if (
|
|
1655
|
+
if (removedEventIndexes.has(finalEventIndex)) {
|
|
1680
1656
|
continue;
|
|
1681
1657
|
}
|
|
1682
1658
|
|
|
1683
|
-
|
|
1684
|
-
finalEvents
|
|
1685
|
-
|
|
1659
|
+
const finalEvent: PriorityCalendarEvents =
|
|
1660
|
+
finalEvents[finalEventIndex]!;
|
|
1661
|
+
|
|
1662
|
+
const finalStart: number = finalEvent.start.getTime();
|
|
1663
|
+
const finalEnd: number = finalEvent.end.getTime();
|
|
1664
|
+
|
|
1665
|
+
/*
|
|
1666
|
+
* Half-open overlap: touching endpoints do not overlap. Both intervals
|
|
1667
|
+
* are guaranteed positive-length here — final events are length-checked
|
|
1668
|
+
* before being placed, and the current event is checked by the break
|
|
1669
|
+
* above — and over positive-length intervals this is exactly equivalent
|
|
1670
|
+
* to the OneUptimeDate.isOverlapping it replaces.
|
|
1671
|
+
*/
|
|
1672
|
+
if (currentStart >= finalEnd || finalStart >= eventEndTime) {
|
|
1686
1673
|
continue;
|
|
1687
1674
|
}
|
|
1688
1675
|
|
|
1689
|
-
|
|
1690
|
-
|
|
1691
|
-
|
|
1692
|
-
|
|
1676
|
+
if (event.priority < finalEvent.priority) {
|
|
1677
|
+
/*
|
|
1678
|
+
* The current event outranks this one. Trim the final event back to
|
|
1679
|
+
* end 1s before the current event starts.
|
|
1680
|
+
*/
|
|
1681
|
+
const tempFinalEventEnd: Date = finalEvent.end;
|
|
1682
|
+
|
|
1683
|
+
/*
|
|
1684
|
+
* Reconstruct the trailing tail FIRST, before the front-collapse
|
|
1685
|
+
* removal below. If the lower-priority (fallback) event originally
|
|
1686
|
+
* extended past the higher-priority event, the portion AFTER the
|
|
1687
|
+
* higher-priority window must survive as its own segment — even when
|
|
1688
|
+
* the FRONT of the final event collapses to zero/negative length
|
|
1689
|
+
* (which happens when the higher-priority event starts at or before
|
|
1690
|
+
* the final event's start, e.g. two back-to-back higher-priority
|
|
1691
|
+
* rotation windows over a 24/7 fallback layer). Previously this block
|
|
1692
|
+
* ran only AFTER the collapse checks, whose `continue` skipped it,
|
|
1693
|
+
* silently deleting the fallback layer's coverage after the higher-
|
|
1694
|
+
* priority window and leaving on-call gaps where nobody is paged.
|
|
1695
|
+
*/
|
|
1696
|
+
if (tempFinalEventEnd.getTime() > eventEndTime) {
|
|
1697
|
+
// add the trailing segment of the lower-priority event
|
|
1698
|
+
const trimmedEvent: PriorityCalendarEvents = {
|
|
1699
|
+
...finalEvent,
|
|
1700
|
+
priority: finalEvent.priority,
|
|
1701
|
+
start: new Date(eventEndTime + 1000),
|
|
1702
|
+
end: tempFinalEventEnd,
|
|
1703
|
+
};
|
|
1704
|
+
|
|
1705
|
+
// only keep it if it has positive length
|
|
1706
|
+
if (trimmedEvent.end.getTime() > trimmedEvent.start.getTime()) {
|
|
1707
|
+
activeEventIndexes.push(finalEvents.length);
|
|
1708
|
+
finalEvents.push(trimmedEvent);
|
|
1709
|
+
}
|
|
1710
|
+
}
|
|
1711
|
+
|
|
1712
|
+
finalEvent.end = new Date(currentStart - 1000);
|
|
1713
|
+
|
|
1714
|
+
/*
|
|
1715
|
+
* If the front collapsed to zero or negative length, drop it. The
|
|
1716
|
+
* trailing tail, if any, was already preserved above.
|
|
1717
|
+
*/
|
|
1718
|
+
if (finalEvent.end.getTime() <= finalStart) {
|
|
1719
|
+
removedEventIndexes.add(finalEventIndex);
|
|
1720
|
+
}
|
|
1721
|
+
} else {
|
|
1722
|
+
/*
|
|
1723
|
+
* Trim the current (lower-priority) event: push its start past this
|
|
1724
|
+
* higher-priority window. This is a monotonic max rather than a bare
|
|
1725
|
+
* assignment so the result does NOT depend on the order finalEvents
|
|
1726
|
+
* are visited. That is what made it safe to hoist the per-iteration
|
|
1727
|
+
* finalEvents.sort() out of the loop (audit H2).
|
|
1728
|
+
*/
|
|
1729
|
+
const trimmedStart: number = finalEnd + 1000;
|
|
1730
|
+
|
|
1731
|
+
if (trimmedStart > currentStart) {
|
|
1732
|
+
event.start = new Date(trimmedStart);
|
|
1733
|
+
}
|
|
1693
1734
|
}
|
|
1694
1735
|
}
|
|
1736
|
+
|
|
1737
|
+
// Whatever is left of the current event, if anything, is placed.
|
|
1738
|
+
if (eventEndTime > event.start.getTime()) {
|
|
1739
|
+
activeEventIndexes.push(finalEvents.length);
|
|
1740
|
+
finalEvents.push(event);
|
|
1741
|
+
}
|
|
1742
|
+
|
|
1743
|
+
/*
|
|
1744
|
+
* The sweep that used to run HERE — rescanning all of finalEvents for
|
|
1745
|
+
* zero-length and inverted entries after every placement — was O(n^2) on
|
|
1746
|
+
* its own and could never find anything. Every event reaching finalEvents
|
|
1747
|
+
* is length-checked at the moment it is pushed, and the only field mutated
|
|
1748
|
+
* afterwards is `end` in the trim branch above, which drops the event on
|
|
1749
|
+
* the spot when it collapses.
|
|
1750
|
+
*/
|
|
1695
1751
|
}
|
|
1696
1752
|
|
|
1697
1753
|
/*
|
|
@@ -1699,16 +1755,14 @@ export default class LayerUtil {
|
|
|
1699
1755
|
* audit H2). Downstream consumers (getEvents id assignment, the schedule
|
|
1700
1756
|
* service's current/next selection) expect events in start order.
|
|
1701
1757
|
*/
|
|
1702
|
-
|
|
1703
|
-
|
|
1704
|
-
return
|
|
1705
|
-
}
|
|
1706
|
-
|
|
1707
|
-
if (OneUptimeDate.isAfter(a.start, b.start)) {
|
|
1708
|
-
return 1;
|
|
1709
|
-
}
|
|
1758
|
+
const keptEvents: PriorityCalendarEvents[] = finalEvents.filter(
|
|
1759
|
+
(_event: PriorityCalendarEvents, index: number) => {
|
|
1760
|
+
return !removedEventIndexes.has(index);
|
|
1761
|
+
},
|
|
1762
|
+
);
|
|
1710
1763
|
|
|
1711
|
-
|
|
1764
|
+
keptEvents.sort((a: CalendarEvent, b: CalendarEvent) => {
|
|
1765
|
+
return a.start.getTime() - b.start.getTime();
|
|
1712
1766
|
});
|
|
1713
1767
|
|
|
1714
1768
|
// convert PriorityCalendarEvents to CalendarEvents
|
|
@@ -1716,7 +1770,7 @@ export default class LayerUtil {
|
|
|
1716
1770
|
const calendarEvents: CalendarEvent[] = [];
|
|
1717
1771
|
let id: number = 1;
|
|
1718
1772
|
|
|
1719
|
-
for (const event of
|
|
1773
|
+
for (const event of keptEvents) {
|
|
1720
1774
|
const calendarEvent: CalendarEvent = {
|
|
1721
1775
|
...event,
|
|
1722
1776
|
id: id,
|
|
@@ -3,6 +3,19 @@ enum OnCallDutyPolicyStatus {
|
|
|
3
3
|
Started = "Started",
|
|
4
4
|
Executing = "Executing",
|
|
5
5
|
Completed = "Execution Completed",
|
|
6
|
+
/*
|
|
7
|
+
* Terminal, like Completed, but the policy walked every escalation rule
|
|
8
|
+
* without paging a single person — typically because every rule targeted an
|
|
9
|
+
* on-call schedule that had nobody on call. Kept distinct from Completed
|
|
10
|
+
* because the two used to be indistinguishable: an incident that notified
|
|
11
|
+
* nobody closed out with the same green "Execution Completed" as one that
|
|
12
|
+
* successfully paged the on-call engineer, so a policy could silently notify
|
|
13
|
+
* no one indefinitely.
|
|
14
|
+
*
|
|
15
|
+
* `status` is a varchar column (not a Postgres enum type), so adding this
|
|
16
|
+
* value needs no schema migration.
|
|
17
|
+
*/
|
|
18
|
+
CompletedWithNoNotifications = "Execution Completed - No One Notified",
|
|
6
19
|
Error = "Error",
|
|
7
20
|
}
|
|
8
21
|
|