Skip to content

Commit fcc4460

Browse files
authored
feat(demo-mode): analytics (#89720)
1 parent 2d4c645 commit fcc4460

File tree

5 files changed

+71
-35
lines changed

5 files changed

+71
-35
lines changed

src/sentry/demo_mode/utils.py

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
from sentry import options
44
from sentry.models.organization import Organization
5+
from sentry.organizations.services.organization import organization_service
56
from sentry.users.models.user import User
67

78
READONLY_SCOPES = frozenset(
@@ -41,15 +42,29 @@ def get_demo_org():
4142
if not is_demo_mode_enabled():
4243
return None
4344

44-
org_id = options.get("demo-mode.orgs")[0]
45-
return Organization.objects.get(id=org_id)
45+
demo_orgs = options.get("demo-mode.orgs")
46+
47+
if demo_orgs is None or len(demo_orgs) == 0:
48+
return None
49+
50+
org_id = demo_orgs[0]
51+
52+
return organization_service.get_org_by_id(
53+
id=org_id,
54+
)
4655

4756

4857
def get_demo_user():
4958
if not is_demo_mode_enabled():
5059
return None
5160

52-
user_id = options.get("demo-mode.users")[0]
61+
demo_users = options.get("demo-mode.users")
62+
63+
if demo_users is None or len(demo_users) == 0:
64+
return None
65+
66+
user_id = demo_users[0]
67+
5368
return User.objects.get(id=user_id)
5469

5570

src/sentry/templates/sentry/layout.html

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
{% load sentry_features %}
55
{% load sentry_helpers %}
66
{% load sentry_status %}
7+
{% load sentry_demo_mode %}
78
{% get_sentry_version %}
89
<!DOCTYPE html>
910
<html lang="en">
@@ -70,6 +71,9 @@
7071
{% asset_url 'sentry' 'js/ads.js' as asset_url %}
7172
{% script src=asset_url crossorigin="anonymous" %}{% endscript %}
7273
{% endblock %}
74+
75+
{% init_demo_analytics %}
76+
7377
</head>
7478

7579

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
from django import template
2+
from django.utils.safestring import mark_safe
3+
4+
from sentry.demo_mode.utils import get_demo_org
5+
6+
register = template.Library()
7+
8+
9+
@register.simple_tag
10+
def init_demo_analytics():
11+
org = get_demo_org()
12+
13+
if not org:
14+
return ""
15+
16+
domain = f"{org.slug}.sentry.io"
17+
18+
html = f"""
19+
<script defer data-domain="{domain}" src="https://plausible.io/js/script.pageview-props.tagged-events.js"></script>
20+
<script>window.plausible = window.plausible || function() {{ (window.plausible.q = window.plausible.q || []).push(arguments) }}</script>
21+
"""
22+
return mark_safe(html)

static/app/utils/demoMode/utils.tsx

Lines changed: 0 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
import * as Sentry from '@sentry/react';
2-
31
import {setForceHide} from 'sentry/actionCreators/guides';
42
import {demoSignupModal} from 'sentry/actionCreators/modal';
53
import type {Client} from 'sentry/api';
@@ -25,7 +23,6 @@ export function initDemoMode(api: Client) {
2523
if (!isDemoModeActive()) {
2624
return;
2725
}
28-
initDemoAnalytics();
2926
captureEmail(api);
3027
}
3128

@@ -57,31 +54,3 @@ async function captureEmail(api: Client) {
5754
setForceHide(false);
5855
}
5956
}
60-
61-
function initDemoAnalytics() {
62-
if (!isDemoModeActive()) {
63-
return;
64-
}
65-
66-
if (document.getElementById('plausible-script')) {
67-
return;
68-
}
69-
70-
try {
71-
const mainScript = document.createElement('script');
72-
mainScript.id = 'plausible-script';
73-
mainScript.defer = true;
74-
mainScript.setAttribute('data-domain', window.location.hostname);
75-
mainScript.src = 'https://plausible.io/js/script.pageview-props.tagged-events.js';
76-
77-
const queueScript = document.createElement('script');
78-
queueScript.id = 'plausible-queue-script';
79-
queueScript.textContent =
80-
'window.plausible = window.plausible || function() { (window.plausible.q = window.plausible.q || []).push(arguments) }';
81-
82-
document.head.appendChild(mainScript);
83-
document.head.appendChild(queueScript);
84-
} catch (error) {
85-
Sentry.captureException(error);
86-
}
87-
}

tests/sentry/demo_mode/test_utils.py

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,18 @@ def test_get_demo_user_demo_mode_disabled():
7979
assert get_demo_user() is None
8080

8181

82+
@override_options({"demo-mode.enabled": True, "demo-mode.users": None})
83+
@django_db_all
84+
def test_get_demo_user_demo_mode_enabled_users_none():
85+
assert get_demo_user() is None
86+
87+
88+
@override_options({"demo-mode.enabled": True, "demo-mode.users": []})
89+
@django_db_all
90+
def test_get_demo_user_demo_mode_enabled_users_empty():
91+
assert get_demo_user() is None
92+
93+
8294
@override_options({"demo-mode.enabled": True, "demo-mode.users": [1]})
8395
@django_db_all
8496
def test_get_demo_user_demo_mode_enabled():
@@ -98,6 +110,20 @@ def test_get_demo_org_demo_mode_disabled():
98110
@django_db_all
99111
def test_get_demo_org_demo_mode_enabled():
100112
org = Factories.create_organization(id=1)
101-
with patch("sentry.demo_mode.utils.Organization.objects.get", return_value=org) as mock_org_get:
113+
with patch(
114+
"sentry.demo_mode.utils.organization_service.get_org_by_id", return_value=org
115+
) as mock_org_get:
102116
assert get_demo_org() == org
103117
mock_org_get.assert_called_once_with(id=1)
118+
119+
120+
@override_options({"demo-mode.enabled": True, "demo-mode.orgs": []})
121+
@django_db_all
122+
def test_get_demo_org_demo_mode_enabled_not_set():
123+
assert get_demo_org() is None
124+
125+
126+
@override_options({"demo-mode.enabled": True, "demo-mode.orgs": None})
127+
@django_db_all
128+
def test_get_demo_org_demo_mode_enabled_orgs_none():
129+
assert get_demo_org() is None

0 commit comments

Comments
 (0)