@oneuptime/common 12.0.1 → 12.0.3
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/DatabaseBaseModel/DatabaseBaseModel.ts +14 -0
- package/Models/DatabaseModels/Host.ts +12 -4
- package/Models/DatabaseModels/Index.ts +2 -0
- package/Models/DatabaseModels/KubernetesContainer.ts +5 -4
- package/Models/DatabaseModels/KubernetesResource.ts +8 -7
- package/Models/DatabaseModels/LogDropFilter.ts +9 -20
- package/Models/DatabaseModels/PodmanResource.ts +6 -6
- package/Models/DatabaseModels/ServiceLevelObjective.ts +91 -0
- package/Models/DatabaseModels/StatusPage.ts +95 -0
- package/Models/DatabaseModels/StatusPageMonitorRule.ts +911 -0
- package/Models/DatabaseModels/StatusPageResource.ts +73 -0
- package/Models/DatabaseModels/TraceDropFilter.ts +9 -20
- package/Server/API/BaseAPI.ts +13 -2
- package/Server/API/DashboardAPI.ts +39 -0
- package/Server/API/TeamMemberAPI.ts +85 -0
- package/Server/EnvironmentConfig.ts +31 -1
- package/Server/Infrastructure/GlobalCache.ts +115 -0
- package/Server/Infrastructure/Postgres/DataSourceOptions.ts +16 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1785900000000-AddSloMonitorLabelRule.ts +84 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1785915638551-IncreaseHostIpAddressesLength.ts +40 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1785930000000-WidenInventoryResourceNameColumns.ts +131 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1785930709405-AddStatusPageReportPeriod.ts +25 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1786005052769-AddStatusPageMonitorRule.ts +123 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +10 -0
- package/Server/Middleware/ProjectAuthorization.ts +66 -4
- package/Server/Services/AlertStateTimelineService.ts +20 -0
- package/Server/Services/BillingService.ts +600 -51
- package/Server/Services/CephClusterService.ts +27 -45
- package/Server/Services/CephResourceService.ts +43 -4
- package/Server/Services/CloudResourceService.ts +24 -42
- package/Server/Services/DatabaseService.ts +198 -6
- package/Server/Services/DockerHostService.ts +20 -38
- package/Server/Services/DockerResourceService.ts +62 -8
- package/Server/Services/DockerSwarmClusterService.ts +28 -46
- package/Server/Services/DockerSwarmResourceService.ts +53 -4
- package/Server/Services/HostService.ts +47 -57
- package/Server/Services/IncidentStateTimelineService.ts +20 -0
- package/Server/Services/Index.ts +2 -0
- package/Server/Services/IoTDeviceService.ts +1 -17
- package/Server/Services/IoTFleetService.ts +20 -38
- package/Server/Services/KubernetesClusterService.ts +18 -36
- package/Server/Services/KubernetesContainerService.ts +50 -9
- package/Server/Services/KubernetesResourceService.ts +53 -7
- package/Server/Services/LabelService.ts +153 -1
- package/Server/Services/MetricTypeService.ts +84 -0
- package/Server/Services/MonitorService.ts +146 -14
- package/Server/Services/MonitorStatusTimelineService.ts +29 -0
- package/Server/Services/MonitorTemplateService.ts +65 -0
- package/Server/Services/PodmanHostService.ts +20 -38
- package/Server/Services/PodmanResourceService.ts +62 -8
- package/Server/Services/ProjectService.ts +165 -35
- package/Server/Services/ProxmoxClusterService.ts +24 -42
- package/Server/Services/ProxmoxResourceService.ts +43 -4
- package/Server/Services/RumApplicationService.ts +20 -38
- package/Server/Services/ScheduledMaintenanceStateTimelineService.ts +21 -0
- package/Server/Services/ServerlessFunctionService.ts +25 -43
- package/Server/Services/ServiceLevelObjectiveMonitorRuleEngineService.ts +426 -0
- package/Server/Services/ServiceLevelObjectiveService.ts +39 -0
- package/Server/Services/ServiceService.ts +299 -73
- package/Server/Services/StatusPageMonitorRuleEngineService.ts +752 -0
- package/Server/Services/StatusPageMonitorRuleService.ts +471 -0
- package/Server/Services/StatusPageService.ts +95 -36
- package/Server/Services/StatusPageSubscriberNotificationTemplateService.ts +18 -1
- package/Server/Services/StatusPageSubscriberService.ts +3 -0
- package/Server/Services/TelemetryEntityRelationshipService.ts +1 -0
- package/Server/Services/TelemetryEntityService.ts +1 -0
- package/Server/Types/Database/JSONColumnQuery.ts +621 -0
- package/Server/Types/Database/Permissions/PublicPermission.ts +9 -2
- package/Server/Types/Database/QueryHelper.ts +17 -32
- package/Server/Utils/Database/ProjectScopedReferenceValidator.ts +170 -39
- package/Server/Utils/Database/TruncateColumnValue.ts +84 -0
- 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/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/UsersTableGroupsByPerson.test.tsx +448 -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/BaseAPIApiKeyAuth.test.ts +704 -0
- package/Tests/Server/API/DashboardPublicResourceListAPI.test.ts +26 -0
- package/Tests/Server/API/TeamMemberRemoveUserFromProjectAPI.test.ts +303 -0
- package/Tests/Server/Infrastructure/GlobalCache.test.ts +226 -0
- package/Tests/Server/Infrastructure/PostgresLockTimeoutOptions.test.ts +181 -0
- package/Tests/Server/Middleware/MasterAdminAuthorization.test.ts +350 -0
- package/Tests/Server/Middleware/ProjectAuthorizationApiKeyHeader.test.ts +362 -0
- package/Tests/Server/Middleware/ProjectAuthorizationApiKeyMiddleware.test.ts +687 -0
- package/Tests/Server/Services/BillingService.test.ts +78 -3
- package/Tests/Server/Services/BillingServiceChangePlanCancel.test.ts +645 -0
- package/Tests/Server/Services/BillingServiceTrialPlanChange.test.ts +1005 -0
- package/Tests/Server/Services/DatabaseServiceUpdateColumnsIfUnlocked.test.ts +342 -0
- package/Tests/Server/Services/DropFilterSaveValidation.test.ts +245 -0
- package/Tests/Server/Services/HookFreeWriteLengthClamp.test.ts +503 -0
- package/Tests/Server/Services/HostIpAddressesColumnWidth.test.ts +198 -0
- package/Tests/Server/Services/HostServiceUpdateLastSeen.test.ts +658 -0
- package/Tests/Server/Services/InventoryResourceNameColumnWidth.test.ts +500 -0
- package/Tests/Server/Services/InventoryUpsertSchemaParity.test.ts +586 -0
- package/Tests/Server/Services/InventoryUpsertTruncationGuard.test.ts +1242 -0
- 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/ProjectServiceChangePlan.test.ts +650 -0
- package/Tests/Server/Services/ProjectServiceExtendTrial.test.ts +1 -0
- package/Tests/Server/Services/ResourceUpdateLastSeenLivenessFallback.test.ts +636 -0
- package/Tests/Server/Services/ServiceLevelObjectiveMonitorRuleEngineService.test.ts +770 -0
- package/Tests/Server/Services/ServiceLevelObjectiveService.test.ts +130 -0
- package/Tests/Server/Services/ServiceUpdateLastSeenSplitGates.test.ts +705 -0
- package/Tests/Server/Services/SloMonitorLabelRuleHooks.test.ts +352 -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/StatusPageSubscriberReport.test.ts +29 -13
- package/Tests/Server/TestingUtils/Services/BillingServiceHelper.ts +69 -8
- package/Tests/Server/Types/Database/JSONColumnQuery.test.ts +593 -0
- package/Tests/Server/Types/Database/Permissions/PublicPermission.test.ts +495 -0
- package/Tests/Server/Types/Database/QueryUtil.test.ts +113 -0
- package/Tests/Server/Utils/APIKey/AccessPermission.test.ts +267 -0
- package/Tests/Server/Utils/Database/ProjectScopedReferenceValidator.test.ts +260 -13
- package/Tests/Server/Utils/Database/TruncateColumnValue.test.ts +179 -0
- package/Tests/Server/Utils/EntityRegistryRowFence.test.ts +302 -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/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/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/Events/Recurring.test.ts +157 -0
- package/Tests/Types/Monitor/SnmpVersionParsing.test.ts +152 -0
- package/Tests/Types/Port.test.ts +38 -0
- package/Tests/UI/Components/LogsHistogram.test.tsx +276 -0
- package/Tests/UI/Components/ModelTable/ModelTableGroupsProjectUsers.test.tsx +375 -0
- package/Tests/UI/Components/ModelTable/useCustomFieldColumns.test.tsx +196 -0
- package/Tests/UI/Components/UseLiveLogsRefresh.test.tsx +489 -0
- package/Tests/UI/Components/UseLogsHistogram.test.tsx +500 -0
- package/Tests/UI/Utils/ProjectUsersModelAPI.test.ts +739 -0
- package/Tests/UI/Utils/TeamMembersByUser.test.ts +633 -0
- package/Tests/Utils/Dashboard/Components/DashboardComponentsUtil.test.ts +120 -0
- package/Tests/Utils/Dashboard/DashboardNetworkMapComponent.test.ts +327 -0
- package/Tests/Utils/StatusPage/ReportPeriod.test.ts +218 -0
- package/Tests/Utils/Telemetry/HostIpAddresses.test.ts +291 -0
- package/Types/CustomField/CustomFieldDefinition.ts +24 -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/DatabaseProperty.ts +26 -0
- package/Types/Database/NumericColumnValue.ts +128 -0
- package/Types/Date.ts +112 -0
- package/Types/Decimal.ts +16 -4
- package/Types/Events/Recurring.ts +99 -1
- package/Types/Permission.ts +48 -0
- package/Types/Port.ts +16 -4
- package/Types/StatusPage/StatusPageReport.ts +11 -0
- package/Types/StatusPage/StatusPageReportPeriodType.ts +21 -0
- package/UI/Components/LogsViewer/useLiveLogsRefresh.ts +86 -0
- package/UI/Components/LogsViewer/useLogsHistogram.ts +113 -0
- package/UI/Components/ModelTable/CustomFieldColumns.tsx +2 -6
- package/UI/Components/ModelTable/useCustomFieldColumns.ts +21 -2
- package/UI/Utils/ModelAPI/ProjectUsersModelAPI.ts +305 -0
- package/UI/Utils/TeamMembersByUser.ts +302 -0
- package/Utils/Dashboard/Components/DashboardNetworkMapComponent.ts +136 -0
- package/Utils/Dashboard/Components/Index.ts +7 -0
- package/Utils/StatusPage/ReportPeriod.ts +236 -0
- package/Utils/Telemetry/HostIpAddresses.ts +98 -0
- 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/Host.js +12 -4
- package/build/dist/Models/DatabaseModels/Host.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/KubernetesContainer.js +4 -4
- package/build/dist/Models/DatabaseModels/KubernetesContainer.js.map +1 -1
- package/build/dist/Models/DatabaseModels/KubernetesResource.js +7 -7
- package/build/dist/Models/DatabaseModels/KubernetesResource.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/PodmanResource.js +6 -6
- package/build/dist/Models/DatabaseModels/PodmanResource.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ServiceLevelObjective.js +87 -0
- package/build/dist/Models/DatabaseModels/ServiceLevelObjective.js.map +1 -1
- package/build/dist/Models/DatabaseModels/StatusPage.js +98 -0
- package/build/dist/Models/DatabaseModels/StatusPage.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/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/Server/API/BaseAPI.js +11 -1
- package/build/dist/Server/API/BaseAPI.js.map +1 -1
- package/build/dist/Server/API/DashboardAPI.js +39 -0
- package/build/dist/Server/API/DashboardAPI.js.map +1 -1
- package/build/dist/Server/API/TeamMemberAPI.js +57 -2
- package/build/dist/Server/API/TeamMemberAPI.js.map +1 -1
- package/build/dist/Server/EnvironmentConfig.js +27 -1
- package/build/dist/Server/EnvironmentConfig.js.map +1 -1
- package/build/dist/Server/Infrastructure/GlobalCache.js +91 -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/1785900000000-AddSloMonitorLabelRule.js +45 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785900000000-AddSloMonitorLabelRule.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785915638551-IncreaseHostIpAddressesLength.js +31 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785915638551-IncreaseHostIpAddressesLength.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785930000000-WidenInventoryResourceNameColumns.js +90 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785930000000-WidenInventoryResourceNameColumns.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785930709405-AddStatusPageReportPeriod.js +14 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785930709405-AddStatusPageReportPeriod.js.map +1 -0
- 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/Index.js +10 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
- package/build/dist/Server/Middleware/ProjectAuthorization.js +59 -4
- package/build/dist/Server/Middleware/ProjectAuthorization.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/BillingService.js +466 -36
- package/build/dist/Server/Services/BillingService.js.map +1 -1
- package/build/dist/Server/Services/CephClusterService.js +26 -39
- package/build/dist/Server/Services/CephClusterService.js.map +1 -1
- package/build/dist/Server/Services/CephResourceService.js +28 -3
- package/build/dist/Server/Services/CephResourceService.js.map +1 -1
- package/build/dist/Server/Services/CloudResourceService.js +23 -36
- package/build/dist/Server/Services/CloudResourceService.js.map +1 -1
- package/build/dist/Server/Services/DatabaseService.js +155 -2
- package/build/dist/Server/Services/DatabaseService.js.map +1 -1
- package/build/dist/Server/Services/DockerHostService.js +19 -32
- package/build/dist/Server/Services/DockerHostService.js.map +1 -1
- package/build/dist/Server/Services/DockerResourceService.js +34 -4
- package/build/dist/Server/Services/DockerResourceService.js.map +1 -1
- package/build/dist/Server/Services/DockerSwarmClusterService.js +27 -40
- package/build/dist/Server/Services/DockerSwarmClusterService.js.map +1 -1
- package/build/dist/Server/Services/DockerSwarmResourceService.js +28 -3
- package/build/dist/Server/Services/DockerSwarmResourceService.js.map +1 -1
- package/build/dist/Server/Services/HostService.js +58 -64
- 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/IoTDeviceService.js +1 -8
- package/build/dist/Server/Services/IoTDeviceService.js.map +1 -1
- package/build/dist/Server/Services/IoTFleetService.js +19 -32
- package/build/dist/Server/Services/IoTFleetService.js.map +1 -1
- package/build/dist/Server/Services/KubernetesClusterService.js +17 -30
- package/build/dist/Server/Services/KubernetesClusterService.js.map +1 -1
- package/build/dist/Server/Services/KubernetesContainerService.js +29 -3
- package/build/dist/Server/Services/KubernetesContainerService.js.map +1 -1
- package/build/dist/Server/Services/KubernetesResourceService.js +32 -4
- package/build/dist/Server/Services/KubernetesResourceService.js.map +1 -1
- package/build/dist/Server/Services/LabelService.js +127 -0
- 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 +128 -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/PodmanHostService.js +19 -32
- package/build/dist/Server/Services/PodmanHostService.js.map +1 -1
- package/build/dist/Server/Services/PodmanResourceService.js +34 -4
- package/build/dist/Server/Services/PodmanResourceService.js.map +1 -1
- package/build/dist/Server/Services/ProjectService.js +135 -21
- package/build/dist/Server/Services/ProjectService.js.map +1 -1
- package/build/dist/Server/Services/ProxmoxClusterService.js +23 -36
- package/build/dist/Server/Services/ProxmoxClusterService.js.map +1 -1
- package/build/dist/Server/Services/ProxmoxResourceService.js +28 -3
- package/build/dist/Server/Services/ProxmoxResourceService.js.map +1 -1
- package/build/dist/Server/Services/RumApplicationService.js +19 -32
- 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 -37
- package/build/dist/Server/Services/ServerlessFunctionService.js.map +1 -1
- package/build/dist/Server/Services/ServiceLevelObjectiveMonitorRuleEngineService.js +347 -0
- package/build/dist/Server/Services/ServiceLevelObjectiveMonitorRuleEngineService.js.map +1 -0
- package/build/dist/Server/Services/ServiceLevelObjectiveService.js +33 -1
- package/build/dist/Server/Services/ServiceLevelObjectiveService.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/StatusPageService.js +69 -46
- package/build/dist/Server/Services/StatusPageService.js.map +1 -1
- package/build/dist/Server/Services/StatusPageSubscriberNotificationTemplateService.js +17 -1
- package/build/dist/Server/Services/StatusPageSubscriberNotificationTemplateService.js.map +1 -1
- package/build/dist/Server/Services/StatusPageSubscriberService.js +3 -0
- package/build/dist/Server/Services/StatusPageSubscriberService.js.map +1 -1
- 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/Types/Database/JSONColumnQuery.js +402 -0
- package/build/dist/Server/Types/Database/JSONColumnQuery.js.map +1 -0
- package/build/dist/Server/Types/Database/Permissions/PublicPermission.js +9 -2
- package/build/dist/Server/Types/Database/Permissions/PublicPermission.js.map +1 -1
- package/build/dist/Server/Types/Database/QueryHelper.js +17 -27
- package/build/dist/Server/Types/Database/QueryHelper.js.map +1 -1
- 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/Database/TruncateColumnValue.js +32 -0
- package/build/dist/Server/Utils/Database/TruncateColumnValue.js.map +1 -0
- 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/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/CustomField/CustomFieldDefinition.js +2 -0
- package/build/dist/Types/CustomField/CustomFieldDefinition.js.map +1 -0
- 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/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/Date.js +68 -0
- package/build/dist/Types/Date.js.map +1 -1
- package/build/dist/Types/Decimal.js +14 -3
- package/build/dist/Types/Decimal.js.map +1 -1
- package/build/dist/Types/Events/Recurring.js +63 -0
- package/build/dist/Types/Events/Recurring.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/Types/StatusPage/StatusPageReportPeriodType.js +22 -0
- package/build/dist/Types/StatusPage/StatusPageReportPeriodType.js.map +1 -0
- 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/ModelTable/CustomFieldColumns.js.map +1 -1
- package/build/dist/UI/Components/ModelTable/useCustomFieldColumns.js +18 -2
- package/build/dist/UI/Components/ModelTable/useCustomFieldColumns.js.map +1 -1
- package/build/dist/UI/Utils/ModelAPI/ProjectUsersModelAPI.js +213 -0
- package/build/dist/UI/Utils/ModelAPI/ProjectUsersModelAPI.js.map +1 -0
- package/build/dist/UI/Utils/TeamMembersByUser.js +195 -0
- package/build/dist/UI/Utils/TeamMembersByUser.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/StatusPage/ReportPeriod.js +131 -0
- package/build/dist/Utils/StatusPage/ReportPeriod.js.map +1 -0
- package/build/dist/Utils/Telemetry/HostIpAddresses.js +82 -0
- package/build/dist/Utils/Telemetry/HostIpAddresses.js.map +1 -0
- package/jest.config.json +2 -0
- package/package.json +1 -1
- package/tsconfig.json +12 -1
|
@@ -0,0 +1,291 @@
|
|
|
1
|
+
import {
|
|
2
|
+
MAX_HOST_IP_ADDRESSES_LENGTH,
|
|
3
|
+
MAX_HOST_IP_ADDRESS_COUNT,
|
|
4
|
+
normalizeHostIpAddresses,
|
|
5
|
+
} from "../../../Utils/Telemetry/HostIpAddresses";
|
|
6
|
+
import { describe, expect, test } from "@jest/globals";
|
|
7
|
+
|
|
8
|
+
/*
|
|
9
|
+
* Regression suite for issue #3006. The OTel `host.ip` resource attribute
|
|
10
|
+
* is an array of every address on every interface, and a Docker host with
|
|
11
|
+
* IPv6 enabled reports one entry per bridge, per veth and per link-local.
|
|
12
|
+
* The reporter's host produced 55 addresses / ~1454 characters, which
|
|
13
|
+
* overflowed the then-varchar(500) Host.hostIpAddresses column and aborted
|
|
14
|
+
* the whole Host metadata write.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
/** Rebuilds the exact shape reported in the issue: 55 addresses. */
|
|
18
|
+
function issueReporterAddresses(): Array<string> {
|
|
19
|
+
const addresses: Array<string> = [];
|
|
20
|
+
|
|
21
|
+
// 1 LAN IPv4.
|
|
22
|
+
addresses.push("192.168.1.42");
|
|
23
|
+
|
|
24
|
+
// 11 Docker bridge IPv4 addresses.
|
|
25
|
+
for (let i: number = 0; i < 11; i++) {
|
|
26
|
+
addresses.push(`172.${17 + i}.0.1`);
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
// 36 IPv6 link-local addresses.
|
|
30
|
+
for (let i: number = 0; i < 36; i++) {
|
|
31
|
+
addresses.push(`fe80::42:acff:fe11:${(0x1000 + i).toString(16)}`);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
// 7 IPv6 ULA addresses.
|
|
35
|
+
for (let i: number = 0; i < 7; i++) {
|
|
36
|
+
addresses.push(`fd00:dead:beef:${i}::1`);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
return addresses;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
describe("normalizeHostIpAddresses", () => {
|
|
43
|
+
describe("empty and absent input", () => {
|
|
44
|
+
test("returns null for undefined", () => {
|
|
45
|
+
expect(normalizeHostIpAddresses(undefined)).toBeNull();
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
test("returns null for null", () => {
|
|
49
|
+
expect(normalizeHostIpAddresses(null)).toBeNull();
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
test("returns null for an empty array", () => {
|
|
53
|
+
expect(normalizeHostIpAddresses([])).toBeNull();
|
|
54
|
+
});
|
|
55
|
+
|
|
56
|
+
test("returns null when every entry is blank", () => {
|
|
57
|
+
expect(normalizeHostIpAddresses(["", " ", "\t", "\n"])).toBeNull();
|
|
58
|
+
});
|
|
59
|
+
|
|
60
|
+
test("returns null rather than an empty string, so callers leave the column untouched", () => {
|
|
61
|
+
// An empty string would overwrite a previously discovered list with "".
|
|
62
|
+
expect(normalizeHostIpAddresses([" "])).not.toBe("");
|
|
63
|
+
});
|
|
64
|
+
});
|
|
65
|
+
|
|
66
|
+
describe("basic joining", () => {
|
|
67
|
+
test("joins with ', ' to match the stored format", () => {
|
|
68
|
+
expect(normalizeHostIpAddresses(["192.168.1.42", "10.0.0.5"])).toBe(
|
|
69
|
+
"192.168.1.42, 10.0.0.5",
|
|
70
|
+
);
|
|
71
|
+
});
|
|
72
|
+
|
|
73
|
+
test("returns a single address unchanged", () => {
|
|
74
|
+
expect(normalizeHostIpAddresses(["10.0.0.5"])).toBe("10.0.0.5");
|
|
75
|
+
});
|
|
76
|
+
|
|
77
|
+
test("trims surrounding whitespace on each entry", () => {
|
|
78
|
+
expect(normalizeHostIpAddresses([" 10.0.0.5 ", "\t::1\n"])).toBe(
|
|
79
|
+
"10.0.0.5, ::1",
|
|
80
|
+
);
|
|
81
|
+
});
|
|
82
|
+
|
|
83
|
+
test("drops blank entries but keeps the rest", () => {
|
|
84
|
+
expect(normalizeHostIpAddresses(["10.0.0.5", "", " ", "::1"])).toBe(
|
|
85
|
+
"10.0.0.5, ::1",
|
|
86
|
+
);
|
|
87
|
+
});
|
|
88
|
+
|
|
89
|
+
test("preserves source order", () => {
|
|
90
|
+
const ips: Array<string> = ["203.0.113.9", "10.0.0.5", "192.168.1.42"];
|
|
91
|
+
expect(normalizeHostIpAddresses(ips)).toBe(
|
|
92
|
+
"203.0.113.9, 10.0.0.5, 192.168.1.42",
|
|
93
|
+
);
|
|
94
|
+
});
|
|
95
|
+
});
|
|
96
|
+
|
|
97
|
+
describe("deduplication", () => {
|
|
98
|
+
test("removes exact duplicates", () => {
|
|
99
|
+
expect(
|
|
100
|
+
normalizeHostIpAddresses(["10.0.0.5", "10.0.0.5", "10.0.0.5"]),
|
|
101
|
+
).toBe("10.0.0.5");
|
|
102
|
+
});
|
|
103
|
+
|
|
104
|
+
test("removes duplicates that differ only in IPv6 hex casing", () => {
|
|
105
|
+
/*
|
|
106
|
+
* Resource detectors disagree on IPv6 casing, so the same address can
|
|
107
|
+
* arrive twice in one batch in two different cases.
|
|
108
|
+
*/
|
|
109
|
+
expect(normalizeHostIpAddresses(["FE80::1", "fe80::1"])).toBe("FE80::1");
|
|
110
|
+
});
|
|
111
|
+
|
|
112
|
+
test("removes duplicates that differ only in surrounding whitespace", () => {
|
|
113
|
+
expect(normalizeHostIpAddresses(["10.0.0.5", " 10.0.0.5 "])).toBe(
|
|
114
|
+
"10.0.0.5",
|
|
115
|
+
);
|
|
116
|
+
});
|
|
117
|
+
|
|
118
|
+
test("keeps the first-seen spelling of a duplicate", () => {
|
|
119
|
+
expect(normalizeHostIpAddresses(["fe80::AB", "FE80::ab"])).toBe(
|
|
120
|
+
"fe80::AB",
|
|
121
|
+
);
|
|
122
|
+
});
|
|
123
|
+
|
|
124
|
+
test("dedupes without disturbing the order of the survivors", () => {
|
|
125
|
+
expect(
|
|
126
|
+
normalizeHostIpAddresses(["a::1", "b::1", "A::1", "c::1", "B::1"]),
|
|
127
|
+
).toBe("a::1, b::1, c::1");
|
|
128
|
+
});
|
|
129
|
+
});
|
|
130
|
+
|
|
131
|
+
describe("non-string entries", () => {
|
|
132
|
+
test("skips values that are not strings", () => {
|
|
133
|
+
const ips: Array<string> = [
|
|
134
|
+
"10.0.0.5",
|
|
135
|
+
// Defensive: the OTLP payload is untrusted JSON.
|
|
136
|
+
null as unknown as string,
|
|
137
|
+
undefined as unknown as string,
|
|
138
|
+
42 as unknown as string,
|
|
139
|
+
{} as unknown as string,
|
|
140
|
+
"::1",
|
|
141
|
+
];
|
|
142
|
+
expect(normalizeHostIpAddresses(ips)).toBe("10.0.0.5, ::1");
|
|
143
|
+
});
|
|
144
|
+
|
|
145
|
+
test("returns null when every entry is a non-string", () => {
|
|
146
|
+
const ips: Array<string> = [
|
|
147
|
+
null as unknown as string,
|
|
148
|
+
7 as unknown as string,
|
|
149
|
+
];
|
|
150
|
+
expect(normalizeHostIpAddresses(ips)).toBeNull();
|
|
151
|
+
});
|
|
152
|
+
});
|
|
153
|
+
|
|
154
|
+
describe("the issue #3006 payload", () => {
|
|
155
|
+
const addresses: Array<string> = issueReporterAddresses();
|
|
156
|
+
|
|
157
|
+
test("the fixture reproduces the reported shape", () => {
|
|
158
|
+
expect(addresses).toHaveLength(55);
|
|
159
|
+
expect(addresses.join(", ").length).toBeGreaterThan(1000);
|
|
160
|
+
});
|
|
161
|
+
|
|
162
|
+
test("is stored in full — every address survives", () => {
|
|
163
|
+
const result: string = normalizeHostIpAddresses(addresses) as string;
|
|
164
|
+
expect(result.split(", ")).toHaveLength(55);
|
|
165
|
+
for (const address of addresses) {
|
|
166
|
+
expect(result).toContain(address);
|
|
167
|
+
}
|
|
168
|
+
});
|
|
169
|
+
|
|
170
|
+
test("exceeds the old varchar(500) bound, which is why the column is now text", () => {
|
|
171
|
+
const result: string = normalizeHostIpAddresses(addresses) as string;
|
|
172
|
+
expect(result.length).toBeGreaterThan(500);
|
|
173
|
+
});
|
|
174
|
+
});
|
|
175
|
+
|
|
176
|
+
describe("count cap", () => {
|
|
177
|
+
function manyAddresses(count: number): Array<string> {
|
|
178
|
+
return Array.from({ length: count }, (_unused: unknown, i: number) => {
|
|
179
|
+
return `10.${Math.floor(i / 256)}.${i % 256}.1`;
|
|
180
|
+
});
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
test("keeps everything below the cap", () => {
|
|
184
|
+
const ips: Array<string> = manyAddresses(MAX_HOST_IP_ADDRESS_COUNT - 1);
|
|
185
|
+
const result: string = normalizeHostIpAddresses(ips) as string;
|
|
186
|
+
expect(result.split(", ")).toHaveLength(MAX_HOST_IP_ADDRESS_COUNT - 1);
|
|
187
|
+
});
|
|
188
|
+
|
|
189
|
+
test("keeps exactly the cap when handed exactly the cap", () => {
|
|
190
|
+
const ips: Array<string> = manyAddresses(MAX_HOST_IP_ADDRESS_COUNT);
|
|
191
|
+
const result: string = normalizeHostIpAddresses(ips) as string;
|
|
192
|
+
expect(result.split(", ")).toHaveLength(MAX_HOST_IP_ADDRESS_COUNT);
|
|
193
|
+
});
|
|
194
|
+
|
|
195
|
+
test("caps a pathological collector at the maximum count", () => {
|
|
196
|
+
const ips: Array<string> = manyAddresses(MAX_HOST_IP_ADDRESS_COUNT * 4);
|
|
197
|
+
const result: string = normalizeHostIpAddresses(ips) as string;
|
|
198
|
+
expect(result.split(", ")).toHaveLength(MAX_HOST_IP_ADDRESS_COUNT);
|
|
199
|
+
});
|
|
200
|
+
|
|
201
|
+
test("the addresses kept when capping are the first ones reported", () => {
|
|
202
|
+
const ips: Array<string> = manyAddresses(MAX_HOST_IP_ADDRESS_COUNT + 10);
|
|
203
|
+
const result: string = normalizeHostIpAddresses(ips) as string;
|
|
204
|
+
expect(result.startsWith(ips[0] as string)).toBe(true);
|
|
205
|
+
expect(result).not.toContain(ips[MAX_HOST_IP_ADDRESS_COUNT] as string);
|
|
206
|
+
});
|
|
207
|
+
|
|
208
|
+
test("duplicates do not consume cap slots", () => {
|
|
209
|
+
const ips: Array<string> = [
|
|
210
|
+
...manyAddresses(10),
|
|
211
|
+
...manyAddresses(10),
|
|
212
|
+
...manyAddresses(10),
|
|
213
|
+
];
|
|
214
|
+
const result: string = normalizeHostIpAddresses(ips) as string;
|
|
215
|
+
expect(result.split(", ")).toHaveLength(10);
|
|
216
|
+
});
|
|
217
|
+
});
|
|
218
|
+
|
|
219
|
+
describe("length cap", () => {
|
|
220
|
+
function longAddresses(count: number): Array<string> {
|
|
221
|
+
// 39 characters each — a fully expanded IPv6 address.
|
|
222
|
+
return Array.from({ length: count }, (_unused: unknown, i: number) => {
|
|
223
|
+
return `2001:0db8:0000:0000:0000:ff00:0042:${(0x1000 + i).toString(16)}`;
|
|
224
|
+
});
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
test("never exceeds the serialized length cap", () => {
|
|
228
|
+
const ips: Array<string> = longAddresses(MAX_HOST_IP_ADDRESS_COUNT);
|
|
229
|
+
const result: string = normalizeHostIpAddresses(ips) as string;
|
|
230
|
+
expect(result.length).toBeLessThanOrEqual(MAX_HOST_IP_ADDRESSES_LENGTH);
|
|
231
|
+
});
|
|
232
|
+
|
|
233
|
+
test("truncates whole addresses only — never a partial one", () => {
|
|
234
|
+
const ips: Array<string> = longAddresses(MAX_HOST_IP_ADDRESS_COUNT);
|
|
235
|
+
const result: string = normalizeHostIpAddresses(ips) as string;
|
|
236
|
+
for (const part of result.split(", ")) {
|
|
237
|
+
expect(ips).toContain(part);
|
|
238
|
+
}
|
|
239
|
+
});
|
|
240
|
+
|
|
241
|
+
test("a single address longer than the whole cap is dropped, not clipped", () => {
|
|
242
|
+
const huge: string = "a".repeat(MAX_HOST_IP_ADDRESSES_LENGTH + 1);
|
|
243
|
+
expect(normalizeHostIpAddresses([huge])).toBeNull();
|
|
244
|
+
});
|
|
245
|
+
|
|
246
|
+
test("a huge first entry does not suppress the entries after it being considered", () => {
|
|
247
|
+
/*
|
|
248
|
+
* The scan stops at the first entry that would overflow, so a huge
|
|
249
|
+
* leading entry costs the rest of the list. That is deliberate — but
|
|
250
|
+
* pin it so the behavior is a decision, not an accident.
|
|
251
|
+
*/
|
|
252
|
+
const huge: string = "a".repeat(MAX_HOST_IP_ADDRESSES_LENGTH + 1);
|
|
253
|
+
expect(normalizeHostIpAddresses([huge, "10.0.0.5"])).toBeNull();
|
|
254
|
+
expect(normalizeHostIpAddresses(["10.0.0.5", huge])).toBe("10.0.0.5");
|
|
255
|
+
});
|
|
256
|
+
|
|
257
|
+
test("the separator counts toward the cap", () => {
|
|
258
|
+
// Two entries that only fit if the ", " between them is ignored.
|
|
259
|
+
const half: number = Math.floor(MAX_HOST_IP_ADDRESSES_LENGTH / 2);
|
|
260
|
+
const a: string = "a".repeat(half);
|
|
261
|
+
const b: string = "b".repeat(MAX_HOST_IP_ADDRESSES_LENGTH - half);
|
|
262
|
+
const result: string = normalizeHostIpAddresses([a, b]) as string;
|
|
263
|
+
expect(result).toBe(a);
|
|
264
|
+
expect(result.length).toBeLessThanOrEqual(MAX_HOST_IP_ADDRESSES_LENGTH);
|
|
265
|
+
});
|
|
266
|
+
});
|
|
267
|
+
|
|
268
|
+
describe("caps are sane", () => {
|
|
269
|
+
test("the length cap comfortably clears the reported 55-address payload", () => {
|
|
270
|
+
expect(MAX_HOST_IP_ADDRESSES_LENGTH).toBeGreaterThan(
|
|
271
|
+
issueReporterAddresses().join(", ").length * 2,
|
|
272
|
+
);
|
|
273
|
+
});
|
|
274
|
+
|
|
275
|
+
test("the count cap comfortably clears the reported 55-address payload", () => {
|
|
276
|
+
expect(MAX_HOST_IP_ADDRESS_COUNT).toBeGreaterThan(55 * 2);
|
|
277
|
+
});
|
|
278
|
+
});
|
|
279
|
+
|
|
280
|
+
describe("idempotence", () => {
|
|
281
|
+
test("re-normalizing an already-normalized list is a no-op", () => {
|
|
282
|
+
const once: string = normalizeHostIpAddresses(
|
|
283
|
+
issueReporterAddresses(),
|
|
284
|
+
) as string;
|
|
285
|
+
const twice: string = normalizeHostIpAddresses(
|
|
286
|
+
once.split(", "),
|
|
287
|
+
) as string;
|
|
288
|
+
expect(twice).toBe(once);
|
|
289
|
+
});
|
|
290
|
+
});
|
|
291
|
+
});
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import CustomFieldType from "./CustomFieldType";
|
|
2
|
+
|
|
3
|
+
/*
|
|
4
|
+
* One custom field, as the rest of the product needs to read it: the shape
|
|
5
|
+
* that comes back from a `*CustomField` definition table, narrowed to the four
|
|
6
|
+
* properties anything rendering or filtering by it actually uses.
|
|
7
|
+
*
|
|
8
|
+
* Lives in Types rather than beside the table columns that first needed it
|
|
9
|
+
* because the facet bar builds its chips from the same definitions, and that
|
|
10
|
+
* code is compiled by App's `tsc`, which has no React in it — importing the
|
|
11
|
+
* type from a .tsx would pull React into a program that cannot resolve it.
|
|
12
|
+
* `CustomFieldColumns` re-exports it, so existing imports keep working.
|
|
13
|
+
*/
|
|
14
|
+
export interface CustomFieldDefinition {
|
|
15
|
+
name: string;
|
|
16
|
+
description?: string | undefined;
|
|
17
|
+
customFieldType?: CustomFieldType | undefined;
|
|
18
|
+
/**
|
|
19
|
+
* Serialized options for a Dropdown / MultiSelectDropdown field. Parse with
|
|
20
|
+
* `parseCustomFieldDropdownOptions` — the value is either the legacy
|
|
21
|
+
* one-per-line format or a JSON array of `{ value, color }`.
|
|
22
|
+
*/
|
|
23
|
+
dropdownOptions?: string | undefined;
|
|
24
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import ObjectID from "../../ObjectID";
|
|
2
|
+
import DashboardComponentType from "../DashboardComponentType";
|
|
3
|
+
import BaseComponent from "./DashboardBaseComponent";
|
|
4
|
+
|
|
5
|
+
/*
|
|
6
|
+
* The dashboard-embeddable half of the Network Map: a world map of this
|
|
7
|
+
* project's NetworkSites, each pinned at its own coordinates and colored by
|
|
8
|
+
* the monitor status rolled up onto it.
|
|
9
|
+
*
|
|
10
|
+
* It is deliberately NOT the drill-down map from Pages/NetworkSite/NetworkMap
|
|
11
|
+
* — that one navigates, and a dashboard tile is a picture rather than a
|
|
12
|
+
* place you walk around in. This widget answers one question at a glance:
|
|
13
|
+
* where is the network, and what is red right now.
|
|
14
|
+
*/
|
|
15
|
+
export default interface DashboardNetworkMapComponent extends BaseComponent {
|
|
16
|
+
componentType: DashboardComponentType.NetworkMap;
|
|
17
|
+
componentId: ObjectID;
|
|
18
|
+
arguments: {
|
|
19
|
+
title?: string | undefined;
|
|
20
|
+
/*
|
|
21
|
+
* How many sites the widget will draw. Sites past the cap are dropped
|
|
22
|
+
* rather than silently merged, and the footer says so — a count that
|
|
23
|
+
* quietly disagrees with the Sites page is how somebody concludes a
|
|
24
|
+
* site has disappeared.
|
|
25
|
+
*/
|
|
26
|
+
maxSites?: number | undefined;
|
|
27
|
+
// Restrict the map to sites of these NetworkSiteType rows.
|
|
28
|
+
networkSiteTypeIds?: Array<string> | undefined;
|
|
29
|
+
/*
|
|
30
|
+
* "" / undefined — every site with coordinates.
|
|
31
|
+
* "down" — only sites whose rolled-up status is not operational.
|
|
32
|
+
* "operational" — only sites whose rolled-up status is operational.
|
|
33
|
+
*/
|
|
34
|
+
statusFilter?: string | undefined;
|
|
35
|
+
// "map" (default) draws the world map; "list" falls back to a table.
|
|
36
|
+
viewMode?: "map" | "list" | undefined;
|
|
37
|
+
// Print each marker's site name under it when the map is not too busy.
|
|
38
|
+
showLabels?: boolean | undefined;
|
|
39
|
+
};
|
|
40
|
+
}
|