From e2035365060a6f41f99a16ea8c06a7036a7dd276 Mon Sep 17 00:00:00 2001 From: Andrey Antukh Date: Thu, 8 May 2025 11:52:36 +0200 Subject: [PATCH] :sparkles: Add webhook trigger to audit events --- backend/src/app/loggers/audit.clj | 27 ++++++++++++----------- backend/src/app/loggers/webhooks.clj | 32 ++++++++++++++++++---------- 2 files changed, 35 insertions(+), 24 deletions(-) diff --git a/backend/src/app/loggers/audit.clj b/backend/src/app/loggers/audit.clj index 88e506f22..20d300ea7 100644 --- a/backend/src/app/loggers/audit.clj +++ b/backend/src/app/loggers/audit.clj @@ -108,6 +108,7 @@ [::ip-addr {:optional true} ::sm/text] [::props {:optional true} [:map-of :keyword :any]] [::context {:optional true} [:map-of :keyword :any]] + [::tracked-at {:optional true} ::sm/inst] [::webhooks/event? {:optional true} ::sm/boolean] [::webhooks/batch-timeout {:optional true} ::dt/duration] [::webhooks/batch-key {:optional true} @@ -118,12 +119,12 @@ (defn prepare-event [cfg mdata params result] - (let [resultm (meta result) - request (-> params meta ::http/request) - profile-id (or (::profile-id resultm) - (:profile-id result) - (::rpc/profile-id params) - uuid/zero) + (let [resultm (meta result) + request (-> params meta ::http/request) + profile-id (or (::profile-id resultm) + (:profile-id result) + (::rpc/profile-id params) + uuid/zero) session-id (get params ::rpc/external-session-id) event-origin (get params ::rpc/external-event-origin) @@ -135,14 +136,14 @@ (clean-props)) - token-id (::actoken/id request) - context (-> (::context resultm) - (assoc :external-session-id session-id) - (assoc :external-event-origin event-origin) - (assoc :access-token-id (some-> token-id str)) - (d/without-nils)) + token-id (::actoken/id request) + context (-> (::context resultm) + (assoc :external-session-id session-id) + (assoc :external-event-origin event-origin) + (assoc :access-token-id (some-> token-id str)) + (d/without-nils)) - ip-addr (inet/parse-request request)] + ip-addr (inet/parse-request request)] {::type (or (::type resultm) (::rpc/type cfg)) diff --git a/backend/src/app/loggers/webhooks.clj b/backend/src/app/loggers/webhooks.clj index 9d2892dd7..1b8305504 100644 --- a/backend/src/app/loggers/webhooks.clj +++ b/backend/src/app/loggers/webhooks.clj @@ -15,6 +15,7 @@ [app.config :as cf] [app.db :as db] [app.http.client :as http] + [app.loggers.audit :as audit] [app.util.time :as dt] [app.worker :as wrk] [clojure.data.json :as json] @@ -67,18 +68,27 @@ (defmethod ig/init-key ::process-event-handler [_ cfg] (fn [{:keys [props] :as task}] - (l/dbg :hint "process webhook event" :name (:name props)) - (when-let [items (lookup-webhooks cfg props)] - (l/trc :hint "webhooks found for event" :total (count items)) - (db/tx-run! cfg (fn [cfg] - (doseq [item items] - (wrk/submit! (-> cfg - (assoc ::wrk/task :run-webhook) - (assoc ::wrk/queue :webhooks) - (assoc ::wrk/max-retries 3) - (assoc ::wrk/params {:event props - :config item}))))))))) + (let [items (lookup-webhooks cfg props) + event {::audit/profile-id (:profile-id props) + ::audit/name "webhook" + ::audit/type "trigger" + ::audit/props {:name (get props :name) + :event-id (get props :id) + :total-affected (count items)}}] + + (audit/insert! cfg event) + + (when items + (l/trc :hint "webhooks found for event" :total (count items)) + (db/tx-run! cfg (fn [cfg] + (doseq [item items] + (wrk/submit! (-> cfg + (assoc ::wrk/task :run-webhook) + (assoc ::wrk/queue :webhooks) + (assoc ::wrk/max-retries 3) + (assoc ::wrk/params {:event props + :config item})))))))))) ;; --- RUN (declare interpret-exception)