* [feature] [#13099] Automatic RPC usage refresh
This commit is contained in:
parent
872a732c31
commit
7c4897f251
|
@ -1,12 +1,14 @@
|
||||||
(ns status-im.ui.screens.rpc-usage-info
|
(ns status-im.ui.screens.rpc-usage-info
|
||||||
(:require [status-im.ui.components.react :as react]
|
(:require [status-im.ui.components.react :as react]
|
||||||
[status-im.i18n.i18n :as i18n]
|
[status-im.i18n.i18n :as i18n]
|
||||||
|
[reagent.core :as reagent]
|
||||||
[quo.core :as quo.core]
|
[quo.core :as quo.core]
|
||||||
[quo.react-native :as quo.react-native]
|
[quo.react-native :as quo.react-native]
|
||||||
[re-frame.core :as re-frame]
|
[re-frame.core :as re-frame]
|
||||||
[status-im.utils.fx :as fx]
|
[status-im.utils.fx :as fx]
|
||||||
[status-im.ethereum.json-rpc :as json-rpc]
|
[status-im.ethereum.json-rpc :as json-rpc]
|
||||||
[taoensso.timbre :as log]
|
[taoensso.timbre :as log]
|
||||||
|
[status-im.utils.utils :as utils]
|
||||||
[clojure.string :as clojure.string]))
|
[clojure.string :as clojure.string]))
|
||||||
|
|
||||||
(re-frame/reg-sub :rpc-usage/raw-data (fn [db] (get db :rpc-usage/data)))
|
(re-frame/reg-sub :rpc-usage/raw-data (fn [db] (get db :rpc-usage/data)))
|
||||||
|
@ -45,6 +47,12 @@
|
||||||
:params []
|
:params []
|
||||||
:on-success #(log/debug "rpcstats_reset success")})))
|
:on-success #(log/debug "rpcstats_reset success")})))
|
||||||
|
|
||||||
|
;; RPC refresh interval ID
|
||||||
|
(defonce rpc-refresh-interval (atom nil))
|
||||||
|
|
||||||
|
;; RPC usage refresh interval (ms)
|
||||||
|
(def rpc-usage-refresh-interval-ms 2000)
|
||||||
|
|
||||||
(fx/defn handle-stats
|
(fx/defn handle-stats
|
||||||
{:events [::handle-stats]}
|
{:events [::handle-stats]}
|
||||||
[{:keys [db]} data]
|
[{:keys [db]} data]
|
||||||
|
@ -87,9 +95,9 @@
|
||||||
^{:key (str k v)}
|
^{:key (str k v)}
|
||||||
[quo.react-native/view
|
[quo.react-native/view
|
||||||
{:style {:flex-direction :row
|
{:style {:flex-direction :row
|
||||||
:justify-content :space-between}}
|
:align-items :center}}
|
||||||
[quo.core/text k]
|
[quo.core/text {:style {:flex 1}} k]
|
||||||
[quo.core/text v]]))])
|
[quo.core/text {:style {:margin-left 16}} v]]))])
|
||||||
|
|
||||||
(defn prepare-stats [{:keys [stats]}]
|
(defn prepare-stats [{:keys [stats]}]
|
||||||
(clojure.string/join
|
(clojure.string/join
|
||||||
|
@ -98,7 +106,7 @@
|
||||||
(str k " " v))
|
(str k " " v))
|
||||||
stats)))
|
stats)))
|
||||||
|
|
||||||
(defn usage-info []
|
(defn usage-info-render []
|
||||||
(let [stats @(re-frame/subscribe [:rpc-usage/data])
|
(let [stats @(re-frame/subscribe [:rpc-usage/data])
|
||||||
methods-filter @(re-frame/subscribe [:rpc-usage/filter])]
|
methods-filter @(re-frame/subscribe [:rpc-usage/filter])]
|
||||||
[react/view {:flex 1
|
[react/view {:flex 1
|
||||||
|
@ -106,11 +114,7 @@
|
||||||
[quo.react-native/view
|
[quo.react-native/view
|
||||||
{:style {:flex-direction :row
|
{:style {:flex-direction :row
|
||||||
:margin-top 8
|
:margin-top 8
|
||||||
:justify-content :space-between}}
|
:justify-content :space-around}}
|
||||||
[quo.core/button
|
|
||||||
{:on-press #(re-frame/dispatch [::get-stats])
|
|
||||||
:accessibility-label :rpc-usage-get-stats}
|
|
||||||
(i18n/label :t/rpc-usage-get-stats)]
|
|
||||||
[quo.core/button
|
[quo.core/button
|
||||||
{:on-press #(re-frame/dispatch [::reset])
|
{:on-press #(re-frame/dispatch [::reset])
|
||||||
:accessibility-label :rpc-usage-reset}
|
:accessibility-label :rpc-usage-reset}
|
||||||
|
@ -129,4 +133,10 @@
|
||||||
:auto-focus false}]
|
:auto-focus false}]
|
||||||
[stats-table stats]]))
|
[stats-table stats]]))
|
||||||
|
|
||||||
|
(defn usage-info []
|
||||||
|
(reagent/create-class {:component-did-mount (fn []
|
||||||
|
(reset! rpc-refresh-interval (utils/set-interval #(re-frame/dispatch [::get-stats]) rpc-usage-refresh-interval-ms)))
|
||||||
|
:component-will-unmount (fn []
|
||||||
|
(utils/clear-interval @rpc-refresh-interval)
|
||||||
|
(reset! rpc-refresh-interval nil))
|
||||||
|
:reagent-render usage-info-render}))
|
||||||
|
|
Loading…
Reference in New Issue