@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
|
@@ -80,6 +80,20 @@ import {
|
|
|
80
80
|
*/
|
|
81
81
|
@Index(["projectId", "name"], { unique: true })
|
|
82
82
|
@Index(["projectId", "isArchived"])
|
|
83
|
+
/*
|
|
84
|
+
* Restores a UNIQUE index that an autogenerated migration deleted.
|
|
85
|
+
*
|
|
86
|
+
* Declared natively and NAMED. TypeORM's schema builder matches database
|
|
87
|
+
* indexes to entity metadata by name and drops every one it cannot find, which
|
|
88
|
+
* is how the original was lost: it existed only in a migration, so entity
|
|
89
|
+
* metadata never mentioned it and `migration:generate` emitted a DROP. Naming
|
|
90
|
+
* it here keeps the original index name and lets the builder match, compare
|
|
91
|
+
* uniqueness and columns, and keep it.
|
|
92
|
+
*/
|
|
93
|
+
@Index("IDX_ceph_cluster_slug", ["slug"], {
|
|
94
|
+
unique: true,
|
|
95
|
+
where: '"deletedAt" IS NULL',
|
|
96
|
+
})
|
|
83
97
|
@TableMetadata({
|
|
84
98
|
tableName: "CephCluster",
|
|
85
99
|
singularName: "Ceph Cluster",
|
|
@@ -649,13 +649,21 @@ export default class CodeRepository extends BaseModel {
|
|
|
649
649
|
})
|
|
650
650
|
public repositoryUrl?: URL = undefined;
|
|
651
651
|
|
|
652
|
-
|
|
652
|
+
/*
|
|
653
|
+
* GitHub App specific fields.
|
|
654
|
+
*
|
|
655
|
+
* `create` is empty on purpose. This column decides which GitHub App
|
|
656
|
+
* installation a repository token is minted from, so a caller who could set
|
|
657
|
+
* it could name ANOTHER tenant's installation, put the row in a project they
|
|
658
|
+
* own, and pass every "is this row in your project?" check on the way to a
|
|
659
|
+
* live `ghs_` token. It is assigned server-side only — by the install
|
|
660
|
+
* callback and the installation webhooks, which write with `isRoot` after
|
|
661
|
+
* GitHub has confirmed the installation belongs to the project.
|
|
662
|
+
* CodeRepositoryService.onBeforeCreate/onBeforeUpdate enforce the same rule
|
|
663
|
+
* a second time, in case a future route writes as root.
|
|
664
|
+
*/
|
|
653
665
|
@ColumnAccessControl({
|
|
654
|
-
create: [
|
|
655
|
-
Permission.ProjectOwner,
|
|
656
|
-
Permission.ProjectAdmin,
|
|
657
|
-
Permission.CreateCodeRepository,
|
|
658
|
-
],
|
|
666
|
+
create: [],
|
|
659
667
|
read: [
|
|
660
668
|
Permission.ProjectOwner,
|
|
661
669
|
Permission.ProjectAdmin,
|
|
@@ -17,6 +17,10 @@ import TableColumn, {
|
|
|
17
17
|
getTableColumns,
|
|
18
18
|
} from "../../../Types/Database/TableColumn";
|
|
19
19
|
import TableColumnType from "../../../Types/Database/TableColumnType";
|
|
20
|
+
import {
|
|
21
|
+
coerceNumericColumnValue,
|
|
22
|
+
isNumericTableColumnType,
|
|
23
|
+
} from "../../../Types/Database/NumericColumnValue";
|
|
20
24
|
import { getFirstColorFieldColumn } from "../../../Types/Database/ColorField";
|
|
21
25
|
import Dictionary from "../../../Types/Dictionary";
|
|
22
26
|
import Email from "../../../Types/Email";
|
|
@@ -727,6 +731,16 @@ export default class DatabaseBaseModel extends BaseEntity {
|
|
|
727
731
|
json[key] as JSONArray,
|
|
728
732
|
tableColumnMetadata.modelType,
|
|
729
733
|
);
|
|
734
|
+
} else if (isNumericTableColumnType(tableColumnMetadata.type)) {
|
|
735
|
+
/*
|
|
736
|
+
* An `<input type="number">` hands back a string, so the dashboard
|
|
737
|
+
* posts "10" for a number column. This is the one place that knows
|
|
738
|
+
* the column's declared type, and it runs on both sides of the
|
|
739
|
+
* wire — ModelForm on the way out, BaseAPI on the way in — so a
|
|
740
|
+
* number column holds a number before any hook or validator reads
|
|
741
|
+
* it. See Types/Database/NumericColumnValue.
|
|
742
|
+
*/
|
|
743
|
+
(baseModel as any)[key] = coerceNumericColumnValue(json[key]);
|
|
730
744
|
} else {
|
|
731
745
|
(baseModel as any)[key] = json[key];
|
|
732
746
|
}
|
|
@@ -72,6 +72,20 @@ import {
|
|
|
72
72
|
@CrudApiEndpoint(new Route("/docker-host"))
|
|
73
73
|
@SlugifyColumn("name", "slug")
|
|
74
74
|
@Index(["projectId", "isArchived"])
|
|
75
|
+
/*
|
|
76
|
+
* Restores a UNIQUE index that an autogenerated migration deleted.
|
|
77
|
+
*
|
|
78
|
+
* Declared natively and NAMED. TypeORM's schema builder matches database
|
|
79
|
+
* indexes to entity metadata by name and drops every one it cannot find, which
|
|
80
|
+
* is how the original was lost: it existed only in a migration, so entity
|
|
81
|
+
* metadata never mentioned it and `migration:generate` emitted a DROP. Naming
|
|
82
|
+
* it here keeps the original index name and lets the builder match, compare
|
|
83
|
+
* uniqueness and columns, and keep it.
|
|
84
|
+
*/
|
|
85
|
+
@Index("IDX_docker_host_slug", ["slug"], {
|
|
86
|
+
unique: true,
|
|
87
|
+
where: '"deletedAt" IS NULL',
|
|
88
|
+
})
|
|
75
89
|
@TableMetadata({
|
|
76
90
|
tableName: "DockerHost",
|
|
77
91
|
singularName: "Docker Host",
|
|
@@ -39,6 +39,24 @@ import {
|
|
|
39
39
|
update: [],
|
|
40
40
|
})
|
|
41
41
|
@CrudApiEndpoint(new Route("/global-oidc-project"))
|
|
42
|
+
/*
|
|
43
|
+
* Restores a UNIQUE index that an autogenerated migration deleted.
|
|
44
|
+
*
|
|
45
|
+
* Declared natively and NAMED. TypeORM's schema builder matches database
|
|
46
|
+
* indexes to entity metadata by name and drops every one it cannot find, which
|
|
47
|
+
* is how the original was lost: it existed only in a migration, so entity
|
|
48
|
+
* metadata never mentioned it and `migration:generate` emitted a DROP. Naming
|
|
49
|
+
* it here keeps the original index name and lets the builder match, compare
|
|
50
|
+
* uniqueness and columns, and keep it.
|
|
51
|
+
*/
|
|
52
|
+
@Index(
|
|
53
|
+
"IDX_GlobalOIDCProject_globalOidcId_projectId",
|
|
54
|
+
["globalOidcId", "projectId"],
|
|
55
|
+
{
|
|
56
|
+
unique: true,
|
|
57
|
+
where: '"deletedAt" IS NULL',
|
|
58
|
+
},
|
|
59
|
+
)
|
|
42
60
|
@TableMetadata({
|
|
43
61
|
tableName: "GlobalOIDCProject",
|
|
44
62
|
singularName: "Global OIDC Project",
|
|
@@ -42,6 +42,24 @@ import {
|
|
|
42
42
|
update: [],
|
|
43
43
|
})
|
|
44
44
|
@CrudApiEndpoint(new Route("/global-sso-project"))
|
|
45
|
+
/*
|
|
46
|
+
* Restores a UNIQUE index that an autogenerated migration deleted.
|
|
47
|
+
*
|
|
48
|
+
* Declared natively and NAMED. TypeORM's schema builder matches database
|
|
49
|
+
* indexes to entity metadata by name and drops every one it cannot find, which
|
|
50
|
+
* is how the original was lost: it existed only in a migration, so entity
|
|
51
|
+
* metadata never mentioned it and `migration:generate` emitted a DROP. Naming
|
|
52
|
+
* it here keeps the original index name and lets the builder match, compare
|
|
53
|
+
* uniqueness and columns, and keep it.
|
|
54
|
+
*/
|
|
55
|
+
@Index(
|
|
56
|
+
"IDX_GlobalSSOProject_globalSsoId_projectId",
|
|
57
|
+
["globalSsoId", "projectId"],
|
|
58
|
+
{
|
|
59
|
+
unique: true,
|
|
60
|
+
where: '"deletedAt" IS NULL',
|
|
61
|
+
},
|
|
62
|
+
)
|
|
45
63
|
@TableMetadata({
|
|
46
64
|
tableName: "GlobalSSOProject",
|
|
47
65
|
singularName: "Global SSO Project",
|
|
@@ -375,6 +375,7 @@ import MonitorOwnerRule from "./MonitorOwnerRule";
|
|
|
375
375
|
import MonitorLabelRule from "./MonitorLabelRule";
|
|
376
376
|
import StatusPageOwnerRule from "./StatusPageOwnerRule";
|
|
377
377
|
import StatusPageLabelRule from "./StatusPageLabelRule";
|
|
378
|
+
import StatusPageMonitorRule from "./StatusPageMonitorRule";
|
|
378
379
|
import HostOwnerRule from "./HostOwnerRule";
|
|
379
380
|
import HostLabelRule from "./HostLabelRule";
|
|
380
381
|
import ServiceOwnerRule from "./ServiceOwnerRule";
|
|
@@ -559,6 +560,7 @@ const AllModelTypes: Array<{
|
|
|
559
560
|
MonitorLabelRule,
|
|
560
561
|
StatusPageOwnerRule,
|
|
561
562
|
StatusPageLabelRule,
|
|
563
|
+
StatusPageMonitorRule,
|
|
562
564
|
HostOwnerRule,
|
|
563
565
|
HostLabelRule,
|
|
564
566
|
ServiceOwnerRule,
|
|
@@ -80,6 +80,20 @@ import {
|
|
|
80
80
|
*/
|
|
81
81
|
@Index(["projectId", "name"], { unique: true })
|
|
82
82
|
@Index(["projectId", "isArchived"])
|
|
83
|
+
/*
|
|
84
|
+
* Restores a UNIQUE index that an autogenerated migration deleted.
|
|
85
|
+
*
|
|
86
|
+
* Declared natively and NAMED. TypeORM's schema builder matches database
|
|
87
|
+
* indexes to entity metadata by name and drops every one it cannot find, which
|
|
88
|
+
* is how the original was lost: it existed only in a migration, so entity
|
|
89
|
+
* metadata never mentioned it and `migration:generate` emitted a DROP. Naming
|
|
90
|
+
* it here keeps the original index name and lets the builder match, compare
|
|
91
|
+
* uniqueness and columns, and keep it.
|
|
92
|
+
*/
|
|
93
|
+
@Index("IDX_iot_fleet_slug", ["slug"], {
|
|
94
|
+
unique: true,
|
|
95
|
+
where: '"deletedAt" IS NULL',
|
|
96
|
+
})
|
|
83
97
|
@TableMetadata({
|
|
84
98
|
tableName: "IoTFleet",
|
|
85
99
|
singularName: "IoT Fleet",
|
|
@@ -79,6 +79,20 @@ import {
|
|
|
79
79
|
*/
|
|
80
80
|
@Index(["projectId", "clusterIdentifier"], { unique: true })
|
|
81
81
|
@Index(["projectId", "isArchived"])
|
|
82
|
+
/*
|
|
83
|
+
* Restores a UNIQUE index that an autogenerated migration deleted.
|
|
84
|
+
*
|
|
85
|
+
* Declared natively and NAMED. TypeORM's schema builder matches database
|
|
86
|
+
* indexes to entity metadata by name and drops every one it cannot find, which
|
|
87
|
+
* is how the original was lost: it existed only in a migration, so entity
|
|
88
|
+
* metadata never mentioned it and `migration:generate` emitted a DROP. Naming
|
|
89
|
+
* it here keeps the original index name and lets the builder match, compare
|
|
90
|
+
* uniqueness and columns, and keep it.
|
|
91
|
+
*/
|
|
92
|
+
@Index("IDX_kubernetes_cluster_slug", ["slug"], {
|
|
93
|
+
unique: true,
|
|
94
|
+
where: '"deletedAt" IS NULL',
|
|
95
|
+
})
|
|
82
96
|
@TableMetadata({
|
|
83
97
|
tableName: "KubernetesCluster",
|
|
84
98
|
singularName: "Kubernetes Cluster",
|
|
@@ -7,6 +7,7 @@ import TableAccessControl from "../../Types/Database/AccessControl/TableAccessCo
|
|
|
7
7
|
import TableBillingAccessControl from "../../Types/Database/AccessControl/TableBillingAccessControl";
|
|
8
8
|
import ColumnLength from "../../Types/Database/ColumnLength";
|
|
9
9
|
import ColumnType from "../../Types/Database/ColumnType";
|
|
10
|
+
import { getBigIntDatabaseTransformer } from "../../Types/Database/BigIntColumnTransformer";
|
|
10
11
|
import CrudApiEndpoint from "../../Types/Database/CrudApiEndpoint";
|
|
11
12
|
import EnableDocumentation from "../../Types/Database/EnableDocumentation";
|
|
12
13
|
import TableColumn from "../../Types/Database/TableColumn";
|
|
@@ -436,26 +437,14 @@ export default class LogDropFilter extends BaseModel {
|
|
|
436
437
|
type: ColumnType.BigPositiveNumber,
|
|
437
438
|
nullable: false,
|
|
438
439
|
default: 0,
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
* Postgres bigint comes back from the driver as a string. The UI
|
|
448
|
-
* renders this as a number, so normalize here rather than making
|
|
449
|
-
* every reader remember.
|
|
450
|
-
*/
|
|
451
|
-
from: (value: string | null | undefined): number | null => {
|
|
452
|
-
if (value === null || value === undefined) {
|
|
453
|
-
return null;
|
|
454
|
-
}
|
|
455
|
-
const parsed: number = parseInt(value, 10);
|
|
456
|
-
return isNaN(parsed) ? null : parsed;
|
|
457
|
-
},
|
|
458
|
-
},
|
|
440
|
+
/*
|
|
441
|
+
* Shared transformer, not an inline one: it has to preserve `undefined`
|
|
442
|
+
* so this NOT NULL column's DEFAULT 0 is what a create actually gets.
|
|
443
|
+
* An inline transformer that mapped `undefined` to `null` made every
|
|
444
|
+
* drop-filter insert fail the not-null constraint. See
|
|
445
|
+
* Types/Database/BigIntColumnTransformer.
|
|
446
|
+
*/
|
|
447
|
+
transformer: getBigIntDatabaseTransformer(),
|
|
459
448
|
})
|
|
460
449
|
public droppedCount?: number = undefined;
|
|
461
450
|
|
|
@@ -78,6 +78,20 @@ import {
|
|
|
78
78
|
@CrudApiEndpoint(new Route("/network-device"))
|
|
79
79
|
@SlugifyColumn("name", "slug")
|
|
80
80
|
@Index(["projectId", "isArchived"])
|
|
81
|
+
/*
|
|
82
|
+
* Restores a UNIQUE index that an autogenerated migration deleted.
|
|
83
|
+
*
|
|
84
|
+
* Declared natively and NAMED. TypeORM's schema builder matches database
|
|
85
|
+
* indexes to entity metadata by name and drops every one it cannot find, which
|
|
86
|
+
* is how the original was lost: it existed only in a migration, so entity
|
|
87
|
+
* metadata never mentioned it and `migration:generate` emitted a DROP. Naming
|
|
88
|
+
* it here keeps the original index name and lets the builder match, compare
|
|
89
|
+
* uniqueness and columns, and keep it.
|
|
90
|
+
*/
|
|
91
|
+
@Index("IDX_network_device_slug", ["slug"], {
|
|
92
|
+
unique: true,
|
|
93
|
+
where: '"deletedAt" IS NULL',
|
|
94
|
+
})
|
|
81
95
|
@TableMetadata({
|
|
82
96
|
tableName: "NetworkDevice",
|
|
83
97
|
singularName: "Network Device",
|
|
@@ -72,6 +72,24 @@ const decimalTransformer: ValueTransformer = {
|
|
|
72
72
|
})
|
|
73
73
|
@CrudApiEndpoint(new Route("/network-interface"))
|
|
74
74
|
@Index(["projectId", "networkDeviceId"])
|
|
75
|
+
/*
|
|
76
|
+
* Restores a UNIQUE index that an autogenerated migration deleted.
|
|
77
|
+
*
|
|
78
|
+
* Declared natively and NAMED. TypeORM's schema builder matches database
|
|
79
|
+
* indexes to entity metadata by name and drops every one it cannot find, which
|
|
80
|
+
* is how the original was lost: it existed only in a migration, so entity
|
|
81
|
+
* metadata never mentioned it and `migration:generate` emitted a DROP. Naming
|
|
82
|
+
* it here keeps the original index name and lets the builder match, compare
|
|
83
|
+
* uniqueness and columns, and keep it.
|
|
84
|
+
*/
|
|
85
|
+
@Index(
|
|
86
|
+
"IDX_network_interface_device_ifindex",
|
|
87
|
+
["networkDeviceId", "interfaceIndex"],
|
|
88
|
+
{
|
|
89
|
+
unique: true,
|
|
90
|
+
where: '"deletedAt" IS NULL',
|
|
91
|
+
},
|
|
92
|
+
)
|
|
75
93
|
@TableMetadata({
|
|
76
94
|
tableName: "NetworkInterface",
|
|
77
95
|
singularName: "Network Interface",
|
|
@@ -2583,7 +2583,21 @@ export default class Project extends TenantModel {
|
|
|
2583
2583
|
})
|
|
2584
2584
|
public doNotAddGlobalProbesByDefaultOnNewMonitors?: boolean = undefined;
|
|
2585
2585
|
|
|
2586
|
-
|
|
2586
|
+
/*
|
|
2587
|
+
* GitHub App Installation ID for this project.
|
|
2588
|
+
*
|
|
2589
|
+
* This column IS the authority on which GitHub App installation a project
|
|
2590
|
+
* owns — every path that mints a repository token re-derives the binding
|
|
2591
|
+
* from it (see GitHubInstallationBinding). That makes it security state, not
|
|
2592
|
+
* project configuration, so `update` is empty: a Project Owner who could PUT
|
|
2593
|
+
* an arbitrary installation ID here would simply be writing their own
|
|
2594
|
+
* permission slip to another tenant's repositories.
|
|
2595
|
+
*
|
|
2596
|
+
* It is written server-side only, with `isRoot`, by the GitHub App install
|
|
2597
|
+
* callback — and only after the OAuth user-to-server round trip has proved
|
|
2598
|
+
* to GitHub's satisfaction that the installer controls that installation —
|
|
2599
|
+
* and cleared again by the `installation.deleted` webhook.
|
|
2600
|
+
*/
|
|
2587
2601
|
@ColumnAccessControl({
|
|
2588
2602
|
create: [],
|
|
2589
2603
|
read: [
|
|
@@ -2593,7 +2607,7 @@ export default class Project extends TenantModel {
|
|
|
2593
2607
|
Permission.Viewer,
|
|
2594
2608
|
Permission.ReadProject,
|
|
2595
2609
|
],
|
|
2596
|
-
update: [
|
|
2610
|
+
update: [],
|
|
2597
2611
|
})
|
|
2598
2612
|
@TableColumn({
|
|
2599
2613
|
required: false,
|
|
@@ -81,6 +81,20 @@ import {
|
|
|
81
81
|
*/
|
|
82
82
|
@Index(["projectId", "name"], { unique: true })
|
|
83
83
|
@Index(["projectId", "isArchived"])
|
|
84
|
+
/*
|
|
85
|
+
* Restores a UNIQUE index that an autogenerated migration deleted.
|
|
86
|
+
*
|
|
87
|
+
* Declared natively and NAMED. TypeORM's schema builder matches database
|
|
88
|
+
* indexes to entity metadata by name and drops every one it cannot find, which
|
|
89
|
+
* is how the original was lost: it existed only in a migration, so entity
|
|
90
|
+
* metadata never mentioned it and `migration:generate` emitted a DROP. Naming
|
|
91
|
+
* it here keeps the original index name and lets the builder match, compare
|
|
92
|
+
* uniqueness and columns, and keep it.
|
|
93
|
+
*/
|
|
94
|
+
@Index("IDX_proxmox_cluster_slug", ["slug"], {
|
|
95
|
+
unique: true,
|
|
96
|
+
where: '"deletedAt" IS NULL',
|
|
97
|
+
})
|
|
84
98
|
@TableMetadata({
|
|
85
99
|
tableName: "ProxmoxCluster",
|
|
86
100
|
singularName: "Proxmox Cluster",
|
|
@@ -26,6 +26,7 @@ import Permission from "../../Types/Permission";
|
|
|
26
26
|
import TechStack from "../../Types/Service/TechStack";
|
|
27
27
|
import MetricDownsamplingRetentionDays from "../../Types/Metrics/MetricDownsamplingRetentionDays";
|
|
28
28
|
import TelemetryRetentionConfig from "../../Types/Telemetry/TelemetryRetentionConfig";
|
|
29
|
+
import UNSYNCHRONIZED_INDEX from "../../Types/Database/UnsynchronizedIndex";
|
|
29
30
|
import {
|
|
30
31
|
Column,
|
|
31
32
|
Entity,
|
|
@@ -101,6 +102,35 @@ import {
|
|
|
101
102
|
*/
|
|
102
103
|
@Index(["projectId", "name"], { unique: true })
|
|
103
104
|
@Index(["projectId", "isArchived"])
|
|
105
|
+
/*
|
|
106
|
+
* Serves the hottest read on the telemetry ingest path: OTLP resource
|
|
107
|
+
* resolution looks a service up by `service.name` case-insensitively, so
|
|
108
|
+
* `QueryHelper.findWithSameText` emits `LOWER("Service"."name") = $2`. The
|
|
109
|
+
* unique index above is over the RAW name column and cannot satisfy that
|
|
110
|
+
* predicate — Postgres can only use its `projectId` prefix as an index qual and
|
|
111
|
+
* must then heap-fetch and filter every service in the project. The real
|
|
112
|
+
* definition is an EXPRESSION index and lives in migration
|
|
113
|
+
* 1786100000000-RestoreServiceLowerNameIndex; `@Index()` cannot express
|
|
114
|
+
* `LOWER(...)`.
|
|
115
|
+
*
|
|
116
|
+
* `synchronize: false` is the load-bearing part of this declaration, and it is
|
|
117
|
+
* why the index is declared here at all rather than only in the migration.
|
|
118
|
+
* TypeORM's schema builder matches database indexes to entity metadata BY NAME
|
|
119
|
+
* and drops every one it cannot find (RdbmsSchemaBuilder.dropOldIndices). An
|
|
120
|
+
* index created only in a migration is therefore invisible to it and gets
|
|
121
|
+
* emitted as a DROP by the next autogenerated migration. That is not
|
|
122
|
+
* hypothetical: this exact index existed once, as
|
|
123
|
+
* IDX_SERVICE_PROJECT_NAME_UNIQUE in migration 1774559064921, and migration
|
|
124
|
+
* 1775735059360 dropped it as collateral damage — its down() even "restores"
|
|
125
|
+
* it without the LOWER(), so the round-trip silently loses the expression.
|
|
126
|
+
* Naming it here with synchronize:false makes the builder skip it in both
|
|
127
|
+
* directions: it will never drop it, and it will never try to create it.
|
|
128
|
+
*/
|
|
129
|
+
@Index(
|
|
130
|
+
"IDX_SERVICE_PROJECT_LOWER_NAME",
|
|
131
|
+
["projectId", "name"],
|
|
132
|
+
UNSYNCHRONIZED_INDEX,
|
|
133
|
+
)
|
|
104
134
|
@TableMetadata({
|
|
105
135
|
tableName: "Service",
|
|
106
136
|
singularName: "Service",
|