From 5e4b24dcfb783967034d91a75331fe97cd35f85e Mon Sep 17 00:00:00 2001 From: Simon Larsen Date: Thu, 6 Feb 2025 11:14:52 +0000 Subject: [PATCH] feat: refactor notification rule models to use BaseNotificationRule and update filter conditions --- .../DatabaseModels/ServiceProviderNotificationRule.ts | 4 ++-- Common/Server/Utils/Monitor/MonitorResource.ts | 2 +- Common/Types/Filter/FilterCondition.ts | 4 ++-- Common/Types/Monitor/CriteriaFilter.ts | 5 ----- Common/Types/Monitor/MonitorCriteriaInstance.ts | 2 +- .../NotificationRules/BaseNotificationRule.ts | 5 +++++ .../NotificationRules/SlackNotificationRule.ts | 8 ++++++-- .../Components/Form/Monitor/MonitorCriteriaInstance.tsx | 2 +- .../Components/Monitor/MonitorSteps/CriteriaFilter.tsx | 2 +- .../Components/Monitor/MonitorSteps/CriteriaFilters.tsx | 2 +- .../Monitor/MonitorSteps/MonitorCriteriaInstance.tsx | 2 +- Dashboard/src/Utils/Form/Monitor/CriteriaFilter.ts | 2 +- 12 files changed, 22 insertions(+), 18 deletions(-) create mode 100644 Common/Types/ServiceProvider/NotificationRules/BaseNotificationRule.ts diff --git a/Common/Models/DatabaseModels/ServiceProviderNotificationRule.ts b/Common/Models/DatabaseModels/ServiceProviderNotificationRule.ts index 56ac54d9e0..a098d499f2 100644 --- a/Common/Models/DatabaseModels/ServiceProviderNotificationRule.ts +++ b/Common/Models/DatabaseModels/ServiceProviderNotificationRule.ts @@ -16,7 +16,7 @@ import IconProp from "../../Types/Icon/IconProp"; import ObjectID from "../../Types/ObjectID"; import { Column, Entity, Index, JoinColumn, ManyToOne } from "typeorm"; import ServiceProviderType from "../../Types/ServiceProvider/ServiceProviderType"; -import SlackNotificationRule from "../../Types/ServiceProvider/NotificationRules/SlackNotificationRule"; +import BaseNotificationRule from "../../Types/ServiceProvider/NotificationRules/BaseNotificationRule"; import NotificationRuleEventType from "../../Types/ServiceProvider/NotificationRules/EventType"; @@ -104,7 +104,7 @@ class ServiceProviderNotificationRule extends BaseModel { unique: false, nullable: false, }) - public notificationRule?: SlackNotificationRule = undefined; + public notificationRule?: BaseNotificationRule = undefined; @ColumnAccessControl({ create: [], diff --git a/Common/Server/Utils/Monitor/MonitorResource.ts b/Common/Server/Utils/Monitor/MonitorResource.ts index 36c83e6d4c..80e49f2a82 100644 --- a/Common/Server/Utils/Monitor/MonitorResource.ts +++ b/Common/Server/Utils/Monitor/MonitorResource.ts @@ -19,7 +19,6 @@ import { JSONObject } from "Common/Types/JSON"; import { CheckOn, CriteriaFilter, - FilterCondition, } from "Common/Types/Monitor/CriteriaFilter"; import IncomingMonitorRequest from "Common/Types/Monitor/IncomingMonitor/IncomingMonitorRequest"; import MonitorCriteria from "Common/Types/Monitor/MonitorCriteria"; @@ -57,6 +56,7 @@ import MonitorMetricType from "../../../Types/Monitor/MonitorMetricType"; import TelemetryUtil from "../Telemetry/Telemetry"; import MetricMonitorCriteria from "./Criteria/MetricMonitorCriteria"; import MetricMonitorResponse from "../../../Types/Monitor/MetricMonitor/MetricMonitorResponse"; +import FilterCondition from "../../../Types/Filter/FilterCondition"; export default class MonitorResourceUtil { public static async monitorResource( diff --git a/Common/Types/Filter/FilterCondition.ts b/Common/Types/Filter/FilterCondition.ts index 3287c07be4..d055b9b153 100644 --- a/Common/Types/Filter/FilterCondition.ts +++ b/Common/Types/Filter/FilterCondition.ts @@ -1,6 +1,6 @@ enum FilterCondition { - And = "And", - Or = "Or", + All = "All", + Any = "Any", } export default FilterCondition; diff --git a/Common/Types/Monitor/CriteriaFilter.ts b/Common/Types/Monitor/CriteriaFilter.ts index 2482b2261a..d48f47c2d2 100644 --- a/Common/Types/Monitor/CriteriaFilter.ts +++ b/Common/Types/Monitor/CriteriaFilter.ts @@ -110,11 +110,6 @@ export enum FilterType { IsNotExecuting = "Is Not Executing", } -export enum FilterCondition { - All = "All", - Any = "Any", -} - export class CriteriaFilterUtil { public static getEvaluateOverTimeTypeByCriteriaFilter( criteriaFilter: CriteriaFilter | undefined, diff --git a/Common/Types/Monitor/MonitorCriteriaInstance.ts b/Common/Types/Monitor/MonitorCriteriaInstance.ts index 289939ca9a..deab840bd0 100644 --- a/Common/Types/Monitor/MonitorCriteriaInstance.ts +++ b/Common/Types/Monitor/MonitorCriteriaInstance.ts @@ -1,5 +1,6 @@ import DatabaseProperty from "../Database/DatabaseProperty"; import BadDataException from "../Exception/BadDataException"; +import FilterCondition from "../Filter/FilterCondition"; import { JSONObject, ObjectType } from "../JSON"; import JSONFunctions from "../JSONFunctions"; import ObjectID from "../ObjectID"; @@ -8,7 +9,6 @@ import { CriteriaAlert } from "./CriteriaAlert"; import { CheckOn, CriteriaFilter, - FilterCondition, FilterType, EvaluateOverTimeType, } from "./CriteriaFilter"; diff --git a/Common/Types/ServiceProvider/NotificationRules/BaseNotificationRule.ts b/Common/Types/ServiceProvider/NotificationRules/BaseNotificationRule.ts new file mode 100644 index 0000000000..58a8a77949 --- /dev/null +++ b/Common/Types/ServiceProvider/NotificationRules/BaseNotificationRule.ts @@ -0,0 +1,5 @@ +export default interface BaseNotificationRule { + _type: string; + + +} diff --git a/Common/Types/ServiceProvider/NotificationRules/SlackNotificationRule.ts b/Common/Types/ServiceProvider/NotificationRules/SlackNotificationRule.ts index 716a840a54..6ce73ad31c 100644 --- a/Common/Types/ServiceProvider/NotificationRules/SlackNotificationRule.ts +++ b/Common/Types/ServiceProvider/NotificationRules/SlackNotificationRule.ts @@ -1,3 +1,7 @@ -export default interface SlackNotificationRule { - +import FilterCondition from "../../Filter/FilterCondition"; +import BaseNotificationRule from "./BaseNotificationRule"; + +export default interface SlackNotificationRule extends BaseNotificationRule { + _type: "SlackNotificationRule"; + filterCondition: FilterCondition; // and OR or. Default is AND } \ No newline at end of file diff --git a/Dashboard/src/Components/Form/Monitor/MonitorCriteriaInstance.tsx b/Dashboard/src/Components/Form/Monitor/MonitorCriteriaInstance.tsx index fb0dcdb265..d9c29df5d3 100644 --- a/Dashboard/src/Components/Form/Monitor/MonitorCriteriaInstance.tsx +++ b/Dashboard/src/Components/Form/Monitor/MonitorCriteriaInstance.tsx @@ -4,7 +4,6 @@ import Dictionary from "Common/Types/Dictionary"; import IconProp from "Common/Types/Icon/IconProp"; import { CriteriaFilter, - FilterCondition, } from "Common/Types/Monitor/CriteriaFilter"; import { CriteriaIncident } from "Common/Types/Monitor/CriteriaIncident"; import MonitorCriteriaInstance from "Common/Types/Monitor/MonitorCriteriaInstance"; @@ -34,6 +33,7 @@ import React, { import MonitorCriteriaAlertsForm from "./MonitorCriteriaAlertsForm"; import { CriteriaAlert } from "Common/Types/Monitor/CriteriaAlert"; import MonitorStep from "Common/Types/Monitor/MonitorStep"; +import FilterCondition from "Common/Types/Filter/FilterCondition"; export interface ComponentProps { monitorStatusDropdownOptions: Array; diff --git a/Dashboard/src/Components/Monitor/MonitorSteps/CriteriaFilter.tsx b/Dashboard/src/Components/Monitor/MonitorSteps/CriteriaFilter.tsx index 074b1a4e00..cd385d176a 100644 --- a/Dashboard/src/Components/Monitor/MonitorSteps/CriteriaFilter.tsx +++ b/Dashboard/src/Components/Monitor/MonitorSteps/CriteriaFilter.tsx @@ -1,7 +1,7 @@ +import FilterCondition from "Common/Types/Filter/FilterCondition"; import CriteriaFilterUtil from "../../../Utils/Form/Monitor/CriteriaFilter"; import { CriteriaFilter, - FilterCondition, } from "Common/Types/Monitor/CriteriaFilter"; import React, { FunctionComponent, ReactElement } from "react"; diff --git a/Dashboard/src/Components/Monitor/MonitorSteps/CriteriaFilters.tsx b/Dashboard/src/Components/Monitor/MonitorSteps/CriteriaFilters.tsx index cd8cef6487..56861ef7a4 100644 --- a/Dashboard/src/Components/Monitor/MonitorSteps/CriteriaFilters.tsx +++ b/Dashboard/src/Components/Monitor/MonitorSteps/CriteriaFilters.tsx @@ -1,7 +1,7 @@ +import FilterCondition from "Common/Types/Filter/FilterCondition"; import CriteriaFilterElement from "./CriteriaFilter"; import { CriteriaFilter, - FilterCondition, } from "Common/Types/Monitor/CriteriaFilter"; import React, { FunctionComponent, ReactElement } from "react"; diff --git a/Dashboard/src/Components/Monitor/MonitorSteps/MonitorCriteriaInstance.tsx b/Dashboard/src/Components/Monitor/MonitorSteps/MonitorCriteriaInstance.tsx index 3984b621c8..b84ebf2108 100644 --- a/Dashboard/src/Components/Monitor/MonitorSteps/MonitorCriteriaInstance.tsx +++ b/Dashboard/src/Components/Monitor/MonitorSteps/MonitorCriteriaInstance.tsx @@ -3,7 +3,6 @@ import MonitorCriteriaIncidents from "./MonitorCriteriaIncidents"; import { Black } from "Common/Types/BrandColors"; import Color from "Common/Types/Color"; import IconProp from "Common/Types/Icon/IconProp"; -import { FilterCondition } from "Common/Types/Monitor/CriteriaFilter"; import MonitorCriteriaInstance from "Common/Types/Monitor/MonitorCriteriaInstance"; import HorizontalRule from "Common/UI/Components/HorizontalRule/HorizontalRule"; import Icon from "Common/UI/Components/Icon/Icon"; @@ -14,6 +13,7 @@ import OnCallDutyPolicy from "Common/Models/DatabaseModels/OnCallDutyPolicy"; import React, { FunctionComponent, ReactElement } from "react"; import MonitorCriteriaAlerts from "./MonitorCriteriaAlerts"; import AlertSeverity from "Common/Models/DatabaseModels/AlertSeverity"; +import FilterCondition from "Common/Types/Filter/FilterCondition"; export interface ComponentProps { monitorStatusOptions: Array; diff --git a/Dashboard/src/Utils/Form/Monitor/CriteriaFilter.ts b/Dashboard/src/Utils/Form/Monitor/CriteriaFilter.ts index 1aef3f5c95..0d9c121f7f 100644 --- a/Dashboard/src/Utils/Form/Monitor/CriteriaFilter.ts +++ b/Dashboard/src/Utils/Form/Monitor/CriteriaFilter.ts @@ -1,9 +1,9 @@ +import FilterCondition from "Common/Types/Filter/FilterCondition"; import { CheckOn, CriteriaFilter, EvaluateOverTimeMinutes, EvaluateOverTimeType, - FilterCondition, FilterType, } from "Common/Types/Monitor/CriteriaFilter"; import MonitorType from "Common/Types/Monitor/MonitorType";