@oneuptime/common 10.4.17 → 10.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Models/AnalyticsModels/ExceptionInstance.ts +24 -0
- package/Models/AnalyticsModels/Log.ts +16 -0
- package/Models/AnalyticsModels/Metric.ts +31 -0
- package/Models/AnalyticsModels/MonitorLog.ts +5 -0
- package/Models/AnalyticsModels/Profile.ts +25 -0
- package/Models/AnalyticsModels/ProfileSample.ts +20 -0
- package/Models/AnalyticsModels/Span.ts +23 -0
- package/Models/DatabaseModels/AlertEpisodeMember.ts +2 -0
- package/Models/DatabaseModels/AlertGroupingRule.ts +0 -38
- package/Models/DatabaseModels/AlertLabelRule.ts +152 -0
- package/Models/DatabaseModels/AlertOwnerRule.ts +114 -0
- package/Models/DatabaseModels/DatabaseBaseModel/DatabaseBaseModel.ts +7 -0
- package/Models/DatabaseModels/IncidentEpisodeMember.ts +2 -0
- package/Models/DatabaseModels/IncidentGroupingRule.ts +0 -38
- package/Models/DatabaseModels/IncidentLabelRule.ts +114 -0
- package/Models/DatabaseModels/IncidentMember.ts +2 -0
- package/Models/DatabaseModels/IncidentOwnerRule.ts +114 -0
- package/Models/DatabaseModels/IncidentSla.ts +2 -0
- package/Models/DatabaseModels/IncidentTemplate.ts +224 -0
- package/Models/DatabaseModels/Index.ts +2 -2
- package/Models/DatabaseModels/MetricPipelineRule.ts +2 -0
- package/Models/DatabaseModels/MonitorProbe.ts +2 -0
- package/Models/DatabaseModels/MonitorTest.ts +2 -0
- package/Models/DatabaseModels/OnCallDutyPolicyEscalationRule.ts +2 -0
- package/Models/DatabaseModels/OnCallDutyPolicyEscalationRuleSchedule.ts +2 -0
- package/Models/DatabaseModels/OnCallDutyPolicyEscalationRuleTeam.ts +2 -0
- package/Models/DatabaseModels/OnCallDutyPolicyEscalationRuleUser.ts +2 -0
- package/Models/DatabaseModels/OnCallDutyPolicyExecutionLog.ts +2 -0
- package/Models/DatabaseModels/OnCallDutyPolicyExecutionLogTimeline.ts +2 -0
- package/Models/DatabaseModels/OnCallDutyPolicyTimeLog.ts +2 -0
- package/Models/DatabaseModels/OnCallDutyPolicyUserOverride.ts +2 -0
- package/Models/DatabaseModels/ProjectOidc.ts +4 -0
- package/Models/DatabaseModels/ProjectSCIM.ts +4 -0
- package/Models/DatabaseModels/ProjectSso.ts +4 -0
- package/Models/DatabaseModels/ScheduledMaintenance.ts +220 -0
- package/Models/DatabaseModels/ScheduledMaintenanceLabelRule.ts +152 -0
- package/Models/DatabaseModels/ScheduledMaintenanceOwnerRule.ts +152 -0
- package/Models/DatabaseModels/ScheduledMaintenanceTemplate.ts +224 -0
- package/Models/DatabaseModels/StatusPageOidc.ts +6 -0
- package/Models/DatabaseModels/StatusPageSCIM.ts +4 -0
- package/Models/DatabaseModels/StatusPageSCIMLog.ts +2 -0
- package/Models/DatabaseModels/StatusPageSso.ts +6 -0
- package/Models/DatabaseModels/Team.ts +41 -0
- package/Models/DatabaseModels/TeamComplianceSetting.ts +4 -0
- package/Models/DatabaseModels/{ServiceMonitor.ts → TeamCustomField.ts} +95 -200
- package/Models/DatabaseModels/TelemetryException.ts +2 -0
- package/Models/DatabaseModels/UserOnCallLog.ts +2 -0
- package/Models/DatabaseModels/UserOnCallLogTimeline.ts +2 -0
- package/Models/DatabaseModels/WorkflowLog.ts +2 -0
- package/Models/DatabaseModels/WorkflowVariable.ts +2 -0
- package/Server/EnvironmentConfig.ts +3 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1779392865146-AddAgentVersionToKubernetesDockerHost.ts +1 -1
- package/Server/Infrastructure/Postgres/SchemaMigrations/1779653508434-AddLabelInheritanceAndScheduledMaintenanceResources.ts +160 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1779708719656-AddAffectedResourcesToTemplates.ts +197 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1779739410559-MigrationName.ts +36 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1779742211961-AttachServiceToScheduledMaintenanceTemplatesAndLabelRules.ts +128 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1779790539196-MigrationName.ts +53 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1779823516881-ExpandOwnerRuleInheritFlags.ts +73 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1779827700000-RenameStatusPageZhToZhCN.ts +62 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +14 -0
- package/Server/Middleware/TelemetryIngestionDisabled.ts +32 -0
- package/Server/Services/AlertGroupingEngineService.ts +0 -29
- package/Server/Services/AlertLabelRuleEngineService.ts +129 -0
- package/Server/Services/AlertOwnerRuleEngineService.ts +205 -1
- package/Server/Services/IncidentGroupingEngineService.ts +0 -37
- package/Server/Services/IncidentLabelRuleEngineService.ts +83 -0
- package/Server/Services/IncidentOwnerRuleEngineService.ts +208 -10
- package/Server/Services/IncidentService.ts +139 -1
- package/Server/Services/Index.ts +0 -2
- package/Server/Services/MonitorProbeService.ts +56 -0
- package/Server/Services/MonitorService.ts +55 -0
- package/Server/Services/ProjectService.ts +17 -8
- package/Server/Services/ScheduledMaintenanceLabelRuleEngineService.ts +129 -0
- package/Server/Services/ScheduledMaintenanceOwnerRuleEngineService.ts +289 -7
- package/Server/Services/StatusPageService.ts +30 -0
- package/Server/Services/TeamCustomFieldService.ts +9 -0
- package/Server/Types/AnalyticsDatabase/ModelPermission.ts +226 -28
- package/Server/Types/Database/Permissions/EditionPermission.ts +46 -0
- package/Server/Types/Database/Permissions/TablePermission.ts +8 -1
- package/Server/Utils/Monitor/MonitorAlert.ts +35 -0
- package/Server/Utils/Monitor/MonitorIncident.ts +244 -34
- package/Tests/Server/Middleware/UserAuthorization.test.ts +11 -19
- package/Tests/Types/Permission.test.ts +129 -1
- package/Types/Accounts/AccountsLanguage.ts +10 -1
- package/Types/AdminDashboard/AdminDashboardLanguage.ts +10 -1
- package/Types/BaseDatabase/TableEditionAccessControl.ts +3 -0
- package/Types/Dashboard/DashboardLanguage.ts +10 -1
- package/Types/Database/AccessControl/TableEditionAccessControl.ts +8 -0
- package/Types/Date.ts +1 -1
- package/Types/Docs/DocsLanguage.ts +10 -1
- package/Types/Permission.ts +87 -54
- package/Types/StatusPage/StatusPageLanguage.ts +10 -1
- package/UI/Components/Charts/Area/AreaChart.tsx +1 -1
- package/UI/Components/Charts/Bar/BarChart.tsx +1 -1
- package/UI/Components/Charts/ChartLibrary/AreaChart/AreaChart.tsx +5 -1
- package/UI/Components/Charts/ChartLibrary/BarChart/BarChart.tsx +1 -1
- package/UI/Components/Charts/ChartLibrary/LineChart/LineChart.tsx +11 -1
- package/UI/Components/Charts/Line/LineChart.tsx +1 -1
- package/UI/Components/Charts/Utils/XAxis.ts +21 -48
- package/UI/Components/EntityDropdown/EntityDropdown.tsx +1808 -0
- package/UI/Components/Forms/Fields/FormField.tsx +69 -29
- package/UI/Components/Link/Link.tsx +13 -1
- package/UI/Components/ModelDetail/ModelDetail.tsx +20 -19
- package/UI/Components/ModelTable/BaseModelTable.tsx +5 -0
- package/UI/Utils/User.ts +16 -0
- package/build/dist/Models/AnalyticsModels/ExceptionInstance.js +39 -2
- package/build/dist/Models/AnalyticsModels/ExceptionInstance.js.map +1 -1
- package/build/dist/Models/AnalyticsModels/Log.js +16 -0
- package/build/dist/Models/AnalyticsModels/Log.js.map +1 -1
- package/build/dist/Models/AnalyticsModels/Metric.js +31 -0
- package/build/dist/Models/AnalyticsModels/Metric.js.map +1 -1
- package/build/dist/Models/AnalyticsModels/MonitorLog.js +5 -0
- package/build/dist/Models/AnalyticsModels/MonitorLog.js.map +1 -1
- package/build/dist/Models/AnalyticsModels/Profile.js +40 -2
- package/build/dist/Models/AnalyticsModels/Profile.js.map +1 -1
- package/build/dist/Models/AnalyticsModels/ProfileSample.js +35 -2
- package/build/dist/Models/AnalyticsModels/ProfileSample.js.map +1 -1
- package/build/dist/Models/AnalyticsModels/Span.js +23 -0
- package/build/dist/Models/AnalyticsModels/Span.js.map +1 -1
- package/build/dist/Models/DatabaseModels/AlertEpisodeMember.js +2 -0
- package/build/dist/Models/DatabaseModels/AlertEpisodeMember.js.map +1 -1
- package/build/dist/Models/DatabaseModels/AlertGroupingRule.js +0 -39
- package/build/dist/Models/DatabaseModels/AlertGroupingRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/AlertLabelRule.js +156 -0
- package/build/dist/Models/DatabaseModels/AlertLabelRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/AlertOwnerRule.js +117 -0
- package/build/dist/Models/DatabaseModels/AlertOwnerRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/DatabaseBaseModel/DatabaseBaseModel.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncidentEpisodeMember.js +2 -0
- package/build/dist/Models/DatabaseModels/IncidentEpisodeMember.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncidentGroupingRule.js +0 -39
- package/build/dist/Models/DatabaseModels/IncidentGroupingRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncidentLabelRule.js +117 -0
- package/build/dist/Models/DatabaseModels/IncidentLabelRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncidentMember.js +2 -0
- package/build/dist/Models/DatabaseModels/IncidentMember.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncidentOwnerRule.js +117 -0
- package/build/dist/Models/DatabaseModels/IncidentOwnerRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncidentSla.js +2 -0
- package/build/dist/Models/DatabaseModels/IncidentSla.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncidentTemplate.js +216 -0
- package/build/dist/Models/DatabaseModels/IncidentTemplate.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Index.js +2 -2
- package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
- package/build/dist/Models/DatabaseModels/MetricPipelineRule.js +2 -0
- package/build/dist/Models/DatabaseModels/MetricPipelineRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/MonitorProbe.js +2 -0
- package/build/dist/Models/DatabaseModels/MonitorProbe.js.map +1 -1
- package/build/dist/Models/DatabaseModels/MonitorTest.js +2 -0
- package/build/dist/Models/DatabaseModels/MonitorTest.js.map +1 -1
- package/build/dist/Models/DatabaseModels/OnCallDutyPolicyEscalationRule.js +2 -0
- package/build/dist/Models/DatabaseModels/OnCallDutyPolicyEscalationRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/OnCallDutyPolicyEscalationRuleSchedule.js +2 -0
- package/build/dist/Models/DatabaseModels/OnCallDutyPolicyEscalationRuleSchedule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/OnCallDutyPolicyEscalationRuleTeam.js +2 -0
- package/build/dist/Models/DatabaseModels/OnCallDutyPolicyEscalationRuleTeam.js.map +1 -1
- package/build/dist/Models/DatabaseModels/OnCallDutyPolicyEscalationRuleUser.js +2 -0
- package/build/dist/Models/DatabaseModels/OnCallDutyPolicyEscalationRuleUser.js.map +1 -1
- package/build/dist/Models/DatabaseModels/OnCallDutyPolicyExecutionLog.js +2 -0
- package/build/dist/Models/DatabaseModels/OnCallDutyPolicyExecutionLog.js.map +1 -1
- package/build/dist/Models/DatabaseModels/OnCallDutyPolicyExecutionLogTimeline.js +2 -0
- package/build/dist/Models/DatabaseModels/OnCallDutyPolicyExecutionLogTimeline.js.map +1 -1
- package/build/dist/Models/DatabaseModels/OnCallDutyPolicyTimeLog.js +2 -0
- package/build/dist/Models/DatabaseModels/OnCallDutyPolicyTimeLog.js.map +1 -1
- package/build/dist/Models/DatabaseModels/OnCallDutyPolicyUserOverride.js +2 -0
- package/build/dist/Models/DatabaseModels/OnCallDutyPolicyUserOverride.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ProjectOidc.js +4 -0
- package/build/dist/Models/DatabaseModels/ProjectOidc.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ProjectSCIM.js +4 -0
- package/build/dist/Models/DatabaseModels/ProjectSCIM.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ProjectSso.js +4 -0
- package/build/dist/Models/DatabaseModels/ProjectSso.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ScheduledMaintenance.js +216 -0
- package/build/dist/Models/DatabaseModels/ScheduledMaintenance.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ScheduledMaintenanceLabelRule.js +156 -0
- package/build/dist/Models/DatabaseModels/ScheduledMaintenanceLabelRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ScheduledMaintenanceOwnerRule.js +156 -0
- package/build/dist/Models/DatabaseModels/ScheduledMaintenanceOwnerRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ScheduledMaintenanceTemplate.js +216 -0
- package/build/dist/Models/DatabaseModels/ScheduledMaintenanceTemplate.js.map +1 -1
- package/build/dist/Models/DatabaseModels/StatusPageOidc.js +6 -0
- package/build/dist/Models/DatabaseModels/StatusPageOidc.js.map +1 -1
- package/build/dist/Models/DatabaseModels/StatusPageSCIM.js +4 -0
- package/build/dist/Models/DatabaseModels/StatusPageSCIM.js.map +1 -1
- package/build/dist/Models/DatabaseModels/StatusPageSCIMLog.js +2 -0
- package/build/dist/Models/DatabaseModels/StatusPageSCIMLog.js.map +1 -1
- package/build/dist/Models/DatabaseModels/StatusPageSso.js +6 -0
- package/build/dist/Models/DatabaseModels/StatusPageSso.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Team.js +42 -0
- package/build/dist/Models/DatabaseModels/Team.js.map +1 -1
- package/build/dist/Models/DatabaseModels/TeamComplianceSetting.js +4 -0
- package/build/dist/Models/DatabaseModels/TeamComplianceSetting.js.map +1 -1
- package/build/dist/Models/DatabaseModels/{ServiceMonitor.js → TeamCustomField.js} +108 -209
- package/build/dist/Models/DatabaseModels/TeamCustomField.js.map +1 -0
- package/build/dist/Models/DatabaseModels/TelemetryException.js +2 -0
- package/build/dist/Models/DatabaseModels/TelemetryException.js.map +1 -1
- package/build/dist/Models/DatabaseModels/UserOnCallLog.js +2 -0
- package/build/dist/Models/DatabaseModels/UserOnCallLog.js.map +1 -1
- package/build/dist/Models/DatabaseModels/UserOnCallLogTimeline.js +2 -0
- package/build/dist/Models/DatabaseModels/UserOnCallLogTimeline.js.map +1 -1
- package/build/dist/Models/DatabaseModels/WorkflowLog.js +2 -0
- package/build/dist/Models/DatabaseModels/WorkflowLog.js.map +1 -1
- package/build/dist/Models/DatabaseModels/WorkflowVariable.js +2 -0
- package/build/dist/Models/DatabaseModels/WorkflowVariable.js.map +1 -1
- package/build/dist/Server/EnvironmentConfig.js +1 -0
- package/build/dist/Server/EnvironmentConfig.js.map +1 -1
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1779392865146-AddAgentVersionToKubernetesDockerHost.js.map +1 -1
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1779653508434-AddLabelInheritanceAndScheduledMaintenanceResources.js +60 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1779653508434-AddLabelInheritanceAndScheduledMaintenanceResources.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1779708719656-AddAffectedResourcesToTemplates.js +74 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1779708719656-AddAffectedResourcesToTemplates.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1779739410559-MigrationName.js +19 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1779739410559-MigrationName.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1779742211961-AttachServiceToScheduledMaintenanceTemplatesAndLabelRules.js +50 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1779742211961-AttachServiceToScheduledMaintenanceTemplatesAndLabelRules.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1779790539196-MigrationName.js +26 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1779790539196-MigrationName.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1779823516881-ExpandOwnerRuleInheritFlags.js +30 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1779823516881-ExpandOwnerRuleInheritFlags.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1779827700000-RenameStatusPageZhToZhCN.js +50 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1779827700000-RenameStatusPageZhToZhCN.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +14 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
- package/build/dist/Server/Middleware/TelemetryIngestionDisabled.js +22 -0
- package/build/dist/Server/Middleware/TelemetryIngestionDisabled.js.map +1 -0
- package/build/dist/Server/Services/AlertGroupingEngineService.js +0 -25
- package/build/dist/Server/Services/AlertGroupingEngineService.js.map +1 -1
- package/build/dist/Server/Services/AlertLabelRuleEngineService.js +117 -3
- package/build/dist/Server/Services/AlertLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/AlertOwnerRuleEngineService.js +175 -5
- package/build/dist/Server/Services/AlertOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/IncidentGroupingEngineService.js +0 -31
- package/build/dist/Server/Services/IncidentGroupingEngineService.js.map +1 -1
- package/build/dist/Server/Services/IncidentLabelRuleEngineService.js +76 -3
- package/build/dist/Server/Services/IncidentLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/IncidentOwnerRuleEngineService.js +176 -14
- package/build/dist/Server/Services/IncidentOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/IncidentService.js +104 -1
- package/build/dist/Server/Services/IncidentService.js.map +1 -1
- package/build/dist/Server/Services/Index.js +0 -2
- package/build/dist/Server/Services/Index.js.map +1 -1
- package/build/dist/Server/Services/MonitorProbeService.js +46 -0
- package/build/dist/Server/Services/MonitorProbeService.js.map +1 -1
- package/build/dist/Server/Services/MonitorService.js +40 -0
- package/build/dist/Server/Services/MonitorService.js.map +1 -1
- package/build/dist/Server/Services/ProjectService.js +17 -8
- package/build/dist/Server/Services/ProjectService.js.map +1 -1
- package/build/dist/Server/Services/ScheduledMaintenanceLabelRuleEngineService.js +117 -3
- package/build/dist/Server/Services/ScheduledMaintenanceLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/ScheduledMaintenanceOwnerRuleEngineService.js +245 -10
- package/build/dist/Server/Services/ScheduledMaintenanceOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/StatusPageService.js +24 -0
- package/build/dist/Server/Services/StatusPageService.js.map +1 -1
- package/build/dist/Server/Services/TeamCustomFieldService.js +9 -0
- package/build/dist/Server/Services/TeamCustomFieldService.js.map +1 -0
- package/build/dist/Server/Types/AnalyticsDatabase/ModelPermission.js +166 -26
- package/build/dist/Server/Types/AnalyticsDatabase/ModelPermission.js.map +1 -1
- package/build/dist/Server/Types/Database/Permissions/EditionPermission.js +45 -0
- package/build/dist/Server/Types/Database/Permissions/EditionPermission.js.map +1 -0
- package/build/dist/Server/Types/Database/Permissions/TablePermission.js +7 -1
- package/build/dist/Server/Types/Database/Permissions/TablePermission.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorAlert.js +30 -0
- package/build/dist/Server/Utils/Monitor/MonitorAlert.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorIncident.js +200 -31
- package/build/dist/Server/Utils/Monitor/MonitorIncident.js.map +1 -1
- package/build/dist/Tests/Server/Middleware/UserAuthorization.test.js +8 -15
- package/build/dist/Tests/Server/Middleware/UserAuthorization.test.js.map +1 -1
- package/build/dist/Tests/Types/Permission.test.js +90 -1
- package/build/dist/Tests/Types/Permission.test.js.map +1 -1
- package/build/dist/Types/Accounts/AccountsLanguage.js +10 -1
- package/build/dist/Types/Accounts/AccountsLanguage.js.map +1 -1
- package/build/dist/Types/AdminDashboard/AdminDashboardLanguage.js +10 -1
- package/build/dist/Types/AdminDashboard/AdminDashboardLanguage.js.map +1 -1
- package/build/dist/Types/BaseDatabase/TableEditionAccessControl.js +2 -0
- package/build/dist/Types/BaseDatabase/TableEditionAccessControl.js.map +1 -0
- package/build/dist/Types/Dashboard/DashboardLanguage.js +10 -1
- package/build/dist/Types/Dashboard/DashboardLanguage.js.map +1 -1
- package/build/dist/Types/Database/AccessControl/TableEditionAccessControl.js +6 -0
- package/build/dist/Types/Database/AccessControl/TableEditionAccessControl.js.map +1 -0
- package/build/dist/Types/Date.js +1 -1
- package/build/dist/Types/Date.js.map +1 -1
- package/build/dist/Types/Docs/DocsLanguage.js +10 -1
- package/build/dist/Types/Docs/DocsLanguage.js.map +1 -1
- package/build/dist/Types/Permission.js +80 -44
- package/build/dist/Types/Permission.js.map +1 -1
- package/build/dist/Types/StatusPage/StatusPageLanguage.js +10 -1
- package/build/dist/Types/StatusPage/StatusPageLanguage.js.map +1 -1
- package/build/dist/UI/Components/Charts/Area/AreaChart.js +1 -1
- package/build/dist/UI/Components/Charts/Area/AreaChart.js.map +1 -1
- package/build/dist/UI/Components/Charts/Bar/BarChart.js +1 -1
- package/build/dist/UI/Components/Charts/Bar/BarChart.js.map +1 -1
- package/build/dist/UI/Components/Charts/ChartLibrary/AreaChart/AreaChart.js +5 -1
- package/build/dist/UI/Components/Charts/ChartLibrary/AreaChart/AreaChart.js.map +1 -1
- package/build/dist/UI/Components/Charts/ChartLibrary/BarChart/BarChart.js +1 -1
- package/build/dist/UI/Components/Charts/ChartLibrary/BarChart/BarChart.js.map +1 -1
- package/build/dist/UI/Components/Charts/ChartLibrary/LineChart/LineChart.js +11 -1
- package/build/dist/UI/Components/Charts/ChartLibrary/LineChart/LineChart.js.map +1 -1
- package/build/dist/UI/Components/Charts/Line/LineChart.js +1 -1
- package/build/dist/UI/Components/Charts/Line/LineChart.js.map +1 -1
- package/build/dist/UI/Components/Charts/Utils/XAxis.js +21 -47
- package/build/dist/UI/Components/Charts/Utils/XAxis.js.map +1 -1
- package/build/dist/UI/Components/EntityDropdown/EntityDropdown.js +1125 -0
- package/build/dist/UI/Components/EntityDropdown/EntityDropdown.js.map +1 -0
- package/build/dist/UI/Components/Forms/Fields/FormField.js +28 -10
- package/build/dist/UI/Components/Forms/Fields/FormField.js.map +1 -1
- package/build/dist/UI/Components/Link/Link.js +11 -2
- package/build/dist/UI/Components/Link/Link.js.map +1 -1
- package/build/dist/UI/Components/ModelDetail/ModelDetail.js +20 -18
- package/build/dist/UI/Components/ModelDetail/ModelDetail.js.map +1 -1
- package/build/dist/UI/Components/ModelTable/BaseModelTable.js +4 -0
- package/build/dist/UI/Components/ModelTable/BaseModelTable.js.map +1 -1
- package/build/dist/UI/Utils/User.js +13 -0
- package/build/dist/UI/Utils/User.js.map +1 -1
- package/package.json +1 -1
- package/Server/Services/ServiceMonitorService.ts +0 -57
- package/build/dist/Models/DatabaseModels/ServiceMonitor.js.map +0 -1
- package/build/dist/Server/Services/ServiceMonitorService.js +0 -56
- package/build/dist/Server/Services/ServiceMonitorService.js.map +0 -1
|
@@ -37,6 +37,41 @@ export interface CheckReadPermissionType<TBaseModel extends BaseModel> {
|
|
|
37
37
|
select: Select<TBaseModel> | null;
|
|
38
38
|
}
|
|
39
39
|
|
|
40
|
+
/*
|
|
41
|
+
* Per-request cache for scope resolution. Keyed by the `props` object —
|
|
42
|
+
* one HTTP request reuses the same `props` for every analytics query it
|
|
43
|
+
* issues (a dashboard with 20 panels = up to 80 Postgres lookups without
|
|
44
|
+
* this; ~4 with it). The WeakMap entry is released automatically when
|
|
45
|
+
* `props` goes out of scope at request end, so there's no stale data
|
|
46
|
+
* between requests.
|
|
47
|
+
*
|
|
48
|
+
* Caches two things:
|
|
49
|
+
* - `ownedIds`: Service IDs the user owns (one set per request — the
|
|
50
|
+
* inputs are userId + teamIds + tenantId, all stable for one props).
|
|
51
|
+
* - `labeledIds`: a map keyed by the sorted-label-IDs string, since
|
|
52
|
+
* different model permission rows may carry different label sets.
|
|
53
|
+
*/
|
|
54
|
+
interface ScopeResolveCacheEntry {
|
|
55
|
+
ownedIds?: Set<string>;
|
|
56
|
+
labeledIds: Map<string, Set<string>>;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
const scopeResolveCache: WeakMap<
|
|
60
|
+
DatabaseCommonInteractionProps,
|
|
61
|
+
ScopeResolveCacheEntry
|
|
62
|
+
> = new WeakMap();
|
|
63
|
+
|
|
64
|
+
function getScopeCacheBucket(
|
|
65
|
+
props: DatabaseCommonInteractionProps,
|
|
66
|
+
): ScopeResolveCacheEntry {
|
|
67
|
+
let bucket: ScopeResolveCacheEntry | undefined = scopeResolveCache.get(props);
|
|
68
|
+
if (!bucket) {
|
|
69
|
+
bucket = { labeledIds: new Map() };
|
|
70
|
+
scopeResolveCache.set(props, bucket);
|
|
71
|
+
}
|
|
72
|
+
return bucket;
|
|
73
|
+
}
|
|
74
|
+
|
|
40
75
|
export default class ModelPermission {
|
|
41
76
|
@CaptureSpan()
|
|
42
77
|
public static async checkDeletePermission<TBaseModel extends BaseModel>(
|
|
@@ -645,12 +680,21 @@ export default class ModelPermission {
|
|
|
645
680
|
}
|
|
646
681
|
|
|
647
682
|
/*
|
|
648
|
-
*
|
|
649
|
-
*
|
|
650
|
-
*
|
|
651
|
-
*
|
|
652
|
-
*
|
|
653
|
-
*
|
|
683
|
+
* Scope filter for analytics models (Log, Span, Metric, ...). For each
|
|
684
|
+
* applicable user permission row we resolve allowed parent resource IDs
|
|
685
|
+
* based on its scope (`Owned` → ServiceOwner* tables; `Labels` → parent
|
|
686
|
+
* resources matching the user's labels), union them, and inject
|
|
687
|
+
* `serviceId IN (...)` into the ClickHouse query.
|
|
688
|
+
*
|
|
689
|
+
* Telemetry's serviceId is polymorphic — comment in Metric.ts says it
|
|
690
|
+
* "can be the monitor id or the telemetry service id" — so Labels-scope
|
|
691
|
+
* resolution walks both Service.labels (ServiceLabel join) and
|
|
692
|
+
* Monitor.labels (MonitorLabel join). Owned-scope keeps the original
|
|
693
|
+
* single-source ServiceOwner* lookup since that's what's wired today.
|
|
694
|
+
*
|
|
695
|
+
* The operational per-row owner-join from the Postgres path doesn't
|
|
696
|
+
* scale to telemetry volume; one Postgres roundtrip + one indexed
|
|
697
|
+
* predicate does. See Internal/Docs/PermissionsSimplification.md.
|
|
654
698
|
*/
|
|
655
699
|
private static async addOwnedScopeToQuery<TBaseModel extends BaseModel>(
|
|
656
700
|
modelType: { new (): TBaseModel },
|
|
@@ -701,23 +745,100 @@ export default class ModelPermission {
|
|
|
701
745
|
}
|
|
702
746
|
|
|
703
747
|
/*
|
|
704
|
-
* If any applicable row
|
|
705
|
-
*
|
|
748
|
+
* If any applicable row grants unrestricted access (scope=All, or the
|
|
749
|
+
* legacy Labels/unset scope with no labelIds), the broader grant wins
|
|
750
|
+
* and no filter is applied. Owned and label-restricted rows narrow
|
|
751
|
+
* access; an unrestricted row coexisting with them widens it back to
|
|
752
|
+
* full access.
|
|
706
753
|
*/
|
|
707
|
-
const
|
|
754
|
+
const hasUnrestrictedGrant: boolean = applicableRows.some(
|
|
708
755
|
(p: UserPermission) => {
|
|
709
|
-
|
|
756
|
+
if (p.scope === PermissionScope.All) {
|
|
757
|
+
return true;
|
|
758
|
+
}
|
|
759
|
+
if (p.scope === PermissionScope.Owned) {
|
|
760
|
+
return false;
|
|
761
|
+
}
|
|
762
|
+
// scope === Labels or undefined (legacy default)
|
|
763
|
+
return !p.labelIds || p.labelIds.length === 0;
|
|
710
764
|
},
|
|
711
765
|
);
|
|
712
|
-
if (
|
|
766
|
+
if (hasUnrestrictedGrant) {
|
|
713
767
|
return query;
|
|
714
768
|
}
|
|
715
769
|
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
|
|
770
|
+
const allowedResourceIds: Set<string> = new Set<string>();
|
|
771
|
+
|
|
772
|
+
const hasOwnedGrant: boolean = applicableRows.some((p: UserPermission) => {
|
|
773
|
+
return p.scope === PermissionScope.Owned;
|
|
774
|
+
});
|
|
775
|
+
if (hasOwnedGrant) {
|
|
776
|
+
const ownedIds: Set<string> = await this.resolveOwnedParentIds(props);
|
|
777
|
+
for (const id of ownedIds) {
|
|
778
|
+
allowedResourceIds.add(id);
|
|
779
|
+
}
|
|
780
|
+
}
|
|
781
|
+
|
|
782
|
+
const labelScopedRows: Array<UserPermission> = applicableRows.filter(
|
|
783
|
+
(p: UserPermission) => {
|
|
784
|
+
const isLabelsScope: boolean =
|
|
785
|
+
p.scope === PermissionScope.Labels || p.scope === undefined;
|
|
786
|
+
return isLabelsScope && Boolean(p.labelIds && p.labelIds.length > 0);
|
|
787
|
+
},
|
|
788
|
+
);
|
|
789
|
+
if (labelScopedRows.length > 0) {
|
|
790
|
+
const labelIdSet: Set<string> = new Set<string>();
|
|
791
|
+
for (const row of labelScopedRows) {
|
|
792
|
+
for (const labelId of row.labelIds) {
|
|
793
|
+
labelIdSet.add(labelId.toString());
|
|
794
|
+
}
|
|
795
|
+
}
|
|
796
|
+
const labelIds: Array<ObjectID> = Array.from(labelIdSet).map(
|
|
797
|
+
(id: string) => {
|
|
798
|
+
return new ObjectID(id);
|
|
799
|
+
},
|
|
800
|
+
);
|
|
801
|
+
const labeledIds: Set<string> = await this.resolveLabeledParentIds(
|
|
802
|
+
labelIds,
|
|
803
|
+
props,
|
|
804
|
+
);
|
|
805
|
+
for (const id of labeledIds) {
|
|
806
|
+
allowedResourceIds.add(id);
|
|
807
|
+
}
|
|
808
|
+
}
|
|
809
|
+
|
|
810
|
+
const fkColumn: string = model.ownedThrough.fkColumn;
|
|
811
|
+
const idList: Array<string> =
|
|
812
|
+
allowedResourceIds.size > 0
|
|
813
|
+
? Array.from(allowedResourceIds)
|
|
814
|
+
: [ObjectID.getZeroObjectID().toString()]; // sentinel: match nothing
|
|
815
|
+
|
|
816
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
817
|
+
(query as any)[fkColumn] = new Includes(idList);
|
|
818
|
+
|
|
819
|
+
return query;
|
|
820
|
+
}
|
|
821
|
+
|
|
822
|
+
/*
|
|
823
|
+
* Resolves Service IDs the user owns via ServiceOwnerUser /
|
|
824
|
+
* ServiceOwnerTeam in Postgres. Lazy-required to avoid circular deps
|
|
825
|
+
* with services that extend DatabaseService. Returns string IDs to
|
|
826
|
+
* make set-union with other resolvers straightforward.
|
|
827
|
+
*
|
|
828
|
+
* Cached per request via the WeakMap on `props` — the inputs (userId,
|
|
829
|
+
* teamIds, tenantId) are stable for the lifetime of one props object,
|
|
830
|
+
* so repeated calls within the same request reuse the first result.
|
|
831
|
+
*/
|
|
832
|
+
private static async resolveOwnedParentIds(
|
|
833
|
+
props: DatabaseCommonInteractionProps,
|
|
834
|
+
): Promise<Set<string>> {
|
|
835
|
+
const cache: ScopeResolveCacheEntry = getScopeCacheBucket(props);
|
|
836
|
+
if (cache.ownedIds) {
|
|
837
|
+
return cache.ownedIds;
|
|
838
|
+
}
|
|
839
|
+
|
|
840
|
+
const result: Set<string> = new Set<string>();
|
|
841
|
+
|
|
721
842
|
const ownerTableRegistry: Map<
|
|
722
843
|
string,
|
|
723
844
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
@@ -736,11 +857,10 @@ export default class ModelPermission {
|
|
|
736
857
|
}
|
|
737
858
|
| undefined = ownerTableRegistry.get("Service");
|
|
738
859
|
if (!serviceEntry) {
|
|
739
|
-
|
|
860
|
+
cache.ownedIds = result;
|
|
861
|
+
return result;
|
|
740
862
|
}
|
|
741
863
|
|
|
742
|
-
const allowedServiceIds: Set<string> = new Set<string>();
|
|
743
|
-
|
|
744
864
|
if (props.userId) {
|
|
745
865
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
746
866
|
const userOwnedRows: Array<any> =
|
|
@@ -757,7 +877,7 @@ export default class ModelPermission {
|
|
|
757
877
|
for (const row of userOwnedRows) {
|
|
758
878
|
const id: ObjectID | undefined = row.serviceId;
|
|
759
879
|
if (id) {
|
|
760
|
-
|
|
880
|
+
result.add(id.toString());
|
|
761
881
|
}
|
|
762
882
|
}
|
|
763
883
|
}
|
|
@@ -778,21 +898,99 @@ export default class ModelPermission {
|
|
|
778
898
|
for (const row of teamOwnedRows) {
|
|
779
899
|
const id: ObjectID | undefined = row.serviceId;
|
|
780
900
|
if (id) {
|
|
781
|
-
|
|
901
|
+
result.add(id.toString());
|
|
782
902
|
}
|
|
783
903
|
}
|
|
784
904
|
}
|
|
785
905
|
|
|
786
|
-
|
|
787
|
-
|
|
788
|
-
|
|
789
|
-
|
|
790
|
-
|
|
906
|
+
cache.ownedIds = result;
|
|
907
|
+
return result;
|
|
908
|
+
}
|
|
909
|
+
|
|
910
|
+
/*
|
|
911
|
+
* Resolves parent IDs whose labels intersect the given labelIds. Walks
|
|
912
|
+
* both TelemetryService (`ServiceLabel`) and Monitor (`MonitorLabel`)
|
|
913
|
+
* because telemetry's serviceId is polymorphic between the two. The
|
|
914
|
+
* Postgres findBy passes labels through QueryUtil, which turns the
|
|
915
|
+
* EntityArray filter into a many-to-many subquery against the join
|
|
916
|
+
* table — see QueryUtil.ts ~line 528.
|
|
917
|
+
*
|
|
918
|
+
* Cached per request via the WeakMap on `props`, keyed by the sorted
|
|
919
|
+
* label IDs joined into a string. Different model permission rows can
|
|
920
|
+
* carry different label sets, so we key by the actual labelIds rather
|
|
921
|
+
* than a single per-request slot.
|
|
922
|
+
*/
|
|
923
|
+
private static async resolveLabeledParentIds(
|
|
924
|
+
labelIds: Array<ObjectID>,
|
|
925
|
+
props: DatabaseCommonInteractionProps,
|
|
926
|
+
): Promise<Set<string>> {
|
|
927
|
+
const result: Set<string> = new Set<string>();
|
|
928
|
+
|
|
929
|
+
if (labelIds.length === 0) {
|
|
930
|
+
return result;
|
|
931
|
+
}
|
|
932
|
+
|
|
933
|
+
const cacheKey: string = labelIds
|
|
934
|
+
.map((id: ObjectID) => {
|
|
935
|
+
return id.toString();
|
|
936
|
+
})
|
|
937
|
+
.sort()
|
|
938
|
+
.join(",");
|
|
939
|
+
const cache: ScopeResolveCacheEntry = getScopeCacheBucket(props);
|
|
940
|
+
const cached: Set<string> | undefined = cache.labeledIds.get(cacheKey);
|
|
941
|
+
if (cached) {
|
|
942
|
+
return cached;
|
|
943
|
+
}
|
|
944
|
+
|
|
945
|
+
const ServiceService: any =
|
|
946
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports, @typescript-eslint/no-var-requires
|
|
947
|
+
require("../../Services/ServiceService").default;
|
|
948
|
+
const MonitorService: any =
|
|
949
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports, @typescript-eslint/no-var-requires
|
|
950
|
+
require("../../Services/MonitorService").default;
|
|
951
|
+
|
|
952
|
+
const tenantFilter: Record<string, ObjectID> = props.tenantId
|
|
953
|
+
? { projectId: props.tenantId }
|
|
954
|
+
: {};
|
|
791
955
|
|
|
792
956
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
793
|
-
|
|
957
|
+
const serviceRows: Array<any> = await ServiceService.findBy({
|
|
958
|
+
query: {
|
|
959
|
+
labels: labelIds,
|
|
960
|
+
...tenantFilter,
|
|
961
|
+
},
|
|
962
|
+
select: { _id: true },
|
|
963
|
+
props: { isRoot: true },
|
|
964
|
+
skip: 0,
|
|
965
|
+
limit: LIMIT_MAX,
|
|
966
|
+
});
|
|
967
|
+
for (const row of serviceRows) {
|
|
968
|
+
const id: ObjectID | string | undefined = row._id;
|
|
969
|
+
if (id) {
|
|
970
|
+
result.add(id.toString());
|
|
971
|
+
}
|
|
972
|
+
}
|
|
794
973
|
|
|
795
|
-
|
|
974
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
975
|
+
const monitorRows: Array<any> = await MonitorService.findBy({
|
|
976
|
+
query: {
|
|
977
|
+
labels: labelIds,
|
|
978
|
+
...tenantFilter,
|
|
979
|
+
},
|
|
980
|
+
select: { _id: true },
|
|
981
|
+
props: { isRoot: true },
|
|
982
|
+
skip: 0,
|
|
983
|
+
limit: LIMIT_MAX,
|
|
984
|
+
});
|
|
985
|
+
for (const row of monitorRows) {
|
|
986
|
+
const id: ObjectID | string | undefined = row._id;
|
|
987
|
+
if (id) {
|
|
988
|
+
result.add(id.toString());
|
|
989
|
+
}
|
|
990
|
+
}
|
|
991
|
+
|
|
992
|
+
cache.labeledIds.set(cacheKey, result);
|
|
993
|
+
return result;
|
|
796
994
|
}
|
|
797
995
|
|
|
798
996
|
private static isPublicPermissionAllowed(
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import {
|
|
2
|
+
IsBillingEnabled,
|
|
3
|
+
IsEnterpriseEdition,
|
|
4
|
+
} from "../../../../Server/EnvironmentConfig";
|
|
5
|
+
import BaseModel, {
|
|
6
|
+
DatabaseBaseModelType,
|
|
7
|
+
} from "../../../../Models/DatabaseModels/DatabaseBaseModel/DatabaseBaseModel";
|
|
8
|
+
import DatabaseCommonInteractionProps from "../../../../Types/BaseDatabase/DatabaseCommonInteractionProps";
|
|
9
|
+
import PaymentRequiredException from "../../../../Types/Exception/PaymentRequiredException";
|
|
10
|
+
import CaptureSpan from "../../../Utils/Telemetry/CaptureSpan";
|
|
11
|
+
|
|
12
|
+
export default class EditionPermissions {
|
|
13
|
+
/*
|
|
14
|
+
* Gates models marked with @TableEditionAccessControl({ requiresEnterprise: true }).
|
|
15
|
+
*
|
|
16
|
+
* On self-hosted builds (billing disabled) the model is only accessible when
|
|
17
|
+
* the binary was built as the Enterprise Edition (IS_ENTERPRISE_EDITION=true).
|
|
18
|
+
*
|
|
19
|
+
* On the cloud / billing-enabled deployment we leave enforcement to
|
|
20
|
+
* BillingPermission — it already gates these models via the model's
|
|
21
|
+
* @TableBillingAccessControl plan tier, so a second check would be redundant.
|
|
22
|
+
*/
|
|
23
|
+
@CaptureSpan()
|
|
24
|
+
public static checkEditionPermissions(
|
|
25
|
+
modelType: DatabaseBaseModelType,
|
|
26
|
+
_props: DatabaseCommonInteractionProps,
|
|
27
|
+
): void {
|
|
28
|
+
if (IsBillingEnabled) {
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
const model: BaseModel = new modelType();
|
|
33
|
+
|
|
34
|
+
if (!model.requiresEnterprise) {
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
if (!IsEnterpriseEdition) {
|
|
39
|
+
throw new PaymentRequiredException(
|
|
40
|
+
`${model.singularName || "This feature"} is only available on the OneUptime Enterprise Edition. ` +
|
|
41
|
+
`Please switch to the Enterprise Edition build to enable this feature. ` +
|
|
42
|
+
`See https://oneuptime.com/enterprise/overview for details.`,
|
|
43
|
+
);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import DatabaseRequestType from "../../BaseDatabase/DatabaseRequestType";
|
|
2
2
|
import BillingPermissions from "./BillingPermission";
|
|
3
|
+
import EditionPermissions from "./EditionPermission";
|
|
3
4
|
import PublicPermission from "./PublicPermission";
|
|
4
5
|
import BaseModel, {
|
|
5
6
|
DatabaseBaseModelType,
|
|
@@ -55,7 +56,13 @@ export default class TablePermission {
|
|
|
55
56
|
// 2nd CHECK: Is user project in active state?
|
|
56
57
|
BillingPermissions.checkBillingPermissions(modelType, props, type);
|
|
57
58
|
|
|
58
|
-
|
|
59
|
+
/*
|
|
60
|
+
* 3rd CHECK: Is this an enterprise-only feature being accessed on the
|
|
61
|
+
* community self-hosted build?
|
|
62
|
+
*/
|
|
63
|
+
EditionPermissions.checkEditionPermissions(modelType, props);
|
|
64
|
+
|
|
65
|
+
// 4th CHECK: Does user have access to CRUD data on this model.
|
|
59
66
|
const userPermissions: Array<UserPermission> =
|
|
60
67
|
DatabaseCommonInteractionPropsUtil.getUserPermissions(
|
|
61
68
|
props,
|
|
@@ -5,6 +5,7 @@ import Host from "../../../Models/DatabaseModels/Host";
|
|
|
5
5
|
import Label from "../../../Models/DatabaseModels/Label";
|
|
6
6
|
import Monitor from "../../../Models/DatabaseModels/Monitor";
|
|
7
7
|
import OnCallDutyPolicy from "../../../Models/DatabaseModels/OnCallDutyPolicy";
|
|
8
|
+
import Service from "../../../Models/DatabaseModels/Service";
|
|
8
9
|
import SortOrder from "../../../Types/BaseDatabase/SortOrder";
|
|
9
10
|
import { LIMIT_PER_PROJECT } from "../../../Types/Database/LimitMax";
|
|
10
11
|
import Dictionary from "../../../Types/Dictionary";
|
|
@@ -19,6 +20,7 @@ import AlertService from "../../Services/AlertService";
|
|
|
19
20
|
import AlertSeverityService from "../../Services/AlertSeverityService";
|
|
20
21
|
import AlertStateTimelineService from "../../Services/AlertStateTimelineService";
|
|
21
22
|
import HostService from "../../Services/HostService";
|
|
23
|
+
import ServiceService from "../../Services/ServiceService";
|
|
22
24
|
import logger, { LogAttributes } from "../Logger";
|
|
23
25
|
import CaptureSpan from "../Telemetry/CaptureSpan";
|
|
24
26
|
import DataToProcess from "./DataToProcess";
|
|
@@ -305,6 +307,39 @@ export default class MonitorAlert {
|
|
|
305
307
|
alert.hosts = [host];
|
|
306
308
|
}
|
|
307
309
|
}
|
|
310
|
+
|
|
311
|
+
/*
|
|
312
|
+
* Same idea for Service — OTel ingest stamps `service.name` and
|
|
313
|
+
* auto-creates a Service row keyed by that name (see
|
|
314
|
+
* OpenTelemetryIngestService.telemetryServiceFromName). When the
|
|
315
|
+
* breaching series carries that attribute, link the alert to the
|
|
316
|
+
* emitting service so the on-call/labels pipeline can fan out.
|
|
317
|
+
*/
|
|
318
|
+
const serviceName: string | undefined =
|
|
319
|
+
typeof seriesLabels["resource.service.name"] === "string"
|
|
320
|
+
? (seriesLabels["resource.service.name"] as string)
|
|
321
|
+
: typeof seriesLabels["service.name"] === "string"
|
|
322
|
+
? (seriesLabels["service.name"] as string)
|
|
323
|
+
: undefined;
|
|
324
|
+
|
|
325
|
+
if (serviceName) {
|
|
326
|
+
const service: Service | null = await ServiceService.findOneBy({
|
|
327
|
+
query: {
|
|
328
|
+
projectId: input.monitor.projectId!,
|
|
329
|
+
name: serviceName,
|
|
330
|
+
},
|
|
331
|
+
select: {
|
|
332
|
+
_id: true,
|
|
333
|
+
},
|
|
334
|
+
props: {
|
|
335
|
+
isRoot: true,
|
|
336
|
+
},
|
|
337
|
+
});
|
|
338
|
+
|
|
339
|
+
if (service) {
|
|
340
|
+
alert.services = [service];
|
|
341
|
+
}
|
|
342
|
+
}
|
|
308
343
|
}
|
|
309
344
|
|
|
310
345
|
alert.onCallDutyPolicies =
|