diff --git a/src/status_im/anon_metrics/interceptors.cljs b/src/status_im/anon_metrics/interceptors.cljs new file mode 100644 index 0000000000..fa9afc5df4 --- /dev/null +++ b/src/status_im/anon_metrics/interceptors.cljs @@ -0,0 +1,27 @@ +(ns status-im.anon-metrics.interceptors + (:require [status-im.ethereum.json-rpc :as json-rpc] + [taoensso.timbre :as log] + [re-frame.interceptor :refer [->interceptor]] + [status-im.utils.platform :as platform] + [status-im.utils.build :as build] + [status-im.anon-metrics.transformers :as txf])) + +(defn transform-and-log [context] + (log/info :catch-event-fn (get-in context [:coeffects :event])) + (when-let [transformed-payload (txf/transform context)] + (json-rpc/call {:method "appmetrics_saveAppMetrics" + :params [[{:event (-> context :coeffects :event first) + :value transformed-payload + :app_version build/version + :os platform/os}]] + :on-failure #(log/error)}))) + +(defn catch-events-before [context] + (log/info "catch-events/interceptor fired") + (transform-and-log context) + context) + +(def catch-events + (->interceptor + :id :catch-events + :before catch-events-before)) diff --git a/src/status_im/anon_metrics/transformers.cljs b/src/status_im/anon_metrics/transformers.cljs new file mode 100644 index 0000000000..266f92b702 --- /dev/null +++ b/src/status_im/anon_metrics/transformers.cljs @@ -0,0 +1,14 @@ +(ns status-im.anon-metrics.transformers) + +(defn navigate-to-txf [context] + {:view-id (second context) + :params (-> context + (nth 2) + (select-keys [:screen]))}) + +(def transformations + {:navigate-to navigate-to-txf}) + +(defn transform [ctx] + (when-let [txf (-> ctx first transformations)] + (txf ctx))) diff --git a/src/status_im/ethereum/json_rpc.cljs b/src/status_im/ethereum/json_rpc.cljs index 590987b202..216e1eba7b 100644 --- a/src/status_im/ethereum/json_rpc.cljs +++ b/src/status_im/ethereum/json_rpc.cljs @@ -179,7 +179,8 @@ "mailservers_addChatRequestRange" {} "mailservers_addChatRequestRanges" {} "mailservers_getChatRequestRanges" {} - "mailservers_deleteChatRequestRange" {}}) + "mailservers_deleteChatRequestRange" {} + "appmetrics_saveAppMetrics" {}}) (defn on-error-retry [call-method {:keys [method number-of-retries delay on-error] :as arg}] diff --git a/src/status_im/navigation.cljs b/src/status_im/navigation.cljs index 5393842304..b872bdab30 100644 --- a/src/status_im/navigation.cljs +++ b/src/status_im/navigation.cljs @@ -2,7 +2,8 @@ (:require [re-frame.core :as re-frame] [status-im.ui.screens.routing.core :as navigation] [taoensso.timbre :as log] - [status-im.utils.fx :as fx])) + [status-im.utils.fx :as fx] + [status-im.anon-metrics.interceptors :as anon-metrics])) (re-frame/reg-fx ::navigate-to @@ -44,7 +45,8 @@ ::navigate-to [go-to-view-id screen-params]}) (fx/defn navigate-to - {:events [:navigate-to]} + {:events [:navigate-to] + :interceptors [anon-metrics/catch-events]} [cofx go-to-view-id screen-params] (navigate-to-cofx cofx go-to-view-id screen-params)) @@ -59,7 +61,8 @@ {::navigate-reset config}) (fx/defn navigate-replace - {:events [:navigate-replace]} + {:events [:navigate-replace] + :interceptors [anon-metrics/catch-events]} [{:keys [db]} go-to-view-id screen-params] (let [db (cond-> (assoc db :view-id go-to-view-id) (seq screen-params)