From 6fe250244b2d571d2a5e3202af5386e2e4d48cd2 Mon Sep 17 00:00:00 2001 From: mbecker20 Date: Sat, 22 Jun 2024 00:30:43 -0700 Subject: [PATCH] add alerter blacklist --- bin/core/src/helpers/alert.rs | 7 ++++++- client/core/rs/src/entities/alerter.rs | 8 +++++++- client/core/ts/src/types.ts | 2 ++ .../src/components/resources/alerter/config/index.tsx | 9 +++++++++ .../components/resources/alerter/config/resources.tsx | 11 +++++++---- 5 files changed, 31 insertions(+), 6 deletions(-) diff --git a/bin/core/src/helpers/alert.rs b/bin/core/src/helpers/alert.rs index 9c1984d2b..1d4aa4ec1 100644 --- a/bin/core/src/helpers/alert.rs +++ b/bin/core/src/helpers/alert.rs @@ -62,7 +62,12 @@ async fn send_alert(alerters: &[Alerter], alert: &Alert) { return Ok(()); } - // Don't send if resource target not configured on the alerter + // Don't send if resource is in the blacklist + if alerter.config.except_resources.contains(&alert.target) { + return Ok(()); + } + + // Don't send if whitelist configured and target is not included if !alerter.config.resources.is_empty() && !alerter.config.resources.contains(&alert.target) { diff --git a/client/core/rs/src/entities/alerter.rs b/client/core/rs/src/entities/alerter.rs index 0f04446c4..f40819bfe 100644 --- a/client/core/rs/src/entities/alerter.rs +++ b/client/core/rs/src/entities/alerter.rs @@ -60,6 +60,11 @@ pub struct AlerterConfig { #[serde(default)] #[builder(default)] pub resources: Vec, + + /// DON'T send alerts on these resources. + #[serde(default)] + #[builder(default)] + pub except_resources: Vec, } impl AlerterConfig { @@ -76,9 +81,10 @@ impl Default for AlerterConfig { fn default() -> Self { Self { enabled: default_enabled(), + endpoint: Default::default(), alert_types: Default::default(), resources: Default::default(), - endpoint: Default::default(), + except_resources: Default::default(), } } } diff --git a/client/core/ts/src/types.ts b/client/core/ts/src/types.ts index 7f08a9fcf..0b681c34b 100644 --- a/client/core/ts/src/types.ts +++ b/client/core/ts/src/types.ts @@ -279,6 +279,8 @@ export interface AlerterConfig { * If empty, will send alerts for all resources. */ resources?: ResourceTarget[]; + /** DON'T send alerts on these resources. */ + except_resources?: ResourceTarget[]; } export type Alerter = Resource; diff --git a/frontend/src/components/resources/alerter/config/index.tsx b/frontend/src/components/resources/alerter/config/index.tsx index 445226643..63adb5929 100644 --- a/frontend/src/components/resources/alerter/config/index.tsx +++ b/frontend/src/components/resources/alerter/config/index.tsx @@ -53,6 +53,15 @@ export const AlerterConfig = ({ id }: { id: string }) => { resources={resources!} set={(resources) => set({ resources })} disabled={disabled} + blacklist={false} + /> + ), + except_resources: (resources, set) => ( + set({ except_resources })} + disabled={disabled} + blacklist={true} /> ), }, diff --git a/frontend/src/components/resources/alerter/config/resources.tsx b/frontend/src/components/resources/alerter/config/resources.tsx index 61690037b..0383ddc92 100644 --- a/frontend/src/components/resources/alerter/config/resources.tsx +++ b/frontend/src/components/resources/alerter/config/resources.tsx @@ -22,10 +22,12 @@ export const ResourcesConfig = ({ resources, set, disabled, + blacklist, }: { resources: Types.ResourceTarget[]; set: (resources: Types.ResourceTarget[]) => void; disabled: boolean; + blacklist: boolean; }) => { const [open, setOpen] = useState(false); const [search, setSearch] = useState(""); @@ -59,9 +61,7 @@ export const ResourcesConfig = ({ type: "Build", id: build.id, name: build.name.toLowerCase(), - enabled: resources.find( - (r) => r.type === "Build" && r.id === build.id - ) + enabled: resources.find((r) => r.type === "Build" && r.id === build.id) ? true : false, })), @@ -152,7 +152,10 @@ export const ResourcesConfig = ({ { accessorKey: "enabled", header: ({ column }) => ( - + ), cell: ({ row }) => { return (