mirror of
https://github.com/penpot/penpot.git
synced 2025-03-14 08:41:48 -05:00
🐛 Fix bugs on audit log module.
This commit is contained in:
parent
9586d478ad
commit
6722ca41bf
2 changed files with 56 additions and 62 deletions
|
@ -8,6 +8,7 @@
|
||||||
(:require
|
(:require
|
||||||
["ua-parser-js" :as UAParser]
|
["ua-parser-js" :as UAParser]
|
||||||
[app.common.data :as d]
|
[app.common.data :as d]
|
||||||
|
[app.common.logging :as log]
|
||||||
[app.config :as cf]
|
[app.config :as cf]
|
||||||
[app.main.repo :as rp]
|
[app.main.repo :as rp]
|
||||||
[app.util.globals :as g]
|
[app.util.globals :as g]
|
||||||
|
@ -137,13 +138,10 @@
|
||||||
mdata (meta event)
|
mdata (meta event)
|
||||||
data (if (satisfies? IDeref event)
|
data (if (satisfies? IDeref event)
|
||||||
(deref event)
|
(deref event)
|
||||||
{})
|
{})]
|
||||||
|
|
||||||
name (or (::name mdata)
|
|
||||||
(name type))]
|
|
||||||
|
|
||||||
{:type "action"
|
{:type "action"
|
||||||
:name (name type)
|
:name (or (::name mdata) (name type))
|
||||||
:props (merge data (d/without-nils (::props mdata)))
|
:props (merge data (d/without-nils (::props mdata)))
|
||||||
:context (d/without-nils
|
:context (d/without-nils
|
||||||
{:event-origin (::origin mdata)
|
{:event-origin (::origin mdata)
|
||||||
|
@ -195,33 +193,26 @@
|
||||||
[events]
|
[events]
|
||||||
(if (seq events)
|
(if (seq events)
|
||||||
(let [uri (u/join cf/public-uri "api/audit/events")
|
(let [uri (u/join cf/public-uri "api/audit/events")
|
||||||
params {:events events}]
|
params {:uri uri
|
||||||
(->> (http/send! {:uri uri
|
:method :post
|
||||||
:method :post
|
:body (http/transit-data {:events events})}]
|
||||||
:body (http/transit-data params)})
|
(->> (http/send! params)
|
||||||
(rx/mapcat rp/handle-response)))
|
(rx/mapcat rp/handle-response)))
|
||||||
(rx/of nil)))
|
(rx/of nil)))
|
||||||
|
|
||||||
(defmethod ptk/resolve ::persistence
|
|
||||||
[_ {:keys [buffer] :as params}]
|
|
||||||
(ptk/reify ::persistence
|
|
||||||
ptk/EffectEvent
|
|
||||||
(effect [_ state _]
|
|
||||||
(let [profile-id (:profile-id state)
|
|
||||||
events (into [] (take max-buffer-size) @buffer)]
|
|
||||||
(when (seq events)
|
|
||||||
(->> events
|
|
||||||
(filterv #(= profile-id (:profile-id %)))
|
|
||||||
(persist-events)
|
|
||||||
(rx/subs (fn [_]
|
|
||||||
(swap! buffer remove-from-buffer (count events))))))))))
|
|
||||||
|
|
||||||
(defn initialize
|
(defn initialize
|
||||||
[]
|
[]
|
||||||
(let [buffer (atom #queue [])]
|
(log/info :msg "initialize audit log")
|
||||||
(ptk/reify ::initialize
|
(ptk/reify ::initialize
|
||||||
ptk/WatchEvent
|
ptk/EffectEvent
|
||||||
(watch [_ _ stream]
|
(effect [_ _ stream]
|
||||||
|
(let [session (atom nil)
|
||||||
|
buffer (atom #queue [])
|
||||||
|
profile (->> (rx/from-atom storage {:emit-current-value? true})
|
||||||
|
(rx/map :profile)
|
||||||
|
(rx/map :id)
|
||||||
|
(rx/dedupe))]
|
||||||
|
|
||||||
(->> (rx/merge
|
(->> (rx/merge
|
||||||
(->> (rx/from-atom buffer)
|
(->> (rx/from-atom buffer)
|
||||||
(rx/filter #(pos? (count %)))
|
(rx/filter #(pos? (count %)))
|
||||||
|
@ -229,42 +220,40 @@
|
||||||
(->> stream
|
(->> stream
|
||||||
(rx/filter (ptk/type? :app.main.data.users/logout))
|
(rx/filter (ptk/type? :app.main.data.users/logout))
|
||||||
(rx/observe-on :async)))
|
(rx/observe-on :async)))
|
||||||
(rx/map #(ptk/event ::persistence {:buffer buffer}))))
|
(rx/map (fn [_]
|
||||||
|
(into [] (take max-buffer-size) @buffer)))
|
||||||
|
(rx/with-latest-from profile)
|
||||||
|
(rx/mapcat (fn [[chunk profile-id]]
|
||||||
|
(let [events (filterv #(= profile-id (:profile-id %)) chunk)]
|
||||||
|
(->> (persist-events events)
|
||||||
|
(rx/map (constantly chunk))))))
|
||||||
|
(rx/subs (fn [chunk]
|
||||||
|
(swap! buffer remove-from-buffer (count chunk)))))
|
||||||
|
|
||||||
ptk/EffectEvent
|
|
||||||
(effect [_ _ stream]
|
|
||||||
(let [session (atom nil)
|
|
||||||
|
|
||||||
profile (->> (rx/from-atom storage {:emit-current-value? true})
|
(->> stream
|
||||||
(rx/map :profile)
|
(rx/with-latest-from profile)
|
||||||
(rx/map :id)
|
(rx/map (fn [result]
|
||||||
(rx/dedupe))
|
(let [event (aget result 0)
|
||||||
|
profile-id (aget result 1)]
|
||||||
|
(some-> (process-event event)
|
||||||
|
(update :profile-id #(or % profile-id))))))
|
||||||
|
(rx/filter :profile-id)
|
||||||
|
(rx/map (fn [event]
|
||||||
|
(let [session* (or @session (dt/now))
|
||||||
|
context (-> @context
|
||||||
|
(d/merge (:context event))
|
||||||
|
(assoc :session session*))]
|
||||||
|
(reset! session session*)
|
||||||
|
(-> event
|
||||||
|
(assoc :timestamp (dt/now))
|
||||||
|
(assoc :context context)))))
|
||||||
|
|
||||||
source (->> stream
|
(rx/tap (fn [event]
|
||||||
(rx/with-latest-from profile)
|
(swap! buffer append-to-buffer event)))
|
||||||
(rx/map (fn [result]
|
|
||||||
(let [event (aget result 0)
|
|
||||||
profile-id (aget result 1)]
|
|
||||||
(some-> (process-event event)
|
|
||||||
(update :profile-id #(or % profile-id))))))
|
|
||||||
(rx/filter :profile-id)
|
|
||||||
(rx/map (fn [event]
|
|
||||||
(let [session* (or @session (dt/now))
|
|
||||||
context (-> @context
|
|
||||||
(d/merge (:context event))
|
|
||||||
(assoc :session session*))]
|
|
||||||
(reset! session session*)
|
|
||||||
(-> event
|
|
||||||
(assoc :timestamp (dt/now))
|
|
||||||
(assoc :context context)))))
|
|
||||||
(rx/share))]
|
|
||||||
(->> source
|
|
||||||
(rx/switch-map #(rx/timer (inst-ms session-timeout)))
|
|
||||||
(rx/subs #(reset! session nil)))
|
|
||||||
|
|
||||||
(->> source
|
(rx/switch-map #(rx/timer (inst-ms session-timeout)))
|
||||||
(rx/subs (fn [event]
|
(rx/subs #(reset! session nil)))))))
|
||||||
(swap! buffer append-to-buffer event)))))))))
|
|
||||||
|
|
||||||
(defmethod ptk/resolve ::initialize
|
(defmethod ptk/resolve ::initialize
|
||||||
[_ params]
|
[_ params]
|
||||||
|
|
|
@ -25,9 +25,7 @@
|
||||||
(mf/use-effect
|
(mf/use-effect
|
||||||
(mf/deps team)
|
(mf/deps team)
|
||||||
(fn []
|
(fn []
|
||||||
(st/emit! (dcm/retrieve-unread-comment-threads (:id team))
|
(st/emit! (dcm/retrieve-unread-comment-threads (:id team)))))
|
||||||
(ptk/event ::ev/event {::ev/name "open-comment-notifications"
|
|
||||||
::ev/origin "dashboard"}))))
|
|
||||||
|
|
||||||
(let [show-dropdown? (mf/use-state false)
|
(let [show-dropdown? (mf/use-state false)
|
||||||
show-dropdown (mf/use-fn #(reset! show-dropdown? true))
|
show-dropdown (mf/use-fn #(reset! show-dropdown? true))
|
||||||
|
@ -47,6 +45,13 @@
|
||||||
(st/emit! (-> (dwcm/navigate thread)
|
(st/emit! (-> (dwcm/navigate thread)
|
||||||
(with-meta {::ev/origin "dashboard"})))))]
|
(with-meta {::ev/origin "dashboard"})))))]
|
||||||
|
|
||||||
|
(mf/use-effect
|
||||||
|
(mf/deps @show-dropdown?)
|
||||||
|
(fn []
|
||||||
|
(when @show-dropdown?
|
||||||
|
(st/emit! (ptk/event ::ev/event {::ev/name "open-comment-notifications"
|
||||||
|
::ev/origin "dashboard"})))))
|
||||||
|
|
||||||
[:div.dashboard-comments-section
|
[:div.dashboard-comments-section
|
||||||
[:div.button
|
[:div.button
|
||||||
{:on-click show-dropdown
|
{:on-click show-dropdown
|
||||||
|
|
Loading…
Add table
Reference in a new issue