Skip to content

Commit

Permalink
feat(perf-detector-threshold-configuration) Added datamigration for c… (
Browse files Browse the repository at this point in the history
#53109)

For issue: #51315
Steps outlined:
[here](https://www.notion.so/sentry/Removing-World-Map-display-from-Discover-and-Dashboards-e49eb198fe294ad0a1b4c47b9c3619c0?pvs=4#43e2c318d1eb4f93987718b82307f56f).

- The option to add widgets with world map visualization has been
removed from the frontend:
[PR](#53072)
- Won't be merging this PR until the changes above are merged. 
- Now we are left with existing World map widgets. 

<img width="451" alt="Screenshot 2023-07-19 at 10 54 55 AM"
src="https://github.com/getsentry/sentry/assets/60121741/ab1b3bbf-8319-43db-84fd-de8a48b6d1c2">

- This data migration intends to convert the worldmap widgets to table
widgets with the following changes:
- - Display type of Widget is changed from 5 (world map) to 4 (table).
- - `'has:geo_country_code'` condition is addded to each Widget Query.
- - Added `'geo.country_code' `and `'geo.region' `columns to each Widget
Query.
- - Added `'geo.country_code'` and `'geo.region'` fields to each Widget
Query.
- - Aggregates and order columns remain unchanged.

---------

Co-authored-by: Abdullah Khan <abdullahkhan@PG9Y57YDXQ.local>
  • Loading branch information
Abdkhan14 and Abdullah Khan authored Jul 24, 2023
1 parent f0df914 commit 824e856
Show file tree
Hide file tree
Showing 2 changed files with 63 additions and 1 deletion.
2 changes: 1 addition & 1 deletion migrations_lockfile.txt
Original file line number Diff line number Diff line change
Expand Up @@ -6,5 +6,5 @@ To resolve this, rebase against latest master and regenerate your migration. Thi
will then be regenerated, and you should be able to merge without conflicts.

nodestore: 0002_nodestore_no_dictfield
sentry: 0519_remove_repo_name_constraint
sentry: 0520_migrate_world_map_widgets
social_auth: 0002_default_auto_field
62 changes: 62 additions & 0 deletions src/sentry/migrations/0520_migrate_world_map_widgets.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
# Generated by Django 3.2.20 on 2023-07-24 19:02

from django.db import migrations

from sentry.models import DashboardWidgetQuery
from sentry.new_migrations.migrations import CheckedMigration


def migrate_worldmap_widgets_to_table_widgets(apps, schema_editor):
# World map visulization has display_type 5
widgetQueries = DashboardWidgetQuery.objects.select_related("widget").filter(
widget__display_type=5
)

for widgetQuery in widgetQueries:
# Change widget display type from world_map:5 to table:4
widgetQuery.widget.display_type = 4

# Ensure condition has countr_code check
if "has:geo.country_code" not in widgetQuery.conditions:
widgetQuery.conditions = widgetQuery.conditions + " has:geo.country_code"

# Add region and country_code columns
if "geo.region" not in widgetQuery.columns:
widgetQuery.columns.insert(0, "geo.region")
if "geo.country_code" not in widgetQuery.columns:
widgetQuery.columns.insert(0, "geo.country_code")

# Add region and country_code as fields
if "geo.region" not in widgetQuery.fields:
widgetQuery.fields.insert(0, "geo.region")
if "geo.country_code" not in widgetQuery.fields:
widgetQuery.fields.insert(0, "geo.country_code")

widgetQuery.widget.save()
widgetQuery.save()


class Migration(CheckedMigration):
# This flag is used to mark that a migration shouldn't be automatically run in production. For
# the most part, this should only be used for operations where it's safe to run the migration
# after your code has deployed. So this should not be used for most operations that alter the
# schema of a table.
# Here are some things that make sense to mark as dangerous:
# - Large data migrations. Typically we want these to be run manually by ops so that they can
# be monitored and not block the deploy for a long period of time while they run.
# - Adding indexes to large tables. Since this can take a long time, we'd generally prefer to
# have ops run this and not block the deploy. Note that while adding an index is a schema
# change, it's completely safe to run the operation after the code has deployed.
is_dangerous = False

dependencies = [
("sentry", "0519_remove_repo_name_constraint"),
]

operations = [
migrations.RunPython(
migrate_worldmap_widgets_to_table_widgets,
migrations.RunPython.noop,
hints={"tables": ["sentry_dashboardwidgetquery", "sentry_dashboardwidget"]},
),
]

0 comments on commit 824e856

Please sign in to comment.