You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@superset.apache.org by vi...@apache.org on 2023/03/31 08:59:10 UTC

[superset] branch master updated: fix: moved alerts and reports default values to config (#22880)

This is an automated email from the ASF dual-hosted git repository.

villebro pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/superset.git


The following commit(s) were added to refs/heads/master by this push:
     new 09757dc518 fix: moved alerts and reports default values to config (#22880)
09757dc518 is described below

commit 09757dc51830ec9bf6904a555574d00420d425d9
Author: Stepan <66...@users.noreply.github.com>
AuthorDate: Fri Mar 31 11:58:59 2023 +0300

    fix: moved alerts and reports default values to config (#22880)
---
 .../src/views/CRUD/alert/AlertReportModal.tsx      | 65 ++++++++++++++--------
 superset-frontend/src/views/CRUD/alert/types.ts    |  5 ++
 superset/config.py                                 |  4 ++
 superset/views/base.py                             |  3 +
 4 files changed, 54 insertions(+), 23 deletions(-)

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<AlertReportModalProps> = ({
     );
   };
 
+  const {
+    ALERT_REPORTS_DEFAULT_WORKING_TIMEOUT,
+    ALERT_REPORTS_DEFAULT_CRON_VALUE,
+    ALERT_REPORTS_DEFAULT_RETENTION,
+  } = useSelector<any, AlertsReportsConfig>(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<AlertReportModalProps> = ({
     setIsHidden(true);
     onHide();
     setNotificationSettings([]);
-    setCurrentAlert({ ...DEFAULT_ALERT });
+    setCurrentAlert({ ...defaultAlert });
     setNotificationAddState('active');
   };
 
@@ -992,7 +1011,7 @@ const AlertReportModal: FunctionComponent<AlertReportModalProps> = ({
       !isEditMode &&
       (!currentAlert || currentAlert.id || (isHidden && show))
     ) {
-      setCurrentAlert({ ...DEFAULT_ALERT });
+      setCurrentAlert({ ...defaultAlert });
       setNotificationSettings([]);
       setNotificationAddState('active');
     }
@@ -1299,7 +1318,7 @@ const AlertReportModal: FunctionComponent<AlertReportModalProps> = ({
               <span className="required">*</span>
             </StyledSectionTitle>
             <AlertReportCronScheduler
-              value={currentAlert?.crontab || DEFAULT_CRON_VALUE}
+              value={currentAlert?.crontab || ALERT_REPORTS_DEFAULT_CRON_VALUE}
               onChange={newVal => updateAlertState('crontab', newVal)}
             />
             <div className="control-label">{TRANSLATIONS.TIMEZONE_TEXT}</div>
@@ -1329,7 +1348,7 @@ const AlertReportModal: FunctionComponent<AlertReportModalProps> = ({
                   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__)