From 8da64a5c341e805ad12142b898bcdedd5b366453 Mon Sep 17 00:00:00 2001 From: Devin Binnie <52460000+devinbinnie@users.noreply.github.com> Date: Fri, 3 May 2024 09:06:06 -0400 Subject: [PATCH] [MM-57407] Add setting to disable the wake up on reconnect handler (#26924) * [MM-57407] Add setting to disable the wake up on reconnect handler * Add dependency --------- Co-authored-by: Mattermost Build --- server/config/client.go | 1 + server/public/model/config.go | 5 +++++ .../src/components/admin_console/admin_definition.tsx | 7 +++++++ webapp/channels/src/components/team_controller/index.ts | 2 ++ .../src/components/team_controller/team_controller.tsx | 6 +++++- webapp/channels/src/i18n/en.json | 2 ++ webapp/platform/types/src/config.ts | 1 + 7 files changed, 23 insertions(+), 1 deletion(-) diff --git a/server/config/client.go b/server/config/client.go index f2d548fd619..8a975eb7b95 100644 --- a/server/config/client.go +++ b/server/config/client.go @@ -96,6 +96,7 @@ func GenerateClientConfig(c *model.Config, telemetryID string, license *model.Li props["CWSMock"] = model.MockCWS props["DisableRefetchingOnBrowserFocus"] = strconv.FormatBool(*c.ExperimentalSettings.DisableRefetchingOnBrowserFocus) + props["DisableWakeUpReconnectHandler"] = strconv.FormatBool(*c.ExperimentalSettings.DisableWakeUpReconnectHandler) // Set default values for all options that require a license. props["ExperimentalEnableAuthenticationTransfer"] = "true" diff --git a/server/public/model/config.go b/server/public/model/config.go index bbd464fc174..4c0ae77ba44 100644 --- a/server/public/model/config.go +++ b/server/public/model/config.go @@ -1009,6 +1009,7 @@ type ExperimentalSettings struct { DisableAppBar *bool `access:"experimental_features"` DisableRefetchingOnBrowserFocus *bool `access:"experimental_features"` DelayChannelAutocomplete *bool `access:"experimental_features"` + DisableWakeUpReconnectHandler *bool `access:"experimental_features"` } func (s *ExperimentalSettings) SetDefaults() { @@ -1047,6 +1048,10 @@ func (s *ExperimentalSettings) SetDefaults() { if s.DelayChannelAutocomplete == nil { s.DelayChannelAutocomplete = NewBool(false) } + + if s.DisableWakeUpReconnectHandler == nil { + s.DisableWakeUpReconnectHandler = NewBool(false) + } } type AnalyticsSettings struct { diff --git a/webapp/channels/src/components/admin_console/admin_definition.tsx b/webapp/channels/src/components/admin_console/admin_definition.tsx index 29a1881a7a2..acdbfe36c2d 100644 --- a/webapp/channels/src/components/admin_console/admin_definition.tsx +++ b/webapp/channels/src/components/admin_console/admin_definition.tsx @@ -6204,6 +6204,13 @@ const AdminDefinition: AdminDefinitionType = { help_text: defineMessage({id: 'admin.experimental.disableRefetchingOnBrowserFocus.desc', defaultMessage: 'When true, Mattermost will not refetch channels and channel members when the browser regains focus. This may result in improved performance for users with many channels and channel members.'}), isDisabled: it.not(it.userHasWritePermissionOnResource(RESOURCE_KEYS.EXPERIMENTAL.FEATURES)), }, + { + type: 'bool', + key: 'ExperimentalSettings.DisableWakeUpReconnectHandler', + label: defineMessage({id: 'admin.experimental.disableWakeUpReconnectHandler.title', defaultMessage: 'Disable Wake Up Reconnect Handler:'}), + help_text: defineMessage({id: 'admin.experimental.disableWakeUpReconnectHandler.desc', defaultMessage: 'When true, Mattermost will not attempt to detect when the computer has woken up and refetch data. This might reduce the amount of regular network traffic the app is sending.'}), + isDisabled: it.not(it.userHasWritePermissionOnResource(RESOURCE_KEYS.EXPERIMENTAL.FEATURES)), + }, { type: 'bool', key: 'ExperimentalSettings.DelayChannelAutocomplete', diff --git a/webapp/channels/src/components/team_controller/index.ts b/webapp/channels/src/components/team_controller/index.ts index b6aba3ec938..5fa897d9f66 100644 --- a/webapp/channels/src/components/team_controller/index.ts +++ b/webapp/channels/src/components/team_controller/index.ts @@ -35,6 +35,7 @@ function mapStateToProps(state: GlobalState, ownProps: OwnProps) { const currentUser = getCurrentUser(state); const plugins = state.plugins.components.NeedsTeamComponent; const disableRefetchingOnBrowserFocus = config.DisableRefetchingOnBrowserFocus === 'true'; + const disableWakeUpReconnectHandler = config.DisableWakeUpReconnectHandler === 'true'; return { currentTeamId: getCurrentTeamId(state), @@ -44,6 +45,7 @@ function mapStateToProps(state: GlobalState, ownProps: OwnProps) { selectedThreadId: getSelectedThreadIdInCurrentTeam(state), mfaRequired: checkIfMFARequired(currentUser, license, config, ownProps.match.url), disableRefetchingOnBrowserFocus, + disableWakeUpReconnectHandler, }; } diff --git a/webapp/channels/src/components/team_controller/team_controller.tsx b/webapp/channels/src/components/team_controller/team_controller.tsx index d4bc59bf5f3..6f065fd0946 100644 --- a/webapp/channels/src/components/team_controller/team_controller.tsx +++ b/webapp/channels/src/components/team_controller/team_controller.tsx @@ -63,6 +63,10 @@ function TeamController(props: Props) { }, []); useEffect(() => { + if (props.disableWakeUpReconnectHandler) { + return () => {}; + } + const wakeUpIntervalId = setInterval(() => { const currentTime = Date.now(); if ((currentTime - lastTime.current) > WAKEUP_THRESHOLD) { @@ -75,7 +79,7 @@ function TeamController(props: Props) { return () => { clearInterval(wakeUpIntervalId); }; - }, []); + }, [props.disableWakeUpReconnectHandler]); // Effect runs on mount, add event listeners on windows object useEffect(() => { diff --git a/webapp/channels/src/i18n/en.json b/webapp/channels/src/i18n/en.json index 2c49ec85250..fc8a51599b6 100644 --- a/webapp/channels/src/i18n/en.json +++ b/webapp/channels/src/i18n/en.json @@ -899,6 +899,8 @@ "admin.experimental.disableAppBar.title": "Disable Apps Bar:", "admin.experimental.disableRefetchingOnBrowserFocus.desc": "When true, Mattermost will not refetch channels and channel members when the browser regains focus. This may result in improved performance for users with many channels and channel members.", "admin.experimental.disableRefetchingOnBrowserFocus.title": "Disable data refetching on browser refocus:", + "admin.experimental.disableWakeUpReconnectHandler.desc": "When true, Mattermost will not attempt to detect when the computer has woken up and refetch data. This might reduce the amount of regular network traffic the app is sending.", + "admin.experimental.disableWakeUpReconnectHandler.title": "Disable Wake Up Reconnect Handler:", "admin.experimental.emailBatchingBufferSize.desc": "Specify the maximum number of notifications batched into a single email.", "admin.experimental.emailBatchingBufferSize.example": "E.g.: \"256\"", "admin.experimental.emailBatchingBufferSize.title": "Email Batching Buffer Size:", diff --git a/webapp/platform/types/src/config.ts b/webapp/platform/types/src/config.ts index dd6db609cc5..40a8ea0e799 100644 --- a/webapp/platform/types/src/config.ts +++ b/webapp/platform/types/src/config.ts @@ -38,6 +38,7 @@ export type ClientConfig = { DiagnosticId: string; DiagnosticsEnabled: string; DisableRefetchingOnBrowserFocus: string; + DisableWakeUpReconnectHandler: string; EmailLoginButtonBorderColor: string; EmailLoginButtonColor: string; EmailLoginButtonTextColor: string;