From 7a2e39449a2844455950b894e00e8c710340b209 Mon Sep 17 00:00:00 2001 From: Yongchan Hong Date: Fri, 15 Oct 2021 03:31:10 +0900 Subject: [PATCH] feat(config): Add none force-refresh option for auto refresh (#17039) * feat(config): Add none force-refresh option for auto refresh * use general config * fix lint issues * last lint fix --- .../src/dashboard/components/Header/index.jsx | 12 ++++++++++-- superset/config.py | 14 +++++++++++++- superset/views/base.py | 1 + 3 files changed, 24 insertions(+), 3 deletions(-) diff --git a/superset-frontend/src/dashboard/components/Header/index.jsx b/superset-frontend/src/dashboard/components/Header/index.jsx index 27dc4e7842..c7c9d1aaa5 100644 --- a/superset-frontend/src/dashboard/components/Header/index.jsx +++ b/superset-frontend/src/dashboard/components/Header/index.jsx @@ -292,11 +292,19 @@ class Header extends React.PureComponent { }); this.props.addWarningToast( t( - `This dashboard is currently force refreshing; the next force refresh will be in %s.`, + `This dashboard is currently auto refreshing; the next auto refresh will be in %s.`, intervalMessage, ), ); - + if (dashboardInfo.common.conf.DASHBOARD_AUTO_REFRESH_MODE === 'fetch') { + // force-refresh while auto-refresh in dashboard + return fetchCharts( + affectedCharts, + false, + interval * 0.2, + dashboardInfo.id, + ); + } return fetchCharts( affectedCharts, true, diff --git a/superset/config.py b/superset/config.py index 7f504582c5..838bbd4ccc 100644 --- a/superset/config.py +++ b/superset/config.py @@ -30,7 +30,17 @@ import re import sys from collections import OrderedDict from datetime import date, timedelta -from typing import Any, Callable, Dict, List, Optional, Type, TYPE_CHECKING, Union +from typing import ( + Any, + Callable, + Dict, + List, + Literal, + Optional, + Type, + TYPE_CHECKING, + Union, +) from cachelib.base import BaseCache from celery.schedules import crontab @@ -692,6 +702,8 @@ MAX_TABLE_NAMES = 3000 SQLLAB_SAVE_WARNING_MESSAGE = None SQLLAB_SCHEDULE_WARNING_MESSAGE = None +# Force refresh while auto-refresh in dashboard +DASHBOARD_AUTO_REFRESH_MODE: Literal["fetch", "force"] = "force" # Default celery config is to use SQLA as a broker, in a production setting # you'll want to use a proper broker as specified here: diff --git a/superset/views/base.py b/superset/views/base.py index 8f0aaa200f..9659287503 100644 --- a/superset/views/base.py +++ b/superset/views/base.py @@ -99,6 +99,7 @@ FRONTEND_CONF_KEYS = ( "SQLALCHEMY_DOCS_URL", "SQLALCHEMY_DISPLAY_TEXT", "GLOBAL_ASYNC_QUERIES_WEBSOCKET_URL", + "DASHBOARD_AUTO_REFRESH_MODE", ) logger = logging.getLogger(__name__)