Skip to content

Commit

Permalink
+ change view_count for cards in a dashboard to take tabs into account
Browse files Browse the repository at this point in the history
  • Loading branch information
calherries committed May 24, 2024
1 parent 5ad73d6 commit c03b5c1
Show file tree
Hide file tree
Showing 4 changed files with 16 additions and 31 deletions.
6 changes: 4 additions & 2 deletions src/metabase/api/dashboard.clj
Original file line number Diff line number Diff line change
Expand Up @@ -1156,7 +1156,8 @@
body
{:dashboard-id dashboard-id
:card-id card-id
:dashcard-id dashcard-id})))
:dashcard-id dashcard-id}))
(events/publish-event! :event/card-read {:object (t2/select-one :model/Card card-id) :user-id api/*current-user-id*}))

(api/defendpoint POST "/:dashboard-id/dashcard/:dashcard-id/card/:card-id/query/:export-format"
"Run the query associated with a Saved Question (`Card`) in the context of a `Dashboard` that includes it, and return
Expand Down Expand Up @@ -1203,6 +1204,7 @@
{:dashboard-id dashboard-id
:card-id card-id
:dashcard-id dashcard-id
:qp qp.pivot/run-pivot-query})))
:qp qp.pivot/run-pivot-query}))
(events/publish-event! :event/card-read {:object (t2/select-one :model/Card card-id) :user-id api/*current-user-id*}))

(api/define-routes)
6 changes: 4 additions & 2 deletions src/metabase/api/embed.clj
Original file line number Diff line number Diff line change
Expand Up @@ -144,7 +144,8 @@
[token dashcard-id card-id & query-params]
{dashcard-id ms/PositiveInt
card-id ms/PositiveInt}
(process-query-for-dashcard-with-signed-token token dashcard-id card-id :api query-params))
(process-query-for-dashcard-with-signed-token token dashcard-id card-id :api query-params)
(events/publish-event! :event/card-read {:object (t2/select-one :model/Card card-id) :user-id api/*current-user-id*}))


;;; +----------------------------------------------------------------------------------------------------------------+
Expand Down Expand Up @@ -304,6 +305,7 @@
[token dashcard-id card-id & query-params]
{dashcard-id ms/PositiveInt
card-id ms/PositiveInt}
(process-query-for-dashcard-with-signed-token token dashcard-id card-id :api query-params :qp qp.pivot/run-pivot-query))
(process-query-for-dashcard-with-signed-token token dashcard-id card-id :api query-params :qp qp.pivot/run-pivot-query)
(events/publish-event! :event/card-read {:object (t2/select-one :model/Card card-id) :user-id api/*current-user-id*}))

(api/define-routes)
9 changes: 5 additions & 4 deletions src/metabase/api/public.clj
Original file line number Diff line number Diff line change
Expand Up @@ -284,14 +284,15 @@
card-id ms/PositiveInt
parameters [:maybe ms/JSONString]}
(validation/check-public-sharing-enabled)
(api/check-404 (t2/select-one-pk :model/Card :id card-id :archived false))
(let [dashboard-id (api/check-404 (t2/select-one-pk Dashboard :public_uuid uuid, :archived false))]
(let [card (api/check-404 (t2/select-one :model/Card :id card-id :archived false))
dashboard-id (api/check-404 (t2/select-one-pk Dashboard :public_uuid uuid, :archived false))]
(process-query-for-dashcard
:dashboard-id dashboard-id
:card-id card-id
:dashcard-id dashcard-id
:export-format :api
:parameters parameters)))
:parameters parameters)
(events/publish-event! :event/card-read {:object card :user-id api/*current-user-id*})))

(api/defendpoint GET "/dashboard/:uuid/dashcard/:dashcard-id/execute"
"Fetches the values for filling in execution parameters. Pass PK parameters and values to select."
Expand Down Expand Up @@ -606,7 +607,7 @@
dashcard-id ms/PositiveInt
parameters [:maybe ms/JSONString]}
(validation/check-public-sharing-enabled)
(let [dashboard-id (api/check-404 (t2/select-one-pk Dashboard :public_uuid uuid, :archived false))]
(let [dashboard-id (api/check-404 (t2/select-one Dashboard :public_uuid uuid, :archived false))]
(process-query-for-dashcard
:dashboard-id dashboard-id
:card-id card-id
Expand Down
26 changes: 3 additions & 23 deletions src/metabase/events/view_log.clj
Original file line number Diff line number Diff line change
Expand Up @@ -89,35 +89,15 @@
(derive ::dashboard-read :metabase/event)
(derive :event/dashboard-read ::dashboard-read)

(defn- readable-dashcard?
"Returns true if the dashcard's card was readable by the current user, and false otherwise. Unreadable cards are
replaced with maps containing just the card's ID, so we can check for this to determine whether the card was readable"
[dashcard]
(let [card (:card dashcard)]
(not= (set (keys card)) #{:id})))

(m/defmethod events/publish-event! ::dashboard-read
"Handle processing for the dashboard read event. Logs the dashboard view as well as card views for each card on the
dashboard."
[topic {:keys [object user-id] :as event}]
"Handle processing for the dashboard read event. Logs the dashboard view. Card views are logged separately."
[topic {:keys [object user-id] :as _event}]
(span/with-span!
{:name "view-log-dashboard-read"
:topic topic
:user-id user-id}
(try
(let [dashcards (filter :card_id (:dashcards object)) ;; filter out link/text cards wtih no card_id
user-id (or user-id api/*current-user-id*)
views (map (fn [dashcard]
{:model "card"
:model_id (u/id (:card_id dashcard))
:user_id user-id
:has_access (readable-dashcard? dashcard)
:context "dashboard"})
dashcards)
dash-view (generate-view event)]
(apply increment-view-counts! :model/Card (map :card_id dashcards))
(increment-view-counts! :model/Dashboard (:id object))
(record-views! (cons dash-view views)))
(increment-view-counts! :model/Dashboard (:id object))
(catch Throwable e
(log/warnf e "Failed to process view event. %s" topic)))))

Expand Down

0 comments on commit c03b5c1

Please sign in to comment.