From 91c22df4982395744d40cb7789fa6880b2f1cccf Mon Sep 17 00:00:00 2001 From: Icaro Motta Date: Tue, 2 Jul 2024 19:48:15 -0300 Subject: [PATCH] Remove all integrations with signal wakuv2.peerstats (#20501) Removes code integrating with the signal wakuv2.peerstats. The response from this signal is rather large and it can sometimes happen in short bursts. - Fixes https://github.com/status-im/status-mobile/issues/20176 We were using it to keep track of the number of peers in real-time. We now only fetch the peer count in two instances (synchronously inside rn/use-mount): - When the user opens the legacy screen Settings > Advanced > Peers stats. - When the user opens the visibility status dropdown in Settings, because the peers count will be used when the user chooses "Offline" (status inactive). Note: we don't send anymore the peers count when the user shakes the phone. We assume this value is already available in :peers-summary (which will be shared by the user). status-go still publishes the signal, we just ignore it to remove the performance overhead of transforming to cljs and mutating the app-db (thus interrupting the queue from more important stuff). Steps to test: - Verify user can see peers count in Settings > Advanced > Peers stats - Verify changing the visibility status of user Alice in the Settings screen leads to the desired effect to the other party seeing Alice's visibility status. --- src/legacy/status_im/subs/root.cljs | 2 +- .../ui/components/connectivity/view.cljs | 118 +----------------- .../status_im/ui/screens/peers_stats.cljs | 20 +-- src/legacy/status_im/utils/logging/core.cljs | 1 - .../visibility_status_updates/core.cljs | 2 +- src/status_im/common/peer_stats/events.cljs | 17 +++ src/status_im/common/signals/events.cljs | 15 +-- .../settings/visibility_sheet/view.cljs | 5 + src/status_im/db.cljs | 2 +- src/status_im/events.cljs | 1 + src/status_im/subs/general.cljs | 61 --------- src/status_im/subs/profile.cljs | 6 - src/status_im/subs/root.cljs | 1 - 13 files changed, 42 insertions(+), 209 deletions(-) create mode 100644 src/status_im/common/peer_stats/events.cljs diff --git a/src/legacy/status_im/subs/root.cljs b/src/legacy/status_im/subs/root.cljs index 07c48354d2..3c4cc0e1df 100644 --- a/src/legacy/status_im/subs/root.cljs +++ b/src/legacy/status_im/subs/root.cljs @@ -17,7 +17,7 @@ (reg-root-key-sub :ui/search :ui/search) (reg-root-key-sub :network/type :network/type) (reg-root-key-sub :network-status :network-status) -(reg-root-key-sub :peers-count :peers-count) +(reg-root-key-sub :peer-stats/count :peer-stats/count) (reg-root-key-sub :peers-summary :peers-summary) (reg-root-key-sub :web3-node-version :web3-node-version) diff --git a/src/legacy/status_im/ui/components/connectivity/view.cljs b/src/legacy/status_im/ui/components/connectivity/view.cljs index 65ba474704..2caf1aa30f 100644 --- a/src/legacy/status_im/ui/components/connectivity/view.cljs +++ b/src/legacy/status_im/ui/components/connectivity/view.cljs @@ -1,14 +1,9 @@ (ns legacy.status-im.ui.components.connectivity.view (:require - [clojure.string :as string] [legacy.status-im.ui.components.animation :as animation] [legacy.status-im.ui.components.colors :as colors] - [legacy.status-im.ui.components.core :as quo] - [legacy.status-im.ui.components.list.item :as list.item] - [legacy.status-im.ui.components.react :as react] - [re-frame.core :as re-frame] - [utils.i18n :as i18n]) - (:require-macros [legacy.status-im.utils.views :as views :refer [defview letsubs]])) + [legacy.status-im.ui.components.react :as react]) + (:require-macros [legacy.status-im.utils.views :as views])) (defn easing [direction n] @@ -72,112 +67,3 @@ colors/white) :left (* 0.15 parent-width))}]]])) - -(defview loading-indicator - [] - (letsubs [fetching? [:mailserver/fetching?] - window-width [:dimensions/window-width]] - (when fetching? - [loading-indicator-anim window-width]))) - -(defn hide-sheet-and-dispatch - [event] - (re-frame/dispatch [:bottom-sheet/hide-old]) - (re-frame/dispatch event)) - -(defview connectivity-sheet - [] - (letsubs [{:keys [peers node mobile sync]} [:connectivity/state] - current-mailserver-name [:mailserver/current-name] - peers-count [:peers-count] - {:keys [syncing-on-mobile-network?]} [:profile/profile]] - [:<> - [quo/header {:title (i18n/label :t/connection-status) :border-bottom false}] - [quo/list-header (i18n/label :t/peer-to-peer)] - (if (= peers :offline) - [list.item/list-item - {:title (i18n/label :t/not-connected-to-peers) - :accessibility-label "not-connected-to-peers" - :subtitle (i18n/label :t/unable-to-send-messages) - :subtitle-max-lines 2 - :theme :negative - :icon :main-icons/network}] - [list.item/list-item - {:title (str (i18n/label :t/connected-to) - " " peers-count - " " (string/lower-case (i18n/label :t/peers))) - :accessibility-label "connected-to-n-peers" - :subtitle (i18n/label :t/can-send-messages) - :subtitle-max-lines 2 - :theme :positive - :icon :main-icons/network}]) - [quo/list-header (i18n/label :t/history-nodes)] - (cond - (#{:error :offline} node) - [list.item/list-item - {:title (i18n/label :t/not-connected-nodes) - :accessibility-label "not-connected-nodes" - :subtitle (i18n/label :t/unable-to-fetch) - :theme :negative - :icon :main-icons/mailserver}] - (= node :disabled) - [list.item/list-item - {:title (i18n/label :t/nodes-disabled) - :accessibility-label "nodes-disabled" - :subtitle (i18n/label :t/unable-to-fetch) - :disabled true - :icon :main-icons/mailserver}] - (and mobile (not sync)) - [list.item/list-item - {:title (i18n/label :t/waiting-wi-fi) - :accessibility-label "waiting-wi-fi" - :subtitle (i18n/label :t/unable-to-fetch) - :disabled true - :icon :main-icons/mailserver}] - (= node :connecting) - [list.item/list-item - {:title (i18n/label :t/connecting) - :accessibility-label "connecting" - :subtitle (i18n/label :t/unable-to-fetch) - :icon :main-icons/mailserver}] - (= node :online) - [list.item/list-item - {:title (str (i18n/label :t/connected-to) " " current-mailserver-name) - :accessibility-label "connected-to-mailserver" - :subtitle (i18n/label :t/you-can-fetch) - :theme :positive - :icon :main-icons/mailserver}]) - [list.item/list-item - {:title (i18n/label :t/settings) - :accessibility-label "settings" - :theme :accent - :on-press #(hide-sheet-and-dispatch [:navigate-to :legacy-sync-settings]) - :icon :main-icons/settings}] - (when mobile - [:<> - [react/view - {:margin-vertical 8 - :background-color colors/gray-lighter - :height 36 - :align-items :center - :justify-content :center} - [react/text {:style {:color colors/gray}} (i18n/label :t/youre-on-mobile-network)]] - [list.item/list-item - {:title (i18n/label :t/mobile-network-use-mobile) - :accessibility-label "mobile-network-use-mobile" - :accessory :switch - :on-press #(re-frame/dispatch [:mobile-network/set-syncing - (not syncing-on-mobile-network?)]) - :active syncing-on-mobile-network?}] - [react/text {:style {:margin-horizontal 16 :margin-bottom 12 :color colors/gray}} - (i18n/label :t/status-mobile-descr)]])])) - -(defn get-icon - [{:keys [peers node mobile sync]}] - (if (or (= peers :offline) - (= node :offline) - (= node :connecting)) - :main-icons/offline - (if mobile - (if sync :main-icons/mobile-sync :main-icons/mobile-sync-off) - (when (#{:error :disabled} node) :main-icons/node-offline)))) diff --git a/src/legacy/status_im/ui/screens/peers_stats.cljs b/src/legacy/status_im/ui/screens/peers_stats.cljs index ce2b63d866..cfa20c734d 100644 --- a/src/legacy/status_im/ui/screens/peers_stats.cljs +++ b/src/legacy/status_im/ui/screens/peers_stats.cljs @@ -1,17 +1,21 @@ (ns legacy.status-im.ui.screens.peers-stats (:require - [react-native.core :as react-native.core] + [react-native.core :as rn] [utils.i18n :as i18n] - [utils.re-frame :as re-frame])) + [utils.re-frame :as rf])) (defn peers-stats [] - (let [peers-count (re-frame/sub [:peers-count])] - [react-native.core/view - {:flex 1 - :margin-horizontal 8} - [react-native.core/view + (let [peers-count (rf/sub [:peer-stats/count])] + (rn/use-mount + (fn [] + (rf/dispatch [:peer-stats/get-count]))) + + [rn/view + {:style {:flex 1 + :margin-horizontal 8}} + [rn/view {:style {:flex-direction :row :margin-vertical 8 :justify-content :space-between}} - [react-native.core/text (str (i18n/label :t/peers-count) ": " peers-count)]]])) + [rn/text (str (i18n/label :t/peers-count) ": " peers-count)]]])) diff --git a/src/legacy/status_im/utils/logging/core.cljs b/src/legacy/status_im/utils/logging/core.cljs index 58f59ea1c1..ee4416d07d 100644 --- a/src/legacy/status_im/utils/logging/core.cljs +++ b/src/legacy/status_im/utils/logging/core.cljs @@ -128,7 +128,6 @@ :current-chat-id :network :network-status - :peers-count :peers-summary :sync-state :view-id diff --git a/src/legacy/status_im/visibility_status_updates/core.cljs b/src/legacy/status_im/visibility_status_updates/core.cljs index 6a3bc254b5..95e0b49d3c 100644 --- a/src/legacy/status_im/visibility_status_updates/core.cljs +++ b/src/legacy/status_im/visibility_status_updates/core.cljs @@ -130,7 +130,7 @@ status-type]}] (and (= status-type constants/visibility-status-inactive) - (> (:peers-count db) 0)) + (pos? (:peer-stats/count db))) ;; Disable broadcasting further updates (conj {:ms 1000 :dispatch diff --git a/src/status_im/common/peer_stats/events.cljs b/src/status_im/common/peer_stats/events.cljs new file mode 100644 index 0000000000..c726bae7bc --- /dev/null +++ b/src/status_im/common/peer_stats/events.cljs @@ -0,0 +1,17 @@ +(ns status-im.common.peer-stats.events + (:require + [taoensso.timbre :as log] + [utils.re-frame :as rf])) + +(rf/reg-event-fx :peer-stats/get-count + (fn [] + {:fx [[:json-rpc/call + [{:method :wakuext_peers + :on-success [:peer-stats/get-count-success] + :on-error (fn [error] + (log/error "failed to fetch wakuv2 peer count" + {:error error}))}]]]})) + +(rf/reg-event-fx :peer-stats/get-count-success + (fn [{:keys [db]} [response]] + {:db (assoc db :peer-stats/count (count response))})) diff --git a/src/status_im/common/signals/events.cljs b/src/status_im/common/signals/events.cljs index e64753a87f..c5df52d711 100644 --- a/src/status_im/common/signals/events.cljs +++ b/src/status_im/common/signals/events.cljs @@ -10,7 +10,6 @@ [status-im.contexts.communities.discover.events] [status-im.contexts.profile.push-notifications.local.events :as local-notifications] [taoensso.timbre :as log] - [utils.debounce :as debounce] [utils.re-frame :as rf] [utils.transforms :as transforms])) @@ -20,17 +19,10 @@ peers-count (count peers-summary)] (rf/merge cofx {:db (assoc db - :peers-summary peers-summary - :peers-count peers-count)} + :peers-summary peers-summary + :peer-stats/count peers-count)} (visibility-status-updates/peers-summary-change peers-count)))) -(rf/reg-event-fx :wakuv2-peer-stats - (fn [{:keys [db]} [^js peer-stats-js]] - (let [peer-stats (transforms/js->clj peer-stats-js)] - {:db (assoc db - :peer-stats peer-stats - :peers-count (count (:peers peer-stats)))}))) - (rf/defn process {:events [:signals/signal-received]} [{:keys [db] :as cofx} event-str] @@ -46,9 +38,6 @@ "wallet" {:fx [[:dispatch [:wallet/signal-received event-js]]]} - "wakuv2.peerstats" - (debounce/debounce-and-dispatch [:wakuv2-peer-stats event-js] 1000) - "envelope.sent" (messages.transport/update-envelopes-status cofx diff --git a/src/status_im/contexts/profile/settings/visibility_sheet/view.cljs b/src/status_im/contexts/profile/settings/visibility_sheet/view.cljs index a1673bb004..74ccfca1e5 100644 --- a/src/status_im/contexts/profile/settings/visibility_sheet/view.cljs +++ b/src/status_im/contexts/profile/settings/visibility_sheet/view.cljs @@ -1,5 +1,6 @@ (ns status-im.contexts.profile.settings.visibility-sheet.view (:require [quo.core :as quo] + [react-native.core :as rn] [status-im.constants :as constants] [utils.i18n :as i18n] [utils.re-frame :as rf])) @@ -17,6 +18,10 @@ [:visibility-status-updates/visibility-status-update public-key]) customization-color (rf/sub [:profile/customization-color])] + (rn/use-mount + (fn [] + (rf/dispatch [:peer-stats/get-count]))) + [quo/action-drawer [[{:icon :i/online :no-icon-color? true diff --git a/src/status_im/db.cljs b/src/status_im/db.cljs index 3c9b06d44b..71259c3a24 100644 --- a/src/status_im/db.cljs +++ b/src/status_im/db.cljs @@ -20,7 +20,7 @@ :link-previews-whitelist [] :app-state "active" :wallet wallet/defaults - :peers-count 0 + :peer-stats/count 0 :node-info {} :peers-summary [] :transport/message-envelopes {} diff --git a/src/status_im/events.cljs b/src/status_im/events.cljs index 1140b2f44f..a93ca91201 100644 --- a/src/status_im/events.cljs +++ b/src/status_im/events.cljs @@ -9,6 +9,7 @@ [status-im.common.json-rpc.events] status-im.common.log status-im.common.password-authentication.events + status-im.common.peer-stats.events status-im.common.shared-urls.events status-im.common.signals.events status-im.common.theme.events diff --git a/src/status_im/subs/general.cljs b/src/status_im/subs/general.cljs index 2f7026a0c1..d94aec3c40 100644 --- a/src/status_im/subs/general.cljs +++ b/src/status_im/subs/general.cljs @@ -3,7 +3,6 @@ [clojure.string :as string] [legacy.status-im.multiaccounts.model :as multiaccounts.model] [legacy.status-im.utils.build :as build] - [legacy.status-im.utils.mobile-sync :as mobile-network-utils] [re-frame.core :as re-frame] [status-im.subs.chat.utils :as chat.utils] [utils.ethereum.chain :as chain])) @@ -76,17 +75,6 @@ (fn [network] (:name network))) -(re-frame/reg-sub - :disconnected? - :<- [:peers-count] - :<- [:waku/v2-flag] - :<- [:waku/v2-peer-stats] - (fn [[peers-count wakuv2-flag peer-stats]] - ;; If wakuv2 is enabled, then fetch connectivity status from - ;; peer-stats (populated from "wakuv2.peerstats" status-go signal) - ;; Otherwise use peers-count fetched from "discovery.summary" signal - (if wakuv2-flag (not (:isOnline peer-stats)) (zero? peers-count)))) - (re-frame/reg-sub :syncing? :<- [:sync-state] @@ -146,55 +134,6 @@ (-> selected-contacts (contains? element)))) -(re-frame/reg-sub - :is-participant-selected? - :<- [:group-chat/selected-participants] - (fn [selected-participants [_ element]] - (-> selected-participants - (contains? element)))) - -(re-frame/reg-sub - :ethereum/chain-keyword - :<- [:current-network] - (fn [network] - (chain/network->chain-keyword network))) - -(re-frame/reg-sub - :connectivity/state - :<- [:network-status] - :<- [:disconnected?] - :<- [:mailserver/connecting?] - :<- [:mailserver/connection-error?] - :<- [:mailserver/request-error?] - :<- [:network/type] - :<- [:profile/profile] - (fn [[network-status disconnected? mailserver-connecting? mailserver-connection-error? - mailserver-request-error? network-type {:keys [syncing-on-mobile-network? use-mailservers?]}]] - (merge {:mobile (mobile-network-utils/cellular? network-type) - :sync syncing-on-mobile-network? - :peers :online} - (cond - (= network-status :offline) - {:peers :offline - :node :offline} - - (not use-mailservers?) - {:node :disabled} - - (or mailserver-connection-error? mailserver-connecting?) - {:node :connecting} - - mailserver-request-error? - {:node :error} - - disconnected? - {:peers :offline - :node :offline} - - :else - {:peers :online - :node :online})))) - (re-frame/reg-sub :mnemonic :<- [:profile/profile] diff --git a/src/status_im/subs/profile.cljs b/src/status_im/subs/profile.cljs index 0730eb732e..d87a720f5e 100644 --- a/src/status_im/subs/profile.cljs +++ b/src/status_im/subs/profile.cljs @@ -166,12 +166,6 @@ (fn [multiaccount] (get multiaccount :log-level))) -(re-frame/reg-sub - :waku/v2-flag - :<- [:fleets/current-fleet] - (fn [fleet] - (string/starts-with? (name fleet) "wakuv2"))) - (re-frame/reg-sub :dapps-address :<- [:profile/profile] diff --git a/src/status_im/subs/root.cljs b/src/status_im/subs/root.cljs index ee04ebfeda..a0c43537ff 100644 --- a/src/status_im/subs/root.cljs +++ b/src/status_im/subs/root.cljs @@ -64,7 +64,6 @@ (reg-root-key-sub :tooltips :tooltips) (reg-root-key-sub :app-state :app-state) (reg-root-key-sub :home-items-show-number :home-items-show-number) -(reg-root-key-sub :waku/v2-peer-stats :peer-stats) (reg-root-key-sub :password-authentication :password-authentication) (reg-root-key-sub :initials-avatar-font-file :initials-avatar-font-file) (reg-root-key-sub :alert-banners :alert-banners)