(ns metabase-enterprise.audit-app.pages.queries (:require [metabase-enterprise.audit-app.interface :as audit.i] [metabase-enterprise.audit-app.pages.common :as common] [metabase-enterprise.audit-app.pages.common.cards :as cards] [metabase.audit :as audit] [metabase.db :as mdb])) | |
List of all failing questions | (defmethod audit.i/internal-query ::bad-table ([_] (audit.i/internal-query ::bad-table nil nil nil nil nil)) ([_ error-filter db-filter collection-filter sort-column sort-direction] {:metadata [[:card_id {:display_name "Card ID", :base_type :type/Integer :remapped_to :card_name}] [:card_name {:display_name "Question", :base_type :type/Text :remapped_from :card_id}] [:error_substr {:display_name "Error", :base_type :type/Text :code true}] [:collection_id {:display_name "Collection ID", :base_type :type/Integer :remapped_to :collection_name}] [:collection_name {:display_name "Collection", :base_type :type/Text :remapped_from :collection_id}] [:database_id {:display_name "Database ID", :base_type :type/Integer :remapped_to :database_name}] [:database_name {:display_name "Database", :base_type :type/Text :remapped_from :database_id}] [:schema_name {:display_name "Schema", :base_type :type/Text}] [:table_id {:display_name "Table ID", :base_type :type/Integer :remapped_to :table_name}] [:table_name {:display_name "Table", :base_type :type/Text :remapped_from :table_id}] [:last_run_at {:display_name "Last run at", :base_type :type/DateTime}] [:total_runs {:display_name "Total runs", :base_type :type/Integer}] ;; if it appears a billion times each in 2 dashboards, that's 2 billion appearances [:num_dashboards {:display_name "Dashboards it's in", :base_type :type/Integer}] [:user_id {:display_name "Created By ID", :base_type :type/Integer :remapped_to :user_name}] [:user_name {:display_name "Created By", :base_type :type/Text :remapped_from :user_id}] [:updated_at {:display_name "Updated At", :base_type :type/DateTime}]] :results (common/reducible-query (let [coll-name [:coalesce :coll.name "Our Analytics"] error-substr [:concat [:substring :latest_qe.error [:inline (if (= (mdb/db-type) :mysql) 1 0)] [:inline 60]] "..."] dash-count [:coalesce :dash_card.count [:inline 0]]] (-> {:with [cards/query-runs cards/latest-qe cards/dashboards-count] :select [[:card.id :card_id] [:card.name :card_name] [error-substr :error_substr] :collection_id [coll-name :collection_name] :card.database_id [:db.name :database_name] [:t.schema :schema_name] :card.table_id [:t.name :table_name] [:latest_qe.started_at :last_run_at] [:query_runs.count :total_runs] [dash-count :num_dashboards] [:card.creator_id :user_id] [(common/user-full-name :u) :user_name] [:card.updated_at :updated_at]] :from [[:report_card :card]] :left-join [[:collection :coll] [:= :card.collection_id :coll.id] [:metabase_database :db] [:= :card.database_id :db.id] [:metabase_table :t] [:= :card.table_id :t.id] [:core_user :u] [:= :card.creator_id :u.id] :latest_qe [:= :card.id :latest_qe.card_id] :query_runs [:= :card.id :query_runs.card_id] :dash_card [:= :card.id :dash_card.card_id]] :where [:and [:= :card.archived false] [:<> :latest_qe.error nil] [:not= :card.database_id audit/audit-db-id]]} (common/add-search-clause error-filter :latest_qe.error) (common/add-search-clause db-filter :db.name) (common/add-search-clause collection-filter coll-name) (common/add-sort-clause (or sort-column "card.name") (or sort-direction "asc")))))})) |