@oneuptime/common 14.0.6 → 14.0.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Models/DatabaseModels/Incident.ts +267 -1
- package/Models/DatabaseModels/IncidentCustomField.ts +202 -0
- package/Models/DatabaseModels/IncidentEpisode.ts +30 -0
- package/Models/DatabaseModels/IncidentTemplate.ts +126 -1
- package/Models/DatabaseModels/InventoryItem.ts +23 -12
- package/Models/DatabaseModels/StatusPage.ts +55 -0
- package/Models/DatabaseModels/StatusPageSubscriber.ts +128 -0
- package/Server/API/IncidentAPI.ts +162 -0
- package/Server/API/StatusPageAPI.ts +487 -171
- package/Server/API/StatusPageSubscriberAPI.ts +63 -15
- package/Server/Infrastructure/Postgres/SchemaMigrations/1795200000000-AddInventoryItemProjectEntityKeyIndex.ts +217 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1795300000000-SkipHiddenIncidentCreatedNotifications.ts +49 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1795400000000-AddIncidentStatusPageScope.ts +108 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1795500000000-AddIncidentTemplateStatusPageScopeFlag.ts +33 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1795600000000-AddStatusPageSubscriberUnsubscribeToken.ts +51 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1795700000000-AddStatusPageSubscriberIsAddedByTeam.ts +33 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1795800000000-AddIncidentCustomFieldCreateAndNotificationSettings.ts +168 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1795900000000-AddSubscriberNotificationClaimedAt.ts +44 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +16 -0
- package/Server/Infrastructure/Semaphore.ts +10 -0
- package/Server/Middleware/IdentityRateLimit.ts +108 -3
- package/Server/Middleware/SubscriberNotificationPreviewRateLimit.ts +237 -0
- package/Server/Middleware/SubscriberNotificationTestSendRateLimit.ts +304 -0
- package/Server/Services/AlertService.ts +32 -36
- package/Server/Services/DatabaseService.ts +93 -10
- package/Server/Services/IncidentAlertService.ts +609 -2
- package/Server/Services/IncidentCustomFieldService.ts +276 -1
- package/Server/Services/IncidentEpisodePublicNoteService.ts +28 -0
- package/Server/Services/IncidentEpisodeService.ts +15 -0
- package/Server/Services/IncidentEpisodeStateTimelineService.ts +27 -1
- package/Server/Services/IncidentPublicNoteService.ts +30 -1
- package/Server/Services/IncidentService.ts +1663 -103
- package/Server/Services/IncidentStateTimelineService.ts +13 -0
- package/Server/Services/IncidentTemplateService.ts +109 -0
- package/Server/Services/InventoryItemService.ts +38 -0
- package/Server/Services/IoTDeviceCredentialService.ts +13 -4
- package/Server/Services/ScheduledMaintenancePublicNoteService.ts +30 -1
- package/Server/Services/ScheduledMaintenanceService.ts +118 -64
- package/Server/Services/SmsService.ts +10 -0
- package/Server/Services/StatusPageService.ts +65 -8
- package/Server/Services/StatusPageSubscriberNotificationTemplateService.ts +299 -37
- package/Server/Services/StatusPageSubscriberNotificationTemplateStatusPageService.ts +129 -0
- package/Server/Services/StatusPageSubscriberService.ts +1161 -64
- package/Server/Services/UserNotificationRuleService.ts +55 -53
- package/Server/Services/WorkspaceNotificationSummaryService.ts +38 -20
- package/Server/Types/Markdown.ts +153 -6
- package/Server/Types/Workflow/Components/Email.ts +61 -2
- package/Server/Utils/AffectedResources/LinkedAffectedResources.ts +576 -0
- package/Server/Utils/Alert/AlertStateChangeAuthorization.ts +129 -0
- package/Server/Utils/CustomField/CustomFieldRename.ts +378 -0
- package/Server/Utils/DataSource/EgressGuard.ts +66 -21
- package/Server/Utils/Inventory/InventoryOverviewAggregation.ts +111 -0
- package/Server/Utils/Mail/PinnedSmtpSocket.ts +130 -0
- package/Server/Utils/Monitor/MonitorCriteriaObservationBuilder.ts +10 -0
- package/Server/Utils/Response.ts +31 -0
- package/Server/Utils/SSRFProtection.ts +76 -16
- package/Server/Utils/StatusPage/IncidentStatusPageScope.ts +948 -0
- package/Server/Utils/StatusPage/IncidentSubscriberAudienceBuilder.ts +656 -0
- package/Server/Utils/StatusPage/IncidentTemplateVariableBuilder.ts +805 -0
- package/Server/Utils/StatusPage/StatusPageExclusion.ts +18 -0
- package/Server/Utils/StatusPage/StatusPageReadAccess.ts +125 -0
- package/Server/Utils/StatusPage/StatusPageSubscriberUnsubscribeNotice.ts +151 -0
- package/Server/Utils/StatusPage/StatusPageSubscriberUnsubscribeToken.ts +70 -0
- package/Server/Utils/StatusPage/SubscriberIncidentEmailBuilder.ts +421 -0
- package/Server/Utils/StatusPage/SubscriberNotificationClaim.ts +107 -0
- package/Server/Utils/StatusPage/SubscriberNotificationDeliveryRecord.ts +1049 -0
- package/Server/Utils/StatusPage/SubscriberNotificationFanOut.ts +180 -0
- package/Server/Utils/StatusPage/SubscriberNotificationPreviewBuilder.ts +839 -0
- package/Server/Utils/StatusPage/SubscriberNotificationResendAccess.ts +393 -0
- package/Server/Utils/StatusPage/SubscriberNotificationRunLimit.ts +246 -0
- package/Server/Utils/StatusPage/SubscriberNotificationTiming.ts +133 -0
- package/Server/Utils/StatusPage/SubscriberTemplateIncidentRecordAccess.ts +215 -0
- package/Server/Utils/StatusPageResource.ts +51 -20
- package/Server/Utils/Topology/TopologyConcurrencyLimiter.ts +229 -0
- package/Server/Utils/Topology/TopologyQueries.ts +1350 -0
- package/Server/Utils/Topology/TopologyRequest.ts +463 -0
- package/Server/Utils/Topology/TopologyResponseCache.ts +183 -0
- package/Server/Utils/Topology/TopologySql.ts +1024 -0
- package/Server/Utils/VM/VMAPI.ts +1 -0
- package/Server/Utils/VM/VMRunner.ts +10 -0
- package/Server/Utils/Workflow/OAuth2TokenClient.ts +10 -0
- package/Server/Views/Partials/SensitiveUrlToken.ejs +8 -5
- package/Tests/App/Accounts/RegisterVerifyEmail.test.tsx +748 -0
- package/Tests/App/Accounts/ResendVerificationEmail.test.tsx +1222 -0
- package/Tests/App/Accounts/VerificationEmailResendUtils.test.ts +797 -0
- package/Tests/App/Accounts/VerifyEmailPending.test.tsx +538 -0
- package/Tests/App/Accounts/VerifyEmailResend.test.tsx +779 -0
- package/Tests/App/Dashboard/AcknowledgeAlertsOnDeclare.test.ts +369 -0
- package/Tests/App/Dashboard/AffectedResourcesSlo.test.tsx +1 -1
- package/Tests/App/Dashboard/AffectedResourcesSummaryStep.test.tsx +510 -123
- package/Tests/App/Dashboard/AlertsTableAffectedResources.test.tsx +490 -0
- package/Tests/App/Dashboard/ChangeAlertStateDeclareIncident.test.tsx +886 -0
- package/Tests/App/Dashboard/CreateReviewStepRoleSummary.test.tsx +1250 -0
- package/Tests/App/Dashboard/CreateReviewStepSelectionSummary.test.tsx +738 -0
- package/Tests/App/Dashboard/CustomFieldsSettingsIncidentOptions.test.tsx +357 -0
- package/Tests/App/Dashboard/DeclareIncidentFromAlert.test.ts +417 -0
- package/Tests/App/Dashboard/EntityDetailPanel.test.tsx +1948 -229
- package/Tests/App/Dashboard/EntityDetailPanelLifecycle.test.tsx +493 -0
- package/Tests/App/Dashboard/EntityDetailPanelNavigation.test.tsx +439 -0
- package/Tests/App/Dashboard/EventNotes.test.tsx +776 -0
- package/Tests/App/Dashboard/EventNotesPages.test.tsx +119 -0
- package/Tests/App/Dashboard/EventNotesUtil.test.ts +116 -17
- package/Tests/App/Dashboard/EventOverviewPages.test.tsx +534 -6
- package/Tests/App/Dashboard/EventStatusPanel.test.tsx +798 -2
- package/Tests/App/Dashboard/FetchStateAndSeverityElements.test.tsx +669 -0
- package/Tests/App/Dashboard/FetchUsers.test.tsx +230 -0
- package/Tests/App/Dashboard/IncidentChangeStateNotifyDefault.test.tsx +91 -1
- package/Tests/App/Dashboard/IncidentCreateAcknowledgeAlerts.test.tsx +1611 -0
- package/Tests/App/Dashboard/IncidentCreateDetailsStep.test.tsx +643 -0
- package/Tests/App/Dashboard/IncidentCreateFromAlerts.test.tsx +8 -1
- package/Tests/App/Dashboard/IncidentCreateStatusPageScope.test.tsx +601 -0
- package/Tests/App/Dashboard/IncidentCustomFieldTemplateVariables.test.tsx +386 -0
- package/Tests/App/Dashboard/IncidentNoteTemplatePlaceholders.test.tsx +124 -0
- package/Tests/App/Dashboard/IncidentNoteTemplateVariablesLoader.test.ts +305 -0
- package/Tests/App/Dashboard/IncidentOverviewNotifyDefault.test.tsx +112 -0
- package/Tests/App/Dashboard/IncidentSettingsRenotifyOnPublish.test.tsx +674 -0
- package/Tests/App/Dashboard/IncidentSettingsStatusPageScope.test.tsx +1051 -0
- package/Tests/App/Dashboard/IncidentTemplateCustomFields.test.tsx +384 -0
- package/Tests/App/Dashboard/IncidentTemplateStatusPageScopeCard.test.tsx +215 -0
- package/Tests/App/Dashboard/InfrastructureExplorer.test.tsx +1365 -57
- package/Tests/App/Dashboard/InfrastructureGraph.test.tsx +964 -23
- package/Tests/App/Dashboard/InventoryRelationships.test.tsx +885 -0
- package/Tests/App/Dashboard/PublicNotePagesNotifyDefault.test.tsx +113 -1
- package/Tests/App/Dashboard/ServiceMapDatabaseLink.test.tsx +201 -15
- package/Tests/App/Dashboard/ServiceMapGraph.test.tsx +508 -36
- package/Tests/App/Dashboard/SubscriberAudienceSummary.test.tsx +512 -0
- package/Tests/App/Dashboard/SubscriberNotificationPreviewModal.test.tsx +837 -0
- package/Tests/App/Dashboard/SubscriberNotificationStatusLabel.test.tsx +88 -0
- package/Tests/App/Dashboard/SubscriberNotificationStatusResend.test.tsx +473 -0
- package/Tests/App/Dashboard/SubscriberTemplateLivePreview.test.tsx +196 -0
- package/Tests/App/Dashboard/TeamAddedSubscribersUnsubscribedNotice.test.tsx +248 -0
- package/Tests/App/Dashboard/TopologyDataLifecycle.test.tsx +583 -0
- package/Tests/App/Dashboard/TopologyDataLoading.test.tsx +982 -218
- package/Tests/App/Dashboard/TopologyPageNavigation.test.tsx +818 -114
- package/Tests/App/SensitiveUrlTokenBootstrap.test.ts +64 -3
- package/Tests/App/StatusPage/StatusPageUnsubscribePage.test.tsx +412 -0
- package/Tests/Models/IncidentCustomFieldApiSchemaContract.test.ts +217 -0
- package/Tests/Models/IncidentCustomFieldCreateSettingsColumns.test.ts +252 -0
- package/Tests/Models/StatusPageSubscriberUnsubscribeColumns.test.ts +218 -0
- package/Tests/Server/API/ExpiredSessionRouteGuards.test.ts +7 -0
- package/Tests/Server/API/IncidentSubscriberAudienceAPI.test.ts +1408 -0
- package/Tests/Server/API/StatusPageIncidentScope.test.ts +1868 -0
- package/Tests/Server/API/StatusPageIncidentScopePostgres.test.ts +790 -0
- package/Tests/Server/API/StatusPageManageSubscriptionRecipient.test.ts +10 -1
- package/Tests/Server/API/StatusPageManageSubscriptionTemplateVariables.test.ts +206 -18
- package/Tests/Server/API/StatusPagePostmortemVisibility.test.ts +14 -2
- package/Tests/Server/API/StatusPageSubscriberCreateResponse.test.ts +217 -0
- package/Tests/Server/API/StatusPageSubscriberOwnership.test.ts +103 -2
- package/Tests/Server/API/StatusPageUnsubscribeAPI.test.ts +396 -0
- package/Tests/Server/Infrastructure/Postgres/AddIncidentStatusPageScopeMigration.test.ts +395 -0
- package/Tests/Server/Infrastructure/Postgres/AddIncidentTemplateStatusPageScopeFlagMigration.test.ts +150 -0
- package/Tests/Server/Infrastructure/Postgres/AddSubscriberNotificationClaimedAtMigration.test.ts +156 -0
- package/Tests/Server/Infrastructure/Postgres/RenameInventoryItemMigration.test.ts +90 -21
- package/Tests/Server/Infrastructure/Postgres/SkipHiddenIncidentCreatedNotificationsMigration.test.ts +410 -0
- package/Tests/Server/Middleware/IdentityRateLimit.test.ts +551 -1
- package/Tests/Server/Middleware/SubscriberNotificationPreviewRateLimit.test.ts +238 -0
- package/Tests/Server/Middleware/SubscriberNotificationTestSendRateLimit.test.ts +245 -0
- package/Tests/Server/Services/AddStatusPageSubscriberUnsubscribeTokenMigration.test.ts +152 -0
- package/Tests/Server/Services/CrossProjectRelationWriteGuard.test.ts +221 -36
- package/Tests/Server/Services/DatabaseServiceCompareAndSetColumns.test.ts +191 -0
- package/Tests/Server/Services/DomainService.test.ts +525 -0
- package/Tests/Server/Services/IncidentAlertAcknowledgeOnDeclare.test.ts +2630 -0
- package/Tests/Server/Services/IncidentAlertPostgres.test.ts +1625 -1
- package/Tests/Server/Services/IncidentCreatedRenotifyOnPublish.test.ts +681 -0
- package/Tests/Server/Services/IncidentCreatedResend.test.ts +775 -0
- package/Tests/Server/Services/IncidentCustomFieldRenamePostgres.test.ts +713 -0
- package/Tests/Server/Services/IncidentCustomFieldService.test.ts +751 -0
- package/Tests/Server/Services/IncidentCustomFieldValueValidation.test.ts +556 -0
- package/Tests/Server/Services/IncidentDeclareAcknowledgeAlerts.test.ts +2189 -0
- package/Tests/Server/Services/IncidentStatusPageScope.test.ts +2971 -0
- package/Tests/Server/Services/IncidentStatusPageScopeFeed.test.ts +131 -0
- package/Tests/Server/Services/IncidentStatusPageScopePostgres.test.ts +625 -0
- package/Tests/Server/Services/IncidentTemplateCustomFieldsCopy.test.ts +311 -0
- package/Tests/Server/Services/IncidentTemplateStatusPageScope.test.ts +363 -0
- package/Tests/Server/Services/InventoryItemServiceOverviewCounts.test.ts +345 -0
- package/Tests/Server/Services/InventoryOverviewPostgres.test.ts +254 -0
- package/Tests/Server/Services/IoTDeviceCredentialService.test.ts +819 -0
- package/Tests/Server/Services/LinkedAffectedResourcesCreatedFeed.test.ts +420 -0
- package/Tests/Server/Services/PublicNoteEditFeedEventType.test.ts +213 -0
- package/Tests/Server/Services/PublicNoteResendAccess.test.ts +994 -0
- package/Tests/Server/Services/ScheduledMaintenanceSubscriberTemplateFormats.test.ts +289 -9
- package/Tests/Server/Services/SloAffectedResourceCreatedFeed.test.ts +92 -36
- package/Tests/Server/Services/SmsServiceFailIfNotSent.test.ts +67 -0
- package/Tests/Server/Services/StatusPageReportIncidentCounts.test.ts +610 -0
- package/Tests/Server/Services/StatusPageSubscriberAudienceCounts.test.ts +201 -0
- package/Tests/Server/Services/StatusPageSubscriberAudienceCountsPostgres.test.ts +271 -0
- package/Tests/Server/Services/StatusPageSubscriberConfirmationTemplateEscaping.test.ts +200 -0
- package/Tests/Server/Services/StatusPageSubscriberNotificationLogRedaction.test.ts +54 -0
- package/Tests/Server/Services/StatusPageSubscriberNotificationTemplateCompile.test.ts +37 -0
- package/Tests/Server/Services/StatusPageSubscriberNotificationTemplateIncidentRecordAccess.test.ts +772 -0
- package/Tests/Server/Services/StatusPageSubscriberNotificationTemplateLookup.test.ts +506 -0
- package/Tests/Server/Services/StatusPageSubscriberNotificationTemplateLookupPostgres.test.ts +261 -0
- package/Tests/Server/Services/StatusPageSubscriberReport.test.ts +21 -5
- package/Tests/Server/Services/StatusPageSubscriberUnsubscribe.test.ts +1618 -0
- package/Tests/Server/Services/StatusPageSubscriberUnsubscribeLinkSenders.test.ts +373 -0
- package/Tests/Server/Services/StatusPageSubscriberUnsubscribePostgres.test.ts +388 -0
- package/Tests/Server/Services/SubscriberNotificationInFlightRequeue.test.ts +500 -0
- package/Tests/Server/Types/MarkdownEmailLinks.test.ts +320 -0
- package/Tests/Server/Types/Workflow/Components/Email.test.ts +491 -1
- package/Tests/Server/Types/Workflow/Components/EmailSmtpPinning.test.ts +398 -0
- package/Tests/Server/Utils/AffectedResources/LinkedAffectedResources.test.ts +858 -0
- package/Tests/Server/Utils/Alert/AlertStateChangeAuthorization.test.ts +1172 -0
- package/Tests/Server/Utils/CustomField/CustomFieldRename.test.ts +586 -0
- package/Tests/Server/Utils/DataSource/EgressGuard.test.ts +246 -10
- package/Tests/Server/Utils/DataSource/EgressGuardDeploymentConfig.test.ts +226 -0
- package/Tests/Server/Utils/DataSource/EgressGuardPinning.test.ts +131 -0
- package/Tests/Server/Utils/DataSource/HttpFetch.test.ts +4 -0
- package/Tests/Server/Utils/EgressPolicyEnvironment.ts +45 -0
- package/Tests/Server/Utils/Mail/PinnedSmtpSocket.test.ts +409 -0
- package/Tests/Server/Utils/Monitor/MonitorCriteriaObservationBuilderUnits.test.ts +23 -0
- package/Tests/Server/Utils/SSRFProtection.test.ts +4 -0
- package/Tests/Server/Utils/SSRFProtectionCloudServiceAddresses.test.ts +4 -0
- package/Tests/Server/Utils/SSRFProtectionPrivateNetwork.test.ts +4 -0
- package/Tests/Server/Utils/SSRFProtectionResolutionDetail.test.ts +314 -0
- package/Tests/Server/Utils/StatusPage/IncidentStatusPageScope.test.ts +1699 -0
- package/Tests/Server/Utils/StatusPage/IncidentStatusPageScopeQueriesPostgres.test.ts +508 -0
- package/Tests/Server/Utils/StatusPage/IncidentSubscriberAudienceCallerPermission.test.ts +246 -0
- package/Tests/Server/Utils/StatusPage/IncidentTemplateVariableBuilder.test.ts +1348 -0
- package/Tests/Server/Utils/StatusPage/StatusPageReadAccess.test.ts +221 -0
- package/Tests/Server/Utils/StatusPage/StatusPageSubscriberUnsubscribeNotice.test.ts +132 -0
- package/Tests/Server/Utils/StatusPage/StatusPageSubscriberUnsubscribeToken.test.ts +155 -0
- package/Tests/Server/Utils/StatusPage/SubscriberIncidentEmailBuilder.test.ts +708 -0
- package/Tests/Server/Utils/StatusPage/SubscriberNotificationClaim.test.ts +255 -0
- package/Tests/Server/Utils/StatusPage/SubscriberNotificationClaimPostgres.test.ts +528 -0
- package/Tests/Server/Utils/StatusPage/SubscriberNotificationDeliveryRecord.test.ts +1238 -0
- package/Tests/Server/Utils/StatusPage/SubscriberNotificationFanOut.test.ts +472 -0
- package/Tests/Server/Utils/StatusPage/SubscriberNotificationPreviewBuilder.test.ts +1168 -0
- package/Tests/Server/Utils/StatusPage/SubscriberNotificationRunLimit.test.ts +275 -0
- package/Tests/Server/Utils/StatusPage/SubscriberNotificationTiming.test.ts +131 -0
- package/Tests/Server/Utils/StatusPageResource.test.ts +98 -0
- package/Tests/Server/Utils/Topology/InventoryItemEntityKeyIndexMigration.test.ts +386 -0
- package/Tests/Server/Utils/Topology/InventoryItemEntityKeyIndexMigrationPostgres.test.ts +430 -0
- package/Tests/Server/Utils/Topology/TopologyActivityParityPostgres.test.ts +279 -0
- package/Tests/Server/Utils/Topology/TopologyConcurrencyLimiter.test.ts +534 -0
- package/Tests/Server/Utils/Topology/TopologyEstateGenerator.ts +624 -0
- package/Tests/Server/Utils/Topology/TopologyJsonResponse.test.ts +90 -0
- package/Tests/Server/Utils/Topology/TopologyQueries.test.ts +1634 -0
- package/Tests/Server/Utils/Topology/TopologyQueriesDifferentialPostgres.test.ts +683 -0
- package/Tests/Server/Utils/Topology/TopologyQueriesPostgres.test.ts +2624 -0
- package/Tests/Server/Utils/Topology/TopologyReference.ts +1018 -0
- package/Tests/Server/Utils/Topology/TopologyRequest.test.ts +643 -0
- package/Tests/Server/Utils/Topology/TopologyResponseCache.test.ts +305 -0
- package/Tests/Server/Utils/Topology/TopologySql.test.ts +973 -0
- package/Tests/Server/Utils/VM/VMRunnerPrivateNetworkWiring.test.ts +17 -0
- package/Tests/Server/Utils/VM/VMRunnerSsrf.test.ts +75 -0
- package/Tests/Types/CustomField/CustomFieldSavedViews.test.ts +247 -0
- package/Tests/Types/CustomField/CustomFieldTemplateValues.test.ts +186 -0
- package/Tests/Types/CustomField/CustomFieldTypeCorrespondence.test.ts +48 -0
- package/Tests/Types/CustomField/CustomFieldValueFormat.test.ts +215 -0
- package/Tests/Types/CustomField/CustomFieldValueValidator.test.ts +343 -0
- package/Tests/Types/CustomField/CustomFieldVariableKey.test.ts +364 -0
- package/Tests/Types/SafeHtml.test.ts +102 -0
- package/Tests/Types/StatusPage/IncidentCreatedRenotify.test.ts +419 -0
- package/Tests/Types/StatusPage/IncidentCreatedResend.test.ts +118 -0
- package/Tests/Types/StatusPage/IncidentScopeAddedPagesNotification.test.ts +558 -0
- package/Tests/Types/StatusPage/IncidentSubscriberAudience.test.ts +284 -0
- package/Tests/Types/StatusPage/StatusPageSubscriberUnsubscribe.test.ts +341 -0
- package/Tests/Types/StatusPage/SubscriberNotificationPreview.test.ts +196 -0
- package/Tests/Types/StatusPage/SubscriberNotificationResend.test.ts +201 -0
- package/Tests/Types/StatusPage/SubscriberNotificationTemplateCompiler.test.ts +277 -0
- package/Tests/Types/StatusPage/SubscriberNotificationTemplatePreview.test.ts +179 -0
- package/Tests/Types/StatusPage/SubscriberNotificationTemplateVariables.test.ts +324 -0
- package/Tests/Types/StatusPage/SubscriberUpdateNotification.test.ts +60 -13
- package/Tests/Types/Topology/TopologyTypeRules.test.ts +176 -0
- package/Tests/UI/Components/CustomFields/CustomFieldFormFields.test.ts +432 -0
- package/Tests/UI/Components/CustomFields/CustomFieldModelFormFields.test.tsx +685 -0
- package/Tests/UI/Components/CustomFields/CustomFieldsDetailOrder.test.tsx +469 -0
- package/Tests/UI/Components/Forms/ModelFormCustomFieldInputs.test.tsx +325 -0
- package/Tests/UI/Components/Forms/ModelFormDropdownOptionsRefused.test.tsx +358 -0
- package/Tests/UI/Components/ModelTable/CustomFieldColumns.test.tsx +22 -0
- package/Tests/UI/Monitor/NetworkPathView.test.tsx +289 -0
- package/Tests/Utils/Incident/IncidentFromAlerts.test.ts +302 -0
- package/Tests/Utils/Incident/IncidentNoteTemplateVariables.test.ts +623 -0
- package/Tests/Utils/Markdown/MarkdownEscape.test.ts +89 -0
- package/Tests/Utils/ProbeNetworkFailureUtil.test.ts +992 -0
- package/Tests/Utils/RequestFailedDetails.test.ts +575 -0
- package/Types/CustomField/CustomFieldOrder.ts +55 -0
- package/Types/CustomField/CustomFieldSavedViews.ts +225 -0
- package/Types/CustomField/CustomFieldTemplateMerge.ts +71 -0
- package/Types/CustomField/CustomFieldType.ts +14 -0
- package/Types/CustomField/CustomFieldValueFormat.ts +161 -0
- package/Types/CustomField/CustomFieldValueValidator.ts +488 -0
- package/Types/CustomField/CustomFieldVariableKey.ts +211 -0
- package/Types/Incident/IncidentAlertLink.ts +19 -0
- package/Types/SafeHtml.ts +93 -0
- package/Types/StatusPage/IncidentCreatedRenotify.ts +224 -0
- package/Types/StatusPage/IncidentCreatedResend.ts +108 -0
- package/Types/StatusPage/IncidentScopeAddedPagesNotification.ts +343 -0
- package/Types/StatusPage/IncidentSubscriberAudience.ts +332 -0
- package/Types/StatusPage/StatusPageSubscriberUnsubscribe.ts +405 -0
- package/Types/StatusPage/SubscriberNotificationInterruption.ts +32 -0
- package/Types/StatusPage/SubscriberNotificationPreview.ts +322 -0
- package/Types/StatusPage/SubscriberNotificationResend.ts +132 -0
- package/Types/StatusPage/SubscriberNotificationTemplateCompiler.ts +180 -0
- package/Types/StatusPage/SubscriberNotificationTemplatePreview.ts +301 -0
- package/Types/StatusPage/SubscriberNotificationTemplateVariables.ts +217 -4
- package/Types/StatusPage/SubscriberUpdateNotification.ts +32 -11
- package/Types/Telemetry/InventoryLiveness.ts +26 -0
- package/Types/Topology/TopologyApi.ts +428 -0
- package/Types/Topology/TopologyTypeRules.ts +191 -0
- package/UI/Components/CustomFields/CustomFieldFormFields.ts +317 -0
- package/UI/Components/CustomFields/CustomFieldModelFormFields.tsx +395 -0
- package/UI/Components/CustomFields/CustomFieldsDetail.tsx +95 -55
- package/UI/Components/Forms/ModelForm.tsx +70 -8
- package/UI/Components/Forms/Validation.ts +1 -1
- package/UI/Components/ModelFormModal/ModelFormModal.tsx +2 -4
- package/UI/Components/ModelTable/AnalyticsModelTable.tsx +2 -6
- package/UI/Components/ModelTable/BaseModelTable.tsx +9 -8
- package/UI/Components/ModelTable/CustomFieldColumns.tsx +14 -1
- package/UI/Components/ModelTable/ModelTable.tsx +6 -7
- package/UI/Utils/SensitiveUrlToken.ts +10 -5
- package/Utils/API.ts +247 -2
- package/Utils/Incident/IncidentFromAlerts.ts +78 -0
- package/Utils/Incident/IncidentNoteTemplateVariables.ts +304 -0
- package/Utils/Markdown/MarkdownEscape.ts +65 -0
- package/Utils/ProbeNetworkFailureUtil.ts +673 -0
- package/build/dist/Models/DatabaseModels/Incident.js +267 -1
- package/build/dist/Models/DatabaseModels/Incident.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncidentCustomField.js +207 -1
- package/build/dist/Models/DatabaseModels/IncidentCustomField.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncidentEpisode.js +31 -0
- package/build/dist/Models/DatabaseModels/IncidentEpisode.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncidentTemplate.js +124 -1
- package/build/dist/Models/DatabaseModels/IncidentTemplate.js.map +1 -1
- package/build/dist/Models/DatabaseModels/InventoryItem.js +20 -11
- package/build/dist/Models/DatabaseModels/InventoryItem.js.map +1 -1
- package/build/dist/Models/DatabaseModels/StatusPage.js +56 -0
- package/build/dist/Models/DatabaseModels/StatusPage.js.map +1 -1
- package/build/dist/Models/DatabaseModels/StatusPageSubscriber.js +131 -0
- package/build/dist/Models/DatabaseModels/StatusPageSubscriber.js.map +1 -1
- package/build/dist/Server/API/IncidentAPI.js +100 -1
- package/build/dist/Server/API/IncidentAPI.js.map +1 -1
- package/build/dist/Server/API/StatusPageAPI.js +417 -176
- package/build/dist/Server/API/StatusPageAPI.js.map +1 -1
- package/build/dist/Server/API/StatusPageSubscriberAPI.js +52 -13
- package/build/dist/Server/API/StatusPageSubscriberAPI.js.map +1 -1
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1795200000000-AddInventoryItemProjectEntityKeyIndex.js +165 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1795200000000-AddInventoryItemProjectEntityKeyIndex.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1795300000000-SkipHiddenIncidentCreatedNotifications.js +41 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1795300000000-SkipHiddenIncidentCreatedNotifications.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1795400000000-AddIncidentStatusPageScope.js +57 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1795400000000-AddIncidentStatusPageScope.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1795500000000-AddIncidentTemplateStatusPageScopeFlag.js +23 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1795500000000-AddIncidentTemplateStatusPageScopeFlag.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1795600000000-AddStatusPageSubscriberUnsubscribeToken.js +40 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1795600000000-AddStatusPageSubscriberUnsubscribeToken.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1795700000000-AddStatusPageSubscriberIsAddedByTeam.js +26 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1795700000000-AddStatusPageSubscriberIsAddedByTeam.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1795800000000-AddIncidentCustomFieldCreateAndNotificationSettings.js +89 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1795800000000-AddIncidentCustomFieldCreateAndNotificationSettings.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1795900000000-AddSubscriberNotificationClaimedAt.js +29 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1795900000000-AddSubscriberNotificationClaimedAt.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +16 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
- package/build/dist/Server/Infrastructure/Semaphore.js +3 -0
- package/build/dist/Server/Infrastructure/Semaphore.js.map +1 -1
- package/build/dist/Server/Middleware/IdentityRateLimit.js +89 -3
- package/build/dist/Server/Middleware/IdentityRateLimit.js.map +1 -1
- package/build/dist/Server/Middleware/SubscriberNotificationPreviewRateLimit.js +149 -0
- package/build/dist/Server/Middleware/SubscriberNotificationPreviewRateLimit.js.map +1 -0
- package/build/dist/Server/Middleware/SubscriberNotificationTestSendRateLimit.js +190 -0
- package/build/dist/Server/Middleware/SubscriberNotificationTestSendRateLimit.js.map +1 -0
- package/build/dist/Server/Services/AlertService.js +21 -33
- package/build/dist/Server/Services/AlertService.js.map +1 -1
- package/build/dist/Server/Services/DatabaseService.js +56 -7
- package/build/dist/Server/Services/DatabaseService.js.map +1 -1
- package/build/dist/Server/Services/IncidentAlertService.js +457 -3
- package/build/dist/Server/Services/IncidentAlertService.js.map +1 -1
- package/build/dist/Server/Services/IncidentCustomFieldService.js +204 -8
- package/build/dist/Server/Services/IncidentCustomFieldService.js.map +1 -1
- package/build/dist/Server/Services/IncidentEpisodePublicNoteService.js +24 -0
- package/build/dist/Server/Services/IncidentEpisodePublicNoteService.js.map +1 -1
- package/build/dist/Server/Services/IncidentEpisodeService.js +14 -0
- package/build/dist/Server/Services/IncidentEpisodeService.js.map +1 -1
- package/build/dist/Server/Services/IncidentEpisodeStateTimelineService.js +26 -0
- package/build/dist/Server/Services/IncidentEpisodeStateTimelineService.js.map +1 -1
- package/build/dist/Server/Services/IncidentPublicNoteService.js +26 -1
- package/build/dist/Server/Services/IncidentPublicNoteService.js.map +1 -1
- package/build/dist/Server/Services/IncidentService.js +1148 -42
- package/build/dist/Server/Services/IncidentService.js.map +1 -1
- package/build/dist/Server/Services/IncidentStateTimelineService.js +12 -0
- package/build/dist/Server/Services/IncidentStateTimelineService.js.map +1 -1
- package/build/dist/Server/Services/IncidentTemplateService.js +83 -0
- package/build/dist/Server/Services/IncidentTemplateService.js.map +1 -1
- package/build/dist/Server/Services/InventoryItemService.js +31 -0
- package/build/dist/Server/Services/InventoryItemService.js.map +1 -1
- package/build/dist/Server/Services/IoTDeviceCredentialService.js +12 -5
- package/build/dist/Server/Services/IoTDeviceCredentialService.js.map +1 -1
- package/build/dist/Server/Services/ScheduledMaintenancePublicNoteService.js +26 -1
- package/build/dist/Server/Services/ScheduledMaintenancePublicNoteService.js.map +1 -1
- package/build/dist/Server/Services/ScheduledMaintenanceService.js +84 -57
- package/build/dist/Server/Services/ScheduledMaintenanceService.js.map +1 -1
- package/build/dist/Server/Services/SmsService.js +2 -22
- package/build/dist/Server/Services/SmsService.js.map +1 -1
- package/build/dist/Server/Services/StatusPageService.js +47 -9
- package/build/dist/Server/Services/StatusPageService.js.map +1 -1
- package/build/dist/Server/Services/StatusPageSubscriberNotificationTemplateService.js +237 -32
- package/build/dist/Server/Services/StatusPageSubscriberNotificationTemplateService.js.map +1 -1
- package/build/dist/Server/Services/StatusPageSubscriberNotificationTemplateStatusPageService.js +109 -0
- package/build/dist/Server/Services/StatusPageSubscriberNotificationTemplateStatusPageService.js.map +1 -1
- package/build/dist/Server/Services/StatusPageSubscriberService.js +925 -99
- package/build/dist/Server/Services/StatusPageSubscriberService.js.map +1 -1
- package/build/dist/Server/Services/UserNotificationRuleService.js +55 -51
- package/build/dist/Server/Services/UserNotificationRuleService.js.map +1 -1
- package/build/dist/Server/Services/WorkspaceNotificationSummaryService.js +42 -25
- package/build/dist/Server/Services/WorkspaceNotificationSummaryService.js.map +1 -1
- package/build/dist/Server/Types/Markdown.js +110 -6
- package/build/dist/Server/Types/Markdown.js.map +1 -1
- package/build/dist/Server/Types/Workflow/Components/Email.js +55 -6
- package/build/dist/Server/Types/Workflow/Components/Email.js.map +1 -1
- package/build/dist/Server/Utils/AffectedResources/LinkedAffectedResources.js +405 -0
- package/build/dist/Server/Utils/AffectedResources/LinkedAffectedResources.js.map +1 -0
- package/build/dist/Server/Utils/Alert/AlertStateChangeAuthorization.js +112 -0
- package/build/dist/Server/Utils/Alert/AlertStateChangeAuthorization.js.map +1 -0
- package/build/dist/Server/Utils/CustomField/CustomFieldRename.js +211 -0
- package/build/dist/Server/Utils/CustomField/CustomFieldRename.js.map +1 -0
- package/build/dist/Server/Utils/DataSource/EgressGuard.js +41 -12
- package/build/dist/Server/Utils/DataSource/EgressGuard.js.map +1 -1
- package/build/dist/Server/Utils/Inventory/InventoryOverviewAggregation.js +81 -0
- package/build/dist/Server/Utils/Inventory/InventoryOverviewAggregation.js.map +1 -0
- package/build/dist/Server/Utils/Mail/PinnedSmtpSocket.js +101 -0
- package/build/dist/Server/Utils/Mail/PinnedSmtpSocket.js.map +1 -0
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaObservationBuilder.js +9 -0
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaObservationBuilder.js.map +1 -1
- package/build/dist/Server/Utils/Response.js +30 -0
- package/build/dist/Server/Utils/Response.js.map +1 -1
- package/build/dist/Server/Utils/SSRFProtection.js +48 -6
- package/build/dist/Server/Utils/SSRFProtection.js.map +1 -1
- package/build/dist/Server/Utils/StatusPage/IncidentStatusPageScope.js +631 -0
- package/build/dist/Server/Utils/StatusPage/IncidentStatusPageScope.js.map +1 -0
- package/build/dist/Server/Utils/StatusPage/IncidentSubscriberAudienceBuilder.js +403 -0
- package/build/dist/Server/Utils/StatusPage/IncidentSubscriberAudienceBuilder.js.map +1 -0
- package/build/dist/Server/Utils/StatusPage/IncidentTemplateVariableBuilder.js +451 -0
- package/build/dist/Server/Utils/StatusPage/IncidentTemplateVariableBuilder.js.map +1 -0
- package/build/dist/Server/Utils/StatusPage/StatusPageExclusion.js +13 -0
- package/build/dist/Server/Utils/StatusPage/StatusPageExclusion.js.map +1 -0
- package/build/dist/Server/Utils/StatusPage/StatusPageReadAccess.js +91 -0
- package/build/dist/Server/Utils/StatusPage/StatusPageReadAccess.js.map +1 -0
- package/build/dist/Server/Utils/StatusPage/StatusPageSubscriberUnsubscribeNotice.js +101 -0
- package/build/dist/Server/Utils/StatusPage/StatusPageSubscriberUnsubscribeNotice.js.map +1 -0
- package/build/dist/Server/Utils/StatusPage/StatusPageSubscriberUnsubscribeToken.js +47 -0
- package/build/dist/Server/Utils/StatusPage/StatusPageSubscriberUnsubscribeToken.js.map +1 -0
- package/build/dist/Server/Utils/StatusPage/SubscriberIncidentEmailBuilder.js +273 -0
- package/build/dist/Server/Utils/StatusPage/SubscriberIncidentEmailBuilder.js.map +1 -0
- package/build/dist/Server/Utils/StatusPage/SubscriberNotificationClaim.js +73 -0
- package/build/dist/Server/Utils/StatusPage/SubscriberNotificationClaim.js.map +1 -0
- package/build/dist/Server/Utils/StatusPage/SubscriberNotificationDeliveryRecord.js +722 -0
- package/build/dist/Server/Utils/StatusPage/SubscriberNotificationDeliveryRecord.js.map +1 -0
- package/build/dist/Server/Utils/StatusPage/SubscriberNotificationFanOut.js +102 -0
- package/build/dist/Server/Utils/StatusPage/SubscriberNotificationFanOut.js.map +1 -0
- package/build/dist/Server/Utils/StatusPage/SubscriberNotificationPreviewBuilder.js +527 -0
- package/build/dist/Server/Utils/StatusPage/SubscriberNotificationPreviewBuilder.js.map +1 -0
- package/build/dist/Server/Utils/StatusPage/SubscriberNotificationResendAccess.js +278 -0
- package/build/dist/Server/Utils/StatusPage/SubscriberNotificationResendAccess.js.map +1 -0
- package/build/dist/Server/Utils/StatusPage/SubscriberNotificationRunLimit.js +137 -0
- package/build/dist/Server/Utils/StatusPage/SubscriberNotificationRunLimit.js.map +1 -0
- package/build/dist/Server/Utils/StatusPage/SubscriberNotificationTiming.js +103 -0
- package/build/dist/Server/Utils/StatusPage/SubscriberNotificationTiming.js.map +1 -0
- package/build/dist/Server/Utils/StatusPage/SubscriberTemplateIncidentRecordAccess.js +114 -0
- package/build/dist/Server/Utils/StatusPage/SubscriberTemplateIncidentRecordAccess.js.map +1 -0
- package/build/dist/Server/Utils/StatusPageResource.js +39 -7
- package/build/dist/Server/Utils/StatusPageResource.js.map +1 -1
- package/build/dist/Server/Utils/Topology/TopologyConcurrencyLimiter.js +178 -0
- package/build/dist/Server/Utils/Topology/TopologyConcurrencyLimiter.js.map +1 -0
- package/build/dist/Server/Utils/Topology/TopologyQueries.js +884 -0
- package/build/dist/Server/Utils/Topology/TopologyQueries.js.map +1 -0
- package/build/dist/Server/Utils/Topology/TopologyRequest.js +275 -0
- package/build/dist/Server/Utils/Topology/TopologyRequest.js.map +1 -0
- package/build/dist/Server/Utils/Topology/TopologyResponseCache.js +146 -0
- package/build/dist/Server/Utils/Topology/TopologyResponseCache.js.map +1 -0
- package/build/dist/Server/Utils/Topology/TopologySql.js +688 -0
- package/build/dist/Server/Utils/Topology/TopologySql.js.map +1 -0
- package/build/dist/Server/Utils/VM/VMAPI.js.map +1 -1
- package/build/dist/Server/Utils/VM/VMRunner.js +1 -0
- package/build/dist/Server/Utils/VM/VMRunner.js.map +1 -1
- package/build/dist/Server/Utils/Workflow/OAuth2TokenClient.js +3 -0
- package/build/dist/Server/Utils/Workflow/OAuth2TokenClient.js.map +1 -1
- package/build/dist/Types/CustomField/CustomFieldOrder.js +36 -0
- package/build/dist/Types/CustomField/CustomFieldOrder.js.map +1 -0
- package/build/dist/Types/CustomField/CustomFieldSavedViews.js +135 -0
- package/build/dist/Types/CustomField/CustomFieldSavedViews.js.map +1 -0
- package/build/dist/Types/CustomField/CustomFieldTemplateMerge.js +27 -0
- package/build/dist/Types/CustomField/CustomFieldTemplateMerge.js.map +1 -0
- package/build/dist/Types/CustomField/CustomFieldType.js +12 -0
- package/build/dist/Types/CustomField/CustomFieldType.js.map +1 -1
- package/build/dist/Types/CustomField/CustomFieldValueFormat.js +126 -0
- package/build/dist/Types/CustomField/CustomFieldValueFormat.js.map +1 -0
- package/build/dist/Types/CustomField/CustomFieldValueValidator.js +280 -0
- package/build/dist/Types/CustomField/CustomFieldValueValidator.js.map +1 -0
- package/build/dist/Types/CustomField/CustomFieldVariableKey.js +150 -0
- package/build/dist/Types/CustomField/CustomFieldVariableKey.js.map +1 -0
- package/build/dist/Types/Incident/IncidentAlertLink.js +17 -0
- package/build/dist/Types/Incident/IncidentAlertLink.js.map +1 -1
- package/build/dist/Types/SafeHtml.js +84 -0
- package/build/dist/Types/SafeHtml.js.map +1 -0
- package/build/dist/Types/StatusPage/IncidentCreatedRenotify.js +117 -0
- package/build/dist/Types/StatusPage/IncidentCreatedRenotify.js.map +1 -0
- package/build/dist/Types/StatusPage/IncidentCreatedResend.js +86 -0
- package/build/dist/Types/StatusPage/IncidentCreatedResend.js.map +1 -0
- package/build/dist/Types/StatusPage/IncidentScopeAddedPagesNotification.js +246 -0
- package/build/dist/Types/StatusPage/IncidentScopeAddedPagesNotification.js.map +1 -0
- package/build/dist/Types/StatusPage/IncidentSubscriberAudience.js +183 -0
- package/build/dist/Types/StatusPage/IncidentSubscriberAudience.js.map +1 -0
- package/build/dist/Types/StatusPage/StatusPageSubscriberUnsubscribe.js +277 -0
- package/build/dist/Types/StatusPage/StatusPageSubscriberUnsubscribe.js.map +1 -0
- package/build/dist/Types/StatusPage/SubscriberNotificationInterruption.js +27 -0
- package/build/dist/Types/StatusPage/SubscriberNotificationInterruption.js.map +1 -0
- package/build/dist/Types/StatusPage/SubscriberNotificationPreview.js +190 -0
- package/build/dist/Types/StatusPage/SubscriberNotificationPreview.js.map +1 -0
- package/build/dist/Types/StatusPage/SubscriberNotificationResend.js +102 -0
- package/build/dist/Types/StatusPage/SubscriberNotificationResend.js.map +1 -0
- package/build/dist/Types/StatusPage/SubscriberNotificationTemplateCompiler.js +97 -0
- package/build/dist/Types/StatusPage/SubscriberNotificationTemplateCompiler.js.map +1 -0
- package/build/dist/Types/StatusPage/SubscriberNotificationTemplatePreview.js +175 -0
- package/build/dist/Types/StatusPage/SubscriberNotificationTemplatePreview.js.map +1 -0
- package/build/dist/Types/StatusPage/SubscriberNotificationTemplateVariables.js +144 -4
- package/build/dist/Types/StatusPage/SubscriberNotificationTemplateVariables.js.map +1 -1
- package/build/dist/Types/StatusPage/SubscriberUpdateNotification.js +29 -9
- package/build/dist/Types/StatusPage/SubscriberUpdateNotification.js.map +1 -1
- package/build/dist/Types/Telemetry/InventoryLiveness.js +23 -0
- package/build/dist/Types/Telemetry/InventoryLiveness.js.map +1 -1
- package/build/dist/Types/Topology/TopologyApi.js +55 -0
- package/build/dist/Types/Topology/TopologyApi.js.map +1 -0
- package/build/dist/Types/Topology/TopologyTypeRules.js +165 -0
- package/build/dist/Types/Topology/TopologyTypeRules.js.map +1 -0
- package/build/dist/UI/Components/CustomFields/CustomFieldFormFields.js +169 -0
- package/build/dist/UI/Components/CustomFields/CustomFieldFormFields.js.map +1 -0
- package/build/dist/UI/Components/CustomFields/CustomFieldModelFormFields.js +212 -0
- package/build/dist/UI/Components/CustomFields/CustomFieldModelFormFields.js.map +1 -0
- package/build/dist/UI/Components/CustomFields/CustomFieldsDetail.js +64 -49
- package/build/dist/UI/Components/CustomFields/CustomFieldsDetail.js.map +1 -1
- package/build/dist/UI/Components/Forms/ModelForm.js +39 -5
- package/build/dist/UI/Components/Forms/ModelForm.js.map +1 -1
- package/build/dist/UI/Components/Forms/Validation.js +1 -1
- package/build/dist/UI/Components/Forms/Validation.js.map +1 -1
- package/build/dist/UI/Components/ModelFormModal/ModelFormModal.js.map +1 -1
- package/build/dist/UI/Components/ModelTable/AnalyticsModelTable.js.map +1 -1
- package/build/dist/UI/Components/ModelTable/BaseModelTable.js +2 -2
- package/build/dist/UI/Components/ModelTable/BaseModelTable.js.map +1 -1
- package/build/dist/UI/Components/ModelTable/CustomFieldColumns.js +13 -1
- package/build/dist/UI/Components/ModelTable/CustomFieldColumns.js.map +1 -1
- package/build/dist/UI/Components/ModelTable/ModelTable.js +1 -1
- package/build/dist/UI/Components/ModelTable/ModelTable.js.map +1 -1
- package/build/dist/UI/Utils/SensitiveUrlToken.js +10 -5
- package/build/dist/UI/Utils/SensitiveUrlToken.js.map +1 -1
- package/build/dist/Utils/API.js +177 -1
- package/build/dist/Utils/API.js.map +1 -1
- package/build/dist/Utils/Incident/IncidentFromAlerts.js +38 -0
- package/build/dist/Utils/Incident/IncidentFromAlerts.js.map +1 -1
- package/build/dist/Utils/Incident/IncidentNoteTemplateVariables.js +155 -0
- package/build/dist/Utils/Incident/IncidentNoteTemplateVariables.js.map +1 -0
- package/build/dist/Utils/Markdown/MarkdownEscape.js +48 -0
- package/build/dist/Utils/Markdown/MarkdownEscape.js.map +1 -1
- package/build/dist/Utils/ProbeNetworkFailureUtil.js +460 -0
- package/build/dist/Utils/ProbeNetworkFailureUtil.js.map +1 -0
- package/package.json +1 -1
|
@@ -1,5 +1,60 @@
|
|
|
1
|
+
import { CUSTOM_FIELD_TEMPLATE_VARIABLE_PREFIX, isValidCustomFieldVariableKey, } from "../CustomField/CustomFieldVariableKey";
|
|
1
2
|
import BadDataException from "../Exception/BadDataException";
|
|
2
3
|
import StatusPageSubscriberNotificationEventType from "./StatusPageSubscriberNotificationEventType";
|
|
4
|
+
import SubscriberNotificationTemplateCompiler from "./SubscriberNotificationTemplateCompiler";
|
|
5
|
+
/*
|
|
6
|
+
* The variables every incident event offers on top of its own: the
|
|
7
|
+
* incident's labels, the status pages it is on, and its custom fields.
|
|
8
|
+
*
|
|
9
|
+
* affectedStatusPages and the custom fields are internal data - a status
|
|
10
|
+
* page's subscribers are usually outside the team, and the list of pages
|
|
11
|
+
* names every other audience the incident reaches - so the worker never puts
|
|
12
|
+
* them into a message on its own. They reach subscribers only where a
|
|
13
|
+
* template author places them, and the template form warns about it.
|
|
14
|
+
*/
|
|
15
|
+
const INCIDENT_VARIABLES = [
|
|
16
|
+
{
|
|
17
|
+
name: "incidentLabels",
|
|
18
|
+
description: "Labels of the incident, separated by commas",
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
name: "affectedStatusPages",
|
|
22
|
+
description: "Names of every status page the incident is shown on, separated by commas. Internal: it names the status pages of every audience the incident reaches",
|
|
23
|
+
},
|
|
24
|
+
];
|
|
25
|
+
const INCIDENT_DYNAMIC_VARIABLES = [
|
|
26
|
+
{
|
|
27
|
+
prefix: CUSTOM_FIELD_TEMPLATE_VARIABLE_PREFIX,
|
|
28
|
+
placeholder: "<key>",
|
|
29
|
+
isValidKey: isValidCustomFieldVariableKey,
|
|
30
|
+
description: "The value of an incident custom field, by the field's Template Variable key. Internal: any custom field can be placed, whether or not it is marked to be included in subscriber notifications",
|
|
31
|
+
mayBeHtmlInEmailBody: true,
|
|
32
|
+
},
|
|
33
|
+
];
|
|
34
|
+
/*
|
|
35
|
+
* The variables that read the team's own incident records rather than what
|
|
36
|
+
* the incident's status pages already show: its labels, and every custom
|
|
37
|
+
* field ({{customFields.<key>}}), marked for subscribers or not. The title,
|
|
38
|
+
* description, severity, state and public notes are on the status page for
|
|
39
|
+
* anyone who can see it; these are not, and the status page roles that may
|
|
40
|
+
* write templates may not read them. So a template can place them only if
|
|
41
|
+
* whoever writes it may read them (Server/Utils/StatusPage/
|
|
42
|
+
* SubscriberTemplateIncidentRecordAccess).
|
|
43
|
+
*
|
|
44
|
+
* {{affectedStatusPages}} is not one of them: it names status pages, which
|
|
45
|
+
* the same roles read.
|
|
46
|
+
*/
|
|
47
|
+
const INCIDENT_RECORD_VARIABLE_NAMES = [
|
|
48
|
+
"incidentLabels",
|
|
49
|
+
];
|
|
50
|
+
// The incident events, which offer INCIDENT_VARIABLES and the custom fields.
|
|
51
|
+
const INCIDENT_EVENT_TYPES = [
|
|
52
|
+
StatusPageSubscriberNotificationEventType.SubscriberIncidentCreated,
|
|
53
|
+
StatusPageSubscriberNotificationEventType.SubscriberIncidentStateChanged,
|
|
54
|
+
StatusPageSubscriberNotificationEventType.SubscriberIncidentNoteCreated,
|
|
55
|
+
StatusPageSubscriberNotificationEventType.SubscriberIncidentNoteUpdated,
|
|
56
|
+
StatusPageSubscriberNotificationEventType.SubscriberIncidentPostmortemPublished,
|
|
57
|
+
];
|
|
3
58
|
/*
|
|
4
59
|
* The variables a custom status page subscriber notification template can use
|
|
5
60
|
* for each event type, as {{variableName}}.
|
|
@@ -29,7 +84,11 @@ export default class SubscriberNotificationTemplateVariables {
|
|
|
29
84
|
];
|
|
30
85
|
const commonVariables = [
|
|
31
86
|
...statusPageVariables,
|
|
32
|
-
{
|
|
87
|
+
{
|
|
88
|
+
name: "resourcesAffected",
|
|
89
|
+
description: "List of affected resources",
|
|
90
|
+
isHtmlInEmailBody: true,
|
|
91
|
+
},
|
|
33
92
|
];
|
|
34
93
|
switch (eventType) {
|
|
35
94
|
case StatusPageSubscriberNotificationEventType.SubscriberSubscriptionConfirmation:
|
|
@@ -57,9 +116,11 @@ export default class SubscriberNotificationTemplateVariables {
|
|
|
57
116
|
{
|
|
58
117
|
name: "incidentDescription",
|
|
59
118
|
description: "Description of the incident",
|
|
119
|
+
isHtmlInEmailBody: true,
|
|
60
120
|
},
|
|
61
121
|
{ name: "incidentSeverity", description: "Severity of the incident" },
|
|
62
122
|
{ name: "detailsUrl", description: "URL to view incident details" },
|
|
123
|
+
...INCIDENT_VARIABLES,
|
|
63
124
|
];
|
|
64
125
|
case StatusPageSubscriberNotificationEventType.SubscriberIncidentStateChanged:
|
|
65
126
|
return [
|
|
@@ -68,6 +129,7 @@ export default class SubscriberNotificationTemplateVariables {
|
|
|
68
129
|
{
|
|
69
130
|
name: "incidentDescription",
|
|
70
131
|
description: "Description of the incident",
|
|
132
|
+
isHtmlInEmailBody: true,
|
|
71
133
|
},
|
|
72
134
|
{ name: "incidentSeverity", description: "Severity of the incident" },
|
|
73
135
|
{
|
|
@@ -75,6 +137,7 @@ export default class SubscriberNotificationTemplateVariables {
|
|
|
75
137
|
description: "Current state of the incident",
|
|
76
138
|
},
|
|
77
139
|
{ name: "detailsUrl", description: "URL to view incident details" },
|
|
140
|
+
...INCIDENT_VARIABLES,
|
|
78
141
|
];
|
|
79
142
|
case StatusPageSubscriberNotificationEventType.SubscriberIncidentNoteCreated:
|
|
80
143
|
case StatusPageSubscriberNotificationEventType.SubscriberIncidentNoteUpdated:
|
|
@@ -87,8 +150,13 @@ export default class SubscriberNotificationTemplateVariables {
|
|
|
87
150
|
description: "Current state of the incident",
|
|
88
151
|
},
|
|
89
152
|
{ name: "postedAt", description: "When the note was posted" },
|
|
90
|
-
{
|
|
153
|
+
{
|
|
154
|
+
name: "note",
|
|
155
|
+
description: "Content of the note",
|
|
156
|
+
isHtmlInEmailBody: true,
|
|
157
|
+
},
|
|
91
158
|
{ name: "detailsUrl", description: "URL to view incident details" },
|
|
159
|
+
...INCIDENT_VARIABLES,
|
|
92
160
|
];
|
|
93
161
|
case StatusPageSubscriberNotificationEventType.SubscriberIncidentPostmortemPublished:
|
|
94
162
|
return [
|
|
@@ -98,8 +166,10 @@ export default class SubscriberNotificationTemplateVariables {
|
|
|
98
166
|
{
|
|
99
167
|
name: "postmortemNote",
|
|
100
168
|
description: "Content of the postmortem note",
|
|
169
|
+
isHtmlInEmailBody: true,
|
|
101
170
|
},
|
|
102
171
|
{ name: "detailsUrl", description: "URL to view incident details" },
|
|
172
|
+
...INCIDENT_VARIABLES,
|
|
103
173
|
];
|
|
104
174
|
case StatusPageSubscriberNotificationEventType.SubscriberAnnouncementCreated:
|
|
105
175
|
case StatusPageSubscriberNotificationEventType.SubscriberAnnouncementUpdated:
|
|
@@ -112,6 +182,7 @@ export default class SubscriberNotificationTemplateVariables {
|
|
|
112
182
|
{
|
|
113
183
|
name: "announcementDescription",
|
|
114
184
|
description: "Description of the announcement",
|
|
185
|
+
isHtmlInEmailBody: true,
|
|
115
186
|
},
|
|
116
187
|
{
|
|
117
188
|
name: "detailsUrl",
|
|
@@ -128,6 +199,7 @@ export default class SubscriberNotificationTemplateVariables {
|
|
|
128
199
|
{
|
|
129
200
|
name: "scheduledMaintenanceDescription",
|
|
130
201
|
description: "Description of the scheduled maintenance",
|
|
202
|
+
isHtmlInEmailBody: true,
|
|
131
203
|
},
|
|
132
204
|
{
|
|
133
205
|
name: "scheduledStartTime",
|
|
@@ -152,6 +224,7 @@ export default class SubscriberNotificationTemplateVariables {
|
|
|
152
224
|
{
|
|
153
225
|
name: "scheduledMaintenanceDescription",
|
|
154
226
|
description: "Description of the scheduled maintenance",
|
|
227
|
+
isHtmlInEmailBody: true,
|
|
155
228
|
},
|
|
156
229
|
{
|
|
157
230
|
name: "scheduledMaintenanceState",
|
|
@@ -173,13 +246,18 @@ export default class SubscriberNotificationTemplateVariables {
|
|
|
173
246
|
{
|
|
174
247
|
name: "scheduledMaintenanceDescription",
|
|
175
248
|
description: "Description of the scheduled maintenance",
|
|
249
|
+
isHtmlInEmailBody: true,
|
|
176
250
|
},
|
|
177
251
|
{
|
|
178
252
|
name: "scheduledMaintenanceState",
|
|
179
253
|
description: "Current state of the scheduled maintenance",
|
|
180
254
|
},
|
|
181
255
|
{ name: "postedAt", description: "When the note was posted" },
|
|
182
|
-
{
|
|
256
|
+
{
|
|
257
|
+
name: "note",
|
|
258
|
+
description: "Content of the note",
|
|
259
|
+
isHtmlInEmailBody: true,
|
|
260
|
+
},
|
|
183
261
|
{
|
|
184
262
|
name: "detailsUrl",
|
|
185
263
|
description: "URL to view scheduled maintenance details",
|
|
@@ -192,6 +270,7 @@ export default class SubscriberNotificationTemplateVariables {
|
|
|
192
270
|
{
|
|
193
271
|
name: "episodeDescription",
|
|
194
272
|
description: "Description of the incident",
|
|
273
|
+
isHtmlInEmailBody: true,
|
|
195
274
|
},
|
|
196
275
|
{ name: "episodeSeverity", description: "Severity of the incident" },
|
|
197
276
|
{ name: "detailsUrl", description: "URL to view incident details" },
|
|
@@ -213,7 +292,11 @@ export default class SubscriberNotificationTemplateVariables {
|
|
|
213
292
|
...commonVariables,
|
|
214
293
|
{ name: "episodeTitle", description: "Title of the incident" },
|
|
215
294
|
{ name: "episodeSeverity", description: "Severity of the incident" },
|
|
216
|
-
{
|
|
295
|
+
{
|
|
296
|
+
name: "note",
|
|
297
|
+
description: "Content of the note",
|
|
298
|
+
isHtmlInEmailBody: true,
|
|
299
|
+
},
|
|
217
300
|
{ name: "detailsUrl", description: "URL to view incident details" },
|
|
218
301
|
];
|
|
219
302
|
case StatusPageSubscriberNotificationEventType.SubscriberReport:
|
|
@@ -286,10 +369,67 @@ export default class SubscriberNotificationTemplateVariables {
|
|
|
286
369
|
throw new BadDataException(`Unknown event type: ${eventType}`);
|
|
287
370
|
}
|
|
288
371
|
}
|
|
372
|
+
// The variables that are HTML, not plain text, in an email template's body.
|
|
373
|
+
static getEmailBodyHtmlVariableNamesForEventType(eventType) {
|
|
374
|
+
return this.getAvailableVariablesForEventType(eventType)
|
|
375
|
+
.filter((variable) => {
|
|
376
|
+
return variable.isHtmlInEmailBody === true;
|
|
377
|
+
})
|
|
378
|
+
.map((variable) => {
|
|
379
|
+
return variable.name;
|
|
380
|
+
});
|
|
381
|
+
}
|
|
289
382
|
static getVariableNamesForEventType(eventType) {
|
|
290
383
|
return this.getAvailableVariablesForEventType(eventType).map((variable) => {
|
|
291
384
|
return variable.name;
|
|
292
385
|
});
|
|
293
386
|
}
|
|
387
|
+
/*
|
|
388
|
+
* The families of variables this event offers on top of the listed ones,
|
|
389
|
+
* by prefix: the incident events' {{customFields.<key>}}.
|
|
390
|
+
*/
|
|
391
|
+
static getDynamicVariablesForEventType(eventType) {
|
|
392
|
+
return INCIDENT_EVENT_TYPES.includes(eventType)
|
|
393
|
+
? INCIDENT_DYNAMIC_VARIABLES.map((variable) => {
|
|
394
|
+
return Object.assign({}, variable);
|
|
395
|
+
})
|
|
396
|
+
: [];
|
|
397
|
+
}
|
|
398
|
+
/*
|
|
399
|
+
* The family this name belongs to, when it is one: the prefix followed by
|
|
400
|
+
* a key of the family's shape (for a custom field, the shape its Template
|
|
401
|
+
* Variable key is made in, which the template compiler fills). Null for a
|
|
402
|
+
* listed variable, a bare prefix, or a name the event does not offer.
|
|
403
|
+
*/
|
|
404
|
+
static getDynamicVariableForName(eventType, name) {
|
|
405
|
+
for (const variable of this.getDynamicVariablesForEventType(eventType)) {
|
|
406
|
+
if (name.startsWith(variable.prefix) &&
|
|
407
|
+
variable.isValidKey(name.slice(variable.prefix.length))) {
|
|
408
|
+
return variable;
|
|
409
|
+
}
|
|
410
|
+
}
|
|
411
|
+
return null;
|
|
412
|
+
}
|
|
413
|
+
/**
|
|
414
|
+
* The placeholders in these texts - a template's body and email subject -
|
|
415
|
+
* that read the team's incident records (INCIDENT_RECORD_VARIABLE_NAMES
|
|
416
|
+
* and any {{customFields.<key>}}, whether or not such a field exists),
|
|
417
|
+
* each once, sorted. Found exactly as the compiler finds what it fills,
|
|
418
|
+
* whatever the template's event type: an update can change the event type
|
|
419
|
+
* without touching the text.
|
|
420
|
+
*/
|
|
421
|
+
static getIncidentRecordPlaceholders(texts) {
|
|
422
|
+
return Array.from(SubscriberNotificationTemplateCompiler.getPlaceholderNames(texts))
|
|
423
|
+
.filter((name) => {
|
|
424
|
+
return (INCIDENT_RECORD_VARIABLE_NAMES.includes(name) ||
|
|
425
|
+
name.startsWith(CUSTOM_FIELD_TEMPLATE_VARIABLE_PREFIX));
|
|
426
|
+
})
|
|
427
|
+
.sort();
|
|
428
|
+
}
|
|
429
|
+
// Whether a template for this event can use {{name}}.
|
|
430
|
+
static isVariableOffered(eventType, name) {
|
|
431
|
+
return (this.getVariableNamesForEventType(eventType).includes(name) ||
|
|
432
|
+
this.getDynamicVariableForName(eventType, name) !== null);
|
|
433
|
+
}
|
|
294
434
|
}
|
|
295
435
|
//# sourceMappingURL=SubscriberNotificationTemplateVariables.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SubscriberNotificationTemplateVariables.js","sourceRoot":"","sources":["../../../../Types/StatusPage/SubscriberNotificationTemplateVariables.ts"],"names":[],"mappings":"AAAA,OAAO,gBAAgB,MAAM,+BAA+B,CAAC;AAC7D,OAAO,yCAAyC,MAAM,6CAA6C,CAAC;
|
|
1
|
+
{"version":3,"file":"SubscriberNotificationTemplateVariables.js","sourceRoot":"","sources":["../../../../Types/StatusPage/SubscriberNotificationTemplateVariables.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qCAAqC,EACrC,6BAA6B,GAC9B,MAAM,uCAAuC,CAAC;AAC/C,OAAO,gBAAgB,MAAM,+BAA+B,CAAC;AAC7D,OAAO,yCAAyC,MAAM,6CAA6C,CAAC;AACpG,OAAO,sCAAsC,MAAM,0CAA0C,CAAC;AAuC9F;;;;;;;;;GASG;AACH,MAAM,kBAAkB,GAAkD;IACxE;QACE,IAAI,EAAE,gBAAgB;QACtB,WAAW,EAAE,6CAA6C;KAC3D;IACD;QACE,IAAI,EAAE,qBAAqB;QAC3B,WAAW,EACT,sJAAsJ;KACzJ;CACF,CAAC;AAEF,MAAM,0BAA0B,GAC9B;IACE;QACE,MAAM,EAAE,qCAAqC;QAC7C,WAAW,EAAE,OAAO;QACpB,UAAU,EAAE,6BAA6B;QACzC,WAAW,EACT,+LAA+L;QACjM,oBAAoB,EAAE,IAAI;KAC3B;CACF,CAAC;AAEJ;;;;;;;;;;;;GAYG;AACH,MAAM,8BAA8B,GAA0B;IAC5D,gBAAgB;CACjB,CAAC;AAEF,6EAA6E;AAC7E,MAAM,oBAAoB,GACxB;IACE,yCAAyC,CAAC,yBAAyB;IACnE,yCAAyC,CAAC,8BAA8B;IACxE,yCAAyC,CAAC,6BAA6B;IACvE,yCAAyC,CAAC,6BAA6B;IACvE,yCAAyC,CAAC,qCAAqC;CAChF,CAAC;AAEJ;;;;;;;;;;GAUG;AACH,MAAM,CAAC,OAAO,OAAO,uCAAuC;IACnD,MAAM,CAAC,iCAAiC,CAC7C,SAAoD;QAEpD;;;;;WAKG;QACH,MAAM,mBAAmB,GAAkD;YACzE,EAAE,IAAI,EAAE,gBAAgB,EAAE,WAAW,EAAE,yBAAyB,EAAE;YAClE,EAAE,IAAI,EAAE,eAAe,EAAE,WAAW,EAAE,wBAAwB,EAAE;YAChE;gBACE,IAAI,EAAE,gBAAgB;gBACtB,WAAW,EAAE,uCAAuC;aACrD;SACF,CAAC;QAEF,MAAM,eAAe,GAAkD;YACrE,GAAG,mBAAmB;YACtB;gBACE,IAAI,EAAE,mBAAmB;gBACzB,WAAW,EAAE,4BAA4B;gBACzC,iBAAiB,EAAE,IAAI;aACxB;SACF,CAAC;QAEF,QAAQ,SAAS,EAAE,CAAC;YAClB,KAAK,yCAAyC,CAAC,kCAAkC;gBAC/E,OAAO;oBACL,GAAG,mBAAmB;oBACtB;wBACE,IAAI,EAAE,iBAAiB;wBACvB,WAAW,EACT,wDAAwD;qBAC3D;iBACF,CAAC;YAEJ,KAAK,yCAAyC,CAAC,oBAAoB;gBACjE,OAAO,CAAC,GAAG,mBAAmB,CAAC,CAAC;YAElC,KAAK,yCAAyC,CAAC,4BAA4B;gBACzE,OAAO;oBACL,GAAG,mBAAmB;oBACtB;wBACE,IAAI,EAAE,uBAAuB;wBAC7B,WAAW,EACT,gEAAgE;qBACnE;iBACF,CAAC;YAEJ,KAAK,yCAAyC,CAAC,yBAAyB;gBACtE,OAAO;oBACL,GAAG,eAAe;oBAClB,EAAE,IAAI,EAAE,eAAe,EAAE,WAAW,EAAE,uBAAuB,EAAE;oBAC/D;wBACE,IAAI,EAAE,qBAAqB;wBAC3B,WAAW,EAAE,6BAA6B;wBAC1C,iBAAiB,EAAE,IAAI;qBACxB;oBACD,EAAE,IAAI,EAAE,kBAAkB,EAAE,WAAW,EAAE,0BAA0B,EAAE;oBACrE,EAAE,IAAI,EAAE,YAAY,EAAE,WAAW,EAAE,8BAA8B,EAAE;oBACnE,GAAG,kBAAkB;iBACtB,CAAC;YAEJ,KAAK,yCAAyC,CAAC,8BAA8B;gBAC3E,OAAO;oBACL,GAAG,eAAe;oBAClB,EAAE,IAAI,EAAE,eAAe,EAAE,WAAW,EAAE,uBAAuB,EAAE;oBAC/D;wBACE,IAAI,EAAE,qBAAqB;wBAC3B,WAAW,EAAE,6BAA6B;wBAC1C,iBAAiB,EAAE,IAAI;qBACxB;oBACD,EAAE,IAAI,EAAE,kBAAkB,EAAE,WAAW,EAAE,0BAA0B,EAAE;oBACrE;wBACE,IAAI,EAAE,eAAe;wBACrB,WAAW,EAAE,+BAA+B;qBAC7C;oBACD,EAAE,IAAI,EAAE,YAAY,EAAE,WAAW,EAAE,8BAA8B,EAAE;oBACnE,GAAG,kBAAkB;iBACtB,CAAC;YAEJ,KAAK,yCAAyC,CAAC,6BAA6B,CAAC;YAC7E,KAAK,yCAAyC,CAAC,6BAA6B;gBAC1E,OAAO;oBACL,GAAG,eAAe;oBAClB,EAAE,IAAI,EAAE,eAAe,EAAE,WAAW,EAAE,uBAAuB,EAAE;oBAC/D,EAAE,IAAI,EAAE,kBAAkB,EAAE,WAAW,EAAE,0BAA0B,EAAE;oBACrE;wBACE,IAAI,EAAE,eAAe;wBACrB,WAAW,EAAE,+BAA+B;qBAC7C;oBACD,EAAE,IAAI,EAAE,UAAU,EAAE,WAAW,EAAE,0BAA0B,EAAE;oBAC7D;wBACE,IAAI,EAAE,MAAM;wBACZ,WAAW,EAAE,qBAAqB;wBAClC,iBAAiB,EAAE,IAAI;qBACxB;oBACD,EAAE,IAAI,EAAE,YAAY,EAAE,WAAW,EAAE,8BAA8B,EAAE;oBACnE,GAAG,kBAAkB;iBACtB,CAAC;YAEJ,KAAK,yCAAyC,CAAC,qCAAqC;gBAClF,OAAO;oBACL,GAAG,eAAe;oBAClB,EAAE,IAAI,EAAE,eAAe,EAAE,WAAW,EAAE,uBAAuB,EAAE;oBAC/D,EAAE,IAAI,EAAE,kBAAkB,EAAE,WAAW,EAAE,0BAA0B,EAAE;oBACrE;wBACE,IAAI,EAAE,gBAAgB;wBACtB,WAAW,EAAE,gCAAgC;wBAC7C,iBAAiB,EAAE,IAAI;qBACxB;oBACD,EAAE,IAAI,EAAE,YAAY,EAAE,WAAW,EAAE,8BAA8B,EAAE;oBACnE,GAAG,kBAAkB;iBACtB,CAAC;YAEJ,KAAK,yCAAyC,CAAC,6BAA6B,CAAC;YAC7E,KAAK,yCAAyC,CAAC,6BAA6B;gBAC1E,OAAO;oBACL,GAAG,eAAe;oBAClB;wBACE,IAAI,EAAE,mBAAmB;wBACzB,WAAW,EAAE,2BAA2B;qBACzC;oBACD;wBACE,IAAI,EAAE,yBAAyB;wBAC/B,WAAW,EAAE,iCAAiC;wBAC9C,iBAAiB,EAAE,IAAI;qBACxB;oBACD;wBACE,IAAI,EAAE,YAAY;wBAClB,WAAW,EAAE,kCAAkC;qBAChD;iBACF,CAAC;YAEJ,KAAK,yCAAyC,CAAC,qCAAqC;gBAClF,OAAO;oBACL,GAAG,eAAe;oBAClB;wBACE,IAAI,EAAE,2BAA2B;wBACjC,WAAW,EAAE,oCAAoC;qBAClD;oBACD;wBACE,IAAI,EAAE,iCAAiC;wBACvC,WAAW,EAAE,0CAA0C;wBACvD,iBAAiB,EAAE,IAAI;qBACxB;oBACD;wBACE,IAAI,EAAE,oBAAoB;wBAC1B,WAAW,EAAE,4CAA4C;qBAC1D;oBACD;wBACE,IAAI,EAAE,kBAAkB;wBACxB,WAAW,EAAE,0CAA0C;qBACxD;oBACD;wBACE,IAAI,EAAE,YAAY;wBAClB,WAAW,EAAE,2CAA2C;qBACzD;iBACF,CAAC;YAEJ,KAAK,yCAAyC,CAAC,0CAA0C;gBACvF,OAAO;oBACL,GAAG,eAAe;oBAClB;wBACE,IAAI,EAAE,2BAA2B;wBACjC,WAAW,EAAE,oCAAoC;qBAClD;oBACD;wBACE,IAAI,EAAE,iCAAiC;wBACvC,WAAW,EAAE,0CAA0C;wBACvD,iBAAiB,EAAE,IAAI;qBACxB;oBACD;wBACE,IAAI,EAAE,2BAA2B;wBACjC,WAAW,EAAE,4CAA4C;qBAC1D;oBACD;wBACE,IAAI,EAAE,YAAY;wBAClB,WAAW,EAAE,2CAA2C;qBACzD;iBACF,CAAC;YAEJ,KAAK,yCAAyC,CAAC,yCAAyC,CAAC;YACzF,KAAK,yCAAyC,CAAC,yCAAyC;gBACtF,OAAO;oBACL,GAAG,eAAe;oBAClB;wBACE,IAAI,EAAE,2BAA2B;wBACjC,WAAW,EAAE,oCAAoC;qBAClD;oBACD;wBACE,IAAI,EAAE,iCAAiC;wBACvC,WAAW,EAAE,0CAA0C;wBACvD,iBAAiB,EAAE,IAAI;qBACxB;oBACD;wBACE,IAAI,EAAE,2BAA2B;wBACjC,WAAW,EAAE,4CAA4C;qBAC1D;oBACD,EAAE,IAAI,EAAE,UAAU,EAAE,WAAW,EAAE,0BAA0B,EAAE;oBAC7D;wBACE,IAAI,EAAE,MAAM;wBACZ,WAAW,EAAE,qBAAqB;wBAClC,iBAAiB,EAAE,IAAI;qBACxB;oBACD;wBACE,IAAI,EAAE,YAAY;wBAClB,WAAW,EAAE,2CAA2C;qBACzD;iBACF,CAAC;YAEJ,KAAK,yCAAyC,CAAC,wBAAwB;gBACrE,OAAO;oBACL,GAAG,eAAe;oBAClB,EAAE,IAAI,EAAE,cAAc,EAAE,WAAW,EAAE,uBAAuB,EAAE;oBAC9D;wBACE,IAAI,EAAE,oBAAoB;wBAC1B,WAAW,EAAE,6BAA6B;wBAC1C,iBAAiB,EAAE,IAAI;qBACxB;oBACD,EAAE,IAAI,EAAE,iBAAiB,EAAE,WAAW,EAAE,0BAA0B,EAAE;oBACpE,EAAE,IAAI,EAAE,YAAY,EAAE,WAAW,EAAE,8BAA8B,EAAE;iBACpE,CAAC;YAEJ,KAAK,yCAAyC,CAAC,6BAA6B;gBAC1E,OAAO;oBACL,GAAG,eAAe;oBAClB,EAAE,IAAI,EAAE,cAAc,EAAE,WAAW,EAAE,uBAAuB,EAAE;oBAC9D,EAAE,IAAI,EAAE,iBAAiB,EAAE,WAAW,EAAE,0BAA0B,EAAE;oBACpE;wBACE,IAAI,EAAE,cAAc;wBACpB,WAAW,EAAE,+BAA+B;qBAC7C;oBACD,EAAE,IAAI,EAAE,YAAY,EAAE,WAAW,EAAE,8BAA8B,EAAE;iBACpE,CAAC;YAEJ,KAAK,yCAAyC,CAAC,4BAA4B,CAAC;YAC5E,KAAK,yCAAyC,CAAC,4BAA4B;gBACzE,OAAO;oBACL,GAAG,eAAe;oBAClB,EAAE,IAAI,EAAE,cAAc,EAAE,WAAW,EAAE,uBAAuB,EAAE;oBAC9D,EAAE,IAAI,EAAE,iBAAiB,EAAE,WAAW,EAAE,0BAA0B,EAAE;oBACpE;wBACE,IAAI,EAAE,MAAM;wBACZ,WAAW,EAAE,qBAAqB;wBAClC,iBAAiB,EAAE,IAAI;qBACxB;oBACD,EAAE,IAAI,EAAE,YAAY,EAAE,WAAW,EAAE,8BAA8B,EAAE;iBACpE,CAAC;YAEJ,KAAK,yCAAyC,CAAC,gBAAgB;gBAC7D;;;;;mBAKG;gBACH,OAAO;oBACL,GAAG,mBAAmB;oBACtB;wBACE,IAAI,EAAE,oBAAoB;wBAC1B,WAAW,EAAE,iCAAiC;qBAC/C;oBACD;wBACE,IAAI,EAAE,yBAAyB;wBAC/B,WAAW,EACT,uEAAuE;qBAC1E;oBACD;wBACE,IAAI,EAAE,wBAAwB;wBAC9B,WAAW,EAAE,mCAAmC;qBACjD;oBACD;wBACE,IAAI,EAAE,sBAAsB;wBAC5B,WAAW,EAAE,kCAAkC;qBAChD;oBACD;wBACE,IAAI,EAAE,uBAAuB;wBAC7B,WAAW,EAAE,mDAAmD;qBACjE;oBACD;wBACE,IAAI,EAAE,6BAA6B;wBACnC,WAAW,EAAE,qCAAqC;qBACnD;oBACD;wBACE,IAAI,EAAE,uCAAuC;wBAC7C,WAAW,EAAE,8BAA8B;qBAC5C;oBACD;wBACE,IAAI,EAAE,uBAAuB;wBAC7B,WAAW,EAAE,yCAAyC;qBACvD;oBACD;wBACE,IAAI,EAAE,uBAAuB;wBAC7B,WAAW,EAAE,wCAAwC;qBACtD;oBACD;wBACE,IAAI,EAAE,kBAAkB;wBACxB,WAAW,EACT,mKAAmK;qBACtK;oBACD;wBACE,IAAI,EAAE,kBAAkB;wBACxB,WAAW,EACT,+DAA+D;qBAClE;oBACD;wBACE,IAAI,EAAE,aAAa;wBACnB,WAAW,EACT,wNAAwN;qBAC3N;oBACD;wBACE,IAAI,EAAE,eAAe;wBACrB,WAAW,EACT,gLAAgL;qBACnL;oBACD;wBACE,IAAI,EAAE,2BAA2B;wBACjC,WAAW,EAAE,sDAAsD;qBACpE;iBACF,CAAC;YAEJ;gBACE,MAAM,IAAI,gBAAgB,CAAC,uBAAuB,SAAS,EAAE,CAAC,CAAC;QACnE,CAAC;IACH,CAAC;IAED,4EAA4E;IACrE,MAAM,CAAC,yCAAyC,CACrD,SAAoD;QAEpD,OAAO,IAAI,CAAC,iCAAiC,CAAC,SAAS,CAAC;aACrD,MAAM,CAAC,CAAC,QAAgD,EAAW,EAAE;YACpE,OAAO,QAAQ,CAAC,iBAAiB,KAAK,IAAI,CAAC;QAC7C,CAAC,CAAC;aACD,GAAG,CAAC,CAAC,QAAgD,EAAU,EAAE;YAChE,OAAO,QAAQ,CAAC,IAAI,CAAC;QACvB,CAAC,CAAC,CAAC;IACP,CAAC;IAEM,MAAM,CAAC,4BAA4B,CACxC,SAAoD;QAEpD,OAAO,IAAI,CAAC,iCAAiC,CAAC,SAAS,CAAC,CAAC,GAAG,CAC1D,CAAC,QAAgD,EAAU,EAAE;YAC3D,OAAO,QAAQ,CAAC,IAAI,CAAC;QACvB,CAAC,CACF,CAAC;IACJ,CAAC;IAED;;;OAGG;IACI,MAAM,CAAC,+BAA+B,CAC3C,SAAoD;QAEpD,OAAO,oBAAoB,CAAC,QAAQ,CAAC,SAAS,CAAC;YAC7C,CAAC,CAAC,0BAA0B,CAAC,GAAG,CAC5B,CACE,QAAuD,EACR,EAAE;gBACjD,yBAAY,QAAQ,EAAG;YACzB,CAAC,CACF;YACH,CAAC,CAAC,EAAE,CAAC;IACT,CAAC;IAED;;;;;OAKG;IACI,MAAM,CAAC,yBAAyB,CACrC,SAAoD,EACpD,IAAY;QAEZ,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,+BAA+B,CAAC,SAAS,CAAC,EAAE,CAAC;YACvE,IACE,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC;gBAChC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EACvD,CAAC;gBACD,OAAO,QAAQ,CAAC;YAClB,CAAC;QACH,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;;;;OAOG;IACI,MAAM,CAAC,6BAA6B,CACzC,KAAuC;QAEvC,OAAO,KAAK,CAAC,IAAI,CACf,sCAAsC,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAClE;aACE,MAAM,CAAC,CAAC,IAAY,EAAW,EAAE;YAChC,OAAO,CACL,8BAA8B,CAAC,QAAQ,CAAC,IAAI,CAAC;gBAC7C,IAAI,CAAC,UAAU,CAAC,qCAAqC,CAAC,CACvD,CAAC;QACJ,CAAC,CAAC;aACD,IAAI,EAAE,CAAC;IACZ,CAAC;IAED,sDAAsD;IAC/C,MAAM,CAAC,iBAAiB,CAC7B,SAAoD,EACpD,IAAY;QAEZ,OAAO,CACL,IAAI,CAAC,4BAA4B,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC;YAC3D,IAAI,CAAC,yBAAyB,CAAC,SAAS,EAAE,IAAI,CAAC,KAAK,IAAI,CACzD,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -37,24 +37,44 @@ class SubscriberUpdateNotification {
|
|
|
37
37
|
}
|
|
38
38
|
/*
|
|
39
39
|
* Returns why an update notification should not be sent given where the
|
|
40
|
-
* original ("posted") notification is, or null when it may go out
|
|
40
|
+
* original ("posted") notification is, or null when it may go out - or
|
|
41
|
+
* wait (see isOriginalNotificationBeingSent).
|
|
41
42
|
*
|
|
42
|
-
* While the original is still Pending
|
|
43
|
-
*
|
|
44
|
-
*
|
|
45
|
-
*
|
|
43
|
+
* While the original is still Pending, subscribers have not heard of the
|
|
44
|
+
* item at all, and the original will carry this edit: the edit changed the
|
|
45
|
+
* row's version, so the run that claims the original
|
|
46
|
+
* (SubscriberNotificationClaim, which checks the version it read) has read
|
|
47
|
+
* the item since. A second "updated" message about something they were
|
|
48
|
+
* never told about would only confuse them.
|
|
49
|
+
*
|
|
50
|
+
* InProgress is different: that send read the item before it claimed it,
|
|
51
|
+
* and goes on with what it read, so it may carry the text from before the
|
|
52
|
+
* edit - a typo fixed, or an ETA corrected, right after posting is exactly
|
|
53
|
+
* that case. The update waits for it instead
|
|
54
|
+
* (isOriginalNotificationBeingSent), and goes out once it has settled.
|
|
46
55
|
*
|
|
47
56
|
* Every settled state lets the update through: Success is the normal case,
|
|
48
|
-
* and Skipped or Failed mean subscribers were not told originally
|
|
49
|
-
* editor is now explicitly asking to do.
|
|
57
|
+
* and Skipped or Failed mean subscribers were not told originally (or not
|
|
58
|
+
* all of them), which the editor is now explicitly asking to do.
|
|
50
59
|
*/
|
|
51
60
|
static getSkipReasonForOriginalNotificationStatus(originalStatus) {
|
|
52
|
-
if (originalStatus === StatusPageSubscriberNotificationStatus.Pending
|
|
53
|
-
originalStatus === StatusPageSubscriberNotificationStatus.InProgress) {
|
|
61
|
+
if (originalStatus === StatusPageSubscriberNotificationStatus.Pending) {
|
|
54
62
|
return this.notYetNotifiedMessage;
|
|
55
63
|
}
|
|
56
64
|
return null;
|
|
57
65
|
}
|
|
66
|
+
/*
|
|
67
|
+
* Whether the update notification waits: the original ("posted")
|
|
68
|
+
* notification is being sent right now, with the item as it was read
|
|
69
|
+
* before the edit. The update is left Pending, untouched, and the job
|
|
70
|
+
* decides again on a later run, once the original has settled - then it
|
|
71
|
+
* goes out, since subscribers may have been sent the text from before the
|
|
72
|
+
* edit. A send that never settles is failed by the sweeper
|
|
73
|
+
* (StatusPageSubscriber:TimeoutStuckNotifications), which lets it through.
|
|
74
|
+
*/
|
|
75
|
+
static isOriginalNotificationBeingSent(originalStatus) {
|
|
76
|
+
return originalStatus === StatusPageSubscriberNotificationStatus.InProgress;
|
|
77
|
+
}
|
|
58
78
|
}
|
|
59
79
|
// The misc data prop an update request carries to ask for a notification.
|
|
60
80
|
SubscriberUpdateNotification.miscDataKey = "notifySubscribersOfUpdate";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SubscriberUpdateNotification.js","sourceRoot":"","sources":["../../../../Types/StatusPage/SubscriberUpdateNotification.ts"],"names":[],"mappings":"AACA,OAAO,sCAAsC,MAAM,0CAA0C,CAAC;AAE9F;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAqB,4BAA4B;IAmB/C;;;;OAIG;IACI,MAAM,CAAC,WAAW,CACvB,aAA4C;QAE5C,IAAI,CAAC,aAAa,IAAI,OAAO,aAAa,KAAK,QAAQ,EAAE,CAAC;YACxD,OAAO,KAAK,CAAC;QACf,CAAC;QAED,MAAM,KAAK,GAAY,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAEvD,OAAO,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,MAAM,CAAC;IAC5C,CAAC;IAEM,MAAM,CAAC,gBAAgB;QAC5B,OAAO;YACL,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,IAAI;SACzB,CAAC;IACJ,CAAC;IAED
|
|
1
|
+
{"version":3,"file":"SubscriberUpdateNotification.js","sourceRoot":"","sources":["../../../../Types/StatusPage/SubscriberUpdateNotification.ts"],"names":[],"mappings":"AACA,OAAO,sCAAsC,MAAM,0CAA0C,CAAC;AAE9F;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAqB,4BAA4B;IAmB/C;;;;OAIG;IACI,MAAM,CAAC,WAAW,CACvB,aAA4C;QAE5C,IAAI,CAAC,aAAa,IAAI,OAAO,aAAa,KAAK,QAAQ,EAAE,CAAC;YACxD,OAAO,KAAK,CAAC;QACf,CAAC;QAED,MAAM,KAAK,GAAY,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAEvD,OAAO,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,MAAM,CAAC;IAC5C,CAAC;IAEM,MAAM,CAAC,gBAAgB;QAC5B,OAAO;YACL,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,IAAI;SACzB,CAAC;IACJ,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;OAqBG;IACI,MAAM,CAAC,0CAA0C,CACtD,cAAyE;QAEzE,IAAI,cAAc,KAAK,sCAAsC,CAAC,OAAO,EAAE,CAAC;YACtE,OAAO,IAAI,CAAC,qBAAqB,CAAC;QACpC,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;;;;;OAQG;IACI,MAAM,CAAC,+BAA+B,CAC3C,cAAyE;QAEzE,OAAO,cAAc,KAAK,sCAAsC,CAAC,UAAU,CAAC;IAC9E,CAAC;;AAtFD,0EAA0E;AACnD,wCAAW,GAAW,2BAA2B,CAAC;AAElD,0CAAa,GAClC,yDAAyD,CAAC;AAErC,gDAAmB,GACxC,2CAA2C,CAAC;AAEvB,wCAAW,GAChC,4DAA4D,CAAC;AAExC,kDAAqB,GAC1C,+JAA+J,CAAC;AAE3I,2CAAc,GACnC,sCAAsC,CAAC;eAjBtB,4BAA4B"}
|
|
@@ -34,4 +34,27 @@ export const getInventoryLivenessState = (input) => {
|
|
|
34
34
|
}
|
|
35
35
|
return InventoryLiveness.Stale;
|
|
36
36
|
};
|
|
37
|
+
/**
|
|
38
|
+
* `getInventoryLivenessState` as a Postgres expression over the row aliased
|
|
39
|
+
* `tableAlias`, which must already be quoted (`"InventoryItem"`).
|
|
40
|
+
*
|
|
41
|
+
* The one SQL definition of the rule: the `inventoryStatus` virtual column
|
|
42
|
+
* selects and filters with it, and the Inventory Overview counts "Gone
|
|
43
|
+
* Quiet" with it, so the number on that tile and the rows the Stale facet
|
|
44
|
+
* returns cannot disagree about what stale means.
|
|
45
|
+
*
|
|
46
|
+
* Measured against the database clock. The function above floors elapsed
|
|
47
|
+
* minutes before applying inclusive thresholds — 30m59s is still Live and
|
|
48
|
+
* 24h00m59s is still Recent — and strict comparisons against the following
|
|
49
|
+
* minute preserve exactly those boundaries.
|
|
50
|
+
*/
|
|
51
|
+
export const getInventoryLivenessSql = (tableAlias) => {
|
|
52
|
+
return `CASE
|
|
53
|
+
WHEN ${tableAlias}."source" IS DISTINCT FROM '${EntitySource.Discovered}' THEN '${InventoryLiveness.NotTracked}'
|
|
54
|
+
WHEN ${tableAlias}."lastSeenAt" IS NULL THEN '${InventoryLiveness.Never}'
|
|
55
|
+
WHEN ${tableAlias}."lastSeenAt" > CURRENT_TIMESTAMP - INTERVAL '${INVENTORY_LIVE_WINDOW_MINUTES + 1} minutes' THEN '${InventoryLiveness.Live}'
|
|
56
|
+
WHEN ${tableAlias}."lastSeenAt" > CURRENT_TIMESTAMP - INTERVAL '${INVENTORY_STALE_AFTER_MINUTES + 1} minutes' THEN '${InventoryLiveness.Recent}'
|
|
57
|
+
ELSE '${InventoryLiveness.Stale}'
|
|
58
|
+
END`;
|
|
59
|
+
};
|
|
37
60
|
//# sourceMappingURL=InventoryLiveness.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InventoryLiveness.js","sourceRoot":"","sources":["../../../../Types/Telemetry/InventoryLiveness.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,gBAAgB,CAAC;AAE1C,MAAM,CAAN,IAAY,iBAMX;AAND,WAAY,iBAAiB;IAC3B,kCAAa,CAAA;IACb,sCAAiB,CAAA;IACjB,oCAAe,CAAA;IACf,oCAAe,CAAA;IACf,+CAA0B,CAAA;AAC5B,CAAC,EANW,iBAAiB,KAAjB,iBAAiB,QAM5B;AAED,MAAM,CAAC,MAAM,6BAA6B,GAAW,EAAE,CAAC;AACxD,MAAM,CAAC,MAAM,6BAA6B,GAAW,EAAE,GAAG,EAAE,CAAC;AAQ7D;;;;GAIG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAEb,CAAC,KAA6B,EAAqB,EAAE;IAC5E,IAAI,KAAK,CAAC,MAAM,KAAK,YAAY,CAAC,UAAU,EAAE,CAAC;QAC7C,OAAO,iBAAiB,CAAC,UAAU,CAAC;IACtC,CAAC;IAED,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC;QACtB,OAAO,iBAAiB,CAAC,KAAK,CAAC;IACjC,CAAC;IAED,MAAM,UAAU,GAAS,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IAEpD,IAAI,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC;QACvC,OAAO,iBAAiB,CAAC,KAAK,CAAC;IACjC,CAAC;IAED,MAAM,oBAAoB,GAAW,IAAI,CAAC,GAAG,CAC3C,CAAC,EACD,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,UAAU,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC,CACvE,CAAC;IAEF,IAAI,oBAAoB,IAAI,6BAA6B,EAAE,CAAC;QAC1D,OAAO,iBAAiB,CAAC,IAAI,CAAC;IAChC,CAAC;IAED,IAAI,oBAAoB,IAAI,6BAA6B,EAAE,CAAC;QAC1D,OAAO,iBAAiB,CAAC,MAAM,CAAC;IAClC,CAAC;IAED,OAAO,iBAAiB,CAAC,KAAK,CAAC;AACjC,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"InventoryLiveness.js","sourceRoot":"","sources":["../../../../Types/Telemetry/InventoryLiveness.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,gBAAgB,CAAC;AAE1C,MAAM,CAAN,IAAY,iBAMX;AAND,WAAY,iBAAiB;IAC3B,kCAAa,CAAA;IACb,sCAAiB,CAAA;IACjB,oCAAe,CAAA;IACf,oCAAe,CAAA;IACf,+CAA0B,CAAA;AAC5B,CAAC,EANW,iBAAiB,KAAjB,iBAAiB,QAM5B;AAED,MAAM,CAAC,MAAM,6BAA6B,GAAW,EAAE,CAAC;AACxD,MAAM,CAAC,MAAM,6BAA6B,GAAW,EAAE,GAAG,EAAE,CAAC;AAQ7D;;;;GAIG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAEb,CAAC,KAA6B,EAAqB,EAAE;IAC5E,IAAI,KAAK,CAAC,MAAM,KAAK,YAAY,CAAC,UAAU,EAAE,CAAC;QAC7C,OAAO,iBAAiB,CAAC,UAAU,CAAC;IACtC,CAAC;IAED,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC;QACtB,OAAO,iBAAiB,CAAC,KAAK,CAAC;IACjC,CAAC;IAED,MAAM,UAAU,GAAS,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IAEpD,IAAI,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC;QACvC,OAAO,iBAAiB,CAAC,KAAK,CAAC;IACjC,CAAC;IAED,MAAM,oBAAoB,GAAW,IAAI,CAAC,GAAG,CAC3C,CAAC,EACD,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,UAAU,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC,CACvE,CAAC;IAEF,IAAI,oBAAoB,IAAI,6BAA6B,EAAE,CAAC;QAC1D,OAAO,iBAAiB,CAAC,IAAI,CAAC;IAChC,CAAC;IAED,IAAI,oBAAoB,IAAI,6BAA6B,EAAE,CAAC;QAC1D,OAAO,iBAAiB,CAAC,MAAM,CAAC;IAClC,CAAC;IAED,OAAO,iBAAiB,CAAC,KAAK,CAAC;AACjC,CAAC,CAAC;AAEF;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAmC,CACrE,UAAkB,EACV,EAAE;IACV,OAAO;eACM,UAAU,+BAA+B,YAAY,CAAC,UAAU,WAAW,iBAAiB,CAAC,UAAU;eACvG,UAAU,+BAA+B,iBAAiB,CAAC,KAAK;eAChE,UAAU,iDAAiD,6BAA6B,GAAG,CAAC,mBAAmB,iBAAiB,CAAC,IAAI;eACrI,UAAU,iDAAiD,6BAA6B,GAAG,CAAC,mBAAmB,iBAAiB,CAAC,MAAM;gBACtI,iBAAiB,CAAC,KAAK;UAC7B,CAAC;AACX,CAAC,CAAC"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Wire contract of the Topology API (POST /api/telemetry/topology/...).
|
|
3
|
+
*
|
|
4
|
+
* The Topology maps used to download the whole inventory — every item and
|
|
5
|
+
* every relationship — and build the maps in the browser, which stopped at
|
|
6
|
+
* 10,000 rows of each. These endpoints do the graph work in Postgres instead
|
|
7
|
+
* and return only what each view draws, so counts, search and connections
|
|
8
|
+
* cover the whole inventory however large it is.
|
|
9
|
+
*
|
|
10
|
+
* This is an internal contract between the server and the Dashboard bundle
|
|
11
|
+
* that shipped with it, not a public API. `formatVersion` changes whenever a
|
|
12
|
+
* response shape does, so an old bundle talking to a new server can tell the
|
|
13
|
+
* user to reload instead of misreading the payload.
|
|
14
|
+
*
|
|
15
|
+
* Every request carries `rangeStart` (ISO 8601). The server floors it to the
|
|
16
|
+
* minute, uses it for every "reported in range" decision, and echoes the value
|
|
17
|
+
* it used; the client must compute activity against the echoed value so both
|
|
18
|
+
* sides agree about which resources are active. Timestamps in responses are
|
|
19
|
+
* epoch milliseconds.
|
|
20
|
+
*/
|
|
21
|
+
export const TOPOLOGY_API_FORMAT_VERSION = 1;
|
|
22
|
+
export var TopologyApiPath;
|
|
23
|
+
(function (TopologyApiPath) {
|
|
24
|
+
TopologyApiPath["ServiceMap"] = "/telemetry/topology/service-map";
|
|
25
|
+
TopologyApiPath["Infrastructure"] = "/telemetry/topology/infrastructure";
|
|
26
|
+
TopologyApiPath["InfrastructureCollection"] = "/telemetry/topology/infrastructure/collection";
|
|
27
|
+
TopologyApiPath["InfrastructureCollectionSearch"] = "/telemetry/topology/infrastructure/collection-search";
|
|
28
|
+
TopologyApiPath["Entity"] = "/telemetry/topology/entity";
|
|
29
|
+
TopologyApiPath["EntityConnections"] = "/telemetry/topology/entity/connections";
|
|
30
|
+
/*
|
|
31
|
+
* The same sections over everything the inventory holds rather than over a
|
|
32
|
+
* range (see TopologyEntityAllTimeRequestJSON): the inventory item page's
|
|
33
|
+
* Connections card, which has no time range.
|
|
34
|
+
*/
|
|
35
|
+
TopologyApiPath["EntityAllTime"] = "/telemetry/topology/entity/all-time";
|
|
36
|
+
TopologyApiPath["EntityAllTimeConnections"] = "/telemetry/topology/entity/all-time/connections";
|
|
37
|
+
})(TopologyApiPath || (TopologyApiPath = {}));
|
|
38
|
+
export const TopologyApiLimits = {
|
|
39
|
+
MaxServiceMapEntities: 50000,
|
|
40
|
+
MaxServiceMapDependencies: 200000,
|
|
41
|
+
MaxInfrastructureNodes: 200000,
|
|
42
|
+
InlineFlatItemsPerType: 1000,
|
|
43
|
+
CollectionPageSizeDefault: 50,
|
|
44
|
+
CollectionPageSizeMax: 200,
|
|
45
|
+
MaxSearchTerms: 10,
|
|
46
|
+
MaxSearchTermLength: 100,
|
|
47
|
+
MaxCollectionSearchTypes: 100,
|
|
48
|
+
EntityDependencyRows: 100,
|
|
49
|
+
EntityOtherRows: 25,
|
|
50
|
+
EntityConnectionsPageSizeMax: 200,
|
|
51
|
+
EntityConnectionScanLimit: 100000,
|
|
52
|
+
MaxMapRangeStartAgeDays: 400,
|
|
53
|
+
};
|
|
54
|
+
export const TOPOLOGY_CONNECTION_SECTIONS = ["calls", "calledBy", "runsOn", "related"];
|
|
55
|
+
//# sourceMappingURL=TopologyApi.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TopologyApi.js","sourceRoot":"","sources":["../../../../Types/Topology/TopologyApi.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,MAAM,CAAC,MAAM,2BAA2B,GAAW,CAAC,CAAC;AAErD,MAAM,CAAN,IAAY,eAcX;AAdD,WAAY,eAAe;IACzB,iEAA8C,CAAA;IAC9C,wEAAqD,CAAA;IACrD,6FAA0E,CAAA;IAC1E,0GAAuF,CAAA;IACvF,wDAAqC,CAAA;IACrC,+EAA4D,CAAA;IAC5D;;;;OAIG;IACH,wEAAqD,CAAA;IACrD,+FAA4E,CAAA;AAC9E,CAAC,EAdW,eAAe,KAAf,eAAe,QAc1B;AAED,MAAM,CAAC,MAAM,iBAAiB,GAuC1B;IACF,qBAAqB,EAAE,KAAM;IAC7B,yBAAyB,EAAE,MAAO;IAClC,sBAAsB,EAAE,MAAO;IAC/B,sBAAsB,EAAE,IAAK;IAC7B,yBAAyB,EAAE,EAAE;IAC7B,qBAAqB,EAAE,GAAG;IAC1B,cAAc,EAAE,EAAE;IAClB,mBAAmB,EAAE,GAAG;IACxB,wBAAwB,EAAE,GAAG;IAC7B,oBAAoB,EAAE,GAAG;IACzB,eAAe,EAAE,EAAE;IACnB,4BAA4B,EAAE,GAAG;IACjC,yBAAyB,EAAE,MAAO;IAClC,uBAAuB,EAAE,GAAG;CAC7B,CAAC;AAsEF,MAAM,CAAC,MAAM,4BAA4B,GACvC,CAAC,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC"}
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
import EntityRelationshipType from "../Telemetry/EntityRelationshipType";
|
|
2
|
+
import EntityType from "../Telemetry/EntityType";
|
|
3
|
+
/*
|
|
4
|
+
* The rules that shape the Topology maps, shared by the server (which reduces
|
|
5
|
+
* the inventory graph in SQL) and the Dashboard (which builds the maps from
|
|
6
|
+
* the reduced data). Keeping them in one place is what lets the server hand
|
|
7
|
+
* the browser a few rows per resource instead of every relationship and still
|
|
8
|
+
* produce exactly the tree the Dashboard would have built from all of them.
|
|
9
|
+
*/
|
|
10
|
+
/*
|
|
11
|
+
* Types the Service Map owns. They describe software and its dependencies,
|
|
12
|
+
* not where anything runs, so they never become Infrastructure rows.
|
|
13
|
+
*/
|
|
14
|
+
export const TOPOLOGY_APPLICATION_TYPES = new Set([
|
|
15
|
+
EntityType.Service,
|
|
16
|
+
EntityType.ServiceInstance,
|
|
17
|
+
EntityType.TelemetrySdk,
|
|
18
|
+
EntityType.Database,
|
|
19
|
+
EntityType.RemoteService,
|
|
20
|
+
EntityType.Process,
|
|
21
|
+
]);
|
|
22
|
+
/** Types that may nest inside a structural container. */
|
|
23
|
+
export const NESTABLE_CHILD_TYPES = new Set([
|
|
24
|
+
EntityType.Container,
|
|
25
|
+
EntityType.Process,
|
|
26
|
+
EntityType.KubernetesPod,
|
|
27
|
+
EntityType.KubernetesNode,
|
|
28
|
+
EntityType.KubernetesNamespace,
|
|
29
|
+
EntityType.KubernetesDeployment,
|
|
30
|
+
EntityType.ProxmoxNode,
|
|
31
|
+
EntityType.ProxmoxGuest,
|
|
32
|
+
EntityType.VMwareCluster,
|
|
33
|
+
EntityType.VMwareHost,
|
|
34
|
+
EntityType.VMwareVirtualMachine,
|
|
35
|
+
EntityType.VMwareDatastore,
|
|
36
|
+
EntityType.DockerSwarmNode,
|
|
37
|
+
EntityType.DockerSwarmService,
|
|
38
|
+
EntityType.DockerSwarmTask,
|
|
39
|
+
]);
|
|
40
|
+
/*
|
|
41
|
+
* Valid structural containers, higher = more specific. Doubles as the
|
|
42
|
+
* allow-list of parent types: a candidate whose parent type is absent here
|
|
43
|
+
* (e.g. a Service) is rejected before priority is compared.
|
|
44
|
+
*/
|
|
45
|
+
export const CONTAINER_SPECIFICITY = {
|
|
46
|
+
[EntityType.KubernetesCluster]: 0,
|
|
47
|
+
[EntityType.ProxmoxCluster]: 0,
|
|
48
|
+
/*
|
|
49
|
+
* vSphere nests vCenter ⊃ cluster ⊃ ESXi host ⊃ VM; datastores sit
|
|
50
|
+
* directly under the vCenter. The cluster is optional (standalone hosts
|
|
51
|
+
* hang straight off the vCenter), so the host is more specific than the
|
|
52
|
+
* cluster but both may parent directly to the vCenter.
|
|
53
|
+
*/
|
|
54
|
+
[EntityType.VMwareVCenter]: 0,
|
|
55
|
+
[EntityType.VMwareCluster]: 1,
|
|
56
|
+
[EntityType.CephCluster]: 0,
|
|
57
|
+
[EntityType.DockerSwarmCluster]: 0,
|
|
58
|
+
[EntityType.Host]: 1,
|
|
59
|
+
[EntityType.KubernetesNamespace]: 1,
|
|
60
|
+
[EntityType.KubernetesNode]: 2,
|
|
61
|
+
[EntityType.KubernetesDeployment]: 2,
|
|
62
|
+
[EntityType.ProxmoxNode]: 2,
|
|
63
|
+
[EntityType.VMwareHost]: 2,
|
|
64
|
+
[EntityType.DockerSwarmNode]: 2,
|
|
65
|
+
[EntityType.KubernetesPod]: 3,
|
|
66
|
+
[EntityType.ProxmoxGuest]: 3,
|
|
67
|
+
[EntityType.VMwareVirtualMachine]: 3,
|
|
68
|
+
[EntityType.DockerSwarmTask]: 3,
|
|
69
|
+
[EntityType.Container]: 4,
|
|
70
|
+
};
|
|
71
|
+
/* Which relationship expresses containment best: part-of > runs-on > member-of. */
|
|
72
|
+
export const NESTING_RELATIONSHIP_PRIORITY = {
|
|
73
|
+
[EntityRelationshipType.PartOf]: 3,
|
|
74
|
+
[EntityRelationshipType.RunsOn]: 2,
|
|
75
|
+
[EntityRelationshipType.MemberOf]: 1,
|
|
76
|
+
};
|
|
77
|
+
/* Replicas worth collapsing: leaf resources that come in fleets. */
|
|
78
|
+
export const REPLICA_GROUPABLE_TYPES = new Set([
|
|
79
|
+
EntityType.Host,
|
|
80
|
+
EntityType.KubernetesPod,
|
|
81
|
+
EntityType.Container,
|
|
82
|
+
EntityType.DockerSwarmTask,
|
|
83
|
+
EntityType.ProxmoxGuest,
|
|
84
|
+
EntityType.VMwareVirtualMachine,
|
|
85
|
+
]);
|
|
86
|
+
/* service → where it runs (service→host is hosted-on, service→pod runs-on). */
|
|
87
|
+
export const PLACEMENT_RELATIONSHIP_TYPES = new Set([
|
|
88
|
+
EntityRelationshipType.RunsOn,
|
|
89
|
+
EntityRelationshipType.HostedOn,
|
|
90
|
+
]);
|
|
91
|
+
/*
|
|
92
|
+
* The attributes the Service Map reads to label a node ("Node.js",
|
|
93
|
+
* "PostgreSQL"), in the order it tries them. The server ships only these, so
|
|
94
|
+
* the list lives here rather than beside the reader.
|
|
95
|
+
*/
|
|
96
|
+
export const SERVICE_MAP_DETAIL_ATTRIBUTE_KEYS = [
|
|
97
|
+
"telemetry.sdk.language",
|
|
98
|
+
"db.system.name",
|
|
99
|
+
"network.protocol.name",
|
|
100
|
+
"messaging.system",
|
|
101
|
+
];
|
|
102
|
+
/*
|
|
103
|
+
* Orders two keys by Unicode code point, which is the order Postgres gives
|
|
104
|
+
* `COLLATE "C"` on a UTF-8 database (UTF-8 bytes sort like code points). The
|
|
105
|
+
* server breaks ranking ties that way, so wherever the Dashboard must pick
|
|
106
|
+
* the same winner it compares with this rather than with `<`.
|
|
107
|
+
*
|
|
108
|
+
* JavaScript's `<` compares UTF-16 code units. The two orders agree
|
|
109
|
+
* everywhere except where a character beyond U+FFFF (stored as a surrogate
|
|
110
|
+
* pair, U+D800-U+DFFF) meets one in U+E000-U+FFFF: as code units the
|
|
111
|
+
* surrogate is smaller, as code points it is larger. Keys made only of
|
|
112
|
+
* characters up to U+FFFF therefore compare exactly as `<` compares them.
|
|
113
|
+
*/
|
|
114
|
+
export function compareCodePoints(a, b) {
|
|
115
|
+
if (a === b) {
|
|
116
|
+
return 0;
|
|
117
|
+
}
|
|
118
|
+
const length = Math.min(a.length, b.length);
|
|
119
|
+
for (let index = 0; index < length; index++) {
|
|
120
|
+
const left = a.charCodeAt(index);
|
|
121
|
+
const right = b.charCodeAt(index);
|
|
122
|
+
if (left === right) {
|
|
123
|
+
continue;
|
|
124
|
+
}
|
|
125
|
+
if (left >= 0xd800 && right >= 0xd800) {
|
|
126
|
+
const leftIsSurrogate = left <= 0xdfff;
|
|
127
|
+
const rightIsSurrogate = right <= 0xdfff;
|
|
128
|
+
if (leftIsSurrogate !== rightIsSurrogate) {
|
|
129
|
+
/* The half of a character beyond U+FFFF outranks U+E000-U+FFFF. */
|
|
130
|
+
return leftIsSurrogate ? 1 : -1;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
return left < right ? -1 : 1;
|
|
134
|
+
}
|
|
135
|
+
/* One is a prefix of the other: the shorter sorts first. */
|
|
136
|
+
return a.length < b.length ? -1 : 1;
|
|
137
|
+
}
|
|
138
|
+
export function isTopologyInfrastructureType(entityType) {
|
|
139
|
+
return (Boolean(entityType) &&
|
|
140
|
+
entityType !== EntityType.Service &&
|
|
141
|
+
!TOPOLOGY_APPLICATION_TYPES.has(entityType));
|
|
142
|
+
}
|
|
143
|
+
/*
|
|
144
|
+
* Structural infrastructure types can take part in the tree: they nest, hold
|
|
145
|
+
* other resources, or are grouped with their replicas. Everything else that is
|
|
146
|
+
* infrastructure (network devices, IoT devices, cloud resources, manually
|
|
147
|
+
* registered appliances, types this version does not know) is flat: it never
|
|
148
|
+
* has a parent, never contains anything, and nothing groups it. Flat types are
|
|
149
|
+
* also the ones whose volume is not bounded by the discovery budgets, so the
|
|
150
|
+
* server summarizes a large flat type instead of shipping every row.
|
|
151
|
+
*/
|
|
152
|
+
export function isStructuralInfrastructureType(entityType) {
|
|
153
|
+
if (!isTopologyInfrastructureType(entityType)) {
|
|
154
|
+
return false;
|
|
155
|
+
}
|
|
156
|
+
const type = entityType;
|
|
157
|
+
return (NESTABLE_CHILD_TYPES.has(type) ||
|
|
158
|
+
CONTAINER_SPECIFICITY[type] !== undefined ||
|
|
159
|
+
REPLICA_GROUPABLE_TYPES.has(type));
|
|
160
|
+
}
|
|
161
|
+
export function isFlatInfrastructureType(entityType) {
|
|
162
|
+
return (isTopologyInfrastructureType(entityType) &&
|
|
163
|
+
!isStructuralInfrastructureType(entityType));
|
|
164
|
+
}
|
|
165
|
+
//# sourceMappingURL=TopologyTypeRules.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TopologyTypeRules.js","sourceRoot":"","sources":["../../../../Types/Topology/TopologyTypeRules.ts"],"names":[],"mappings":"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"}
|