Skip to content

Commit e18edce

Browse files
committed
Allow user to filter proc state that is displayed in monitor
1 parent c37f20f commit e18edce

2 files changed

Lines changed: 21 additions & 4 deletions

File tree

src/clojure/core/async/flow_monitor.clj

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,21 @@
4343
:clojure.core.async.flow/ins (reduce-kv reducer-fn {} (:clojure.core.async.flow/ins proc))
4444
:clojure.core.async.flow/outs (reduce-kv reducer-fn {} (:clojure.core.async.flow/outs proc)))))
4545

46+
(defn default-flow-state-filter [proc-state]
47+
(into {} (filter (fn [[k _]] (not= "clojure.core.async.flow" (namespace k))) proc-state)))
48+
49+
(defn filter-state [proc filters]
50+
(let [pid (:clojure.core.async.flow/pid proc)
51+
user-filter (cond
52+
(contains? filters pid) (pid filters)
53+
(contains? filters :default) (:default filters)
54+
:else identity)
55+
filtered-state (->> (:clojure.core.async.flow/state proc)
56+
(default-flow-state-filter)
57+
(filter user-filter)
58+
(into {}))]
59+
(assoc proc :clojure.core.async.flow/state filtered-state)))
60+
4661
(defn send-message [state message]
4762
(doall (for [channel (:channels @state)]
4863
(httpkit/send! channel (transit-str-writer message (:handlers @state))))))
@@ -53,7 +68,9 @@
5368
(if (:loop-ping? @s)
5469
(do (send-message state {:action :ping :data (d/datafy (reduce-kv
5570
(fn [res k v]
56-
(assoc res k (mainline-chan-meta v)))
71+
(-> res
72+
(assoc k (mainline-chan-meta v))
73+
(assoc k (filter-state v (:filters @state)))))
5774
{}
5875
(flow/ping (:flow @state))))})
5976
(Thread/sleep 1000)
@@ -124,11 +141,11 @@
124141
125142
Returns:
126143
An atom containing the server's state, and prints a local url where the frontend can be reached"
127-
[{:keys [flow port handlers] :or {port 9998}}]
144+
[{:keys [flow port handlers filters] :or {port 9998}}]
128145
(let [state (atom default-state)
129146
error-chan (:clojure.datafy/obj (meta (:error (:chans (d/datafy flow)))))
130147
report-chan (:clojure.datafy/obj (meta (:report (:chans (d/datafy flow)))))]
131-
(swap! state assoc :flow flow :handlers handlers)
148+
(swap! state assoc :flow flow :handlers handlers :filters filters)
132149
(report-monitoring state report-chan error-chan)
133150
(let [server (httpkit/run-server (app state) {:port port
134151
:max-body 100000000

src/clojurescript/flow_monitor_ui/routes/index/view.cljs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -207,7 +207,7 @@
207207
paused? (= :paused (:status proc-stats))]
208208
[:div.middle-section-one-container
209209
[:div.title-container [:h2.title (titleize-keyword proc)]]
210-
(when (:state proc-stats)
210+
(when (not-empty (:state proc-stats))
211211
[:div.state [:pre.code-block [:code (fmt-state (:state proc-stats))]]])
212212
[:div.call-count (format-number (:count proc-stats))]
213213
[:div.action-buttons

0 commit comments

Comments
 (0)