Пример #1
0
 def test_no_subscription_id(self):
     sub = self.create_subscription(QuerySubscription.Status.UPDATING)
     assert sub.subscription_id is None
     update_subscription_in_snuba(sub.id)
     sub = QuerySubscription.objects.get(id=sub.id)
     assert sub.status == QuerySubscription.Status.ACTIVE.value
     assert sub.subscription_id is not None
Пример #2
0
 def test(self):
     subscription_id = "1/{}".format(uuid4().hex)
     sub = self.create_subscription(QuerySubscription.Status.UPDATING,
                                    subscription_id=subscription_id)
     update_subscription_in_snuba(sub.id)
     sub = QuerySubscription.objects.get(id=sub.id)
     assert sub.status == QuerySubscription.Status.ACTIVE.value
     assert sub.subscription_id is not None
     assert sub.subscription_id != subscription_id
def fix_metric_alert_group_ids(apps, schema_editor):
    from sentry.snuba.tasks import update_subscription_in_snuba

    QuerySubscription = apps.get_model("sentry", "QuerySubscription")

    # This table has < 10k rows, so filtering on an unindexed column will be fine. This
    # should return < 50 rows in Saas, and even fewer on other deploys
    for subscription in QuerySubscription.objects.filter(snuba_query__query__contains="issue.id"):
        # We want to recreate the subscription in snuba, so that the conditions are built
        # properly for issue ids. To do this, we just fire off the update task.
        try:
            with transaction.atomic():
                subscription.status = 2  # QuerySubscription.Status.UPDATING.value
                subscription.save()
                update_subscription_in_snuba(subscription.id)
        except Exception:
            logging.exception("Failed to fix subscription")