From df8fe8ad18ed8df42dd2a06be58ca319cfb7a147 Mon Sep 17 00:00:00 2001 From: Chloe Date: Mon, 7 Aug 2023 16:15:08 -0700 Subject: [PATCH 1/9] rough email --- src/sentry/integrations/notify_disable.py | 10 ++++++-- .../sentry-app-notify-disable.html | 23 +++++++++++++++++++ .../sentry-app-notify-disable.txt | 0 .../frontend/debug/debug_notify_disable.py | 21 +++++++++++------ 4 files changed, 45 insertions(+), 9 deletions(-) create mode 100644 src/sentry/templates/sentry/integrations/sentry-app-notify-disable.html create mode 100644 src/sentry/templates/sentry/integrations/sentry-app-notify-disable.txt diff --git a/src/sentry/integrations/notify_disable.py b/src/sentry/integrations/notify_disable.py index 890e5db9297f74..830015b37360c1 100644 --- a/src/sentry/integrations/notify_disable.py +++ b/src/sentry/integrations/notify_disable.py @@ -56,8 +56,14 @@ def notify_disable( context={ "integration_name": integration_name.title(), "integration_link": integration_link, + "webhook_url": redis_key, + "dashboard_link": "hold", }, - html_template="sentry/integrations/notify-disable.html", - template="sentry/integrations/notify-disable.txt", + html_template="sentry/integrations/sentry-app-notify-disable.html" + if "sentry-app" in redis_key and integration_slug + else "sentry/integrations/notify-disable.html", + template="sentry/integrations/sentry-app-notify-disable.txt" + if "sentry-app" in redis_key and integration_slug + else "sentry/integrations/notify-disable.txt", ) msg.send_async([user.email]) diff --git a/src/sentry/templates/sentry/integrations/sentry-app-notify-disable.html b/src/sentry/templates/sentry/integrations/sentry-app-notify-disable.html new file mode 100644 index 00000000000000..aa2b89f9b3cab2 --- /dev/null +++ b/src/sentry/templates/sentry/integrations/sentry-app-notify-disable.html @@ -0,0 +1,23 @@ +{% extends "sentry/emails/base.html" %} + +{% load i18n %} + +{% block main %} +

+ Hi there, +

+ We’ve received multiple request errors {{ dashboard_link }} from your webhook: {{ webhook_url }} for the custom {{ integration_name }} integration, and have unsubscribed the webhook from receiving events. +

+ To continue using your custom integration, please fix your webhook: {{ webhook_url }} and re-enable the webhook subscriptions here. +

+

+

+

+

If you need additional assistance, you can reach out to our support team at help.sentry.io.

+

Happy fixing,

+ Sentry +

+

+ You are receiving this email because you’re listed as an organization Owner or Manager. +

