@oneuptime/common 12.0.2 → 12.0.4
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/CephCluster.ts +14 -0
- package/Models/DatabaseModels/CodeRepository.ts +14 -6
- package/Models/DatabaseModels/DatabaseBaseModel/DatabaseBaseModel.ts +14 -0
- package/Models/DatabaseModels/DockerHost.ts +14 -0
- package/Models/DatabaseModels/GlobalOidcProject.ts +18 -0
- package/Models/DatabaseModels/GlobalSsoProject.ts +18 -0
- package/Models/DatabaseModels/Index.ts +2 -0
- package/Models/DatabaseModels/IoTFleet.ts +14 -0
- package/Models/DatabaseModels/KubernetesCluster.ts +14 -0
- package/Models/DatabaseModels/LogDropFilter.ts +9 -20
- package/Models/DatabaseModels/NetworkDevice.ts +14 -0
- package/Models/DatabaseModels/NetworkInterface.ts +18 -0
- package/Models/DatabaseModels/Project.ts +16 -2
- package/Models/DatabaseModels/ProxmoxCluster.ts +14 -0
- package/Models/DatabaseModels/Service.ts +30 -0
- package/Models/DatabaseModels/StatusPageMonitorRule.ts +911 -0
- package/Models/DatabaseModels/StatusPagePrivateUser.ts +30 -0
- package/Models/DatabaseModels/StatusPageResource.ts +73 -0
- package/Models/DatabaseModels/TraceDropFilter.ts +9 -20
- package/Models/DatabaseModels/User.ts +30 -0
- package/Server/API/AIAgentDataAPI.ts +31 -0
- package/Server/API/BaseAPI.ts +13 -2
- package/Server/API/DashboardAPI.ts +458 -12
- package/Server/API/GitHubAPI.ts +119 -283
- package/Server/API/UserAPI.ts +263 -1
- package/Server/EnvironmentConfig.ts +38 -4
- package/Server/Infrastructure/GlobalCache.ts +152 -0
- package/Server/Infrastructure/Postgres/DataSourceOptions.ts +16 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1786005052769-AddStatusPageMonitorRule.ts +123 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1786018109307-AddPerUserPasswordSalt.ts +21 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1786023262402-WidenHashedStringColumnsForScrypt.ts +68 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1786100000000-RestoreServiceLowerNameIndex.ts +100 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1786200000000-RestoreDroppedUniqueIndexes.ts +214 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1786300000000-QuarantineUnboundGitHubInstallations.ts +69 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +12 -0
- package/Server/Services/AlertStateTimelineService.ts +20 -0
- package/Server/Services/AnalyticsDatabaseService.ts +72 -1
- package/Server/Services/CephClusterService.ts +26 -86
- package/Server/Services/CloudResourceService.ts +23 -83
- package/Server/Services/CodeRepositoryService.ts +105 -2
- package/Server/Services/DatabaseService.ts +296 -2
- package/Server/Services/DockerHostService.ts +19 -79
- package/Server/Services/DockerSwarmClusterService.ts +27 -88
- package/Server/Services/HostService.ts +46 -99
- package/Server/Services/IncidentStateTimelineService.ts +20 -0
- package/Server/Services/Index.ts +2 -0
- package/Server/Services/IoTFleetService.ts +19 -79
- package/Server/Services/KubernetesClusterService.ts +17 -78
- package/Server/Services/LabelService.ts +57 -10
- package/Server/Services/MetricTypeService.ts +84 -0
- package/Server/Services/MonitorService.ts +89 -14
- package/Server/Services/MonitorStatusTimelineService.ts +29 -0
- package/Server/Services/MonitorTemplateService.ts +65 -0
- package/Server/Services/OpenTelemetryIngestService.ts +230 -26
- package/Server/Services/PodmanHostService.ts +19 -79
- package/Server/Services/ProxmoxClusterService.ts +23 -83
- package/Server/Services/RumApplicationService.ts +19 -80
- package/Server/Services/ScheduledMaintenanceStateTimelineService.ts +21 -0
- package/Server/Services/ServerlessFunctionService.ts +24 -85
- package/Server/Services/ServiceService.ts +299 -73
- package/Server/Services/StatusPageMonitorRuleEngineService.ts +752 -0
- package/Server/Services/StatusPageMonitorRuleService.ts +471 -0
- package/Server/Services/TelemetryEntityRelationshipService.ts +1 -0
- package/Server/Services/TelemetryEntityService.ts +1 -0
- package/Server/Services/UserService.ts +184 -0
- package/Server/Utils/AI/Toolbox/CodeTools.ts +45 -4
- package/Server/Utils/AnalyticsDatabase/StatementGenerator.ts +13 -0
- package/Server/Utils/CodeRepository/GitHub/GitHub.ts +157 -4
- package/Server/Utils/CodeRepository/GitHub/GitHubInstallationBinding.ts +130 -0
- package/Server/Utils/Database/ProjectScopedReferenceValidator.ts +170 -39
- package/Server/Utils/Monitor/MonitorResource.ts +63 -36
- package/Server/Utils/Monitor/MonitorStatusTimeline.ts +36 -0
- package/Server/Utils/Monitor/MonitorStepsProjectValidator.ts +148 -127
- package/Server/Utils/Monitor/MonitorStepsReferenceExtractor.ts +434 -0
- package/Server/Utils/PasswordHash.ts +306 -0
- package/Server/Utils/SingleFlight.ts +83 -0
- package/Server/Utils/StatusPage/MonitorRulePatternValidator.ts +46 -0
- package/Server/Utils/Telemetry/EntityRegistry.ts +107 -26
- package/Server/Utils/Telemetry/ResourceHeartbeat.ts +314 -0
- package/Server/Utils/Telemetry/Telemetry.ts +351 -122
- package/Tests/App/Dashboard/OverviewCustomFields.test.tsx +333 -0
- package/Tests/App/Dashboard/UserCustomFields.test.tsx +392 -0
- package/Tests/App/Dashboard/WidgetCatalog.test.ts +2 -0
- package/Tests/Models/DatabaseModels/ColumnTransformerInvariants.test.ts +306 -0
- package/Tests/Models/DatabaseModels/NumberColumnDeserialization.test.ts +333 -0
- package/Tests/Models/DatabaseModels/StatusPageMonitorRuleModel.test.ts +190 -0
- package/Tests/Server/API/AIAgentDataRepositoryToken.test.ts +381 -0
- package/Tests/Server/API/DashboardPublicAttributeValuesAPI.test.ts +943 -0
- package/Tests/Server/API/DashboardPublicMetricsAggregateAPI.test.ts +1296 -0
- package/Tests/Server/API/DashboardPublicResourceListAPI.test.ts +26 -0
- package/Tests/Server/API/DashboardPublicTemplatePayloads.test.ts +598 -0
- package/Tests/Server/API/GitHubAppInstallationBindingAPI.test.ts +539 -0
- package/Tests/Server/API/Helpers.ts +6 -1
- package/Tests/Server/API/UserProjectsAPI.test.ts +852 -0
- package/Tests/Server/Infrastructure/GlobalCache.test.ts +354 -0
- package/Tests/Server/Infrastructure/PostgresLockTimeoutOptions.test.ts +181 -0
- package/Tests/Server/Infrastructure/SemaphoreMutex.test.ts +215 -0
- package/Tests/Server/Services/AddPerUserPasswordSaltMigration.test.ts +178 -0
- package/Tests/Server/Services/AnalyticsDatabasePaginationStability.test.ts +582 -0
- package/Tests/Server/Services/AnalyticsDatabaseService.test.ts +5 -0
- package/Tests/Server/Services/CodeRepositoryInstallationBinding.test.ts +305 -0
- package/Tests/Server/Services/CodeRepositoryResolutionBinding.test.ts +147 -0
- package/Tests/Server/Services/DatabaseServicePerUserPasswordSalt.test.ts +870 -0
- package/Tests/Server/Services/DatabaseServiceUpdateColumnsIfUnlocked.test.ts +342 -0
- package/Tests/Server/Services/DropFilterSaveValidation.test.ts +245 -0
- package/Tests/Server/Services/HostServiceUpdateLastSeen.test.ts +163 -15
- package/Tests/Server/Services/MetricTypeAttachServices.test.ts +222 -0
- package/Tests/Server/Services/MissingReferenceWriteGuard.test.ts +614 -0
- package/Tests/Server/Services/MonitorStatusTimelineFastPath.test.ts +23 -0
- package/Tests/Server/Services/OpenTelemetryServiceResolutionCache.test.ts +568 -0
- package/Tests/Server/Services/ResourceUpdateLastSeenLivenessFallback.test.ts +305 -56
- package/Tests/Server/Services/RestoreDroppedUniqueIndexesMigration.test.ts +386 -0
- package/Tests/Server/Services/RestoreServiceLowerNameIndexMigration.test.ts +240 -0
- package/Tests/Server/Services/ServiceUpdateLastSeenSplitGates.test.ts +705 -0
- package/Tests/Server/Services/StatusPageMonitorRuleEngineService.test.ts +1719 -0
- package/Tests/Server/Services/StatusPageMonitorRuleHooks.test.ts +1212 -0
- package/Tests/Server/Services/StatusPageMonitorRuleMonitorCreateHook.test.ts +228 -0
- package/Tests/Server/Services/UserServiceFirstMasterAdminElection.test.ts +885 -0
- package/Tests/Server/Services/WidenHashedStringColumnsForScryptMigration.test.ts +220 -0
- package/Tests/Server/Utils/AI/CodeTools.test.ts +47 -1
- package/Tests/Server/Utils/AI/CodeWriteTools.test.ts +10 -0
- package/Tests/Server/Utils/APIKey/AccessPermission.test.ts +267 -0
- package/Tests/Server/Utils/AnalyticsDatabase/StatementGenerator.test.ts +120 -0
- package/Tests/Server/Utils/CodeRepository/GitHubInstallationBinding.test.ts +292 -0
- package/Tests/Server/Utils/Database/ProjectScopedReferenceValidator.test.ts +260 -13
- package/Tests/Server/Utils/EntityRegistryRowFence.test.ts +302 -0
- package/Tests/Server/Utils/GitHubInstallationOwnershipVerification.test.ts +340 -0
- package/Tests/Server/Utils/GitHubWebhookAndTreeCacheIsolation.test.ts +250 -0
- package/Tests/Server/Utils/MetricTypeIndexConvergence.test.ts +598 -0
- package/Tests/Server/Utils/Monitor/MonitorStatusTimelineUnusableStatus.test.ts +154 -0
- package/Tests/Server/Utils/Monitor/MonitorStepsProjectValidator.test.ts +638 -92
- package/Tests/Server/Utils/Monitor/MonitorStepsReferenceExtractor.test.ts +724 -0
- package/Tests/Server/Utils/PasswordHash.test.ts +555 -0
- package/Tests/Server/Utils/SingleFlight.test.ts +221 -0
- package/Tests/Types/Dashboard/NetworkDashboardTemplate.test.ts +793 -0
- package/Tests/Types/Database/BigIntColumnTransformer.test.ts +147 -0
- package/Tests/Types/Database/ColumnLength.test.ts +7 -1
- package/Tests/Types/Database/DatabasePropertyTransformer.test.ts +140 -0
- package/Tests/Types/Database/NumericColumnValue.test.ts +127 -0
- package/Tests/Types/Decimal.test.ts +37 -0
- package/Tests/Types/HashedStringPerUserSalt.test.ts +476 -0
- package/Tests/Types/Monitor/DockerAlertTemplates.test.ts +293 -0
- package/Tests/Types/Monitor/HostAlertTemplates.test.ts +249 -0
- package/Tests/Types/Monitor/IotAlertTemplates.test.ts +320 -0
- package/Tests/Types/Monitor/PodmanAlertTemplates.test.ts +271 -0
- package/Tests/Types/Monitor/SnmpVersionParsing.test.ts +152 -0
- package/Tests/Types/Port.test.ts +38 -0
- package/Tests/UI/Components/CustomFields/CustomFieldsDetail.test.tsx +696 -0
- package/Tests/UI/Components/LogsHistogram.test.tsx +276 -0
- package/Tests/UI/Components/UseLiveLogsRefresh.test.tsx +489 -0
- package/Tests/UI/Components/UseLogsHistogram.test.tsx +500 -0
- package/Tests/UI/Utils/UserProjectsModelAPI.test.ts +714 -0
- package/Tests/Utils/Dashboard/Components/DashboardComponentsUtil.test.ts +120 -0
- package/Tests/Utils/Dashboard/DashboardNetworkMapComponent.test.ts +327 -0
- package/Tests/Utils/TeamMembersByProject.test.ts +655 -0
- package/Types/Dashboard/DashboardComponentType.ts +1 -0
- package/Types/Dashboard/DashboardComponents/ComponentArgument.ts +1 -0
- package/Types/Dashboard/DashboardComponents/DashboardNetworkMapComponent.ts +40 -0
- package/Types/Dashboard/DashboardTemplates.ts +397 -0
- package/Types/Database/BigIntColumnTransformer.ts +74 -0
- package/Types/Database/ColumnLength.ts +9 -1
- package/Types/Database/DatabaseProperty.ts +26 -0
- package/Types/Database/NumericColumnValue.ts +128 -0
- package/Types/Database/TableColumn.ts +11 -0
- package/Types/Database/UnsynchronizedIndex.ts +48 -0
- package/Types/Decimal.ts +16 -4
- package/Types/HashedString.ts +139 -4
- package/Types/Permission.ts +48 -0
- package/Types/Port.ts +16 -4
- package/UI/Components/CustomFields/CustomFieldsDetail.tsx +85 -11
- package/UI/Components/LogsViewer/useLiveLogsRefresh.ts +86 -0
- package/UI/Components/LogsViewer/useLogsHistogram.ts +113 -0
- package/UI/Components/Navbar/NavBar.tsx +12 -2
- package/UI/Components/Navbar/NavBarMenuModal.tsx +19 -7
- package/UI/Utils/ModelAPI/UserProjectsModelAPI.ts +257 -0
- package/Utils/Dashboard/Components/DashboardNetworkMapComponent.ts +136 -0
- package/Utils/Dashboard/Components/Index.ts +7 -0
- package/Utils/TeamMembersByProject.ts +237 -0
- package/build/dist/Models/DatabaseModels/CephCluster.js +16 -1
- package/build/dist/Models/DatabaseModels/CephCluster.js.map +1 -1
- package/build/dist/Models/DatabaseModels/CodeRepository.js +14 -6
- package/build/dist/Models/DatabaseModels/CodeRepository.js.map +1 -1
- package/build/dist/Models/DatabaseModels/DatabaseBaseModel/DatabaseBaseModel.js +12 -0
- package/build/dist/Models/DatabaseModels/DatabaseBaseModel/DatabaseBaseModel.js.map +1 -1
- package/build/dist/Models/DatabaseModels/DockerHost.js +16 -1
- package/build/dist/Models/DatabaseModels/DockerHost.js.map +1 -1
- package/build/dist/Models/DatabaseModels/GlobalOidcProject.js +16 -1
- package/build/dist/Models/DatabaseModels/GlobalOidcProject.js.map +1 -1
- package/build/dist/Models/DatabaseModels/GlobalSsoProject.js +16 -1
- package/build/dist/Models/DatabaseModels/GlobalSsoProject.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Index.js +2 -0
- package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IoTFleet.js +16 -1
- package/build/dist/Models/DatabaseModels/IoTFleet.js.map +1 -1
- package/build/dist/Models/DatabaseModels/KubernetesCluster.js +16 -1
- package/build/dist/Models/DatabaseModels/KubernetesCluster.js.map +1 -1
- package/build/dist/Models/DatabaseModels/LogDropFilter.js +9 -20
- package/build/dist/Models/DatabaseModels/LogDropFilter.js.map +1 -1
- package/build/dist/Models/DatabaseModels/NetworkDevice.js +16 -1
- package/build/dist/Models/DatabaseModels/NetworkDevice.js.map +1 -1
- package/build/dist/Models/DatabaseModels/NetworkInterface.js +16 -1
- package/build/dist/Models/DatabaseModels/NetworkInterface.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Project.js +16 -2
- package/build/dist/Models/DatabaseModels/Project.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ProxmoxCluster.js +16 -1
- package/build/dist/Models/DatabaseModels/ProxmoxCluster.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Service.js +28 -1
- package/build/dist/Models/DatabaseModels/Service.js.map +1 -1
- package/build/dist/Models/DatabaseModels/StatusPageMonitorRule.js +925 -0
- package/build/dist/Models/DatabaseModels/StatusPageMonitorRule.js.map +1 -0
- package/build/dist/Models/DatabaseModels/StatusPagePrivateUser.js +32 -0
- package/build/dist/Models/DatabaseModels/StatusPagePrivateUser.js.map +1 -1
- package/build/dist/Models/DatabaseModels/StatusPageResource.js +72 -0
- package/build/dist/Models/DatabaseModels/StatusPageResource.js.map +1 -1
- package/build/dist/Models/DatabaseModels/TraceDropFilter.js +9 -20
- package/build/dist/Models/DatabaseModels/TraceDropFilter.js.map +1 -1
- package/build/dist/Models/DatabaseModels/User.js +32 -0
- package/build/dist/Models/DatabaseModels/User.js.map +1 -1
- package/build/dist/Server/API/AIAgentDataAPI.js +21 -2
- package/build/dist/Server/API/AIAgentDataAPI.js.map +1 -1
- package/build/dist/Server/API/BaseAPI.js +11 -1
- package/build/dist/Server/API/BaseAPI.js.map +1 -1
- package/build/dist/Server/API/DashboardAPI.js +343 -10
- package/build/dist/Server/API/DashboardAPI.js.map +1 -1
- package/build/dist/Server/API/GitHubAPI.js +94 -167
- package/build/dist/Server/API/GitHubAPI.js.map +1 -1
- package/build/dist/Server/API/UserAPI.js +187 -2
- package/build/dist/Server/API/UserAPI.js.map +1 -1
- package/build/dist/Server/EnvironmentConfig.js +34 -4
- package/build/dist/Server/EnvironmentConfig.js.map +1 -1
- package/build/dist/Server/Infrastructure/GlobalCache.js +120 -0
- package/build/dist/Server/Infrastructure/GlobalCache.js.map +1 -1
- package/build/dist/Server/Infrastructure/Postgres/DataSourceOptions.js +5 -3
- package/build/dist/Server/Infrastructure/Postgres/DataSourceOptions.js.map +1 -1
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786005052769-AddStatusPageMonitorRule.js +48 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786005052769-AddStatusPageMonitorRule.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786018109307-AddPerUserPasswordSalt.js +14 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786018109307-AddPerUserPasswordSalt.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786023262402-WidenHashedStringColumnsForScrypt.js +59 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786023262402-WidenHashedStringColumnsForScrypt.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786100000000-RestoreServiceLowerNameIndex.js +93 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786100000000-RestoreServiceLowerNameIndex.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786200000000-RestoreDroppedUniqueIndexes.js +101 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786200000000-RestoreDroppedUniqueIndexes.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786300000000-QuarantineUnboundGitHubInstallations.js +66 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786300000000-QuarantineUnboundGitHubInstallations.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +12 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
- package/build/dist/Server/Services/AlertStateTimelineService.js +19 -0
- package/build/dist/Server/Services/AlertStateTimelineService.js.map +1 -1
- package/build/dist/Server/Services/AnalyticsDatabaseService.js +57 -1
- package/build/dist/Server/Services/AnalyticsDatabaseService.js.map +1 -1
- package/build/dist/Server/Services/CephClusterService.js +26 -76
- package/build/dist/Server/Services/CephClusterService.js.map +1 -1
- package/build/dist/Server/Services/CloudResourceService.js +23 -73
- package/build/dist/Server/Services/CloudResourceService.js.map +1 -1
- package/build/dist/Server/Services/CodeRepositoryService.js +90 -2
- package/build/dist/Server/Services/CodeRepositoryService.js.map +1 -1
- package/build/dist/Server/Services/DatabaseService.js +246 -2
- package/build/dist/Server/Services/DatabaseService.js.map +1 -1
- package/build/dist/Server/Services/DockerHostService.js +19 -69
- package/build/dist/Server/Services/DockerHostService.js.map +1 -1
- package/build/dist/Server/Services/DockerSwarmClusterService.js +27 -78
- package/build/dist/Server/Services/DockerSwarmClusterService.js.map +1 -1
- package/build/dist/Server/Services/HostService.js +58 -102
- package/build/dist/Server/Services/HostService.js.map +1 -1
- package/build/dist/Server/Services/IncidentStateTimelineService.js +19 -0
- package/build/dist/Server/Services/IncidentStateTimelineService.js.map +1 -1
- package/build/dist/Server/Services/Index.js +2 -0
- package/build/dist/Server/Services/Index.js.map +1 -1
- package/build/dist/Server/Services/IoTFleetService.js +19 -69
- package/build/dist/Server/Services/IoTFleetService.js.map +1 -1
- package/build/dist/Server/Services/KubernetesClusterService.js +17 -68
- package/build/dist/Server/Services/KubernetesClusterService.js.map +1 -1
- package/build/dist/Server/Services/LabelService.js +42 -7
- package/build/dist/Server/Services/LabelService.js.map +1 -1
- package/build/dist/Server/Services/MetricTypeService.js +74 -0
- package/build/dist/Server/Services/MetricTypeService.js.map +1 -1
- package/build/dist/Server/Services/MonitorService.js +81 -9
- package/build/dist/Server/Services/MonitorService.js.map +1 -1
- package/build/dist/Server/Services/MonitorStatusTimelineService.js +28 -0
- package/build/dist/Server/Services/MonitorStatusTimelineService.js.map +1 -1
- package/build/dist/Server/Services/MonitorTemplateService.js +60 -0
- package/build/dist/Server/Services/MonitorTemplateService.js.map +1 -1
- package/build/dist/Server/Services/OpenTelemetryIngestService.js +155 -25
- package/build/dist/Server/Services/OpenTelemetryIngestService.js.map +1 -1
- package/build/dist/Server/Services/PodmanHostService.js +19 -69
- package/build/dist/Server/Services/PodmanHostService.js.map +1 -1
- package/build/dist/Server/Services/ProxmoxClusterService.js +23 -73
- package/build/dist/Server/Services/ProxmoxClusterService.js.map +1 -1
- package/build/dist/Server/Services/RumApplicationService.js +19 -70
- package/build/dist/Server/Services/RumApplicationService.js.map +1 -1
- package/build/dist/Server/Services/ScheduledMaintenanceStateTimelineService.js +20 -0
- package/build/dist/Server/Services/ScheduledMaintenanceStateTimelineService.js.map +1 -1
- package/build/dist/Server/Services/ServerlessFunctionService.js +24 -75
- package/build/dist/Server/Services/ServerlessFunctionService.js.map +1 -1
- package/build/dist/Server/Services/ServiceService.js +236 -61
- package/build/dist/Server/Services/ServiceService.js.map +1 -1
- package/build/dist/Server/Services/StatusPageMonitorRuleEngineService.js +603 -0
- package/build/dist/Server/Services/StatusPageMonitorRuleEngineService.js.map +1 -0
- package/build/dist/Server/Services/StatusPageMonitorRuleService.js +401 -0
- package/build/dist/Server/Services/StatusPageMonitorRuleService.js.map +1 -0
- package/build/dist/Server/Services/TelemetryEntityRelationshipService.js +1 -0
- package/build/dist/Server/Services/TelemetryEntityRelationshipService.js.map +1 -1
- package/build/dist/Server/Services/TelemetryEntityService.js +1 -0
- package/build/dist/Server/Services/TelemetryEntityService.js.map +1 -1
- package/build/dist/Server/Services/UserService.js +165 -0
- package/build/dist/Server/Services/UserService.js.map +1 -1
- package/build/dist/Server/Utils/AI/Toolbox/CodeTools.js +31 -1
- package/build/dist/Server/Utils/AI/Toolbox/CodeTools.js.map +1 -1
- package/build/dist/Server/Utils/AnalyticsDatabase/StatementGenerator.js +13 -0
- package/build/dist/Server/Utils/AnalyticsDatabase/StatementGenerator.js.map +1 -1
- package/build/dist/Server/Utils/CodeRepository/GitHub/GitHub.js +126 -4
- package/build/dist/Server/Utils/CodeRepository/GitHub/GitHub.js.map +1 -1
- package/build/dist/Server/Utils/CodeRepository/GitHub/GitHubInstallationBinding.js +136 -0
- package/build/dist/Server/Utils/CodeRepository/GitHub/GitHubInstallationBinding.js.map +1 -0
- package/build/dist/Server/Utils/Database/ProjectScopedReferenceValidator.js +105 -29
- package/build/dist/Server/Utils/Database/ProjectScopedReferenceValidator.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorResource.js +56 -32
- package/build/dist/Server/Utils/Monitor/MonitorResource.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorStatusTimeline.js +30 -3
- package/build/dist/Server/Utils/Monitor/MonitorStatusTimeline.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorStepsProjectValidator.js +110 -98
- package/build/dist/Server/Utils/Monitor/MonitorStepsProjectValidator.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorStepsReferenceExtractor.js +312 -0
- package/build/dist/Server/Utils/Monitor/MonitorStepsReferenceExtractor.js.map +1 -0
- package/build/dist/Server/Utils/PasswordHash.js +237 -0
- package/build/dist/Server/Utils/PasswordHash.js.map +1 -0
- package/build/dist/Server/Utils/SingleFlight.js +76 -0
- package/build/dist/Server/Utils/SingleFlight.js.map +1 -0
- package/build/dist/Server/Utils/StatusPage/MonitorRulePatternValidator.js +29 -0
- package/build/dist/Server/Utils/StatusPage/MonitorRulePatternValidator.js.map +1 -0
- package/build/dist/Server/Utils/Telemetry/EntityRegistry.js +78 -19
- package/build/dist/Server/Utils/Telemetry/EntityRegistry.js.map +1 -1
- package/build/dist/Server/Utils/Telemetry/ResourceHeartbeat.js +160 -0
- package/build/dist/Server/Utils/Telemetry/ResourceHeartbeat.js.map +1 -0
- package/build/dist/Server/Utils/Telemetry/Telemetry.js +279 -104
- package/build/dist/Server/Utils/Telemetry/Telemetry.js.map +1 -1
- package/build/dist/Types/Dashboard/DashboardComponentType.js +1 -0
- package/build/dist/Types/Dashboard/DashboardComponentType.js.map +1 -1
- package/build/dist/Types/Dashboard/DashboardComponents/ComponentArgument.js +1 -0
- package/build/dist/Types/Dashboard/DashboardComponents/ComponentArgument.js.map +1 -1
- package/build/dist/Types/Dashboard/DashboardComponents/DashboardNetworkMapComponent.js +2 -0
- package/build/dist/Types/Dashboard/DashboardComponents/DashboardNetworkMapComponent.js.map +1 -0
- package/build/dist/Types/Dashboard/DashboardTemplates.js +368 -0
- package/build/dist/Types/Dashboard/DashboardTemplates.js.map +1 -1
- package/build/dist/Types/Database/BigIntColumnTransformer.js +66 -0
- package/build/dist/Types/Database/BigIntColumnTransformer.js.map +1 -0
- package/build/dist/Types/Database/ColumnLength.js +9 -1
- package/build/dist/Types/Database/ColumnLength.js.map +1 -1
- package/build/dist/Types/Database/DatabaseProperty.js +25 -0
- package/build/dist/Types/Database/DatabaseProperty.js.map +1 -1
- package/build/dist/Types/Database/NumericColumnValue.js +97 -0
- package/build/dist/Types/Database/NumericColumnValue.js.map +1 -0
- package/build/dist/Types/Database/TableColumn.js.map +1 -1
- package/build/dist/Types/Database/UnsynchronizedIndex.js +46 -0
- package/build/dist/Types/Database/UnsynchronizedIndex.js.map +1 -0
- package/build/dist/Types/Decimal.js +14 -3
- package/build/dist/Types/Decimal.js.map +1 -1
- package/build/dist/Types/HashedString.js +95 -5
- package/build/dist/Types/HashedString.js.map +1 -1
- package/build/dist/Types/Permission.js +42 -0
- package/build/dist/Types/Permission.js.map +1 -1
- package/build/dist/Types/Port.js +15 -5
- package/build/dist/Types/Port.js.map +1 -1
- package/build/dist/UI/Components/CustomFields/CustomFieldsDetail.js +51 -10
- package/build/dist/UI/Components/CustomFields/CustomFieldsDetail.js.map +1 -1
- package/build/dist/UI/Components/LogsViewer/useLiveLogsRefresh.js +44 -0
- package/build/dist/UI/Components/LogsViewer/useLiveLogsRefresh.js.map +1 -0
- package/build/dist/UI/Components/LogsViewer/useLogsHistogram.js +75 -0
- package/build/dist/UI/Components/LogsViewer/useLogsHistogram.js.map +1 -0
- package/build/dist/UI/Components/Navbar/NavBar.js +3 -1
- package/build/dist/UI/Components/Navbar/NavBar.js.map +1 -1
- package/build/dist/UI/Components/Navbar/NavBarMenuModal.js +19 -7
- package/build/dist/UI/Components/Navbar/NavBarMenuModal.js.map +1 -1
- package/build/dist/UI/Utils/ModelAPI/UserProjectsModelAPI.js +156 -0
- package/build/dist/UI/Utils/ModelAPI/UserProjectsModelAPI.js.map +1 -0
- package/build/dist/Utils/Dashboard/Components/DashboardNetworkMapComponent.js +114 -0
- package/build/dist/Utils/Dashboard/Components/DashboardNetworkMapComponent.js.map +1 -0
- package/build/dist/Utils/Dashboard/Components/Index.js +4 -0
- package/build/dist/Utils/Dashboard/Components/Index.js.map +1 -1
- package/build/dist/Utils/TeamMembersByProject.js +145 -0
- package/build/dist/Utils/TeamMembersByProject.js.map +1 -0
- package/package.json +1 -1
|
@@ -12,6 +12,7 @@ import IoTFleetLabelRuleEngineService from "./IoTFleetLabelRuleEngineService";
|
|
|
12
12
|
import IoTFleetOwnerRuleEngineService from "./IoTFleetOwnerRuleEngineService";
|
|
13
13
|
import Model from "../../Models/DatabaseModels/IoTFleet";
|
|
14
14
|
import CaptureSpan from "../Utils/Telemetry/CaptureSpan";
|
|
15
|
+
import ResourceHeartbeat from "../Utils/Telemetry/ResourceHeartbeat";
|
|
15
16
|
import ObjectID from "../../Types/ObjectID";
|
|
16
17
|
import QueryHelper from "../Types/Database/QueryHelper";
|
|
17
18
|
import OneUptimeDate from "../../Types/Date";
|
|
@@ -147,7 +148,6 @@ export class Service extends DatabaseService {
|
|
|
147
148
|
*/
|
|
148
149
|
async updateLastSeen(fleetId, extra) {
|
|
149
150
|
var _a, _b, _c;
|
|
150
|
-
const cacheKey = fleetId.toString();
|
|
151
151
|
const extrasFingerprint = crypto
|
|
152
152
|
.createHash("sha1")
|
|
153
153
|
.update(JSON.stringify({
|
|
@@ -156,89 +156,39 @@ export class Service extends DatabaseService {
|
|
|
156
156
|
onlineDeviceCount: (_c = extra === null || extra === void 0 ? void 0 : extra.onlineDeviceCount) !== null && _c !== void 0 ? _c : null,
|
|
157
157
|
}))
|
|
158
158
|
.digest("hex");
|
|
159
|
-
let cached = null;
|
|
160
|
-
try {
|
|
161
|
-
cached = await GlobalCache.getString(LAST_SEEN_CACHE_NAMESPACE, cacheKey);
|
|
162
|
-
}
|
|
163
|
-
catch (_d) {
|
|
164
|
-
/*
|
|
165
|
-
* Cache unavailable — fail open and refresh lastSeenAt anyway. A
|
|
166
|
-
* cache error must never skip the DB write below, otherwise the
|
|
167
|
-
* resource is wrongly marked "disconnected" while telemetry is
|
|
168
|
-
* still flowing. Mirrors shouldRunMaintenance's fail-open stance.
|
|
169
|
-
*/
|
|
170
|
-
cached = null;
|
|
171
|
-
}
|
|
172
|
-
if (cached === extrasFingerprint) {
|
|
173
|
-
return; // same data was written recently
|
|
174
|
-
}
|
|
175
|
-
try {
|
|
176
|
-
await GlobalCache.setString(LAST_SEEN_CACHE_NAMESPACE, cacheKey, extrasFingerprint, { expiresInSeconds: LAST_SEEN_THROTTLE_SECONDS });
|
|
177
|
-
}
|
|
178
|
-
catch (_e) {
|
|
179
|
-
// Best-effort throttle write; proceed with the DB update regardless.
|
|
180
|
-
}
|
|
181
159
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
182
160
|
const liveness = {
|
|
183
161
|
lastSeenAt: OneUptimeDate.getCurrentDate(),
|
|
184
162
|
otelCollectorStatus: "connected",
|
|
185
163
|
};
|
|
186
164
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
187
|
-
const
|
|
165
|
+
const metadata = {};
|
|
188
166
|
if (extra === null || extra === void 0 ? void 0 : extra.agentVersion) {
|
|
189
|
-
|
|
167
|
+
metadata.agentVersion = extra.agentVersion;
|
|
190
168
|
}
|
|
191
169
|
// Counts: 0 is a legitimate value — gate on undefined, not falsiness.
|
|
192
170
|
if ((extra === null || extra === void 0 ? void 0 : extra.deviceCount) !== undefined) {
|
|
193
|
-
|
|
171
|
+
metadata.deviceCount = extra.deviceCount;
|
|
194
172
|
}
|
|
195
173
|
if ((extra === null || extra === void 0 ? void 0 : extra.onlineDeviceCount) !== undefined) {
|
|
196
|
-
|
|
174
|
+
metadata.onlineDeviceCount = extra.onlineDeviceCount;
|
|
197
175
|
}
|
|
198
176
|
/*
|
|
199
|
-
*
|
|
200
|
-
*
|
|
201
|
-
*
|
|
202
|
-
*
|
|
203
|
-
* Collector-supplied strings are clamped to their declared column
|
|
204
|
-
* widths inside updateColumnsByIdWithoutHooks — see
|
|
205
|
-
* DatabaseService.truncateStringColumnsToMaxLength.
|
|
177
|
+
* One gated, non-blocking heartbeat write. The gates, the fail-open /
|
|
178
|
+
* fail-closed split and the liveness-only fallback all live in
|
|
179
|
+
* ResourceHeartbeat — see there for why this row's throttle used to
|
|
180
|
+
* provide no throttling at all.
|
|
206
181
|
*/
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
* collector-supplied columns; if any one of them makes Postgres
|
|
218
|
-
* reject the statement, lastSeenAt silently stops advancing and
|
|
219
|
-
* markDisconnectedFleets flips a perfectly healthy IoT fleet to
|
|
220
|
-
* "disconnected" 15 minutes later — with telemetry still arriving the
|
|
221
|
-
* whole time. That was issue #3006 on the Host path (a host.ip list
|
|
222
|
-
* longer than the then-varchar(500) column). Retry with liveness only
|
|
223
|
-
* so the enrichment is what gets dropped, never the heartbeat.
|
|
224
|
-
*/
|
|
225
|
-
logger.warn(`IoTFleetService.updateLastSeen: metadata write failed for IoT fleet ${fleetId.toString()}, falling back to a liveness-only update: ${err instanceof Error ? err.message : String(err)}`);
|
|
226
|
-
/*
|
|
227
|
-
* The throttle fingerprint was already stored, so without this the
|
|
228
|
-
* next batch would short-circuit on a cache hit and skip the retry
|
|
229
|
-
* for the rest of the window.
|
|
230
|
-
*/
|
|
231
|
-
try {
|
|
232
|
-
await GlobalCache.deleteKey(LAST_SEEN_CACHE_NAMESPACE, cacheKey);
|
|
233
|
-
}
|
|
234
|
-
catch (_f) {
|
|
235
|
-
// Best-effort; the fallback write below is what actually matters.
|
|
236
|
-
}
|
|
237
|
-
await this.updateColumnsByIdWithoutHooks({
|
|
238
|
-
id: fleetId,
|
|
239
|
-
data: liveness,
|
|
240
|
-
});
|
|
241
|
-
}
|
|
182
|
+
await ResourceHeartbeat.write({
|
|
183
|
+
service: this,
|
|
184
|
+
id: fleetId,
|
|
185
|
+
cacheNamespace: LAST_SEEN_CACHE_NAMESPACE,
|
|
186
|
+
throttleInSeconds: LAST_SEEN_THROTTLE_SECONDS,
|
|
187
|
+
liveness: liveness,
|
|
188
|
+
metadata: metadata,
|
|
189
|
+
fingerprint: extrasFingerprint,
|
|
190
|
+
describe: `iot fleet ${fleetId.toString()}`,
|
|
191
|
+
});
|
|
242
192
|
}
|
|
243
193
|
/**
|
|
244
194
|
* Additively attach labels to an IoT fleet. Existing labels are
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IoTFleetService.js","sourceRoot":"","sources":["../../../../Server/Services/IoTFleetService.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"IoTFleetService.js","sourceRoot":"","sources":["../../../../Server/Services/IoTFleetService.ts"],"names":[],"mappings":"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"}
|
|
@@ -12,6 +12,7 @@ import KubernetesClusterLabelRuleEngineService from "./KubernetesClusterLabelRul
|
|
|
12
12
|
import KubernetesClusterOwnerRuleEngineService from "./KubernetesClusterOwnerRuleEngineService";
|
|
13
13
|
import Model from "../../Models/DatabaseModels/KubernetesCluster";
|
|
14
14
|
import CaptureSpan from "../Utils/Telemetry/CaptureSpan";
|
|
15
|
+
import ResourceHeartbeat from "../Utils/Telemetry/ResourceHeartbeat";
|
|
15
16
|
import ObjectID from "../../Types/ObjectID";
|
|
16
17
|
import QueryHelper from "../Types/Database/QueryHelper";
|
|
17
18
|
import OneUptimeDate from "../../Types/Date";
|
|
@@ -118,90 +119,38 @@ export class Service extends DatabaseService {
|
|
|
118
119
|
}
|
|
119
120
|
async updateLastSeen(clusterId, extra) {
|
|
120
121
|
var _a;
|
|
121
|
-
const cacheKey = clusterId.toString();
|
|
122
122
|
const extrasFingerprint = crypto
|
|
123
123
|
.createHash("sha1")
|
|
124
124
|
.update(JSON.stringify({
|
|
125
125
|
agentVersion: (_a = extra === null || extra === void 0 ? void 0 : extra.agentVersion) !== null && _a !== void 0 ? _a : null,
|
|
126
126
|
}))
|
|
127
127
|
.digest("hex");
|
|
128
|
-
let cached = null;
|
|
129
|
-
try {
|
|
130
|
-
cached = await GlobalCache.getString(LAST_SEEN_CACHE_NAMESPACE, cacheKey);
|
|
131
|
-
}
|
|
132
|
-
catch (_b) {
|
|
133
|
-
/*
|
|
134
|
-
* Cache unavailable — fail open and refresh lastSeenAt anyway. A
|
|
135
|
-
* cache error must never skip the DB write below, otherwise the
|
|
136
|
-
* resource is wrongly marked "disconnected" while telemetry is
|
|
137
|
-
* still flowing. Mirrors shouldRunMaintenance's fail-open stance.
|
|
138
|
-
*/
|
|
139
|
-
cached = null;
|
|
140
|
-
}
|
|
141
|
-
if (cached === extrasFingerprint) {
|
|
142
|
-
return; // same data was written recently
|
|
143
|
-
}
|
|
144
|
-
try {
|
|
145
|
-
await GlobalCache.setString(LAST_SEEN_CACHE_NAMESPACE, cacheKey, extrasFingerprint, { expiresInSeconds: LAST_SEEN_THROTTLE_SECONDS });
|
|
146
|
-
}
|
|
147
|
-
catch (_c) {
|
|
148
|
-
// Best-effort throttle write; proceed with the DB update regardless.
|
|
149
|
-
}
|
|
150
128
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
151
129
|
const liveness = {
|
|
152
130
|
lastSeenAt: OneUptimeDate.getCurrentDate(),
|
|
153
131
|
otelCollectorStatus: "connected",
|
|
154
132
|
};
|
|
155
133
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
156
|
-
const
|
|
134
|
+
const metadata = {};
|
|
157
135
|
if (extra === null || extra === void 0 ? void 0 : extra.agentVersion) {
|
|
158
|
-
|
|
136
|
+
metadata.agentVersion = extra.agentVersion;
|
|
159
137
|
}
|
|
160
138
|
/*
|
|
161
|
-
*
|
|
162
|
-
*
|
|
163
|
-
*
|
|
164
|
-
*
|
|
165
|
-
* Collector-supplied strings are clamped to their declared column
|
|
166
|
-
* widths inside updateColumnsByIdWithoutHooks — see
|
|
167
|
-
* DatabaseService.truncateStringColumnsToMaxLength.
|
|
139
|
+
* One gated, non-blocking heartbeat write. The gates, the fail-open /
|
|
140
|
+
* fail-closed split and the liveness-only fallback all live in
|
|
141
|
+
* ResourceHeartbeat — see there for why this row's throttle used to
|
|
142
|
+
* provide no throttling at all.
|
|
168
143
|
*/
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
* collector-supplied columns; if any one of them makes Postgres
|
|
180
|
-
* reject the statement, lastSeenAt silently stops advancing and
|
|
181
|
-
* markDisconnectedClusters flips a perfectly healthy Kubernetes
|
|
182
|
-
* cluster to "disconnected" 15 minutes later — with telemetry still
|
|
183
|
-
* arriving the whole time. That was issue #3006 on the Host path (a
|
|
184
|
-
* host.ip list longer than the then-varchar(500) column). Retry with
|
|
185
|
-
* liveness only so the enrichment is what gets dropped, never the
|
|
186
|
-
* heartbeat.
|
|
187
|
-
*/
|
|
188
|
-
logger.warn(`KubernetesClusterService.updateLastSeen: metadata write failed for Kubernetes cluster ${clusterId.toString()}, falling back to a liveness-only update: ${err instanceof Error ? err.message : String(err)}`);
|
|
189
|
-
/*
|
|
190
|
-
* The throttle fingerprint was already stored, so without this the
|
|
191
|
-
* next batch would short-circuit on a cache hit and skip the retry
|
|
192
|
-
* for the rest of the window.
|
|
193
|
-
*/
|
|
194
|
-
try {
|
|
195
|
-
await GlobalCache.deleteKey(LAST_SEEN_CACHE_NAMESPACE, cacheKey);
|
|
196
|
-
}
|
|
197
|
-
catch (_d) {
|
|
198
|
-
// Best-effort; the fallback write below is what actually matters.
|
|
199
|
-
}
|
|
200
|
-
await this.updateColumnsByIdWithoutHooks({
|
|
201
|
-
id: clusterId,
|
|
202
|
-
data: liveness,
|
|
203
|
-
});
|
|
204
|
-
}
|
|
144
|
+
await ResourceHeartbeat.write({
|
|
145
|
+
service: this,
|
|
146
|
+
id: clusterId,
|
|
147
|
+
cacheNamespace: LAST_SEEN_CACHE_NAMESPACE,
|
|
148
|
+
throttleInSeconds: LAST_SEEN_THROTTLE_SECONDS,
|
|
149
|
+
liveness: liveness,
|
|
150
|
+
metadata: metadata,
|
|
151
|
+
fingerprint: extrasFingerprint,
|
|
152
|
+
describe: `kubernetes cluster ${clusterId.toString()}`,
|
|
153
|
+
});
|
|
205
154
|
}
|
|
206
155
|
/**
|
|
207
156
|
* Additively attach labels to a Kubernetes cluster. Existing labels
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"KubernetesClusterService.js","sourceRoot":"","sources":["../../../../Server/Services/KubernetesClusterService.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"KubernetesClusterService.js","sourceRoot":"","sources":["../../../../Server/Services/KubernetesClusterService.ts"],"names":[],"mappings":"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"}
|
|
@@ -11,6 +11,8 @@ import QueryHelper from "../Types/Database/QueryHelper";
|
|
|
11
11
|
import DatabaseService from "./DatabaseService";
|
|
12
12
|
import ServiceLevelObjectiveMonitorRuleEngineService from "./ServiceLevelObjectiveMonitorRuleEngineService";
|
|
13
13
|
import ServiceLevelObjectiveService from "./ServiceLevelObjectiveService";
|
|
14
|
+
import StatusPageMonitorRuleEngineService from "./StatusPageMonitorRuleEngineService";
|
|
15
|
+
import StatusPageMonitorRuleService from "./StatusPageMonitorRuleService";
|
|
14
16
|
import BadDataException from "../../Types/Exception/BadDataException";
|
|
15
17
|
import LIMIT_MAX from "../../Types/Database/LimitMax";
|
|
16
18
|
import ObjectID from "../../Types/ObjectID";
|
|
@@ -53,13 +55,14 @@ export class Service extends DatabaseService {
|
|
|
53
55
|
}
|
|
54
56
|
/*
|
|
55
57
|
* Deleting a label cascades its join rows away at the database level, so no
|
|
56
|
-
* service hook ever fires for the SLO label rules
|
|
57
|
-
*
|
|
58
|
-
* explain why. Note the ids down while the label still
|
|
59
|
-
* the (now smaller) rules once it is gone.
|
|
58
|
+
* service hook ever fires for the SLO label rules or status page monitor
|
|
59
|
+
* rules that referenced it. Those would keep the monitors the rule attached,
|
|
60
|
+
* with nothing left to explain why. Note the ids down while the label still
|
|
61
|
+
* exists, and re-run the (now smaller) rules once it is gone.
|
|
60
62
|
*/
|
|
61
63
|
async onBeforeDelete(deleteBy) {
|
|
62
64
|
let serviceLevelObjectiveIds = [];
|
|
65
|
+
let statusPageMonitorRuleIds = [];
|
|
63
66
|
try {
|
|
64
67
|
const labels = await this.findBy({
|
|
65
68
|
query: deleteBy.query,
|
|
@@ -100,21 +103,42 @@ export class Service extends DatabaseService {
|
|
|
100
103
|
.filter((id) => {
|
|
101
104
|
return Boolean(id);
|
|
102
105
|
});
|
|
106
|
+
const statusPageMonitorRules = await StatusPageMonitorRuleService.findBy({
|
|
107
|
+
query: {
|
|
108
|
+
monitorLabels: labelIds,
|
|
109
|
+
},
|
|
110
|
+
select: {
|
|
111
|
+
_id: true,
|
|
112
|
+
},
|
|
113
|
+
limit: LIMIT_MAX,
|
|
114
|
+
skip: 0,
|
|
115
|
+
props: {
|
|
116
|
+
isRoot: true,
|
|
117
|
+
},
|
|
118
|
+
});
|
|
119
|
+
statusPageMonitorRuleIds = statusPageMonitorRules
|
|
120
|
+
.map((rule) => {
|
|
121
|
+
return rule.id;
|
|
122
|
+
})
|
|
123
|
+
.filter((id) => {
|
|
124
|
+
return Boolean(id);
|
|
125
|
+
});
|
|
103
126
|
}
|
|
104
127
|
}
|
|
105
128
|
catch (err) {
|
|
106
|
-
logger.error(`Error collecting
|
|
129
|
+
logger.error(`Error collecting label rules affected by a label delete: ${err}`);
|
|
107
130
|
}
|
|
108
131
|
return {
|
|
109
132
|
deleteBy,
|
|
110
133
|
carryForward: {
|
|
111
134
|
serviceLevelObjectiveIds: serviceLevelObjectiveIds,
|
|
135
|
+
statusPageMonitorRuleIds: statusPageMonitorRuleIds,
|
|
112
136
|
},
|
|
113
137
|
};
|
|
114
138
|
}
|
|
115
139
|
async onDeleteSuccess(onDelete, _itemIdsBeforeDelete) {
|
|
116
|
-
|
|
117
|
-
const serviceLevelObjectiveIds = (
|
|
140
|
+
const carryForward = onDelete.carryForward;
|
|
141
|
+
const serviceLevelObjectiveIds = (carryForward === null || carryForward === void 0 ? void 0 : carryForward.serviceLevelObjectiveIds) || [];
|
|
118
142
|
for (const serviceLevelObjectiveId of serviceLevelObjectiveIds) {
|
|
119
143
|
try {
|
|
120
144
|
await ServiceLevelObjectiveMonitorRuleEngineService.syncMonitorsForSlo({
|
|
@@ -125,6 +149,17 @@ export class Service extends DatabaseService {
|
|
|
125
149
|
logger.error(`Error re-applying the monitor label rule for SLO ${serviceLevelObjectiveId.toString()} after a label delete: ${err}`);
|
|
126
150
|
}
|
|
127
151
|
}
|
|
152
|
+
const statusPageMonitorRuleIds = (carryForward === null || carryForward === void 0 ? void 0 : carryForward.statusPageMonitorRuleIds) || [];
|
|
153
|
+
for (const statusPageMonitorRuleId of statusPageMonitorRuleIds) {
|
|
154
|
+
try {
|
|
155
|
+
await StatusPageMonitorRuleEngineService.syncResourcesForRule({
|
|
156
|
+
statusPageMonitorRuleId: statusPageMonitorRuleId,
|
|
157
|
+
});
|
|
158
|
+
}
|
|
159
|
+
catch (err) {
|
|
160
|
+
logger.error(`Error re-applying status page monitor rule ${statusPageMonitorRuleId.toString()} after a label delete: ${err}`);
|
|
161
|
+
}
|
|
162
|
+
}
|
|
128
163
|
return onDelete;
|
|
129
164
|
}
|
|
130
165
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LabelService.js","sourceRoot":"","sources":["../../../../Server/Services/LabelService.ts"],"names":[],"mappings":";;;;;;;;;AAGA,OAAO,WAAW,MAAM,+BAA+B,CAAC;AACxD,OAAO,eAAe,MAAM,mBAAmB,CAAC;AAChD,OAAO,6CAA6C,MAAM,iDAAiD,CAAC;AAC5G,OAAO,4BAA4B,MAAM,gCAAgC,CAAC;
|
|
1
|
+
{"version":3,"file":"LabelService.js","sourceRoot":"","sources":["../../../../Server/Services/LabelService.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,83 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
8
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
9
|
+
};
|
|
1
10
|
import DatabaseService from "./DatabaseService";
|
|
2
11
|
import Model from "../../Models/DatabaseModels/MetricType";
|
|
12
|
+
import BadDataException from "../../Types/Exception/BadDataException";
|
|
13
|
+
import CaptureSpan from "../Utils/Telemetry/CaptureSpan";
|
|
3
14
|
export class Service extends DatabaseService {
|
|
4
15
|
constructor() {
|
|
5
16
|
super(Model);
|
|
6
17
|
}
|
|
18
|
+
/*
|
|
19
|
+
* Additively associate services with a metric type, in ONE statement.
|
|
20
|
+
*
|
|
21
|
+
* This replaces routing the association through `updateOneById` with the
|
|
22
|
+
* whole `services` array in the payload. That looked innocuous and was not:
|
|
23
|
+
* `services` is a `TableColumnType.EntityArray`, and its mere PRESENCE as a
|
|
24
|
+
* key flips `hasRelationUpdates` in DatabaseService, which routes the write
|
|
25
|
+
* to `getRepository().save()` — a real BEGIN/COMMIT that reloads the entity,
|
|
26
|
+
* loads the relation ids, bumps `version`, and DELETEs then re-INSERTs
|
|
27
|
+
* junction rows, holding the MetricType row's write lock across every one of
|
|
28
|
+
* those round trips. On the ingest path, where this runs per metric name per
|
|
29
|
+
* batch with no backpressure, it was the only multi-round-trip lock hold in
|
|
30
|
+
* the pipeline.
|
|
31
|
+
*
|
|
32
|
+
* The whole-array write was also silently LOSING data. `save()` diffs the
|
|
33
|
+
* array it is given against what is currently in the database and deletes
|
|
34
|
+
* anything missing — but each ingest worker only knows the services in ITS
|
|
35
|
+
* batch. Two workers with different batches therefore deleted each other's
|
|
36
|
+
* associations and re-inserted them on the next batch: permanent junction
|
|
37
|
+
* churn, and real service-to-metric links disappearing from the UI in
|
|
38
|
+
* between. Additive insert makes that impossible to express.
|
|
39
|
+
*
|
|
40
|
+
* ON CONFLICT DO NOTHING is well-defined here: the junction's primary key is
|
|
41
|
+
* exactly (metricTypeId, serviceId), so a concurrent writer adding the same
|
|
42
|
+
* association is a no-op rather than a unique violation.
|
|
43
|
+
*/
|
|
44
|
+
async attachServices(data) {
|
|
45
|
+
var _a, _b, _c, _d, _e;
|
|
46
|
+
if (!data.metricTypeId) {
|
|
47
|
+
throw new BadDataException("metricTypeId is required");
|
|
48
|
+
}
|
|
49
|
+
if (!data.serviceIds || data.serviceIds.length === 0) {
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
/*
|
|
53
|
+
* Identifiers come from entity metadata, never from the caller, and every
|
|
54
|
+
* value is bound as a parameter — the same rule the other raw-SQL paths in
|
|
55
|
+
* DatabaseService follow.
|
|
56
|
+
*/
|
|
57
|
+
const relation = this.getRepository().metadata.findRelationWithPropertyPath("services");
|
|
58
|
+
const junction = (_a = relation === null || relation === void 0 ? void 0 : relation.junctionEntityMetadata) === null || _a === void 0 ? void 0 : _a.tableName;
|
|
59
|
+
const metricTypeColumn = (_c = (_b = relation === null || relation === void 0 ? void 0 : relation.junctionEntityMetadata) === null || _b === void 0 ? void 0 : _b.columns[0]) === null || _c === void 0 ? void 0 : _c.databaseName;
|
|
60
|
+
const serviceColumn = (_e = (_d = relation === null || relation === void 0 ? void 0 : relation.junctionEntityMetadata) === null || _d === void 0 ? void 0 : _d.columns[1]) === null || _e === void 0 ? void 0 : _e.databaseName;
|
|
61
|
+
if (!junction || !metricTypeColumn || !serviceColumn) {
|
|
62
|
+
throw new BadDataException("MetricTypeService.attachServices: the services relation has no junction metadata");
|
|
63
|
+
}
|
|
64
|
+
/*
|
|
65
|
+
* Deduplicate and SORT. Concurrent statements that insert overlapping sets
|
|
66
|
+
* acquire their row locks in the same order this way, which is what keeps
|
|
67
|
+
* two workers associating the same services from deadlocking each other.
|
|
68
|
+
*/
|
|
69
|
+
const serviceIds = Array.from(new Set(data.serviceIds.map((id) => {
|
|
70
|
+
return id.toString();
|
|
71
|
+
}))).sort();
|
|
72
|
+
await this.getRepository().manager.query(`INSERT INTO "${junction}" ("${metricTypeColumn}", "${serviceColumn}") ` +
|
|
73
|
+
`SELECT $1, unnest($2::uuid[]) ON CONFLICT DO NOTHING`, [data.metricTypeId.toString(), serviceIds]);
|
|
74
|
+
}
|
|
7
75
|
}
|
|
76
|
+
__decorate([
|
|
77
|
+
CaptureSpan(),
|
|
78
|
+
__metadata("design:type", Function),
|
|
79
|
+
__metadata("design:paramtypes", [Object]),
|
|
80
|
+
__metadata("design:returntype", Promise)
|
|
81
|
+
], Service.prototype, "attachServices", null);
|
|
8
82
|
export default new Service();
|
|
9
83
|
//# sourceMappingURL=MetricTypeService.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MetricTypeService.js","sourceRoot":"","sources":["../../../../Server/Services/MetricTypeService.ts"],"names":[],"mappings":"AAAA,OAAO,eAAe,MAAM,mBAAmB,CAAC;AAChD,OAAO,KAAK,MAAM,wCAAwC,CAAC;AAE3D,MAAM,OAAO,OAAQ,SAAQ,eAAsB;IACjD;QACE,KAAK,CAAC,KAAK,CAAC,CAAC;IACf,CAAC;CACF;
|
|
1
|
+
{"version":3,"file":"MetricTypeService.js","sourceRoot":"","sources":["../../../../Server/Services/MetricTypeService.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,eAAe,MAAM,mBAAmB,CAAC;AAChD,OAAO,KAAK,MAAM,wCAAwC,CAAC;AAE3D,OAAO,gBAAgB,MAAM,wCAAwC,CAAC;AACtE,OAAO,WAAW,MAAM,gCAAgC,CAAC;AAGzD,MAAM,OAAO,OAAQ,SAAQ,eAAsB;IACjD;QACE,KAAK,CAAC,KAAK,CAAC,CAAC;IACf,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;;;;OAyBG;IAEU,AAAN,KAAK,CAAC,cAAc,CAAC,IAG3B;;QACC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;YACvB,MAAM,IAAI,gBAAgB,CAAC,0BAA0B,CAAC,CAAC;QACzD,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACrD,OAAO;QACT,CAAC;QAED;;;;WAIG;QACH,MAAM,QAAQ,GACZ,IAAI,CAAC,aAAa,EAAE,CAAC,QAAQ,CAAC,4BAA4B,CAAC,UAAU,CAAC,CAAC;QAEzE,MAAM,QAAQ,GACZ,MAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,sBAAsB,0CAAE,SAAS,CAAC;QAC9C,MAAM,gBAAgB,GACpB,MAAA,MAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,sBAAsB,0CAAE,OAAO,CAAC,CAAC,CAAC,0CAAE,YAAY,CAAC;QAC7D,MAAM,aAAa,GACjB,MAAA,MAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,sBAAsB,0CAAE,OAAO,CAAC,CAAC,CAAC,0CAAE,YAAY,CAAC;QAE7D,IAAI,CAAC,QAAQ,IAAI,CAAC,gBAAgB,IAAI,CAAC,aAAa,EAAE,CAAC;YACrD,MAAM,IAAI,gBAAgB,CACxB,kFAAkF,CACnF,CAAC;QACJ,CAAC;QAED;;;;WAIG;QACH,MAAM,UAAU,GAAkB,KAAK,CAAC,IAAI,CAC1C,IAAI,GAAG,CACL,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,EAAY,EAAE,EAAE;YACnC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC;QACvB,CAAC,CAAC,CACH,CACF,CAAC,IAAI,EAAE,CAAC;QAET,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC,OAAO,CAAC,KAAK,CACtC,gBAAgB,QAAQ,OAAO,gBAAgB,OAAO,aAAa,KAAK;YACtE,sDAAsD,EACxD,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,EAAE,UAAU,CAAC,CAC3C,CAAC;IACJ,CAAC;CACF;AApDc;IADZ,WAAW,EAAE;;;;6CAoDb;AAGH,eAAe,IAAI,OAAO,EAAE,CAAC"}
|