Skip to content

Commit

Permalink
Add setting to filter out trace views that aren't interesting
Browse files Browse the repository at this point in the history
  • Loading branch information
danielcompton committed Jan 26, 2018
1 parent a43ff64 commit e34047c
Show file tree
Hide file tree
Showing 7 changed files with 91 additions and 57 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ All notable changes to this project will be documented in this file. This change
* Setting to control how many epochs are retained
* Setting to reset all epochs
* Setting to ignore epochs
* Setting to filter out trace for views from uninteresting namespaces

### Changed

Expand Down
5 changes: 5 additions & 0 deletions src/day8/re_frame/trace/db.cljs
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,10 @@
external-window? (localstorage/get "external-window?" false)
using-trace? (localstorage/get "using-trace?" true)
ignored-events (localstorage/get "ignored-events" {})
filtered-view-trace (localstorage/get "filtered-view-trace" (let [id1 (random-uuid)
id2 (random-uuid)]
{id1 {:id id1 :ns-str "re-com.box" :ns 're-com.box :sort 0}
id2 {:id id2 :ns-str "re-com.input-text" :ns 're-com.input-text :sort 1}}))
num-epochs (localstorage/get "retained-epochs" 5)
categories (localstorage/get "categories" #{:event :sub/run :sub/create :sub/dispose})]
(when using-trace?
Expand All @@ -20,6 +24,7 @@
(rf/dispatch [:settings/show-panel? show-panel?])
(rf/dispatch [:settings/selected-tab selected-tab])
(rf/dispatch [:settings/set-ignored-events ignored-events])
(rf/dispatch [:settings/set-filtered-view-trace filtered-view-trace])
(rf/dispatch [:settings/set-number-of-retained-epochs num-epochs])
(when external-window?
(rf/dispatch [:global/launch-external]))
Expand Down
32 changes: 32 additions & 0 deletions src/day8/re_frame/trace/events.cljs
Original file line number Diff line number Diff line change
Expand Up @@ -194,6 +194,38 @@
(fn [_ [_ ignored-events]]
ignored-events))

(def filtered-view-trace-mw
[(rf/path [:settings :filtered-view-trace]) (rf/after #(localstorage/save! "filtered-view-trace" %))])

(rf/reg-event-db
:settings/add-filtered-view-trace
filtered-view-trace-mw
(fn [filtered-view-trace _]
(let [id (random-uuid)]
(assoc filtered-view-trace id {:id id :ns-str "" :ns nil :sort (js/Date.now)}))))

(rf/reg-event-db
:settings/remove-filtered-view-trace
filtered-view-trace-mw
(fn [filtered-view-trace [_ id]]
(dissoc filtered-view-trace id)))

(rf/reg-event-db
:settings/update-filtered-view-trace
filtered-view-trace-mw
(fn [filtered-view-trace [_ id ns-str]]
;; TODO: this won't inform users if they type bad strings in.
(let [event (read-string-maybe ns-str)]
(-> filtered-view-trace
(assoc-in [id :ns-str] ns-str)
(update-in [id :ns] (fn [old-event] (if event event old-event)))))))

(rf/reg-event-db
:settings/set-filtered-view-trace
filtered-view-trace-mw
(fn [_ [_ ignored-events]]
ignored-events))

(rf/reg-event-db
:settings/low-level-trace
[(rf/path [:settings :low-level-trace])]
Expand Down
3 changes: 3 additions & 0 deletions src/day8/re_frame/trace/metamorphic.cljc
Original file line number Diff line number Diff line change
Expand Up @@ -142,6 +142,9 @@
(defn subscription-not-run? [trace]
false)

(defn render? [trace]
(= :render (:op-type trace)))

(defn unchanged-l2-subscription? [sub]
;; TODO: check if value changed
(and
Expand Down
56 changes: 39 additions & 17 deletions src/day8/re_frame/trace/subs.cljs
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
(ns day8.re-frame.trace.subs
(:require [mranderson047.re-frame.v0v10v2.re-frame.core :as rf]
[day8.re-frame.trace.metamorphic :as metam]
[day8.re-frame.trace.utils.utils :as utils]))
[day8.re-frame.trace.utils.utils :as utils]
[clojure.string :as str]))

(rf/reg-sub
:settings/root
Expand Down Expand Up @@ -46,6 +47,12 @@
(fn [settings]
(sort-by :sort (vals (:ignored-events settings)))))

(rf/reg-sub
:settings/filtered-view-trace
:<- [:settings/root]
(fn [settings]
(sort-by :sort (vals (:filtered-view-trace settings)))))

(rf/reg-sub
:settings/low-level-trace
;; TODO: filter from traces panel
Expand Down Expand Up @@ -139,8 +146,23 @@
(count traces)))

(rf/reg-sub
:traces/current-event-traces
:traces/all-visible-traces
:<- [:traces/all-traces]
:<- [:settings/filtered-view-trace]
(fn [[all-traces filtered-views] _]
(let [munged-ns (->> filtered-views
(map (comp munge :ns-str))
(set))]
(into []
;; Filter out view namespaces we don't care about.
(remove
(fn [trace] (and (metam/render? trace)
(contains? munged-ns (subs (:operation trace) 0 (str/last-index-of (:operation trace) "."))))))
all-traces))))

(rf/reg-sub
:traces/current-event-traces
:<- [:traces/all-visible-traces]
:<- [:epochs/beginning-trace-id]
:<- [:epochs/ending-trace-id]
(fn [[traces beginning ending] _]
Expand Down Expand Up @@ -354,13 +376,13 @@
:<- [:subs/all-sub-traces]
:<- [:app-db/reagent-id]
(fn [[traces app-db-id]]
(let [raw (map (fn [trace] (let [pod-type (sub-op-type->type trace)
path-data (get-in trace [:tags :query-v])
(let [raw (map (fn [trace] (let [pod-type (sub-op-type->type trace)
path-data (get-in trace [:tags :query-v])
;; TODO: detect layer 2/3 for sub/create and sub/destroy
;; This information needs to be accumulated.
layer (if (some #(= app-db-id %) (get-in trace [:tags :input-signals]))
2
3)]
layer (if (some #(= app-db-id %) (get-in trace [:tags :input-signals]))
2
3)]
{:id (str pod-type (get-in trace [:tags :reaction]))
:type pod-type
:layer layer
Expand All @@ -379,25 +401,25 @@
(filter #(= :created (:type %)))
(map (juxt :path-data identity))
(into {}))
raw (keep (fn [sub]
(case (:type sub)
:created (if-some [re-run-sub (get re-run (:path-data sub))]
(assoc sub :value (:value re-run-sub))
sub)
raw (keep (fn [sub]
(case (:type sub)
:created (if-some [re-run-sub (get re-run (:path-data sub))]
(assoc sub :value (:value re-run-sub))
sub)

:re-run (when-not (contains? created (:path-data sub))
sub)
:re-run (when-not (contains? created (:path-data sub))
sub)

sub))
raw)
sub))
raw)

;; Filter out run if it was created
;; Group together run time
run-multiple? (into {}
(filter (fn [[k v]] (< 1 v)))
(frequencies (map :id raw)))

output (map (fn [sub] (assoc sub :run-times (get run-multiple? (:id sub)))) raw)]
output (map (fn [sub] (assoc sub :run-times (get run-multiple? (:id sub)))) raw)]
(sort-by identity subscription-comparator output))))

(rf/reg-sub
Expand Down
48 changes: 10 additions & 38 deletions src/day8/re_frame/trace/view/settings.cljs
Original file line number Diff line number Diff line change
Expand Up @@ -15,34 +15,6 @@
(def settings-box-81 (render-css (units/px- common/gs-81 (units/px* 2 settings-box-vertical-padding))))
(def settings-box-131 (render-css (units/px- common/gs-131 (units/px* 2 settings-box-vertical-padding))))

;; TODO: START ========== LOCAL DATA - REPLACE WITH SUBS AND EVENTS

(def *ignore-items (r/atom [{:id (gensym) :text ":some/event-id"}]))

(def *filter-items (r/atom [{:id (gensym) :text "re-com.h-box"}
{:id (gensym) :text "re-com.input-text"}]))

(defn add-item [*items]
(let [id (gensym)]
(println "Added item" id)
(swap! *items concat [{:id id :text ""}])))

(defn delete-item [*items id]
(println "Deleted item" id)
(reset! *items (filterv #(not= id (:id %)) @*items)))

(defn update-item-field
[*items id field new-val]
(let [f (fn [item]
(if (= id (:id item))
(do
(println "Updated" field "in" (:id item) "from" (get item field) "to" new-val)
(assoc item field new-val))
item))]
(reset! *items (mapv f @*items))))

;; TODO: END ========== LOCAL DATA - REPLACE WITH SUBS AND EVENTS

(def settings-styles
[:#--re-frame-trace--
[:.settings
Expand Down Expand Up @@ -149,9 +121,8 @@
[:p "Useful if you want to ignore a periodic background polling event."]]
settings-box-131]

;; TODO: filter out view trace
#_[rc/line]
#_[settings-box
[rc/line]
[settings-box
[[rc/h-box
:align :center
:gap horizontal-gap
Expand All @@ -162,18 +133,19 @@
:label [rc/v-box
:align :center
:children ["+ namespace"]]
:on-click #(add-item *filter-items)]]]
:on-click #(rf/dispatch [:settings/add-filtered-view-trace])]]]
[rc/v-box
:width comp-section-width
:gap vertical-gap
:children (for [item @*filter-items]
^{:key (:id item)}
:children (for [item @(rf/subscribe [:settings/filtered-view-trace])
:let [id (:id item)]]
^{:key id}
[closeable-text-box
:model (:text item)
:model (:ns-str item)
:width "343px"
:on-close #(delete-item *filter-items (:id item))
:on-change #(update-item-field *filter-items (:id item) :text %)])]]
[[:p "Sometimes you want to focus on just your own views, and the trace associated with library views is just noise."]
:on-close #(rf/dispatch [:settings/remove-filtered-view-trace id])
:on-change #(rf/dispatch [:settings/update-filtered-view-trace id %])])]]
[[:p "Sometimes you want to focus on your own views, and the trace associated with library views is just noise."]
[:p "Nominate one or more namespaces."]]
settings-box-131]

Expand Down
3 changes: 1 addition & 2 deletions src/day8/re_frame/trace/view/traces.cljs
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,7 @@
trace-detail-expansions (rf/subscribe [:traces/expansions])
beginning (rf/subscribe [:epochs/beginning-trace-id])
end (rf/subscribe [:epochs/ending-trace-id])
traces (rf/subscribe [:traces/all-traces])
current-traces (rf/subscribe [:traces/current-event-traces])
show-epoch-traces? (rf/subscribe [:traces/show-epoch-traces?])]
(fn []
Expand Down Expand Up @@ -173,5 +174,3 @@
[:span "(" [:button.text-button {:on-click #(rf/dispatch [:epochs/reset])} "clear"] ")"])]
[:th {:style {:text-align "right"}} "meta"]]
[:tbody (render-traces visible-traces filter-items filter-input trace-detail-expansions)]]]]))))


0 comments on commit e34047c

Please sign in to comment.