@oneuptime/common 10.4.17 → 10.5.1
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
package/Server/Infrastructure/Postgres/SchemaMigrations/1779827700000-RenameStatusPageZhToZhCN.ts
ADDED
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { MigrationInterface, QueryRunner } from "typeorm";
|
|
2
|
+
|
|
3
|
+
/*
|
|
4
|
+
* Data-only migration: the language code "zh" was renamed to "zh-CN" when
|
|
5
|
+
* Traditional Chinese ("zh-TW") was added as a separate supported language.
|
|
6
|
+
* Rewrite any persisted "zh" values on the StatusPage table so existing
|
|
7
|
+
* tenants keep their Simplified Chinese setting.
|
|
8
|
+
*
|
|
9
|
+
* Written manually because typeorm's migration:generate only emits schema
|
|
10
|
+
* diffs — it cannot detect that stored data needs rewriting.
|
|
11
|
+
*/
|
|
12
|
+
export class RenameStatusPageZhToZhCN1779827700000
|
|
13
|
+
implements MigrationInterface
|
|
14
|
+
{
|
|
15
|
+
public name: string = "RenameStatusPageZhToZhCN1779827700000";
|
|
16
|
+
|
|
17
|
+
public async up(queryRunner: QueryRunner): Promise<void> {
|
|
18
|
+
// defaultLanguage is a varchar — straight UPDATE.
|
|
19
|
+
await queryRunner.query(
|
|
20
|
+
`UPDATE "StatusPage" SET "defaultLanguage" = 'zh-CN' WHERE "defaultLanguage" = 'zh'`,
|
|
21
|
+
);
|
|
22
|
+
|
|
23
|
+
/*
|
|
24
|
+
* enabledLanguages is a jsonb array of strings. Replace every "zh"
|
|
25
|
+
* element with "zh-CN" while leaving the rest of the array intact.
|
|
26
|
+
* The WHERE clause uses jsonb containment so we only touch rows that
|
|
27
|
+
* actually need rewriting.
|
|
28
|
+
*/
|
|
29
|
+
await queryRunner.query(
|
|
30
|
+
`UPDATE "StatusPage"
|
|
31
|
+
SET "enabledLanguages" = (
|
|
32
|
+
SELECT jsonb_agg(
|
|
33
|
+
CASE WHEN elem = '"zh"'::jsonb THEN '"zh-CN"'::jsonb ELSE elem END
|
|
34
|
+
)
|
|
35
|
+
FROM jsonb_array_elements("enabledLanguages") AS elem
|
|
36
|
+
)
|
|
37
|
+
WHERE "enabledLanguages" @> '["zh"]'::jsonb`,
|
|
38
|
+
);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
public async down(queryRunner: QueryRunner): Promise<void> {
|
|
42
|
+
/*
|
|
43
|
+
* Best-effort reversal. "zh-CN" did not exist before this migration, so
|
|
44
|
+
* any row containing it was originally "zh"; rows added after the
|
|
45
|
+
* migration that legitimately use "zh-CN" will be reverted too, which is
|
|
46
|
+
* the inherent limitation of rolling back data migrations.
|
|
47
|
+
*/
|
|
48
|
+
await queryRunner.query(
|
|
49
|
+
`UPDATE "StatusPage" SET "defaultLanguage" = 'zh' WHERE "defaultLanguage" = 'zh-CN'`,
|
|
50
|
+
);
|
|
51
|
+
await queryRunner.query(
|
|
52
|
+
`UPDATE "StatusPage"
|
|
53
|
+
SET "enabledLanguages" = (
|
|
54
|
+
SELECT jsonb_agg(
|
|
55
|
+
CASE WHEN elem = '"zh-CN"'::jsonb THEN '"zh"'::jsonb ELSE elem END
|
|
56
|
+
)
|
|
57
|
+
FROM jsonb_array_elements("enabledLanguages") AS elem
|
|
58
|
+
)
|
|
59
|
+
WHERE "enabledLanguages" @> '["zh-CN"]'::jsonb`,
|
|
60
|
+
);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
@@ -347,6 +347,13 @@ import { AddPerformanceIndexes1779392970424 } from "./1779392970424-AddPerforman
|
|
|
347
347
|
import { AddFacetsToTableView1779536271671 } from "./1779536271671-AddFacetsToTableView";
|
|
348
348
|
import { AddIsMemberNotifiedIndex1779540427366 } from "./1779540427366-AddIsMemberNotifiedIndex";
|
|
349
349
|
import { AddDropdownOptionsToCustomFields1779619108628 } from "./1779619108628-AddDropdownOptionsToCustomFields";
|
|
350
|
+
import { AddLabelInheritanceAndScheduledMaintenanceResources1779653508434 } from "./1779653508434-AddLabelInheritanceAndScheduledMaintenanceResources";
|
|
351
|
+
import { AddAffectedResourcesToTemplates1779708719656 } from "./1779708719656-AddAffectedResourcesToTemplates";
|
|
352
|
+
import { MigrationName1779739410559 } from "./1779739410559-MigrationName";
|
|
353
|
+
import { AttachServiceToScheduledMaintenanceTemplatesAndLabelRules1779742211961 } from "./1779742211961-AttachServiceToScheduledMaintenanceTemplatesAndLabelRules";
|
|
354
|
+
import { MigrationName1779790539196 } from "./1779790539196-MigrationName";
|
|
355
|
+
import { ExpandOwnerRuleInheritFlags1779823516881 } from "./1779823516881-ExpandOwnerRuleInheritFlags";
|
|
356
|
+
import { RenameStatusPageZhToZhCN1779827700000 } from "./1779827700000-RenameStatusPageZhToZhCN";
|
|
350
357
|
export default [
|
|
351
358
|
InitialMigration,
|
|
352
359
|
MigrationName1717678334852,
|
|
@@ -697,4 +704,11 @@ export default [
|
|
|
697
704
|
AddFacetsToTableView1779536271671,
|
|
698
705
|
AddIsMemberNotifiedIndex1779540427366,
|
|
699
706
|
AddDropdownOptionsToCustomFields1779619108628,
|
|
707
|
+
AddLabelInheritanceAndScheduledMaintenanceResources1779653508434,
|
|
708
|
+
AddAffectedResourcesToTemplates1779708719656,
|
|
709
|
+
MigrationName1779739410559,
|
|
710
|
+
AttachServiceToScheduledMaintenanceTemplatesAndLabelRules1779742211961,
|
|
711
|
+
MigrationName1779790539196,
|
|
712
|
+
ExpandOwnerRuleInheritFlags1779823516881,
|
|
713
|
+
RenameStatusPageZhToZhCN1779827700000,
|
|
700
714
|
];
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { DisableTelemetryIngestion } from "../EnvironmentConfig";
|
|
2
|
+
import {
|
|
3
|
+
ExpressRequest,
|
|
4
|
+
ExpressResponse,
|
|
5
|
+
NextFunction,
|
|
6
|
+
} from "../Utils/Express";
|
|
7
|
+
import Response from "../Utils/Response";
|
|
8
|
+
|
|
9
|
+
/*
|
|
10
|
+
* Short-circuit middleware for telemetry ingestion routes.
|
|
11
|
+
*
|
|
12
|
+
* When DISABLE_TELEMETRY_INGESTION=true, return a 200 success immediately
|
|
13
|
+
* so OTel / Fluent / Syslog / Pyroscope clients accept the response and do
|
|
14
|
+
* not retry. No body parsing, queueing, or persistence happens — the data
|
|
15
|
+
* is dropped on the floor.
|
|
16
|
+
*/
|
|
17
|
+
export default class TelemetryIngestionDisabled {
|
|
18
|
+
public static middleware(
|
|
19
|
+
req: ExpressRequest,
|
|
20
|
+
res: ExpressResponse,
|
|
21
|
+
next: NextFunction,
|
|
22
|
+
): void {
|
|
23
|
+
if (DisableTelemetryIngestion) {
|
|
24
|
+
return Response.sendEmptySuccessResponse(req, res);
|
|
25
|
+
}
|
|
26
|
+
return next();
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
public static isDisabled(): boolean {
|
|
30
|
+
return DisableTelemetryIngestion;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
@@ -10,7 +10,6 @@ import AlertEpisodeOwnerTeam from "../../Models/DatabaseModels/AlertEpisodeOwner
|
|
|
10
10
|
import Label from "../../Models/DatabaseModels/Label";
|
|
11
11
|
import Monitor from "../../Models/DatabaseModels/Monitor";
|
|
12
12
|
import AlertSeverity from "../../Models/DatabaseModels/AlertSeverity";
|
|
13
|
-
import ServiceMonitor from "../../Models/DatabaseModels/ServiceMonitor";
|
|
14
13
|
import CaptureSpan from "../Utils/Telemetry/CaptureSpan";
|
|
15
14
|
import logger, { LogAttributes } from "../Utils/Logger";
|
|
16
15
|
import SortOrder from "../../Types/BaseDatabase/SortOrder";
|
|
@@ -22,7 +21,6 @@ import AlertEpisodeMemberService from "./AlertEpisodeMemberService";
|
|
|
22
21
|
import AlertEpisodeOwnerUserService from "./AlertEpisodeOwnerUserService";
|
|
23
22
|
import AlertEpisodeOwnerTeamService from "./AlertEpisodeOwnerTeamService";
|
|
24
23
|
import MonitorService from "./MonitorService";
|
|
25
|
-
import ServiceMonitorService from "./ServiceMonitorService";
|
|
26
24
|
import Semaphore, { SemaphoreMutex } from "../Infrastructure/Semaphore";
|
|
27
25
|
import AlertEpisodeFeedService from "./AlertEpisodeFeedService";
|
|
28
26
|
import { AlertEpisodeFeedEventType } from "../../Models/DatabaseModels/AlertEpisodeFeed";
|
|
@@ -93,7 +91,6 @@ class AlertGroupingEngineServiceClass {
|
|
|
93
91
|
groupByMonitor: true,
|
|
94
92
|
groupBySeverity: true,
|
|
95
93
|
groupByAlertTitle: true,
|
|
96
|
-
groupByService: true,
|
|
97
94
|
// Time settings
|
|
98
95
|
enableTimeWindow: true,
|
|
99
96
|
timeWindowMinutes: true,
|
|
@@ -539,29 +536,6 @@ class AlertGroupingEngineServiceClass {
|
|
|
539
536
|
): Promise<string> {
|
|
540
537
|
const parts: Array<string> = [];
|
|
541
538
|
|
|
542
|
-
/*
|
|
543
|
-
* Group by service - only if explicitly enabled
|
|
544
|
-
* Must be checked before monitor since service contains multiple monitors
|
|
545
|
-
*/
|
|
546
|
-
if (rule.groupByService && alert.monitorId) {
|
|
547
|
-
const serviceMonitor: ServiceMonitor | null =
|
|
548
|
-
await ServiceMonitorService.findOneBy({
|
|
549
|
-
query: {
|
|
550
|
-
monitorId: alert.monitorId,
|
|
551
|
-
},
|
|
552
|
-
select: {
|
|
553
|
-
serviceId: true,
|
|
554
|
-
},
|
|
555
|
-
props: {
|
|
556
|
-
isRoot: true,
|
|
557
|
-
},
|
|
558
|
-
});
|
|
559
|
-
|
|
560
|
-
if (serviceMonitor?.serviceId) {
|
|
561
|
-
parts.push(`service:${serviceMonitor.serviceId.toString()}`);
|
|
562
|
-
}
|
|
563
|
-
}
|
|
564
|
-
|
|
565
539
|
// Group by monitor - only if explicitly enabled
|
|
566
540
|
if (rule.groupByMonitor && alert.monitorId) {
|
|
567
541
|
parts.push(`monitor:${alert.monitorId.toString()}`);
|
|
@@ -819,9 +793,6 @@ class AlertGroupingEngineServiceClass {
|
|
|
819
793
|
if (rule.groupByAlertTitle) {
|
|
820
794
|
groupByParts.push("Alert Title");
|
|
821
795
|
}
|
|
822
|
-
if (rule.groupByService) {
|
|
823
|
-
groupByParts.push("Service");
|
|
824
|
-
}
|
|
825
796
|
|
|
826
797
|
const groupByDescription: string =
|
|
827
798
|
groupByParts.length > 0
|
|
@@ -1,13 +1,21 @@
|
|
|
1
1
|
import Alert from "../../Models/DatabaseModels/Alert";
|
|
2
2
|
import AlertLabelRule from "../../Models/DatabaseModels/AlertLabelRule";
|
|
3
3
|
import AlertSeverity from "../../Models/DatabaseModels/AlertSeverity";
|
|
4
|
+
import DockerHost from "../../Models/DatabaseModels/DockerHost";
|
|
5
|
+
import Host from "../../Models/DatabaseModels/Host";
|
|
6
|
+
import KubernetesCluster from "../../Models/DatabaseModels/KubernetesCluster";
|
|
4
7
|
import Label from "../../Models/DatabaseModels/Label";
|
|
5
8
|
import Monitor from "../../Models/DatabaseModels/Monitor";
|
|
9
|
+
import Service from "../../Models/DatabaseModels/Service";
|
|
6
10
|
import AlertFeedService from "./AlertFeedService";
|
|
7
11
|
import AlertLabelRuleService from "./AlertLabelRuleService";
|
|
8
12
|
import AlertService from "./AlertService";
|
|
13
|
+
import DockerHostService from "./DockerHostService";
|
|
14
|
+
import HostService from "./HostService";
|
|
15
|
+
import KubernetesClusterService from "./KubernetesClusterService";
|
|
9
16
|
import LabelService from "./LabelService";
|
|
10
17
|
import MonitorService from "./MonitorService";
|
|
18
|
+
import ServiceService from "./ServiceService";
|
|
11
19
|
import { AlertFeedEventType } from "../../Models/DatabaseModels/AlertFeed";
|
|
12
20
|
import { Indigo500 } from "../../Types/BrandColors";
|
|
13
21
|
import ObjectID from "../../Types/ObjectID";
|
|
@@ -22,6 +30,10 @@ class AlertLabelRuleEngineServiceClass {
|
|
|
22
30
|
* labels to the alert. Each matched rule contributes:
|
|
23
31
|
* - labels listed on `labelsToAdd`
|
|
24
32
|
* - all labels of the alert's monitor when `inheritLabelsFromMonitors`
|
|
33
|
+
* - all labels of the alert's hosts when `inheritLabelsFromHosts`
|
|
34
|
+
* - all labels of the alert's Kubernetes clusters when `inheritLabelsFromKubernetesClusters`
|
|
35
|
+
* - all labels of the alert's Docker hosts when `inheritLabelsFromDockerHosts`
|
|
36
|
+
* - all labels of the alert's services when `inheritLabelsFromServices`
|
|
25
37
|
* The union is deduped against labels already on the alert before insert
|
|
26
38
|
* to avoid PK conflicts on the AlertLabel join table.
|
|
27
39
|
*/
|
|
@@ -51,6 +63,10 @@ class AlertLabelRuleEngineServiceClass {
|
|
|
51
63
|
monitorDescriptionPattern: true,
|
|
52
64
|
labelsToAdd: { _id: true },
|
|
53
65
|
inheritLabelsFromMonitors: true,
|
|
66
|
+
inheritLabelsFromHosts: true,
|
|
67
|
+
inheritLabelsFromKubernetesClusters: true,
|
|
68
|
+
inheritLabelsFromDockerHosts: true,
|
|
69
|
+
inheritLabelsFromServices: true,
|
|
54
70
|
},
|
|
55
71
|
limit: 100,
|
|
56
72
|
skip: 0,
|
|
@@ -62,6 +78,10 @@ class AlertLabelRuleEngineServiceClass {
|
|
|
62
78
|
|
|
63
79
|
const labelIdsToAdd: Set<string> = new Set();
|
|
64
80
|
let inheritFromMonitors: boolean = false;
|
|
81
|
+
let inheritFromHosts: boolean = false;
|
|
82
|
+
let inheritFromKubernetesClusters: boolean = false;
|
|
83
|
+
let inheritFromDockerHosts: boolean = false;
|
|
84
|
+
let inheritFromServices: boolean = false;
|
|
65
85
|
const matchedRules: Array<AlertLabelRule> = [];
|
|
66
86
|
|
|
67
87
|
for (const rule of rules) {
|
|
@@ -78,6 +98,38 @@ class AlertLabelRuleEngineServiceClass {
|
|
|
78
98
|
if (rule.inheritLabelsFromMonitors) {
|
|
79
99
|
inheritFromMonitors = true;
|
|
80
100
|
}
|
|
101
|
+
if (rule.inheritLabelsFromHosts) {
|
|
102
|
+
inheritFromHosts = true;
|
|
103
|
+
}
|
|
104
|
+
if (rule.inheritLabelsFromKubernetesClusters) {
|
|
105
|
+
inheritFromKubernetesClusters = true;
|
|
106
|
+
}
|
|
107
|
+
if (rule.inheritLabelsFromDockerHosts) {
|
|
108
|
+
inheritFromDockerHosts = true;
|
|
109
|
+
}
|
|
110
|
+
if (rule.inheritLabelsFromServices) {
|
|
111
|
+
inheritFromServices = true;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
const needsRelatedResources: boolean =
|
|
116
|
+
inheritFromHosts ||
|
|
117
|
+
inheritFromKubernetesClusters ||
|
|
118
|
+
inheritFromDockerHosts ||
|
|
119
|
+
inheritFromServices;
|
|
120
|
+
|
|
121
|
+
let alertWithResources: Alert | null = null;
|
|
122
|
+
if (needsRelatedResources) {
|
|
123
|
+
alertWithResources = await AlertService.findOneById({
|
|
124
|
+
id: alert.id,
|
|
125
|
+
select: {
|
|
126
|
+
hosts: { _id: true },
|
|
127
|
+
kubernetesClusters: { _id: true },
|
|
128
|
+
dockerHosts: { _id: true },
|
|
129
|
+
services: { _id: true },
|
|
130
|
+
},
|
|
131
|
+
props: { isRoot: true },
|
|
132
|
+
});
|
|
81
133
|
}
|
|
82
134
|
|
|
83
135
|
if (inheritFromMonitors && alert.monitorId) {
|
|
@@ -93,6 +145,83 @@ class AlertLabelRuleEngineServiceClass {
|
|
|
93
145
|
}
|
|
94
146
|
}
|
|
95
147
|
|
|
148
|
+
if (inheritFromHosts && alertWithResources?.hosts?.length) {
|
|
149
|
+
for (const alertHost of alertWithResources.hosts) {
|
|
150
|
+
if (!alertHost.id) {
|
|
151
|
+
continue;
|
|
152
|
+
}
|
|
153
|
+
const host: Host | null = await HostService.findOneById({
|
|
154
|
+
id: alertHost.id,
|
|
155
|
+
select: { labels: { _id: true } },
|
|
156
|
+
props: { isRoot: true },
|
|
157
|
+
});
|
|
158
|
+
for (const label of host?.labels || []) {
|
|
159
|
+
if (label.id) {
|
|
160
|
+
labelIdsToAdd.add(label.id.toString());
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
if (
|
|
167
|
+
inheritFromKubernetesClusters &&
|
|
168
|
+
alertWithResources?.kubernetesClusters?.length
|
|
169
|
+
) {
|
|
170
|
+
for (const alertCluster of alertWithResources.kubernetesClusters) {
|
|
171
|
+
if (!alertCluster.id) {
|
|
172
|
+
continue;
|
|
173
|
+
}
|
|
174
|
+
const cluster: KubernetesCluster | null =
|
|
175
|
+
await KubernetesClusterService.findOneById({
|
|
176
|
+
id: alertCluster.id,
|
|
177
|
+
select: { labels: { _id: true } },
|
|
178
|
+
props: { isRoot: true },
|
|
179
|
+
});
|
|
180
|
+
for (const label of cluster?.labels || []) {
|
|
181
|
+
if (label.id) {
|
|
182
|
+
labelIdsToAdd.add(label.id.toString());
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
if (inheritFromDockerHosts && alertWithResources?.dockerHosts?.length) {
|
|
189
|
+
for (const alertDockerHost of alertWithResources.dockerHosts) {
|
|
190
|
+
if (!alertDockerHost.id) {
|
|
191
|
+
continue;
|
|
192
|
+
}
|
|
193
|
+
const dockerHost: DockerHost | null =
|
|
194
|
+
await DockerHostService.findOneById({
|
|
195
|
+
id: alertDockerHost.id,
|
|
196
|
+
select: { labels: { _id: true } },
|
|
197
|
+
props: { isRoot: true },
|
|
198
|
+
});
|
|
199
|
+
for (const label of dockerHost?.labels || []) {
|
|
200
|
+
if (label.id) {
|
|
201
|
+
labelIdsToAdd.add(label.id.toString());
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
if (inheritFromServices && alertWithResources?.services?.length) {
|
|
208
|
+
for (const alertService of alertWithResources.services) {
|
|
209
|
+
if (!alertService.id) {
|
|
210
|
+
continue;
|
|
211
|
+
}
|
|
212
|
+
const service: Service | null = await ServiceService.findOneById({
|
|
213
|
+
id: alertService.id,
|
|
214
|
+
select: { labels: { _id: true } },
|
|
215
|
+
props: { isRoot: true },
|
|
216
|
+
});
|
|
217
|
+
for (const label of service?.labels || []) {
|
|
218
|
+
if (label.id) {
|
|
219
|
+
labelIdsToAdd.add(label.id.toString());
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
|
|
96
225
|
if (labelIdsToAdd.size === 0) {
|
|
97
226
|
return;
|
|
98
227
|
}
|
|
@@ -1,23 +1,38 @@
|
|
|
1
1
|
import Alert from "../../Models/DatabaseModels/Alert";
|
|
2
2
|
import AlertOwnerRule from "../../Models/DatabaseModels/AlertOwnerRule";
|
|
3
3
|
import AlertSeverity from "../../Models/DatabaseModels/AlertSeverity";
|
|
4
|
+
import DockerHost from "../../Models/DatabaseModels/DockerHost";
|
|
5
|
+
import DockerHostOwnerTeam from "../../Models/DatabaseModels/DockerHostOwnerTeam";
|
|
6
|
+
import DockerHostOwnerUser from "../../Models/DatabaseModels/DockerHostOwnerUser";
|
|
4
7
|
import Host from "../../Models/DatabaseModels/Host";
|
|
5
8
|
import HostOwnerTeam from "../../Models/DatabaseModels/HostOwnerTeam";
|
|
6
9
|
import HostOwnerUser from "../../Models/DatabaseModels/HostOwnerUser";
|
|
10
|
+
import KubernetesCluster from "../../Models/DatabaseModels/KubernetesCluster";
|
|
11
|
+
import KubernetesClusterOwnerTeam from "../../Models/DatabaseModels/KubernetesClusterOwnerTeam";
|
|
12
|
+
import KubernetesClusterOwnerUser from "../../Models/DatabaseModels/KubernetesClusterOwnerUser";
|
|
7
13
|
import Label from "../../Models/DatabaseModels/Label";
|
|
8
14
|
import Monitor from "../../Models/DatabaseModels/Monitor";
|
|
9
15
|
import MonitorOwnerTeam from "../../Models/DatabaseModels/MonitorOwnerTeam";
|
|
10
16
|
import MonitorOwnerUser from "../../Models/DatabaseModels/MonitorOwnerUser";
|
|
17
|
+
import Service from "../../Models/DatabaseModels/Service";
|
|
18
|
+
import ServiceOwnerTeam from "../../Models/DatabaseModels/ServiceOwnerTeam";
|
|
19
|
+
import ServiceOwnerUser from "../../Models/DatabaseModels/ServiceOwnerUser";
|
|
11
20
|
import Team from "../../Models/DatabaseModels/Team";
|
|
12
21
|
import User from "../../Models/DatabaseModels/User";
|
|
13
22
|
import AlertFeedService from "./AlertFeedService";
|
|
14
23
|
import AlertOwnerRuleService from "./AlertOwnerRuleService";
|
|
15
24
|
import AlertService from "./AlertService";
|
|
25
|
+
import DockerHostOwnerTeamService from "./DockerHostOwnerTeamService";
|
|
26
|
+
import DockerHostOwnerUserService from "./DockerHostOwnerUserService";
|
|
16
27
|
import HostOwnerTeamService from "./HostOwnerTeamService";
|
|
17
28
|
import HostOwnerUserService from "./HostOwnerUserService";
|
|
29
|
+
import KubernetesClusterOwnerTeamService from "./KubernetesClusterOwnerTeamService";
|
|
30
|
+
import KubernetesClusterOwnerUserService from "./KubernetesClusterOwnerUserService";
|
|
18
31
|
import MonitorOwnerTeamService from "./MonitorOwnerTeamService";
|
|
19
32
|
import MonitorOwnerUserService from "./MonitorOwnerUserService";
|
|
20
33
|
import MonitorService from "./MonitorService";
|
|
34
|
+
import ServiceOwnerTeamService from "./ServiceOwnerTeamService";
|
|
35
|
+
import ServiceOwnerUserService from "./ServiceOwnerUserService";
|
|
21
36
|
import TeamService from "./TeamService";
|
|
22
37
|
import UserService from "./UserService";
|
|
23
38
|
import { AlertFeedEventType } from "../../Models/DatabaseModels/AlertFeed";
|
|
@@ -62,6 +77,9 @@ class AlertOwnerRuleEngineServiceClass {
|
|
|
62
77
|
ownerTeams: { _id: true },
|
|
63
78
|
inheritOwnersFromMonitors: true,
|
|
64
79
|
inheritOwnersFromHosts: true,
|
|
80
|
+
inheritOwnersFromKubernetesClusters: true,
|
|
81
|
+
inheritOwnersFromDockerHosts: true,
|
|
82
|
+
inheritOwnersFromServices: true,
|
|
65
83
|
},
|
|
66
84
|
limit: 100,
|
|
67
85
|
skip: 0,
|
|
@@ -85,6 +103,9 @@ class AlertOwnerRuleEngineServiceClass {
|
|
|
85
103
|
const allTeamIds: Set<string> = new Set();
|
|
86
104
|
let inheritFromMonitors: boolean = false;
|
|
87
105
|
let inheritFromHosts: boolean = false;
|
|
106
|
+
let inheritFromKubernetesClusters: boolean = false;
|
|
107
|
+
let inheritFromDockerHosts: boolean = false;
|
|
108
|
+
let inheritFromServices: boolean = false;
|
|
88
109
|
const inheritNotifyMode: { value: boolean | null } = { value: null };
|
|
89
110
|
|
|
90
111
|
for (const rule of rules) {
|
|
@@ -120,6 +141,24 @@ class AlertOwnerRuleEngineServiceClass {
|
|
|
120
141
|
inheritNotifyMode.value =
|
|
121
142
|
inheritNotifyMode.value === true ? true : notify;
|
|
122
143
|
}
|
|
144
|
+
if (rule.inheritOwnersFromKubernetesClusters) {
|
|
145
|
+
inheritFromKubernetesClusters = true;
|
|
146
|
+
ruleAddedAny = true;
|
|
147
|
+
inheritNotifyMode.value =
|
|
148
|
+
inheritNotifyMode.value === true ? true : notify;
|
|
149
|
+
}
|
|
150
|
+
if (rule.inheritOwnersFromDockerHosts) {
|
|
151
|
+
inheritFromDockerHosts = true;
|
|
152
|
+
ruleAddedAny = true;
|
|
153
|
+
inheritNotifyMode.value =
|
|
154
|
+
inheritNotifyMode.value === true ? true : notify;
|
|
155
|
+
}
|
|
156
|
+
if (rule.inheritOwnersFromServices) {
|
|
157
|
+
inheritFromServices = true;
|
|
158
|
+
ruleAddedAny = true;
|
|
159
|
+
inheritNotifyMode.value =
|
|
160
|
+
inheritNotifyMode.value === true ? true : notify;
|
|
161
|
+
}
|
|
123
162
|
if (ruleAddedAny) {
|
|
124
163
|
matchedRules.push(rule);
|
|
125
164
|
}
|
|
@@ -129,6 +168,12 @@ class AlertOwnerRuleEngineServiceClass {
|
|
|
129
168
|
const inheritedFromMonitorTeamIds: Set<string> = new Set();
|
|
130
169
|
const inheritedFromHostUserIds: Set<string> = new Set();
|
|
131
170
|
const inheritedFromHostTeamIds: Set<string> = new Set();
|
|
171
|
+
const inheritedFromKubernetesClusterUserIds: Set<string> = new Set();
|
|
172
|
+
const inheritedFromKubernetesClusterTeamIds: Set<string> = new Set();
|
|
173
|
+
const inheritedFromDockerHostUserIds: Set<string> = new Set();
|
|
174
|
+
const inheritedFromDockerHostTeamIds: Set<string> = new Set();
|
|
175
|
+
const inheritedFromServiceUserIds: Set<string> = new Set();
|
|
176
|
+
const inheritedFromServiceTeamIds: Set<string> = new Set();
|
|
132
177
|
|
|
133
178
|
if (inheritFromMonitors && alert.monitorId) {
|
|
134
179
|
const [monitorOwnerUsers, monitorOwnerTeams]: [
|
|
@@ -203,13 +248,146 @@ class AlertOwnerRuleEngineServiceClass {
|
|
|
203
248
|
}
|
|
204
249
|
}
|
|
205
250
|
|
|
251
|
+
if (inheritFromKubernetesClusters && alert.kubernetesClusters?.length) {
|
|
252
|
+
const clusterIds: Array<ObjectID> = alert.kubernetesClusters
|
|
253
|
+
.map((c: KubernetesCluster) => {
|
|
254
|
+
return c.id;
|
|
255
|
+
})
|
|
256
|
+
.filter((id: ObjectID | null | undefined): id is ObjectID => {
|
|
257
|
+
return Boolean(id);
|
|
258
|
+
});
|
|
259
|
+
if (clusterIds.length > 0) {
|
|
260
|
+
const [clusterOwnerUsers, clusterOwnerTeams]: [
|
|
261
|
+
Array<KubernetesClusterOwnerUser>,
|
|
262
|
+
Array<KubernetesClusterOwnerTeam>,
|
|
263
|
+
] = await Promise.all([
|
|
264
|
+
KubernetesClusterOwnerUserService.findBy({
|
|
265
|
+
query: { kubernetesClusterId: QueryHelper.any(clusterIds) },
|
|
266
|
+
select: { userId: true },
|
|
267
|
+
props: { isRoot: true },
|
|
268
|
+
limit: LIMIT_MAX,
|
|
269
|
+
skip: 0,
|
|
270
|
+
}),
|
|
271
|
+
KubernetesClusterOwnerTeamService.findBy({
|
|
272
|
+
query: { kubernetesClusterId: QueryHelper.any(clusterIds) },
|
|
273
|
+
select: { teamId: true },
|
|
274
|
+
props: { isRoot: true },
|
|
275
|
+
limit: LIMIT_MAX,
|
|
276
|
+
skip: 0,
|
|
277
|
+
}),
|
|
278
|
+
]);
|
|
279
|
+
for (const ownerUser of clusterOwnerUsers) {
|
|
280
|
+
if (ownerUser.userId) {
|
|
281
|
+
inheritedFromKubernetesClusterUserIds.add(
|
|
282
|
+
ownerUser.userId.toString(),
|
|
283
|
+
);
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
for (const ownerTeam of clusterOwnerTeams) {
|
|
287
|
+
if (ownerTeam.teamId) {
|
|
288
|
+
inheritedFromKubernetesClusterTeamIds.add(
|
|
289
|
+
ownerTeam.teamId.toString(),
|
|
290
|
+
);
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
if (inheritFromDockerHosts && alert.dockerHosts?.length) {
|
|
297
|
+
const dockerHostIds: Array<ObjectID> = alert.dockerHosts
|
|
298
|
+
.map((d: DockerHost) => {
|
|
299
|
+
return d.id;
|
|
300
|
+
})
|
|
301
|
+
.filter((id: ObjectID | null | undefined): id is ObjectID => {
|
|
302
|
+
return Boolean(id);
|
|
303
|
+
});
|
|
304
|
+
if (dockerHostIds.length > 0) {
|
|
305
|
+
const [dockerHostOwnerUsers, dockerHostOwnerTeams]: [
|
|
306
|
+
Array<DockerHostOwnerUser>,
|
|
307
|
+
Array<DockerHostOwnerTeam>,
|
|
308
|
+
] = await Promise.all([
|
|
309
|
+
DockerHostOwnerUserService.findBy({
|
|
310
|
+
query: { dockerHostId: QueryHelper.any(dockerHostIds) },
|
|
311
|
+
select: { userId: true },
|
|
312
|
+
props: { isRoot: true },
|
|
313
|
+
limit: LIMIT_MAX,
|
|
314
|
+
skip: 0,
|
|
315
|
+
}),
|
|
316
|
+
DockerHostOwnerTeamService.findBy({
|
|
317
|
+
query: { dockerHostId: QueryHelper.any(dockerHostIds) },
|
|
318
|
+
select: { teamId: true },
|
|
319
|
+
props: { isRoot: true },
|
|
320
|
+
limit: LIMIT_MAX,
|
|
321
|
+
skip: 0,
|
|
322
|
+
}),
|
|
323
|
+
]);
|
|
324
|
+
for (const ownerUser of dockerHostOwnerUsers) {
|
|
325
|
+
if (ownerUser.userId) {
|
|
326
|
+
inheritedFromDockerHostUserIds.add(ownerUser.userId.toString());
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
for (const ownerTeam of dockerHostOwnerTeams) {
|
|
330
|
+
if (ownerTeam.teamId) {
|
|
331
|
+
inheritedFromDockerHostTeamIds.add(ownerTeam.teamId.toString());
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
|
|
337
|
+
if (inheritFromServices && alert.services?.length) {
|
|
338
|
+
const serviceIds: Array<ObjectID> = alert.services
|
|
339
|
+
.map((s: Service) => {
|
|
340
|
+
return s.id;
|
|
341
|
+
})
|
|
342
|
+
.filter((id: ObjectID | null | undefined): id is ObjectID => {
|
|
343
|
+
return Boolean(id);
|
|
344
|
+
});
|
|
345
|
+
if (serviceIds.length > 0) {
|
|
346
|
+
const [serviceOwnerUsers, serviceOwnerTeams]: [
|
|
347
|
+
Array<ServiceOwnerUser>,
|
|
348
|
+
Array<ServiceOwnerTeam>,
|
|
349
|
+
] = await Promise.all([
|
|
350
|
+
ServiceOwnerUserService.findBy({
|
|
351
|
+
query: { serviceId: QueryHelper.any(serviceIds) },
|
|
352
|
+
select: { userId: true },
|
|
353
|
+
props: { isRoot: true },
|
|
354
|
+
limit: LIMIT_MAX,
|
|
355
|
+
skip: 0,
|
|
356
|
+
}),
|
|
357
|
+
ServiceOwnerTeamService.findBy({
|
|
358
|
+
query: { serviceId: QueryHelper.any(serviceIds) },
|
|
359
|
+
select: { teamId: true },
|
|
360
|
+
props: { isRoot: true },
|
|
361
|
+
limit: LIMIT_MAX,
|
|
362
|
+
skip: 0,
|
|
363
|
+
}),
|
|
364
|
+
]);
|
|
365
|
+
for (const ownerUser of serviceOwnerUsers) {
|
|
366
|
+
if (ownerUser.userId) {
|
|
367
|
+
inheritedFromServiceUserIds.add(ownerUser.userId.toString());
|
|
368
|
+
}
|
|
369
|
+
}
|
|
370
|
+
for (const ownerTeam of serviceOwnerTeams) {
|
|
371
|
+
if (ownerTeam.teamId) {
|
|
372
|
+
inheritedFromServiceTeamIds.add(ownerTeam.teamId.toString());
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
}
|
|
376
|
+
}
|
|
377
|
+
|
|
206
378
|
const inheritedUserIds: Set<string> = new Set([
|
|
207
379
|
...inheritedFromMonitorUserIds,
|
|
208
380
|
...inheritedFromHostUserIds,
|
|
381
|
+
...inheritedFromKubernetesClusterUserIds,
|
|
382
|
+
...inheritedFromDockerHostUserIds,
|
|
383
|
+
...inheritedFromServiceUserIds,
|
|
209
384
|
]);
|
|
210
385
|
const inheritedTeamIds: Set<string> = new Set([
|
|
211
386
|
...inheritedFromMonitorTeamIds,
|
|
212
387
|
...inheritedFromHostTeamIds,
|
|
388
|
+
...inheritedFromKubernetesClusterTeamIds,
|
|
389
|
+
...inheritedFromDockerHostTeamIds,
|
|
390
|
+
...inheritedFromServiceTeamIds,
|
|
213
391
|
]);
|
|
214
392
|
|
|
215
393
|
if (inheritedUserIds.size > 0 || inheritedTeamIds.size > 0) {
|
|
@@ -272,6 +450,17 @@ class AlertOwnerRuleEngineServiceClass {
|
|
|
272
450
|
0,
|
|
273
451
|
inheritedFromHosts:
|
|
274
452
|
inheritedFromHostUserIds.size + inheritedFromHostTeamIds.size > 0,
|
|
453
|
+
inheritedFromKubernetesClusters:
|
|
454
|
+
inheritedFromKubernetesClusterUserIds.size +
|
|
455
|
+
inheritedFromKubernetesClusterTeamIds.size >
|
|
456
|
+
0,
|
|
457
|
+
inheritedFromDockerHosts:
|
|
458
|
+
inheritedFromDockerHostUserIds.size +
|
|
459
|
+
inheritedFromDockerHostTeamIds.size >
|
|
460
|
+
0,
|
|
461
|
+
inheritedFromServices:
|
|
462
|
+
inheritedFromServiceUserIds.size + inheritedFromServiceTeamIds.size >
|
|
463
|
+
0,
|
|
275
464
|
});
|
|
276
465
|
} catch (error) {
|
|
277
466
|
logger.error(`Error applying alert owner rules: ${error}`, {
|
|
@@ -289,6 +478,9 @@ class AlertOwnerRuleEngineServiceClass {
|
|
|
289
478
|
teamIds: Array<string>;
|
|
290
479
|
inheritedFromMonitors: boolean;
|
|
291
480
|
inheritedFromHosts: boolean;
|
|
481
|
+
inheritedFromKubernetesClusters: boolean;
|
|
482
|
+
inheritedFromDockerHosts: boolean;
|
|
483
|
+
inheritedFromServices: boolean;
|
|
292
484
|
}): Promise<void> {
|
|
293
485
|
const {
|
|
294
486
|
alert,
|
|
@@ -297,6 +489,9 @@ class AlertOwnerRuleEngineServiceClass {
|
|
|
297
489
|
teamIds,
|
|
298
490
|
inheritedFromMonitors,
|
|
299
491
|
inheritedFromHosts,
|
|
492
|
+
inheritedFromKubernetesClusters,
|
|
493
|
+
inheritedFromDockerHosts,
|
|
494
|
+
inheritedFromServices,
|
|
300
495
|
} = data;
|
|
301
496
|
if (
|
|
302
497
|
!alert.id ||
|
|
@@ -374,9 +569,18 @@ class AlertOwnerRuleEngineServiceClass {
|
|
|
374
569
|
if (inheritedFromHosts) {
|
|
375
570
|
inheritedSources.push("hosts");
|
|
376
571
|
}
|
|
572
|
+
if (inheritedFromKubernetesClusters) {
|
|
573
|
+
inheritedSources.push("Kubernetes clusters");
|
|
574
|
+
}
|
|
575
|
+
if (inheritedFromDockerHosts) {
|
|
576
|
+
inheritedSources.push("Docker hosts");
|
|
577
|
+
}
|
|
578
|
+
if (inheritedFromServices) {
|
|
579
|
+
inheritedSources.push("services");
|
|
580
|
+
}
|
|
377
581
|
const inheritedNote: string =
|
|
378
582
|
inheritedSources.length > 0
|
|
379
|
-
? `\n\n_Some owners were inherited from the alert's ${inheritedSources.join("
|
|
583
|
+
? `\n\n_Some owners were inherited from the alert's ${inheritedSources.join(", ")}._`
|
|
380
584
|
: "";
|
|
381
585
|
|
|
382
586
|
const feedInfoInMarkdown: string = `🛡️ **Alert Owner Rule${
|