From 074b4e4e79ebcf76e60eea4d1f2f688558ec6a2b Mon Sep 17 00:00:00 2001
From: Ogi <86684834+obostjancic@users.noreply.github.com>
Date: Wed, 16 Apr 2025 09:40:23 +0200
Subject: [PATCH 1/6] feat(demo-mode): analytics
---
src/sentry/templates/sentry/layout.html | 5 +++-
src/sentry/templatetags/sentry_demo_mode.py | 18 ++++++++++++
static/app/utils/demoMode/utils.tsx | 31 ---------------------
3 files changed, 22 insertions(+), 32 deletions(-)
create mode 100644 src/sentry/templatetags/sentry_demo_mode.py
diff --git a/src/sentry/templates/sentry/layout.html b/src/sentry/templates/sentry/layout.html
index 9a8019b59fa87a..d7cbf6f5eb4a0b 100644
--- a/src/sentry/templates/sentry/layout.html
+++ b/src/sentry/templates/sentry/layout.html
@@ -4,6 +4,7 @@
{% load sentry_features %}
{% load sentry_helpers %}
{% load sentry_status %}
+{% load sentry_demo_mode %}
{% get_sentry_version %}
@@ -55,7 +56,6 @@
{% endscript %}
{% include "sentry/partial/preload-data.html" %}
-
{% block scripts %}
{% block scripts_main_entrypoint %}
{% frontend_app_asset_url "sentry" "entrypoints/app.js" as asset_url %}
@@ -70,6 +70,9 @@
{% asset_url 'sentry' 'js/ads.js' as asset_url %}
{% script src=asset_url crossorigin="anonymous" %}{% endscript %}
{% endblock %}
+
+ {% init_demo_analytics request.get_host %}
+
diff --git a/src/sentry/templatetags/sentry_demo_mode.py b/src/sentry/templatetags/sentry_demo_mode.py
new file mode 100644
index 00000000000000..6706af187ce822
--- /dev/null
+++ b/src/sentry/templatetags/sentry_demo_mode.py
@@ -0,0 +1,18 @@
+from django import template
+from django.utils.safestring import mark_safe
+
+from sentry.demo_mode.utils import is_demo_mode_enabled
+
+register = template.Library()
+
+
+@register.simple_tag
+def init_demo_analytics(domain):
+ if not is_demo_mode_enabled():
+ return ""
+
+ html = f"""
+
+
+ """
+ return mark_safe(html)
diff --git a/static/app/utils/demoMode/utils.tsx b/static/app/utils/demoMode/utils.tsx
index 7e3c9f3d480109..70bafcef0bcd7c 100644
--- a/static/app/utils/demoMode/utils.tsx
+++ b/static/app/utils/demoMode/utils.tsx
@@ -1,5 +1,3 @@
-import * as Sentry from '@sentry/react';
-
import {setForceHide} from 'sentry/actionCreators/guides';
import {demoSignupModal} from 'sentry/actionCreators/modal';
import type {Client} from 'sentry/api';
@@ -25,7 +23,6 @@ export function initDemoMode(api: Client) {
if (!isDemoModeActive()) {
return;
}
- initDemoAnalytics();
captureEmail(api);
}
@@ -57,31 +54,3 @@ async function captureEmail(api: Client) {
setForceHide(false);
}
}
-
-function initDemoAnalytics() {
- if (!isDemoModeActive()) {
- return;
- }
-
- if (document.getElementById('plausible-script')) {
- return;
- }
-
- try {
- const mainScript = document.createElement('script');
- mainScript.id = 'plausible-script';
- mainScript.defer = true;
- mainScript.setAttribute('data-domain', window.location.hostname);
- mainScript.src = 'https://plausible.io/js/script.pageview-props.tagged-events.js';
-
- const queueScript = document.createElement('script');
- queueScript.id = 'plausible-queue-script';
- queueScript.textContent =
- 'window.plausible = window.plausible || function() { (window.plausible.q = window.plausible.q || []).push(arguments) }';
-
- document.head.appendChild(mainScript);
- document.head.appendChild(queueScript);
- } catch (error) {
- Sentry.captureException(error);
- }
-}
From d61ee753b51490bc4ec4ba6e5d60fb8fe34c4942 Mon Sep 17 00:00:00 2001
From: Ogi <86684834+obostjancic@users.noreply.github.com>
Date: Wed, 16 Apr 2025 09:41:12 +0200
Subject: [PATCH 2/6] blank line
---
src/sentry/templates/sentry/layout.html | 1 +
1 file changed, 1 insertion(+)
diff --git a/src/sentry/templates/sentry/layout.html b/src/sentry/templates/sentry/layout.html
index d7cbf6f5eb4a0b..9e5a7bb4f1312c 100644
--- a/src/sentry/templates/sentry/layout.html
+++ b/src/sentry/templates/sentry/layout.html
@@ -56,6 +56,7 @@
{% endscript %}
{% include "sentry/partial/preload-data.html" %}
+
{% block scripts %}
{% block scripts_main_entrypoint %}
{% frontend_app_asset_url "sentry" "entrypoints/app.js" as asset_url %}
From 70af49b57a47dbc4de284d68d5d14e95fc07f529 Mon Sep 17 00:00:00 2001
From: Ogi <86684834+obostjancic@users.noreply.github.com>
Date: Wed, 16 Apr 2025 13:41:27 +0200
Subject: [PATCH 3/6] domain fix
---
src/sentry/demo_mode/utils.py | 16 ++++++++++++--
src/sentry/templates/sentry/layout.html | 2 +-
src/sentry/templatetags/sentry_demo_mode.py | 11 ++++++++--
tests/sentry/demo_mode/test_utils.py | 24 +++++++++++++++++++++
4 files changed, 48 insertions(+), 5 deletions(-)
diff --git a/src/sentry/demo_mode/utils.py b/src/sentry/demo_mode/utils.py
index 5938c2642dc55a..a0dba9212d738c 100644
--- a/src/sentry/demo_mode/utils.py
+++ b/src/sentry/demo_mode/utils.py
@@ -41,7 +41,13 @@ def get_demo_org():
if not is_demo_mode_enabled():
return None
- org_id = options.get("demo-mode.orgs")[0]
+ demo_orgs = options.get("demo-mode.orgs")
+
+ if demo_orgs is None or len(demo_orgs) == 0:
+ return None
+
+ org_id = demo_orgs[0]
+
return Organization.objects.get(id=org_id)
@@ -49,7 +55,13 @@ def get_demo_user():
if not is_demo_mode_enabled():
return None
- user_id = options.get("demo-mode.users")[0]
+ demo_users = options.get("demo-mode.users")
+
+ if demo_users is None or len(demo_users) == 0:
+ return None
+
+ user_id = demo_users[0]
+
return User.objects.get(id=user_id)
diff --git a/src/sentry/templates/sentry/layout.html b/src/sentry/templates/sentry/layout.html
index 9e5a7bb4f1312c..2aa267ccd40b78 100644
--- a/src/sentry/templates/sentry/layout.html
+++ b/src/sentry/templates/sentry/layout.html
@@ -72,7 +72,7 @@
{% script src=asset_url crossorigin="anonymous" %}{% endscript %}
{% endblock %}
- {% init_demo_analytics request.get_host %}
+ {% init_demo_analytics %}
diff --git a/src/sentry/templatetags/sentry_demo_mode.py b/src/sentry/templatetags/sentry_demo_mode.py
index 6706af187ce822..ffc0fffdc50652 100644
--- a/src/sentry/templatetags/sentry_demo_mode.py
+++ b/src/sentry/templatetags/sentry_demo_mode.py
@@ -1,16 +1,23 @@
from django import template
from django.utils.safestring import mark_safe
-from sentry.demo_mode.utils import is_demo_mode_enabled
+from sentry.demo_mode.utils import get_demo_org, is_demo_mode_enabled
register = template.Library()
@register.simple_tag
-def init_demo_analytics(domain):
+def init_demo_analytics():
if not is_demo_mode_enabled():
return ""
+ org = get_demo_org()
+
+ if not org:
+ return ""
+
+ domain = f"{org.slug}.sentry.io"
+
html = f"""
diff --git a/tests/sentry/demo_mode/test_utils.py b/tests/sentry/demo_mode/test_utils.py
index 08e50528a8f1d3..b646927679735e 100644
--- a/tests/sentry/demo_mode/test_utils.py
+++ b/tests/sentry/demo_mode/test_utils.py
@@ -79,6 +79,18 @@ def test_get_demo_user_demo_mode_disabled():
assert get_demo_user() is None
+@override_options({"demo-mode.enabled": True, "demo-mode.users": None})
+@django_db_all
+def test_get_demo_user_demo_mode_enabled_users_none():
+ assert get_demo_user() is None
+
+
+@override_options({"demo-mode.enabled": True, "demo-mode.users": []})
+@django_db_all
+def test_get_demo_user_demo_mode_enabled_users_empty():
+ assert get_demo_user() is None
+
+
@override_options({"demo-mode.enabled": True, "demo-mode.users": [1]})
@django_db_all
def test_get_demo_user_demo_mode_enabled():
@@ -101,3 +113,15 @@ def test_get_demo_org_demo_mode_enabled():
with patch("sentry.demo_mode.utils.Organization.objects.get", return_value=org) as mock_org_get:
assert get_demo_org() == org
mock_org_get.assert_called_once_with(id=1)
+
+
+@override_options({"demo-mode.enabled": True, "demo-mode.orgs": []})
+@django_db_all
+def test_get_demo_org_demo_mode_enabled_not_set():
+ assert get_demo_org() is None
+
+
+@override_options({"demo-mode.enabled": True, "demo-mode.orgs": None})
+@django_db_all
+def test_get_demo_org_demo_mode_enabled_orgs_none():
+ assert get_demo_org() is None
From 4e18c18334aa1e9f2e10965e225013e85106ed40 Mon Sep 17 00:00:00 2001
From: Ogi <86684834+obostjancic@users.noreply.github.com>
Date: Wed, 16 Apr 2025 13:42:54 +0200
Subject: [PATCH 4/6] remove check
---
src/sentry/templatetags/sentry_demo_mode.py | 5 +----
1 file changed, 1 insertion(+), 4 deletions(-)
diff --git a/src/sentry/templatetags/sentry_demo_mode.py b/src/sentry/templatetags/sentry_demo_mode.py
index ffc0fffdc50652..ba1f0d911241ab 100644
--- a/src/sentry/templatetags/sentry_demo_mode.py
+++ b/src/sentry/templatetags/sentry_demo_mode.py
@@ -1,16 +1,13 @@
from django import template
from django.utils.safestring import mark_safe
-from sentry.demo_mode.utils import get_demo_org, is_demo_mode_enabled
+from sentry.demo_mode.utils import get_demo_org
register = template.Library()
@register.simple_tag
def init_demo_analytics():
- if not is_demo_mode_enabled():
- return ""
-
org = get_demo_org()
if not org:
From bf4a4a4ecaa5a1d1fb55282d730287f5997ff12a Mon Sep 17 00:00:00 2001
From: Ogi <86684834+obostjancic@users.noreply.github.com>
Date: Thu, 17 Apr 2025 10:26:03 +0200
Subject: [PATCH 5/6] use org_service
---
src/sentry/demo_mode/utils.py | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/src/sentry/demo_mode/utils.py b/src/sentry/demo_mode/utils.py
index a0dba9212d738c..c99d60f40d9884 100644
--- a/src/sentry/demo_mode/utils.py
+++ b/src/sentry/demo_mode/utils.py
@@ -2,6 +2,7 @@
from sentry import options
from sentry.models.organization import Organization
+from sentry.organizations.services.organization import organization_service
from sentry.users.models.user import User
READONLY_SCOPES = frozenset(
@@ -48,7 +49,9 @@ def get_demo_org():
org_id = demo_orgs[0]
- return Organization.objects.get(id=org_id)
+ return organization_service.get_org_by_id(
+ id=org_id,
+ )
def get_demo_user():
From 0f5016fa52a1d22767cb6c4bfffab253b8319cf1 Mon Sep 17 00:00:00 2001
From: Ogi <86684834+obostjancic@users.noreply.github.com>
Date: Thu, 17 Apr 2025 10:48:34 +0200
Subject: [PATCH 6/6] fix test
---
tests/sentry/demo_mode/test_utils.py | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/tests/sentry/demo_mode/test_utils.py b/tests/sentry/demo_mode/test_utils.py
index b646927679735e..5c67dcfa3f40f8 100644
--- a/tests/sentry/demo_mode/test_utils.py
+++ b/tests/sentry/demo_mode/test_utils.py
@@ -110,7 +110,9 @@ def test_get_demo_org_demo_mode_disabled():
@django_db_all
def test_get_demo_org_demo_mode_enabled():
org = Factories.create_organization(id=1)
- with patch("sentry.demo_mode.utils.Organization.objects.get", return_value=org) as mock_org_get:
+ with patch(
+ "sentry.demo_mode.utils.organization_service.get_org_by_id", return_value=org
+ ) as mock_org_get:
assert get_demo_org() == org
mock_org_get.assert_called_once_with(id=1)