+{% endblock %} diff --git a/src/sentry/templates/sentry/integrations/sentry-app-notify-disable.txt b/src/sentry/templates/sentry/integrations/sentry-app-notify-disable.txt new file mode 100644 index 00000000000000..e69de29bb2d1d6 diff --git a/src/sentry/web/frontend/debug/debug_notify_disable.py b/src/sentry/web/frontend/debug/debug_notify_disable.py index 65b54e5c199643..5b8e536d14c0bd 100644 --- a/src/sentry/web/frontend/debug/debug_notify_disable.py +++ b/src/sentry/web/frontend/debug/debug_notify_disable.py @@ -2,14 +2,16 @@ from django.views.generic import View from sentry import integrations +from sentry.constants import SentryAppStatus from sentry.integrations.notify_disable import get_provider_type, get_url -from sentry.models import Integration, Organization +from sentry.models import Integration, Organization, SentryApp from .mail import MailPreview class DebugNotifyDisableView(View): def get(self, request: HttpRequest) -> HttpResponse: + self.integration = Integration.objects.create( provider="slack", name="Awesome Team", @@ -19,20 +21,25 @@ def get(self, request: HttpRequest) -> HttpResponse: "installation_type": "born_as_bot", }, ) + provider = integrations.get(self.integration.provider) self.organization = Organization(id=1, slug="organization", name="My Company") + self.sentry_app = SentryApp( + name="Test App", + events=["issue.resolved", "issue.ignored", "issue.assigned"], + status=SentryAppStatus.INTERNAL, + ) - provider = integrations.get(self.integration.provider) - integration_name = provider.name + integration_name = self.sentry_app.name integration_link = get_url( self.organization, - get_provider_type(f"sentry-integration-error:{self.integration.external_id}"), - provider.name, + get_provider_type(f"sentry-app-error:{self.sentry_app.uuid}"), + self.sentry_app.slug, ) return MailPreview( - html_template="sentry/integrations/notify-disable.html", - text_template="sentry/integrations/notify-disable.txt", + html_template="sentry/integrations/sentry-app-notify-disable.html", + text_template="sentry/integrations/sentry-app-notify-disable.txt", context={ "integration_name": integration_name, "integration_link": integration_link, From a4ab6696d6bced152c35616cbdbb30c03039e9ea Mon Sep 17 00:00:00 2001 From: Chloe Date: Mon, 7 Aug 2023 16:48:03 -0700 Subject: [PATCH 2/9] adding webhook and cleaning up html --- src/sentry/integrations/notify_disable.py | 4 ++-- .../sentry-app-notify-disable.html | 4 ++-- .../sentry-app-notify-disable.txt | 13 ++++++++++++ src/sentry/utils/sentry_apps/webhooks.py | 2 +- .../frontend/debug/debug_notify_disable.py | 20 ++++++------------- 5 files changed, 24 insertions(+), 19 deletions(-) diff --git a/src/sentry/integrations/notify_disable.py b/src/sentry/integrations/notify_disable.py index 830015b37360c1..304637678110c8 100644 --- a/src/sentry/integrations/notify_disable.py +++ b/src/sentry/integrations/notify_disable.py @@ -40,6 +40,7 @@ def notify_disable( integration_name: str, redis_key: str, integration_slug: Union[str, None] = None, + webhook_url: Union[str, None] = None, project: Union[str, None] = None, ): @@ -56,8 +57,7 @@ def notify_disable( context={ "integration_name": integration_name.title(), "integration_link": integration_link, - "webhook_url": redis_key, - "dashboard_link": "hold", + "webhook_url": webhook_url if "sentry-app" in redis_key and webhook_url else "", }, html_template="sentry/integrations/sentry-app-notify-disable.html" if "sentry-app" in redis_key and integration_slug diff --git a/src/sentry/templates/sentry/integrations/sentry-app-notify-disable.html b/src/sentry/templates/sentry/integrations/sentry-app-notify-disable.html index aa2b89f9b3cab2..40d02db55129d4 100644 --- a/src/sentry/templates/sentry/integrations/sentry-app-notify-disable.html +++ b/src/sentry/templates/sentry/integrations/sentry-app-notify-disable.html @@ -6,9 +6,9 @@

Hi there,

- We’ve received multiple request errors {{ dashboard_link }} from your webhook: {{ webhook_url }} for the custom {{ integration_name }} integration, and have unsubscribed the webhook from receiving events. + We’ve received multiple request errors from your webhook: {{webhook_url}} for the custom {{ integration_name }} integration, and have unsubscribed the webhook from receiving events.

- To continue using your custom integration, please fix your webhook: {{ webhook_url }} and re-enable the webhook subscriptions here. + To continue using your custom integration, please fix your webhook: {{webhook_url}} and re-enable the webhook subscriptions here.

diff --git a/src/sentry/templates/sentry/integrations/sentry-app-notify-disable.txt b/src/sentry/templates/sentry/integrations/sentry-app-notify-disable.txt index e69de29bb2d1d6..4f48b0068d4b15 100644 --- a/src/sentry/templates/sentry/integrations/sentry-app-notify-disable.txt +++ b/src/sentry/templates/sentry/integrations/sentry-app-notify-disable.txt @@ -0,0 +1,13 @@ +Hi there, + + We’ve received multiple request errors from your webhook: {{webhook_url}} for the custom {{ integration_name }} integration, + and have unsubscribed the webhook from receiving events. + + To continue using your custom integration, please fix your webhook: {{webhook_url}} and re-enable the webhook subscriptions here. + +If you need additional assistance, you can reach out to our support team at help.sentry.io. + +Happy fixing, +Sentry + +You are receiving this email because you’re listed as an organization Owner or Manager. diff --git a/src/sentry/utils/sentry_apps/webhooks.py b/src/sentry/utils/sentry_apps/webhooks.py index 3081875f48c16e..604020593873e3 100644 --- a/src/sentry/utils/sentry_apps/webhooks.py +++ b/src/sentry/utils/sentry_apps/webhooks.py @@ -47,7 +47,7 @@ def check_broken(sentryapp: SentryApp, org_id: str): org = Organization.objects.get(id=org_id) if features.has("organizations:disable-sentryapps-on-broken", org): sentryapp._disable() - notify_disable(org, sentryapp.slug, redis_key) + notify_disable(org, sentryapp.name, redis_key, sentryapp.slug, sentryapp.webhook_url) buffer.clear() extra = { diff --git a/src/sentry/web/frontend/debug/debug_notify_disable.py b/src/sentry/web/frontend/debug/debug_notify_disable.py index 5b8e536d14c0bd..2e243a53780100 100644 --- a/src/sentry/web/frontend/debug/debug_notify_disable.py +++ b/src/sentry/web/frontend/debug/debug_notify_disable.py @@ -1,33 +1,21 @@ from django.http import HttpRequest, HttpResponse from django.views.generic import View -from sentry import integrations from sentry.constants import SentryAppStatus from sentry.integrations.notify_disable import get_provider_type, get_url -from sentry.models import Integration, Organization, SentryApp +from sentry.models import Organization, SentryApp from .mail import MailPreview class DebugNotifyDisableView(View): def get(self, request: HttpRequest) -> HttpResponse: - - self.integration = Integration.objects.create( - provider="slack", - name="Awesome Team", - external_id="TXXXXXXXZ", - metadata={ - "access_token": "xoxb-xxxxxxxxx-xxxxxxxxxx-xxxxxxxxxxxx", - "installation_type": "born_as_bot", - }, - ) - provider = integrations.get(self.integration.provider) - self.organization = Organization(id=1, slug="organization", name="My Company") self.sentry_app = SentryApp( name="Test App", events=["issue.resolved", "issue.ignored", "issue.assigned"], status=SentryAppStatus.INTERNAL, + webhook_url="https://broken-example.com/webhook", ) integration_name = self.sentry_app.name @@ -36,6 +24,7 @@ def get(self, request: HttpRequest) -> HttpResponse: get_provider_type(f"sentry-app-error:{self.sentry_app.uuid}"), self.sentry_app.slug, ) + redis_key = f"sentry-app-error:{self.sentry_app.uuid}" return MailPreview( html_template="sentry/integrations/sentry-app-notify-disable.html", @@ -43,5 +32,8 @@ def get(self, request: HttpRequest) -> HttpResponse: context={ "integration_name": integration_name, "integration_link": integration_link, + "webhook_url": self.sentry_app.webhook_url + if "sentry-app" in redis_key and self.sentry_app.webhook_url + else "", }, ).render(request) From b88fa6b39f4fe6fcc3963265e432dfd655d1b19c Mon Sep 17 00:00:00 2001 From: Chloe Date: Tue, 8 Aug 2023 09:20:05 -0700 Subject: [PATCH 3/9] seperate debug view --- src/sentry/web/debug_urls.py | 4 ++ .../frontend/debug/debug_notify_disable.py | 35 ++++++++-------- .../debug/debug_sentry_app_notify_disable.py | 40 +++++++++++++++++++ 3 files changed, 62 insertions(+), 17 deletions(-) create mode 100644 src/sentry/web/frontend/debug/debug_sentry_app_notify_disable.py diff --git a/src/sentry/web/debug_urls.py b/src/sentry/web/debug_urls.py index 7247c92a05550a..bf5d3400534e6e 100644 --- a/src/sentry/web/debug_urls.py +++ b/src/sentry/web/debug_urls.py @@ -57,6 +57,9 @@ DebugResolvedInReleaseEmailView, DebugResolvedInReleaseUpcomingEmailView, ) +from sentry.web.frontend.debug.debug_sentry_app_notify_disable import ( + DebugSentryAppNotifyDisableView, +) from sentry.web.frontend.debug.debug_setup_2fa_email import DebugSetup2faEmailView from sentry.web.frontend.debug.debug_sso_link_email import ( DebugSsoLinkedEmailView, @@ -151,4 +154,5 @@ re_path(r"^debug/oauth/authorize/error/$", DebugOAuthAuthorizeErrorView.as_view()), re_path(r"^debug/chart-renderer/$", DebugChartRendererView.as_view()), re_path(r"^debug/mail/notify-disable/$", DebugNotifyDisableView.as_view()), + re_path(r"^debug/mail/sentry-app-notify-disable/$", DebugSentryAppNotifyDisableView.as_view()), ] diff --git a/src/sentry/web/frontend/debug/debug_notify_disable.py b/src/sentry/web/frontend/debug/debug_notify_disable.py index 2e243a53780100..65b54e5c199643 100644 --- a/src/sentry/web/frontend/debug/debug_notify_disable.py +++ b/src/sentry/web/frontend/debug/debug_notify_disable.py @@ -1,39 +1,40 @@ from django.http import HttpRequest, HttpResponse from django.views.generic import View -from sentry.constants import SentryAppStatus +from sentry import integrations from sentry.integrations.notify_disable import get_provider_type, get_url -from sentry.models import Organization, SentryApp +from sentry.models import Integration, Organization from .mail import MailPreview class DebugNotifyDisableView(View): def get(self, request: HttpRequest) -> HttpResponse: - self.organization = Organization(id=1, slug="organization", name="My Company") - self.sentry_app = SentryApp( - name="Test App", - events=["issue.resolved", "issue.ignored", "issue.assigned"], - status=SentryAppStatus.INTERNAL, - webhook_url="https://broken-example.com/webhook", + self.integration = Integration.objects.create( + provider="slack", + name="Awesome Team", + external_id="TXXXXXXXZ", + metadata={ + "access_token": "xoxb-xxxxxxxxx-xxxxxxxxxx-xxxxxxxxxxxx", + "installation_type": "born_as_bot", + }, ) - integration_name = self.sentry_app.name + self.organization = Organization(id=1, slug="organization", name="My Company") + + provider = integrations.get(self.integration.provider) + integration_name = provider.name integration_link = get_url( self.organization, - get_provider_type(f"sentry-app-error:{self.sentry_app.uuid}"), - self.sentry_app.slug, + get_provider_type(f"sentry-integration-error:{self.integration.external_id}"), + provider.name, ) - redis_key = f"sentry-app-error:{self.sentry_app.uuid}" return MailPreview( - html_template="sentry/integrations/sentry-app-notify-disable.html", - text_template="sentry/integrations/sentry-app-notify-disable.txt", + html_template="sentry/integrations/notify-disable.html", + text_template="sentry/integrations/notify-disable.txt", context={ "integration_name": integration_name, "integration_link": integration_link, - "webhook_url": self.sentry_app.webhook_url - if "sentry-app" in redis_key and self.sentry_app.webhook_url - else "", }, ).render(request) diff --git a/src/sentry/web/frontend/debug/debug_sentry_app_notify_disable.py b/src/sentry/web/frontend/debug/debug_sentry_app_notify_disable.py new file mode 100644 index 00000000000000..9ef1881b2c642d --- /dev/null +++ b/src/sentry/web/frontend/debug/debug_sentry_app_notify_disable.py @@ -0,0 +1,40 @@ +from django.http import HttpRequest, HttpResponse +from django.views.generic import View + +from sentry.constants import SentryAppStatus +from sentry.integrations.notify_disable import get_provider_type, get_url +from sentry.models import Organization, SentryApp + +from .mail import MailPreview + + +class DebugSentryAppNotifyDisableView(View): + def get(self, request: HttpRequest) -> HttpResponse: + + self.organization = Organization(id=1, slug="organization", name="My Company") + self.sentry_app = SentryApp( + name="Test App", + events=["issue.resolved", "issue.ignored", "issue.assigned"], + status=SentryAppStatus.INTERNAL, + webhook_url="https://broken-example.com/webhook", + ) + + integration_name = self.sentry_app.name + integration_link = get_url( + self.organization, + get_provider_type(f"sentry-app-error:{self.sentry_app.uuid}"), + self.sentry_app.slug, + ) + redis_key = f"sentry-app-error:{self.sentry_app.uuid}" + + return MailPreview( + html_template="sentry/integrations/sentry-app-notify-disable.html", + text_template="sentry/integrations/sentry-app-notify-disable.txt", + context={ + "integration_name": integration_name, + "integration_link": integration_link, + "webhook_url": self.sentry_app.webhook_url + if "sentry-app" in redis_key and self.sentry_app.webhook_url + else "", + }, + ).render(request) From ca987b6a1b7038d9a4995f4ca96618c03504464e Mon Sep 17 00:00:00 2001 From: Chloe Date: Tue, 8 Aug 2023 09:53:53 -0700 Subject: [PATCH 4/9] add to dropdown --- src/sentry/templates/sentry/debug/mail/preview.html | 1 + 1 file changed, 1 insertion(+) diff --git a/src/sentry/templates/sentry/debug/mail/preview.html b/src/sentry/templates/sentry/debug/mail/preview.html index 0e3bc5c55b4f96..2e252e53fe2953 100644 --- a/src/sentry/templates/sentry/debug/mail/preview.html +++ b/src/sentry/templates/sentry/debug/mail/preview.html @@ -49,6 +49,7 @@ + From 4435b82f3ccd1dbee6ebd878cc02a14b1e9c0d3e Mon Sep 17 00:00:00 2001 From: Chloe Date: Tue, 8 Aug 2023 09:54:39 -0700 Subject: [PATCH 5/9] change option name --- src/sentry/templates/sentry/debug/mail/preview.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/sentry/templates/sentry/debug/mail/preview.html b/src/sentry/templates/sentry/debug/mail/preview.html index 2e252e53fe2953..b0a9d4b08ec738 100644 --- a/src/sentry/templates/sentry/debug/mail/preview.html +++ b/src/sentry/templates/sentry/debug/mail/preview.html @@ -49,7 +49,7 @@ - + From 90fd0edd1cdf786c5c47adcf3aea37e37602707c Mon Sep 17 00:00:00 2001 From: Chloe Date: Tue, 8 Aug 2023 09:57:13 -0700 Subject: [PATCH 6/9] fix sql key error --- src/sentry/web/frontend/debug/debug_notify_disable.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/sentry/web/frontend/debug/debug_notify_disable.py b/src/sentry/web/frontend/debug/debug_notify_disable.py index 65b54e5c199643..f1ba2e1c3af81e 100644 --- a/src/sentry/web/frontend/debug/debug_notify_disable.py +++ b/src/sentry/web/frontend/debug/debug_notify_disable.py @@ -13,7 +13,7 @@ def get(self, request: HttpRequest) -> HttpResponse: self.integration = Integration.objects.create( provider="slack", name="Awesome Team", - external_id="TXXXXXXXZ", + external_id="TXXXXXXX", metadata={ "access_token": "xoxb-xxxxxxxxx-xxxxxxxxxx-xxxxxxxxxxxx", "installation_type": "born_as_bot", From 94ecd6dda23e1f2c575abbb0c16a5c99489b0fee Mon Sep 17 00:00:00 2001 From: Chloe Date: Tue, 8 Aug 2023 11:28:33 -0700 Subject: [PATCH 7/9] finally fixing slack sql and adding more tests for sentry app email --- .../web/frontend/debug/debug_notify_disable.py | 1 - .../debug/debug_sentry_app_notify_disable.py | 13 ++++++++----- tests/sentry/tasks/test_sentry_apps.py | 9 +++++++++ 3 files changed, 17 insertions(+), 6 deletions(-) diff --git a/src/sentry/web/frontend/debug/debug_notify_disable.py b/src/sentry/web/frontend/debug/debug_notify_disable.py index f1ba2e1c3af81e..7029786ead1cb2 100644 --- a/src/sentry/web/frontend/debug/debug_notify_disable.py +++ b/src/sentry/web/frontend/debug/debug_notify_disable.py @@ -13,7 +13,6 @@ def get(self, request: HttpRequest) -> HttpResponse: self.integration = Integration.objects.create( provider="slack", name="Awesome Team", - external_id="TXXXXXXX", metadata={ "access_token": "xoxb-xxxxxxxxx-xxxxxxxxxx-xxxxxxxxxxxx", "installation_type": "born_as_bot", diff --git a/src/sentry/web/frontend/debug/debug_sentry_app_notify_disable.py b/src/sentry/web/frontend/debug/debug_sentry_app_notify_disable.py index 9ef1881b2c642d..bc74eee6981caf 100644 --- a/src/sentry/web/frontend/debug/debug_sentry_app_notify_disable.py +++ b/src/sentry/web/frontend/debug/debug_sentry_app_notify_disable.py @@ -3,7 +3,7 @@ from sentry.constants import SentryAppStatus from sentry.integrations.notify_disable import get_provider_type, get_url -from sentry.models import Organization, SentryApp +from sentry.models import Organization, SentryApp, SentryAppInstallation from .mail import MailPreview @@ -11,22 +11,25 @@ class DebugSentryAppNotifyDisableView(View): def get(self, request: HttpRequest) -> HttpResponse: - self.organization = Organization(id=1, slug="organization", name="My Company") + self.organization = Organization(id=1, slug="sentry", name="My Company") self.sentry_app = SentryApp( name="Test App", events=["issue.resolved", "issue.ignored", "issue.assigned"], status=SentryAppStatus.INTERNAL, webhook_url="https://broken-example.com/webhook", + slug="internal-35e455", + ) + self.install = SentryAppInstallation( + organization_id=self.organization.id, sentry_app=self.sentry_app ) + redis_key = f"sentry-app-error:{self.install.uuid}" integration_name = self.sentry_app.name integration_link = get_url( self.organization, - get_provider_type(f"sentry-app-error:{self.sentry_app.uuid}"), + get_provider_type(redis_key), self.sentry_app.slug, ) - redis_key = f"sentry-app-error:{self.sentry_app.uuid}" - return MailPreview( html_template="sentry/integrations/sentry-app-notify-disable.html", text_template="sentry/integrations/sentry-app-notify-disable.txt", diff --git a/tests/sentry/tasks/test_sentry_apps.py b/tests/sentry/tasks/test_sentry_apps.py index a52fa394cc7160..3dae656f8f627d 100644 --- a/tests/sentry/tasks/test_sentry_apps.py +++ b/tests/sentry/tasks/test_sentry_apps.py @@ -647,6 +647,7 @@ def setUp(self): name="Test App", organization=self.organization, events=["issue.resolved", "issue.ignored", "issue.assigned"], + webhook_url="https://example.com", ) self.sentry_app.update(status=SentryAppStatus.PUBLISHED) @@ -904,6 +905,7 @@ def test_notify_disabled_email(self): self.sentry_app.name, get_redis_key(self.sentry_app, self.organization.id), self.sentry_app.slug, + self.sentry_app.webhook_url, ) assert len(mail.outbox) == 1 msg = mail.outbox[0] @@ -917,3 +919,10 @@ def test_notify_disabled_email(self): ) in msg.body ) + assert ( + self.organization.absolute_url( + f"/settings/{self.organization.slug}/developer-settings/{self.sentry_app.slug}/dashboard" + ) + in msg.body + ) + assert (self.sentry_app.webhook_url) in msg.body From 5aaacbd8ee40cd121800cbcd21c9ea15174c2e86 Mon Sep 17 00:00:00 2001 From: Chloe Date: Tue, 8 Aug 2023 11:59:27 -0700 Subject: [PATCH 8/9] make debug consistent to calls --- src/sentry/web/frontend/debug/debug_notify_disable.py | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/src/sentry/web/frontend/debug/debug_notify_disable.py b/src/sentry/web/frontend/debug/debug_notify_disable.py index 7029786ead1cb2..8b11f63f64f3eb 100644 --- a/src/sentry/web/frontend/debug/debug_notify_disable.py +++ b/src/sentry/web/frontend/debug/debug_notify_disable.py @@ -1,7 +1,6 @@ from django.http import HttpRequest, HttpResponse from django.views.generic import View -from sentry import integrations from sentry.integrations.notify_disable import get_provider_type, get_url from sentry.models import Integration, Organization @@ -10,8 +9,9 @@ class DebugNotifyDisableView(View): def get(self, request: HttpRequest) -> HttpResponse: - self.integration = Integration.objects.create( + self.integration, _ = Integration.objects.get_or_create( provider="slack", + external_id="TXXXXXXX", name="Awesome Team", metadata={ "access_token": "xoxb-xxxxxxxxx-xxxxxxxxxx-xxxxxxxxxxxx", @@ -21,19 +21,18 @@ def get(self, request: HttpRequest) -> HttpResponse: self.organization = Organization(id=1, slug="organization", name="My Company") - provider = integrations.get(self.integration.provider) - integration_name = provider.name + integration_name = self.integration.provider integration_link = get_url( self.organization, get_provider_type(f"sentry-integration-error:{self.integration.external_id}"), - provider.name, + self.integration.provider, ) return MailPreview( html_template="sentry/integrations/notify-disable.html", text_template="sentry/integrations/notify-disable.txt", context={ - "integration_name": integration_name, + "integration_name": integration_name.title(), "integration_link": integration_link, }, ).render(request) From 08286e9d29ac626f12299cfb7d8131e3550f2db0 Mon Sep 17 00:00:00 2001 From: Chloe Date: Tue, 8 Aug 2023 12:53:23 -0700 Subject: [PATCH 9/9] pass dashboard link in context --- src/sentry/integrations/notify_disable.py | 3 +++ .../sentry/integrations/sentry-app-notify-disable.html | 2 +- .../sentry/integrations/sentry-app-notify-disable.txt | 2 +- .../web/frontend/debug/debug_sentry_app_notify_disable.py | 1 + 4 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/sentry/integrations/notify_disable.py b/src/sentry/integrations/notify_disable.py index 304637678110c8..927387c56b95f6 100644 --- a/src/sentry/integrations/notify_disable.py +++ b/src/sentry/integrations/notify_disable.py @@ -58,6 +58,9 @@ def notify_disable( "integration_name": integration_name.title(), "integration_link": integration_link, "webhook_url": webhook_url if "sentry-app" in redis_key and webhook_url else "", + "dashboard_link": f"{integration_link}dashboard/" + if "sentry-app" in redis_key + else "", }, html_template="sentry/integrations/sentry-app-notify-disable.html" if "sentry-app" in redis_key and integration_slug diff --git a/src/sentry/templates/sentry/integrations/sentry-app-notify-disable.html b/src/sentry/templates/sentry/integrations/sentry-app-notify-disable.html index 40d02db55129d4..e8da26449321df 100644 --- a/src/sentry/templates/sentry/integrations/sentry-app-notify-disable.html +++ b/src/sentry/templates/sentry/integrations/sentry-app-notify-disable.html @@ -6,7 +6,7 @@

Hi there,

- We’ve received multiple request errors from your webhook: {{webhook_url}} for the custom {{ integration_name }} integration, and have unsubscribed the webhook from receiving events. + We’ve received multiple request errors from your webhook: {{webhook_url}} for the custom {{ integration_name }} integration, and have unsubscribed the webhook from receiving events.

To continue using your custom integration, please fix your webhook: {{webhook_url}} and re-enable the webhook subscriptions here.

diff --git a/src/sentry/templates/sentry/integrations/sentry-app-notify-disable.txt b/src/sentry/templates/sentry/integrations/sentry-app-notify-disable.txt index 4f48b0068d4b15..651343017f7f43 100644 --- a/src/sentry/templates/sentry/integrations/sentry-app-notify-disable.txt +++ b/src/sentry/templates/sentry/integrations/sentry-app-notify-disable.txt @@ -1,6 +1,6 @@ Hi there, - We’ve received multiple request errors from your webhook: {{webhook_url}} for the custom {{ integration_name }} integration, + We’ve received multiple request errors from your webhook: {{webhook_url}} for the custom {{ integration_name }} integration, and have unsubscribed the webhook from receiving events. To continue using your custom integration, please fix your webhook: {{webhook_url}} and re-enable the webhook subscriptions here. diff --git a/src/sentry/web/frontend/debug/debug_sentry_app_notify_disable.py b/src/sentry/web/frontend/debug/debug_sentry_app_notify_disable.py index bc74eee6981caf..c84466a8054c3a 100644 --- a/src/sentry/web/frontend/debug/debug_sentry_app_notify_disable.py +++ b/src/sentry/web/frontend/debug/debug_sentry_app_notify_disable.py @@ -39,5 +39,6 @@ def get(self, request: HttpRequest) -> HttpResponse: "webhook_url": self.sentry_app.webhook_url if "sentry-app" in redis_key and self.sentry_app.webhook_url else "", + "dashboard_link": f"{integration_link}dashboard/", }, ).render(request)