diff --git a/superset-frontend/src/views/CRUD/alert/AlertReportModal.tsx b/superset-frontend/src/views/CRUD/alert/AlertReportModal.tsx index 9bf6cb6107..b9d6223e68 100644 --- a/superset-frontend/src/views/CRUD/alert/AlertReportModal.tsx +++ b/superset-frontend/src/views/CRUD/alert/AlertReportModal.tsx @@ -55,8 +55,10 @@ import { MetaObject, Operator, Recipient, + AlertsReportsConfig, } from 'src/views/CRUD/alert/types'; import { InfoTooltipWithTrigger } from '@superset-ui/chart-controls'; +import { useSelector } from 'react-redux'; import { AlertReportCronScheduler } from './components/AlertReportCronScheduler'; import { NotificationMethod } from './components/NotificationMethod'; @@ -83,6 +85,10 @@ interface AlertReportModalProps { show: boolean; } +const DEFAULT_WORKING_TIMEOUT = 3600; +const DEFAULT_CRON_VALUE = '0 * * * *'; // every hour +const DEFAULT_RETENTION = 90; + const DEFAULT_NOTIFICATION_METHODS: NotificationMethodOption[] = ['Email']; const DEFAULT_NOTIFICATION_FORMAT = 'PNG'; const CONDITIONS = [ @@ -135,25 +141,6 @@ const RETENTION_OPTIONS = [ }, ]; -const DEFAULT_RETENTION = 90; -const DEFAULT_WORKING_TIMEOUT = 3600; -const DEFAULT_CRON_VALUE = '0 * * * *'; // every hour -const DEFAULT_ALERT = { - active: true, - creation_method: 'alerts_reports', - crontab: DEFAULT_CRON_VALUE, - log_retention: DEFAULT_RETENTION, - working_timeout: DEFAULT_WORKING_TIMEOUT, - name: '', - owners: [], - recipients: [], - sql: '', - validator_config_json: {}, - validator_type: '', - force_screenshot: false, - grace_period: undefined, -}; - const StyledModal = styled(Modal)` max-width: 1200px; width: 100%; @@ -512,6 +499,38 @@ const AlertReportModal: FunctionComponent = ({ ); }; + const { + ALERT_REPORTS_DEFAULT_WORKING_TIMEOUT, + ALERT_REPORTS_DEFAULT_CRON_VALUE, + ALERT_REPORTS_DEFAULT_RETENTION, + } = useSelector(state => { + const conf = state.common?.conf; + return { + ALERT_REPORTS_DEFAULT_WORKING_TIMEOUT: + conf?.ALERT_REPORTS_DEFAULT_WORKING_TIMEOUT ?? DEFAULT_WORKING_TIMEOUT, + ALERT_REPORTS_DEFAULT_CRON_VALUE: + conf?.ALERT_REPORTS_DEFAULT_CRON_VALUE ?? DEFAULT_CRON_VALUE, + ALERT_REPORTS_DEFAULT_RETENTION: + conf?.ALERT_REPORTS_DEFAULT_RETENTION ?? DEFAULT_RETENTION, + }; + }); + + const defaultAlert = { + active: true, + creation_method: 'alerts_reports', + crontab: ALERT_REPORTS_DEFAULT_CRON_VALUE, + log_retention: ALERT_REPORTS_DEFAULT_RETENTION, + working_timeout: ALERT_REPORTS_DEFAULT_WORKING_TIMEOUT, + name: '', + owners: [], + recipients: [], + sql: '', + validator_config_json: {}, + validator_type: '', + force_screenshot: false, + grace_period: undefined, + }; + const updateNotificationSetting = ( index: number, setting: NotificationSetting, @@ -549,7 +568,7 @@ const AlertReportModal: FunctionComponent = ({ setIsHidden(true); onHide(); setNotificationSettings([]); - setCurrentAlert({ ...DEFAULT_ALERT }); + setCurrentAlert({ ...defaultAlert }); setNotificationAddState('active'); }; @@ -992,7 +1011,7 @@ const AlertReportModal: FunctionComponent = ({ !isEditMode && (!currentAlert || currentAlert.id || (isHidden && show)) ) { - setCurrentAlert({ ...DEFAULT_ALERT }); + setCurrentAlert({ ...defaultAlert }); setNotificationSettings([]); setNotificationAddState('active'); } @@ -1299,7 +1318,7 @@ const AlertReportModal: FunctionComponent = ({ * updateAlertState('crontab', newVal)} />
{TRANSLATIONS.TIMEZONE_TEXT}
@@ -1329,7 +1348,7 @@ const AlertReportModal: FunctionComponent = ({ value={ typeof currentAlert?.log_retention === 'number' ? currentAlert?.log_retention - : DEFAULT_RETENTION + : ALERT_REPORTS_DEFAULT_RETENTION } options={RETENTION_OPTIONS} sortComparator={propertyComparator('value')} diff --git a/superset-frontend/src/views/CRUD/alert/types.ts b/superset-frontend/src/views/CRUD/alert/types.ts index ec59bb5a16..36d2b1d35a 100644 --- a/superset-frontend/src/views/CRUD/alert/types.ts +++ b/superset-frontend/src/views/CRUD/alert/types.ts @@ -117,3 +117,8 @@ export enum RecipientIconName { Email = 'Email', Slack = 'Slack', } +export interface AlertsReportsConfig { + ALERT_REPORTS_DEFAULT_WORKING_TIMEOUT: number; + ALERT_REPORTS_DEFAULT_RETENTION: number; + ALERT_REPORTS_DEFAULT_CRON_VALUE: string; +} diff --git a/superset/config.py b/superset/config.py index c9234e521d..123ff902c9 100644 --- a/superset/config.py +++ b/superset/config.py @@ -1264,6 +1264,10 @@ ALERT_REPORTS_WORKING_TIME_OUT_LAG = int(timedelta(seconds=10).total_seconds()) # if ALERT_REPORTS_WORKING_TIME_OUT_KILL is True, set a celery hard timeout # Equal to working timeout + ALERT_REPORTS_WORKING_SOFT_TIME_OUT_LAG ALERT_REPORTS_WORKING_SOFT_TIME_OUT_LAG = int(timedelta(seconds=1).total_seconds()) +# Default values that user using when creating alert +ALERT_REPORTS_DEFAULT_WORKING_TIMEOUT = 3600 +ALERT_REPORTS_DEFAULT_RETENTION = 90 +ALERT_REPORTS_DEFAULT_CRON_VALUE = "0 * * * *" # every hour # If set to true no notification is sent, the worker will just log a message. # Useful for debugging ALERT_REPORTS_NOTIFICATION_DRY_RUN = False diff --git a/superset/views/base.py b/superset/views/base.py index ec74b8ccdb..0da0be0652 100644 --- a/superset/views/base.py +++ b/superset/views/base.py @@ -116,6 +116,9 @@ FRONTEND_CONF_KEYS = ( "HTML_SANITIZATION_SCHEMA_EXTENSIONS", "WELCOME_PAGE_LAST_TAB", "VIZ_TYPE_DENYLIST", + "ALERT_REPORTS_DEFAULT_CRON_VALUE", + "ALERT_REPORTS_DEFAULT_RETENTION", + "ALERT_REPORTS_DEFAULT_WORKING_TIMEOUT", ) logger = logging.getLogger(__name__)