Skip to content
Snippets Groups Projects
Commit 73a2df65 authored by Allen Gilliland's avatar Allen Gilliland
Browse files

adding permanent data migration code for dashboard card scaling to new grid density.

parent 2c27bcd8
No related branches found
No related tags found
No related merge requests found
......@@ -53,10 +53,6 @@ const MetabaseApi = new AngularResourceProxy("Metabase", ["dataset", "db_metadat
const CardApi = new AngularResourceProxy("Card", ["list", "update", "delete"]);
const RevisionApi = new AngularResourceProxy("Revision", ["list", "revert"]);
// FIXME: REMOVE SCALING ONCE WE ADD A DB MIGRATION TO SCALE DASHCARD SIZES
const FIXME_DASHCARD_X_SCALE = 3;
const FIXME_DASHCARD_Y_SCALE = 4;
// action creators
export const setEditingDashboard = createAction(SET_EDITING_DASHBOARD);
......@@ -111,17 +107,6 @@ export const fetchCardData = createThunkAction(FETCH_CARD_DATA, function(card) {
export const fetchDashboard = createThunkAction(FETCH_DASHBOARD, function(id) {
return async function(dispatch, getState) {
let result = await DashboardApi.get({ dashId: id });
// FIXME: REMOVE SCALING ONCE WE ADD A DB MIGRATION TO SCALE DASHCARD SIZES
result = {
...result,
ordered_cards: result.ordered_cards.map((dc) => ({
...dc,
row: dc.row * FIXME_DASHCARD_Y_SCALE,
col: dc.col * FIXME_DASHCARD_X_SCALE,
sizeX: dc.sizeX * FIXME_DASHCARD_X_SCALE,
sizeY: dc.sizeY * FIXME_DASHCARD_Y_SCALE
}))
};
return normalize(result, dashboard);
};
});
......@@ -165,15 +150,7 @@ export const saveDashboard = createThunkAction(SAVE_DASHBOARD, function(dashId)
// reposition the cards
if (_.some(updatedDashcards, (dc) => dc.isDirty || dc.isAdded)) {
let cards = updatedDashcards.map(({ id, row, col, sizeX, sizeY, series }) => ({
id,
// FIXME: REMOVE SCALING ONCE WE ADD A DB MIGRATION TO SCALE DASHCARD SIZES
row: Math.floor(row / FIXME_DASHCARD_Y_SCALE),
col: Math.floor(col / FIXME_DASHCARD_X_SCALE),
sizeX: Math.floor(sizeX / FIXME_DASHCARD_X_SCALE),
sizeY: Math.floor(sizeY / FIXME_DASHCARD_Y_SCALE),
series
}));
let cards = updatedDashcards.map(({ id, row, col, sizeX, sizeY, series }) => ({ id, row, col, sizeX, sizeY, series }));
var result = await DashboardApi.reposition_cards({ dashId, cards });
if (result.status !== "ok") {
throw new Error(result.status);
......
......@@ -6,6 +6,7 @@
[metabase.events.activity-feed :refer [activity-feed-topics]]
(metabase.models [activity :refer [Activity]]
[card :refer [Card]]
[dashboard-card :refer [DashboardCard]]
[database :refer [Database]]
[foreign-key :refer [ForeignKey]]
[table :refer [Table]]
......@@ -45,7 +46,9 @@
(defn run-all
"Run all data migrations defined by `defmigration`."
[]
(dorun (map run-migration-if-needed @data-migrations)))
(log/info "Running all necessary data migrations, this may take a minute.")
(dorun (map run-migration-if-needed @data-migrations))
(log/info "Finished running data migrations."))
;;; # Migration Definitions
......@@ -107,3 +110,15 @@
(log/debug "Removing duplicate FK entries for" k)
(doseq [duplicate-fk (drop-last fks)]
(db/del ForeignKey :id (:id duplicate-fk)))))))
;; Migrate dashboards to the new grid
;; NOTE: this scales the dashboards by 4x in the Y-scale and 3x in the X-scale
(defmigration update-dashboards-to-new-grid
(doseq [{:keys [id row col sizeX sizeY]} (db/sel :many DashboardCard)]
(k/update DashboardCard
(k/set-fields {:row (when row (* row 4))
:col (when col (* col 3))
:sizeX (when sizeX (* sizeX 3))
:sizeY (when sizeY (* sizeY 4))})
(k/where {:id id}))))
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment