diff --git a/docs/api-documentation.md b/docs/api-documentation.md index df6d2f1a83c4927f93839bf3eccf1614b338ea18..887640accd70cf0af17e7ad70c3aaf2f21325072 100644 --- a/docs/api-documentation.md +++ b/docs/api-documentation.md @@ -52,7 +52,6 @@ _* indicates endpoints used for features available on [paid plans](https://www.m - [LDAP](api/ldap.md) - [Login history](api/login-history.md) - [Metabot](api/metabot.md) -- [Metric](api/legacy-metric.md) - [Model index](api/model-index.md) - [Native query snippet](api/native-query-snippet.md) - [Notify](api/notify.md) diff --git a/docs/api/legacy-metric.md b/docs/api/legacy-metric.md deleted file mode 100644 index 1faac817da6dcee1dde56f41fb8fc23dff5b412b..0000000000000000000000000000000000000000 --- a/docs/api/legacy-metric.md +++ /dev/null @@ -1,114 +0,0 @@ ---- -title: "Metric" -summary: | - /api/legacy-metric endpoints. ---- - -# Metric - -/api/legacy-metric endpoints. - -## `DELETE /api/legacy-metric/:id` - -Archive a Metric. (DEPRECATED -- Just pass updated value of `:archived` to the `PUT` endpoint instead.). - -### PARAMS: - -* **`id`** value must be an integer greater than zero. - -* **`revision_message`** value must be a non-blank string. - -## `GET /api/legacy-metric/` - -Fetch *all* `Metrics`. - -## `GET /api/legacy-metric/:id` - -Fetch `Metric` with ID. - -### PARAMS: - -* **`id`** value must be an integer greater than zero. - -## `GET /api/legacy-metric/:id/related` - -Return related entities. - -### PARAMS: - -* **`id`** value must be an integer greater than zero. - -## `GET /api/legacy-metric/:id/revisions` - -Fetch `Revisions` for `Metric` with ID. - -### PARAMS: - -* **`id`** value must be an integer greater than zero. - -## `POST /api/legacy-metric/` - -Create a new `Metric`. - -### PARAMS: - -* **`name`** value must be a non-blank string. - -* **`description`** nullable string - -* **`table_id`** value must be an integer greater than zero. - -* **`definition`** map - -## `POST /api/legacy-metric/:id/revert` - -Revert a `Metric` to a prior `Revision`. - -### PARAMS: - -* **`id`** value must be an integer greater than zero. - -* **`revision_id`** value must be an integer greater than zero. - -## `PUT /api/legacy-metric/:id` - -Update a `Metric` with ID. - -### PARAMS: - -* **`points_of_interest`** nullable string - -* **`description`** nullable string - -* **`archived`** nullable boolean - -* **`definition`** nullable map - -* **`revision_message`** value must be a non-blank string. - -* **`show_in_getting_started`** nullable boolean - -* **`name`** nullable value must be a non-blank string. - -* **`caveats`** nullable string - -* **`id`** value must be an integer greater than zero. - -* **`how_is_this_calculated`** nullable string - -## `PUT /api/legacy-metric/:id/important_fields` - -Update the important `Fields` for a `Metric` with ID. - (This is used for the Getting Started guide). - -You must be a superuser to do this. - -### PARAMS: - -* **`id`** value must be an integer greater than zero. - -* **`important_field_ids`** sequence of value must be an integer greater than zero. - ---- - -[<< Back to API index](../api-documentation.md) diff --git a/docs/developers-guide/api-changelog.md b/docs/developers-guide/api-changelog.md index c5b12ca45fa4b16cc4361c4801ce8a06b82022d4..bd580641871b3c38577a791c43b661771139c163 100644 --- a/docs/developers-guide/api-changelog.md +++ b/docs/developers-guide/api-changelog.md @@ -16,6 +16,10 @@ title: API changelog New endpoint that combines responses for `/api/field/:id`, `/api/database/:id`, and `/api/table/:id/query_metadata`. This should drastically cut down on the required number of requests to display a dashboard. +- `/api/legacy-metric` + + The `/api/legacy-metric` endpoints have been removed. + ## Metabase 0.50.0 - `GET /api/collection/tree` and `GET /api/collection/:id/items` diff --git a/enterprise/backend/src/metabase_enterprise/serialization/cmd.clj b/enterprise/backend/src/metabase_enterprise/serialization/cmd.clj index 3dcbaa2b15a9f09154c278781bf7ee503398c1ed..76004fa742b7178b9fc302b91dfda07e11de1e84 100644 --- a/enterprise/backend/src/metabase_enterprise/serialization/cmd.clj +++ b/enterprise/backend/src/metabase_enterprise/serialization/cmd.clj @@ -19,7 +19,6 @@ [metabase.models.dashboard :refer [Dashboard]] [metabase.models.database :refer [Database]] [metabase.models.field :as field :refer [Field]] - [metabase.models.legacy-metric :refer [LegacyMetric]] [metabase.models.native-query-snippet :refer [NativeQuerySnippet]] [metabase.models.pulse :refer [Pulse]] [metabase.models.segment :refer [Segment]] @@ -205,16 +204,12 @@ fields (if (contains? opts :only-db-ids) (t2/select Field :table_id [:in (map :id tables)] {:order-by [[:id :asc]]}) (t2/select Field)) - metrics (if (contains? opts :only-db-ids) - (t2/select LegacyMetric :table_id [:in (map :id tables)] {:order-by [[:id :asc]]}) - (t2/select LegacyMetric)) collections (select-collections users state)] (binding [serialize/*include-entity-id* (boolean include-entity-id)] (dump/dump! path databases tables (mapcat field/with-values (u/batches-of 32000 fields)) - metrics (select-segments-in-tables tables state) collections (select-entities-in-collections NativeQuerySnippet collections state) diff --git a/enterprise/backend/src/metabase_enterprise/serialization/dump.clj b/enterprise/backend/src/metabase_enterprise/serialization/dump.clj index 95d9d8ba4458255abffc7911a8113a40633400a1..480e18dd8975f2cdf626ce7687218ad8b8b900b2 100644 --- a/enterprise/backend/src/metabase_enterprise/serialization/dump.clj +++ b/enterprise/backend/src/metabase_enterprise/serialization/dump.clj @@ -11,7 +11,6 @@ [metabase.models.dimension :refer [Dimension]] [metabase.models.field :refer [Field]] [metabase.models.interface :as mi] - [metabase.models.legacy-metric :refer [LegacyMetric]] [metabase.models.pulse :refer [Pulse]] [metabase.models.segment :refer [Segment]] [metabase.models.setting :as setting] @@ -72,7 +71,7 @@ [instance] (some (fn [model] (mi/instance-of? model instance)) - [Pulse Dashboard LegacyMetric Segment Field User])) + [Pulse Dashboard Segment Field User])) (defn- spit-entity! [path entity] diff --git a/enterprise/backend/src/metabase_enterprise/serialization/load.clj b/enterprise/backend/src/metabase_enterprise/serialization/load.clj index a605c7b267ed9665c225fc7e661db125d64e1776..d15b02f9c16d962e7219081e7d0565c37e7ca160 100644 --- a/enterprise/backend/src/metabase_enterprise/serialization/load.clj +++ b/enterprise/backend/src/metabase_enterprise/serialization/load.clj @@ -23,7 +23,6 @@ [metabase.models.dimension :refer [Dimension]] [metabase.models.field :refer [Field]] [metabase.models.field-values :refer [FieldValues]] - [metabase.models.legacy-metric :refer [LegacyMetric]] [metabase.models.native-query-snippet :refer [NativeQuerySnippet]] [metabase.models.pulse :refer [Pulse]] [metabase.models.pulse-card :refer [PulseCard]] @@ -249,7 +248,6 @@ :when table-id] (let [context (assoc context :table table-id)] (load! (str path "/fks") context) - (load! (str path "/metrics") context) (load! (str path "/segments") context))))) (def ^:private fully-qualified-name->card-id @@ -280,16 +278,6 @@ [path context] (load-fields! path context)) -(defmethod load! "metrics" - [path context] - (maybe-upsert-many! context LegacyMetric - (for [metric (slurp-dir path)] - (-> metric - (assoc :table_id (:table context) - :creator_id (default-user-id)) - (assoc-in [:definition :source-table] (:table context)) - (update :definition mbql-fully-qualified-names->ids))))) - (defmethod load! "segments" [path context] (maybe-upsert-many! context Segment diff --git a/enterprise/backend/src/metabase_enterprise/serialization/names.clj b/enterprise/backend/src/metabase_enterprise/serialization/names.clj index 92d3d289231072636258c7e8f610751d480724b5..bb6a16044906689fc60f6daf8facb574732b1bdf 100644 --- a/enterprise/backend/src/metabase_enterprise/serialization/names.clj +++ b/enterprise/backend/src/metabase_enterprise/serialization/names.clj @@ -11,7 +11,6 @@ [metabase.models.database :as database :refer [Database]] [metabase.models.field :refer [Field]] [metabase.models.interface :as mi] - [metabase.models.legacy-metric :refer [LegacyMetric]] [metabase.models.native-query-snippet :refer [NativeQuerySnippet]] [metabase.models.pulse :refer [Pulse]] [metabase.models.segment :refer [Segment]] @@ -69,10 +68,6 @@ (str (->> field :table_id (fully-qualified-name Table)) "/fks/" (safe-name field)) (str (->> field :table_id (fully-qualified-name Table)) "/fields/" (safe-name field)))) -(defmethod fully-qualified-name* LegacyMetric - [metric] - (str (->> metric :table_id (fully-qualified-name Table)) "/metrics/" (safe-name metric))) - (defmethod fully-qualified-name* Segment [segment] (str (->> segment :table_id (fully-qualified-name Table)) "/segments/" (safe-name segment))) @@ -180,12 +175,6 @@ [context _ _ field-name] (path->context* context "fields" nil field-name)) -(defmethod path->context* "metrics" - [context _ _ metric-name] - (assoc context :metric (t2/select-one-pk LegacyMetric - :table_id (:table context) - :name metric-name))) - (defmethod path->context* "segments" [context _ _ segment-name] (assoc context :segment (t2/select-one-pk Segment diff --git a/enterprise/backend/src/metabase_enterprise/serialization/serialize.clj b/enterprise/backend/src/metabase_enterprise/serialization/serialize.clj index 9e646c72723e3681495284227668a1c17ecf8e2e..416502d955deb83245ad34a687ba65e82f527fda 100644 --- a/enterprise/backend/src/metabase_enterprise/serialization/serialize.clj +++ b/enterprise/backend/src/metabase_enterprise/serialization/serialize.clj @@ -15,7 +15,6 @@ [metabase.models.dimension :refer [Dimension]] [metabase.models.field :as field :refer [Field]] [metabase.models.interface :as mi] - [metabase.models.legacy-metric :refer [LegacyMetric]] [metabase.models.native-query-snippet :refer [NativeQuerySnippet]] [metabase.models.pulse :refer [Pulse]] [metabase.models.pulse-card :refer [PulseCard]] @@ -63,9 +62,6 @@ {:source-field (id :guard integer?)} (assoc &match :source-field (fully-qualified-name Field id)) - [:metric (id :guard integer?)] - [:metric (fully-qualified-name LegacyMetric id)] - [:segment (id :guard integer?)] [:segment (fully-qualified-name Segment id)]))) @@ -109,7 +105,7 @@ :dashboard_id :fields_hash :personal_owner_id :made_public_by_id :collection_id :pulse_id :result_metadata :action_id) (not *include-entity-id*) (dissoc :entity_id) - (some #(instance? % entity) (map type [LegacyMetric Field Segment])) (dissoc :table_id))) + (some #(instance? % entity) (map type [Field Segment])) (dissoc :table_id))) (defmulti ^:private serialize-one {:arglists '([instance])} diff --git a/enterprise/backend/src/metabase_enterprise/serialization/upsert.clj b/enterprise/backend/src/metabase_enterprise/serialization/upsert.clj index 445797a289de322ed6d7ea2489f9df7a5139db5f..b3c05ab10ff5ec17b2891127d4a5fbd329e2b64c 100644 --- a/enterprise/backend/src/metabase_enterprise/serialization/upsert.clj +++ b/enterprise/backend/src/metabase_enterprise/serialization/upsert.clj @@ -14,7 +14,6 @@ [metabase.models.dimension :refer [Dimension]] [metabase.models.field :refer [Field]] [metabase.models.field-values :refer [FieldValues]] - [metabase.models.legacy-metric :refer [LegacyMetric]] [metabase.models.native-query-snippet :refer [NativeQuerySnippet]] [metabase.models.pulse :refer [Pulse]] [metabase.models.pulse-card :refer [PulseCard]] @@ -34,7 +33,6 @@ {Database [:name :engine] Table [:schema :name :db_id] Field [:name :table_id] - LegacyMetric [:name :table_id] Segment [:name :table_id] Collection [:name :location :namespace] Dashboard [:name :collection_id] diff --git a/enterprise/backend/src/metabase_enterprise/serialization/v2/models.clj b/enterprise/backend/src/metabase_enterprise/serialization/v2/models.clj index a66db0b6854830b6d91e4dc389d6ddc450b442e5..785b2b6461f335b456d2a6d91c5c5fc37c31425a 100644 --- a/enterprise/backend/src/metabase_enterprise/serialization/v2/models.clj +++ b/enterprise/backend/src/metabase_enterprise/serialization/v2/models.clj @@ -4,7 +4,6 @@ "Schema model types" ["Database" "Field" - "LegacyMetric" "Segment" "Table"]) @@ -54,6 +53,7 @@ "HTTPAction" "ImplicitAction" "LoginHistory" + "LegacyMetric" "LegacyMetricImportantField" "ModelIndex" "ModelIndexValue" diff --git a/enterprise/backend/test/metabase_enterprise/models/entity_id_test.clj b/enterprise/backend/test/metabase_enterprise/models/entity_id_test.clj index d9eaea7eba5945bcf1466ce18bbc73002fe42feb..005507b22a0ac5ab999fec5920369a592b420fe5 100644 --- a/enterprise/backend/test/metabase_enterprise/models/entity_id_test.clj +++ b/enterprise/backend/test/metabase_enterprise/models/entity_id_test.clj @@ -49,6 +49,7 @@ :model/LoginHistory :model/FieldUsage :model/FieldValues + :model/LegacyMetric :model/LegacyMetricImportantField :model/ModelIndex :model/ModelIndexValue diff --git a/enterprise/backend/test/metabase_enterprise/serialization/load_test.clj b/enterprise/backend/test/metabase_enterprise/serialization/load_test.clj index 229e6bfce74617e76d552d92c80337823df6e534..adf65825aa2eec7e6ec90dae205e684d8b5a659d 100644 --- a/enterprise/backend/test/metabase_enterprise/serialization/load_test.clj +++ b/enterprise/backend/test/metabase_enterprise/serialization/load_test.clj @@ -17,7 +17,6 @@ Dimension Field FieldValues - LegacyMetric NativeQuerySnippet Pulse PulseCard @@ -54,7 +53,7 @@ (defn- world-snapshot [] - (into {} (for [model [Database Table Field LegacyMetric Segment Collection Dashboard DashboardCard Pulse + (into {} (for [model [Database Table Field Segment Collection Dashboard DashboardCard Pulse Card DashboardCardSeries FieldValues Dimension PulseCard PulseChannel User NativeQuerySnippet]] [model (t2/select-fn-set :id model)]))) @@ -378,7 +377,6 @@ [Collection (t2/select-one Collection :id personal-collection-id)] [Collection (t2/select-one Collection :id pc-nested-id)] [Collection (t2/select-one Collection :id pc-deeply-nested-id)] - [LegacyMetric (t2/select-one LegacyMetric :id metric-id)] [Segment (t2/select-one Segment :id segment-id)] [Dashboard (t2/select-one Dashboard :id dashboard-id)] [Dashboard (t2/select-one Dashboard :id root-dashboard-id)] diff --git a/enterprise/backend/test/metabase_enterprise/serialization/names_test.clj b/enterprise/backend/test/metabase_enterprise/serialization/names_test.clj index d1c3065f52c048434cbe1dd368c5b8577de4cfbf..7290ba8eb7028a6ab52d65a10ce05f40d1116315 100644 --- a/enterprise/backend/test/metabase_enterprise/serialization/names_test.clj +++ b/enterprise/backend/test/metabase_enterprise/serialization/names_test.clj @@ -3,7 +3,7 @@ [clojure.test :refer :all] [metabase-enterprise.serialization.names :as names] [metabase-enterprise.serialization.test-util :as ts] - [metabase.models :refer [Card Collection Dashboard Database Field LegacyMetric NativeQuerySnippet Segment Table]] + [metabase.models :refer [Card Collection Dashboard Database Field NativeQuerySnippet Segment Table]] [metabase.test :as mt] [metabase.util :as u] [toucan2.core :as t2])) @@ -30,7 +30,6 @@ (t2/select-one Card :id card-id-nested) (t2/select-one Table :id table-id) (t2/select-one Field :id category-field-id) - (t2/select-one LegacyMetric :id metric-id) (t2/select-one Segment :id segment-id) (t2/select-one Collection :id collection-id) (t2/select-one Collection :id collection-id-nested) @@ -39,7 +38,7 @@ (t2/select-one NativeQuerySnippet :id snippet-id)]] (testing (class object) (let [context (names/fully-qualified-name->context (names/fully-qualified-name object)) - id-fn (some-fn :snippet :field :metric :segment :card :dashboard :collection :table :database)] + id-fn (some-fn :snippet :field :segment :card :dashboard :collection :table :database)] (is (= (u/the-id object) (id-fn context)))))))) diff --git a/enterprise/backend/test/metabase_enterprise/serialization/serialize_test.clj b/enterprise/backend/test/metabase_enterprise/serialization/serialize_test.clj index 4e66f82f870482839595d4dd2d51036729a75841..62911c36eb940130739024227a1f4dda1e3922fb 100644 --- a/enterprise/backend/test/metabase_enterprise/serialization/serialize_test.clj +++ b/enterprise/backend/test/metabase_enterprise/serialization/serialize_test.clj @@ -4,7 +4,7 @@ [clojure.test :refer :all] [metabase-enterprise.serialization.serialize :as serialize] [metabase-enterprise.serialization.test-util :as ts] - [metabase.models :refer [Card Collection Dashboard Database Field LegacyMetric NativeQuerySnippet + [metabase.models :refer [Card Collection Dashboard Database Field NativeQuerySnippet Segment Table]])) (defn- all-ids-are-fully-qualified-names? @@ -25,7 +25,6 @@ (deftest serialization-test (ts/with-world (doseq [[model id] [[Card card-id] - [LegacyMetric metric-id] [Segment segment-id] [Collection collection-id] [Dashboard dashboard-id] diff --git a/enterprise/backend/test/metabase_enterprise/serialization/test_util.clj b/enterprise/backend/test/metabase_enterprise/serialization/test_util.clj index 24ac1e18bbc55553346862ac639c4bd38c640150..341cddd02635245cb638d06334b824145dea19fe 100644 --- a/enterprise/backend/test/metabase_enterprise/serialization/test_util.clj +++ b/enterprise/backend/test/metabase_enterprise/serialization/test_util.clj @@ -7,7 +7,7 @@ [metabase.db.connection :as mdb.connection] [metabase.db.data-source :as mdb.data-source] [metabase.models :refer [Card Collection Dashboard DashboardCard DashboardCardSeries Database - Field LegacyMetric NativeQuerySnippet Pulse PulseCard Segment Table User]] + Field NativeQuerySnippet Pulse PulseCard Segment Table User]] [metabase.models.collection :as collection] [metabase.shared.models.visualization-settings :as mb.viz] [metabase.test :as mt] @@ -160,10 +160,6 @@ "Deeply Nested Personal Collection" :location (format "/%d/%d/" (crowberto-pc-id) pc-nested-id)} - LegacyMetric {metric-id :id} {:name "My Metric" - :table_id table-id - :definition {:source-table table-id - :aggregation [:sum [:field numeric-field-id nil]]}} Segment {segment-id :id} {:name "My Segment" :table_id table-id :definition {:source-table table-id @@ -440,7 +436,6 @@ :last-login-field-id last-login-field-id :latitude-field-id latitude-field-id :longitude-field-id longitude-field-id - :metric-id metric-id :name-field-id name-field-id :nested-snippet-id nested-snippet-id :numeric-field-id numeric-field-id @@ -500,7 +495,6 @@ last-login-field-id latitude-field-id longitude-field-id - metric-id name-field-id nested-snippet-id numeric-field-id diff --git a/enterprise/backend/test/metabase_enterprise/serialization/upsert_test.clj b/enterprise/backend/test/metabase_enterprise/serialization/upsert_test.clj index 60cae92b0fd4aa932405e436eb33919a7644bcf6..48b36ea448335f2d41bb30efcb697c750443cf0a 100644 --- a/enterprise/backend/test/metabase_enterprise/serialization/upsert_test.clj +++ b/enterprise/backend/test/metabase_enterprise/serialization/upsert_test.clj @@ -3,7 +3,7 @@ [clojure.data :as data] [clojure.test :refer :all] [metabase-enterprise.serialization.upsert :as upsert] - [metabase.models :refer [Card Collection Dashboard DashboardCard Database Field LegacyMetric NativeQuerySnippet + [metabase.models :refer [Card Collection Dashboard DashboardCard Database Field NativeQuerySnippet Pulse Segment Table User]] [metabase.models.interface :as mi] [metabase.test :as mt] @@ -80,9 +80,6 @@ :visualization_settings (if (= 1 instance-num) {:column_settings {}} {:click_behavior {}})) - (isa? model LegacyMetric) - (assoc entity :table_id (mt/id :checkins)) - :else entity)) @@ -113,7 +110,6 @@ Card Table Field - LegacyMetric NativeQuerySnippet Segment Dashboard @@ -126,6 +122,4 @@ (deftest has-post-insert?-test (is (= true - (#'upsert/has-post-insert? User))) - (is (= false - (#'upsert/has-post-insert? LegacyMetric)))) + (#'upsert/has-post-insert? User)))) diff --git a/enterprise/backend/test/metabase_enterprise/serialization/v2/e2e_test.clj b/enterprise/backend/test/metabase_enterprise/serialization/v2/e2e_test.clj index 1abf1b2e6b570cb2276b76a23d488eb2352a252e..8a9b45f12209b9bd5198b4a4b3b53f42e774980e 100644 --- a/enterprise/backend/test/metabase_enterprise/serialization/v2/e2e_test.clj +++ b/enterprise/backend/test/metabase_enterprise/serialization/v2/e2e_test.clj @@ -185,10 +185,6 @@ ;; 20 with just :field_id (many-random-fks 20 {:refs {:human_readable_field_id ::rs/omit}} {:field_id [:field 1000]}))) - :metric (many-random-fks 30 {:spec-gen {:definition {:aggregation [[:count]] - :source-table 9}}} - {:table_id [:t 100] - :creator_id [:u 10]}) :segment (many-random-fks 30 {:spec-gen {:definition {:filter [:!= [:field 60 nil] 50], :source-table 4}}} {:table_id [:t 100] @@ -286,13 +282,6 @@ (map (comp count dir->file-set #(io/file % "timelines"))) (reduce +))))) - (testing "for metrics" - (is (= 30 (reduce + (for [db (dir->dir-set (io/file dump-dir "databases")) - table (dir->dir-set (io/file dump-dir "databases" db "tables")) - :let [metrics-dir (io/file dump-dir "databases" db "tables" table "metrics")] - :when (.exists metrics-dir)] - (count (dir->file-set metrics-dir))))))) - (testing "for segments" (is (= 30 (reduce + (for [db (dir->dir-set (io/file dump-dir "databases")) table (dir->dir-set (io/file dump-dir "databases" db "tables")) @@ -390,13 +379,6 @@ (serdes/extract-one "Dimension" {}) clean-entity))))) - (testing "for metrics" - (doseq [{:keys [entity_id] :as metric} (get @entities "Metric")] - (is (= (clean-entity metric) - (->> (t2/select-one 'Metric :entity_id entity_id) - (serdes/extract-one "Metric" {}) - clean-entity))))) - (testing "for segments" (doseq [{:keys [entity_id] :as segment} (get @entities "Segment")] (is (= (clean-entity segment) diff --git a/enterprise/backend/test/metabase_enterprise/serialization/v2/extract_test.clj b/enterprise/backend/test/metabase_enterprise/serialization/v2/extract_test.clj index ada774d8a6c6449482ab676e9358bf8ff8a33024..aecf92483854879d566ab7ace0fd7b92ba1d493f 100644 --- a/enterprise/backend/test/metabase_enterprise/serialization/v2/extract_test.clj +++ b/enterprise/backend/test/metabase_enterprise/serialization/v2/extract_test.clj @@ -19,7 +19,6 @@ Dimension Field FieldValues - LegacyMetric NativeQuerySnippet Pulse PulseCard @@ -696,45 +695,6 @@ {:model "Field" :id "name"}]} (set (serdes/dependencies ser)))))))))) -(deftest metrics-test - (mt/with-empty-h2-app-db - (ts/with-temp-dpc [User - {ann-id :id} - {:first_name "Ann" - :last_name "Wilson" - :email "ann@heart.band"} - - Database {db-id :id} {:name "My Database"} - Table {no-schema-id :id} {:name "Schemaless Table" :db_id db-id} - Field {field-id :id} {:name "Some Field" :table_id no-schema-id} - - LegacyMetric - {m1-id :id - m1-eid :entity_id} - {:name "My Metric" - :creator_id ann-id - :table_id no-schema-id - :definition {:source-table no-schema-id - :aggregation [[:sum [:field field-id nil]]]}}] - (testing "metrics" - (let [ser (serdes/extract-one "LegacyMetric" {} (t2/select-one LegacyMetric :id m1-id))] - (is (=? {:serdes/meta [{:model "LegacyMetric" :id m1-eid :label "my_metric"}] - :table_id ["My Database" nil "Schemaless Table"] - :creator_id "ann@heart.band" - :definition {:source-table ["My Database" nil "Schemaless Table"] - :aggregation [[:sum [:field ["My Database" nil "Schemaless Table" "Some Field"] nil]]]} - :created_at OffsetDateTime} - ser)) - (is (not (contains? ser :id))) - - (testing "depend on the Table and any fields referenced in :definition" - (is (= #{[{:model "Database" :id "My Database"} - {:model "Table" :id "Schemaless Table"}] - [{:model "Database" :id "My Database"} - {:model "Table" :id "Schemaless Table"} - {:model "Field" :id "Some Field"}]} - (set (serdes/dependencies ser)))))))))) - (deftest native-query-snippets-test (mt/with-empty-h2-app-db (ts/with-temp-dpc [User diff --git a/enterprise/backend/test/metabase_enterprise/serialization/v2/load_test.clj b/enterprise/backend/test/metabase_enterprise/serialization/v2/load_test.clj index 800452df524761c7c1723ba3ec30bab74206877f..bcfe4840ba4d608f06cfa8daf82717fea60e39ff 100644 --- a/enterprise/backend/test/metabase_enterprise/serialization/v2/load_test.clj +++ b/enterprise/backend/test/metabase_enterprise/serialization/v2/load_test.clj @@ -8,7 +8,7 @@ [metabase-enterprise.serialization.v2.load :as serdes.load] [metabase.models :refer [Action Card Collection Dashboard DashboardCard Database Field - FieldValues LegacyMetric NativeQuerySnippet Segment Table Timeline + FieldValues NativeQuerySnippet Segment Table Timeline TimelineEvent User]] [metabase.models.action :as action] [metabase.models.serialization :as serdes] @@ -348,80 +348,6 @@ :aggregation [[:count]]} (:definition @seg1d)))))))))) -(deftest metric-test - ;; Metric.definition is a JSON-encoded MBQL query, which contain database, table, and field IDs - these need to be - ;; converted to a portable form and read back in. - ;; This test has a database, table and fields, that exist on both sides with different IDs, and expects a metric - ;; to be correctly loaded with the dest IDs. - (testing "embedded MBQL in Metric :definition is portable" - (let [serialized (atom nil) - coll1s (atom nil) - db1s (atom nil) - table1s (atom nil) - field1s (atom nil) - metric1s (atom nil) - user1s (atom nil) - db1d (atom nil) - table1d (atom nil) - field1d (atom nil) - user1d (atom nil) - metric1d (atom nil) - db2d (atom nil) - table2d (atom nil) - field2d (atom nil)] - - - (ts/with-dbs [source-db dest-db] - (testing "serializing the original database, table, field and card" - (ts/with-db source-db - (reset! coll1s (ts/create! Collection :name "pop! minis")) - (reset! db1s (ts/create! Database :name "my-db")) - (reset! table1s (ts/create! Table :name "orders" :db_id (:id @db1s))) - (reset! field1s (ts/create! Field :name "subtotal" :table_id (:id @table1s))) - (reset! user1s (ts/create! User :first_name "Tom" :last_name "Scholz" :email "tom@bost.on")) - (reset! metric1s (ts/create! LegacyMetric :table_id (:id @table1s) :name "Revenue" - :definition {:source-table (:id @table1s) - :aggregation [[:sum [:field (:id @field1s) nil]]]} - :creator_id (:id @user1s))) - (reset! serialized (into [] (serdes.extract/extract {}))))) - - (testing "exported form is properly converted" - (is (= {:source-table ["my-db" nil "orders"] - :aggregation [[:sum [:field ["my-db" nil "orders" "subtotal"] nil]]]} - (-> @serialized - (by-model "LegacyMetric") - first - :definition)))) - - (testing "deserializing adjusts the IDs properly" - (ts/with-db dest-db - ;; A different database and tables, so the IDs don't match. - (reset! db2d (ts/create! Database :name "other-db")) - (reset! table2d (ts/create! Table :name "customers" :db_id (:id @db2d))) - (reset! field2d (ts/create! Field :name "age" :table_id (:id @table2d))) - (reset! user1d (ts/create! User :first_name "Tom" :last_name "Scholz" :email "tom@bost.on")) - - ;; Load the serialized content. - (serdes.load/load-metabase! (ingestion-in-memory @serialized)) - - ;; Fetch the relevant bits - (reset! db1d (t2/select-one Database :name "my-db")) - (reset! table1d (t2/select-one Table :name "orders")) - (reset! field1d (t2/select-one Field :table_id (:id @table1d) :name "subtotal")) - (reset! metric1d (t2/select-one LegacyMetric :name "Revenue")) - - (testing "the main Database, Table, and Field have different IDs now" - (is (not= (:id @db1s) (:id @db1d))) - (is (not= (:id @table1s) (:id @table1d))) - (is (not= (:id @field1s) (:id @field1d)))) - - (is (not= (:definition @metric1s) - (:definition @metric1d))) - (testing "the Metric's definition is based on the new Database, Table, and Field IDs" - (is (= {:source-table (:id @table1d) - :aggregation [[:sum [:field (:id @field1d) nil]]]} - (:definition @metric1d)))))))))) - #_{:clj-kondo/ignore [:metabase/i-like-making-cams-eyes-bleed-with-horrifically-long-tests]} (deftest dashboard-card-test ;; DashboardCard.parameter_mappings and Card.parameter_mappings are JSON-encoded lists of parameter maps, which @@ -758,63 +684,47 @@ ;; used. However, if no such user exists, a new one is created with mostly blank fields. (testing "existing users are found and used; missing users are created on the fly" (let [serialized (atom nil) - metric1s (atom nil) - metric2s (atom nil) user1s (atom nil) user2s (atom nil) + dash1s (atom nil) + dash2s (atom nil) user1d (atom nil) - metric1d (atom nil) - metric2d (atom nil)] + dash1d (atom nil) + dash2d (atom nil)] (ts/with-dbs [source-db dest-db] (testing "serializing the original entities" (ts/with-db source-db (reset! user1s (ts/create! User :first_name "Tom" :last_name "Scholz" :email "tom@bost.on")) (reset! user2s (ts/create! User :first_name "Neil" :last_name "Peart" :email "neil@rush.yyz")) - (reset! metric1s (ts/create! LegacyMetric - :name "Large Users" - :table_id (mt/id :venues) - :creator_id (:id @user1s) - :definition {:aggregation [[:count]]})) - (reset! metric2s (ts/create! LegacyMetric - :name "Support Headaches" - :table_id (mt/id :venues) - :creator_id (:id @user2s) - :definition {:aggregation [[:count]]})) + (reset! dash1s (ts/create! Dashboard :name "My Dashboard" :creator_id (:id @user1s))) + (reset! dash2s (ts/create! Dashboard :name "Linked dashboard" :creator_id (:id @user2s))) (reset! serialized (into [] (serdes.extract/extract {}))))) - (testing "exported form is properly converted" - (is (= "tom@bost.on" - (-> @serialized - (by-model "LegacyMetric") - first - :creator_id)))) - (testing "deserializing finds the matching user and synthesizes the missing one" (ts/with-db dest-db ;; Create another random user to change the user IDs. (ts/create! User :first_name "Gideon" :last_name "Nav" :email "griddle@ninth.tomb") - ;; Likewise, create some other metrics. - (ts/create! LegacyMetric :name "Other metric A" :table_id (mt/id :venues)) - (ts/create! LegacyMetric :name "Other metric B" :table_id (mt/id :venues)) - (ts/create! LegacyMetric :name "Other metric C" :table_id (mt/id :venues)) + ;; Likewise, create some other dashboards. + (ts/create! Dashboard :name "Other dashboard A") + (ts/create! Dashboard :name "Other dashboard B") + (ts/create! Dashboard :name "Other dashboard C") (reset! user1d (ts/create! User :first_name "Tom" :last_name "Scholz" :email "tom@bost.on")) ;; Load the serialized content. (serdes.load/load-metabase! (ingestion-in-memory @serialized)) - ;; Fetch the relevant bits - (reset! metric1d (t2/select-one LegacyMetric :name "Large Users")) - (reset! metric2d (t2/select-one LegacyMetric :name "Support Headaches")) + (reset! dash1d (t2/select-one Dashboard :name "My Dashboard")) + (reset! dash2d (t2/select-one Dashboard :name "Linked dashboard")) - (testing "the Metrics and Users have different IDs now" - (is (not= (:id @metric1s) (:id @metric1d))) - (is (not= (:id @metric2s) (:id @metric2d))) + (testing "the Dashboards and Users have different IDs now" + (is (not= (:id @dash1s) (:id @dash1d))) + (is (not= (:id @dash2s) (:id @dash2d))) (is (not= (:id @user1s) (:id @user1d)))) (testing "both existing User and the new one are set up properly" - (is (= (:id @user1d) (:creator_id @metric1d))) - (let [user2d-id (:creator_id @metric2d) + (is (= (:id @user1d) (:creator_id @dash1d))) + (let [user2d-id (:creator_id @dash2d) user2d (t2/select-one User :id user2d-id)] (is (any? user2d)) (is (= (:email @user2s) (:email user2d))))))))))) diff --git a/src/metabase/cmd/copy.clj b/src/metabase/cmd/copy.clj index 39e974d6499ef5117ecd5d3536c951ff02adab27..6ffc0010dce948aec811d1c3a276860e9b56d7c1 100644 --- a/src/metabase/cmd/copy.clj +++ b/src/metabase/cmd/copy.clj @@ -53,8 +53,6 @@ :model/Field :model/FieldValues :model/Segment - :model/LegacyMetric - :model/LegacyMetricImportantField :model/ModerationReview :model/Revision :model/ViewLog diff --git a/src/metabase/models/legacy_metric.clj b/src/metabase/models/legacy_metric.clj index 8087fadac46ed6a2ee9763760927325d7385815a..b3d20b0d33f66a808470e0ea28dd179270521444 100644 --- a/src/metabase/models/legacy_metric.clj +++ b/src/metabase/models/legacy_metric.clj @@ -27,7 +27,6 @@ (doto :model/LegacyMetric (derive :metabase/model) (derive :hook/timestamped?) - (derive :hook/entity-id) (derive ::mi/write-policy.superuser) (derive ::mi/create-policy.superuser)) diff --git a/test/metabase/cmd/copy_test.clj b/test/metabase/cmd/copy_test.clj index 8fe2be32e9e633b789f240881b4124d0251b11cc..8199856be4d7c2d50189482c6d31107340ab39a7 100644 --- a/test/metabase/cmd/copy_test.clj +++ b/test/metabase/cmd/copy_test.clj @@ -31,6 +31,8 @@ :model/CloudMigration :model/DashboardFavorite :model/FieldUsage + :model/LegacyMetric + :model/LegacyMetricImportantField :model/Query :model/QueryCache :model/QueryExecution