SDK instructions factored out to separate package

This commit is contained in:
Klaas van Schelven
2024-11-19 09:25:27 +01:00
parent 5b5b9bf189
commit 2569ec4ac5
4 changed files with 25 additions and 67 deletions

View File

@@ -56,6 +56,7 @@ INSTALLED_APPS = [
'tailwind', # As currently set up, this is also needed in production (templatetags)
'admin_auto_filters',
'sdkconf',
]
BUGSINK_APPS = [

View File

@@ -34,9 +34,7 @@
Install the SDK using pip:
</div>
<div class="mt-4">
<div class="p-4 mt-4 bg-slate-50 syntax-coloring"><pre><span>pip install sentry-sdk</span></pre></div>
</div>
{{ install }}
<h2 class="mt-8 text-2xl font-bold">Step 2: Initialize the SDK</h2>
@@ -44,69 +42,8 @@
Initialize the SDK with your DSN:
</div>
{% comment %} add hoc construction of highlighted code:
from pygments import highlight
from pygments.lexers import PythonLexer
from pygments.formatters import HtmlFormatter
lexer = PythonLexer()
code = """import sentry_sdk
sentry_sdk.init(
"REPLACEME",
{{ conf }}
# The SDK's default is to not send PII; for a SaaS solution this is probably
# the right choice, but when you're using Bugsink (i.e. self-hosted), it's
# more likely that you want to send everything (and e.g. be able to see
# which user was affected by a certain event). Uncomment the following line
# to send PII.
# send_default_pii=True,
# The SDK's default is to be quite conservative with the nr of local
# variables it sends per frame (the default is is 10). If you want to see
# more, you may either proceed with the monkey patching described in the
# issue below, or set max_request_body_size to "always" (which will send
# everything). Note that this may lead to very large messages, which may be
# dropped by the server (but the server is under your control, so you can
# change that). see https://github.com/getsentry/sentry-python/issues/377
# max_request_body_size="always",
# Setting up the release is highly recommended. The SDK will try to infer
# it, but explicitly setting it is more reliable.
# release=...,
# Bugsink intentionally does not support traces. No need to send them then
traces_sample_rate=0,
)"""
print(highlight(code, lexer, HtmlFormatter()).replace("highlight", "p-4 mt-4 bg-slate-50 syntax-coloring").replace("REPLACEME", "{{ project.dsn }}"))
{% endcomment %}
<div class="p-4 mt-4 bg-slate-50 syntax-coloring"><pre><span></span><span class="kn">import</span> <span class="nn">sentry_sdk</span>
<span class="n">sentry_sdk</span><span class="o">.</span><span class="n">init</span><span class="p">(</span>
<span class="s2">&quot;{{ project.dsn }}&quot;</span><span class="p">,</span>
<span class="c1"># The SDK&#39;s default is to not send PII; for a SaaS solution this is probably</span>
<span class="c1"># the right choice, but when you&#39;re using Bugsink (i.e. self-hosted), it&#39;s</span>
<span class="c1"># more likely that you want to send everything (and e.g. be able to see</span>
<span class="c1"># which user was affected by a certain event). Uncomment the following line</span>
<span class="c1"># to send PII.</span>
<span class="c1"># send_default_pii=True,</span>
<span class="c1"># The SDK&#39;s default is to be quite conservative with the nr of local</span>
<span class="c1"># variables it sends per frame (the default is is 10). If you want to see</span>
<span class="c1"># more, you may either proceed with the monkey patching described in the</span>
<span class="c1"># issue below, or set max_request_body_size to &quot;always&quot; (which will send</span>
<span class="c1"># everything). Note that this may lead to very large messages, which may be</span>
<span class="c1"># dropped by the server (but the server is under your control, so you can</span>
<span class="c1"># change that). see https://github.com/getsentry/sentry-python/issues/377</span>
<span class="c1"># max_request_body_size=&quot;always&quot;,</span>
<span class="c1"># Setting up the release is highly recommended. The SDK will try to infer</span>
<span class="c1"># it, but explicitly setting it is more reliable.</span>
<span class="c1"># release=...,</span>
<span class="c1"># Bugsink intentionally does not support traces. No need to send them then.</span>
<span class="n">traces_sample_rate</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span>
<span class="p">)</span>
</pre></div>
<div class="mt-4">
For integration-specific (Django, Flask, etc) notes, see the <a href="https://docs.sentry.io/platforms/python/" class="text-cyan-500 font-bold" target="_blank">Sentry documentation</a>.
</div>
@@ -117,8 +54,7 @@ print(highlight(code, lexer, HtmlFormatter()).replace("highlight", "p-4 mt-4 bg-
Verify the setup by sending an event:
</div>
<div class="p-4 mt-4 bg-slate-50 syntax-coloring"><pre><span></span><span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span><span class="s2">&quot;Raised Exception on purpose to send it to Bugsink&quot;</span><span class="p">)</span>
</pre></div>
{{ verify }}
<div class="mt-4">
Your event should now appear in the <a href="{% url "issue_list_open" project_pk=project.pk %}" class="text-cyan-500 font-bold">list of open issues</a>.

View File

@@ -1,5 +1,10 @@
from datetime import timedelta
from pygments import highlight
from pygments.lexers import PythonLexer, TextLexer
from pygments.formatters import HtmlFormatter
from django.template.loader import get_template
from django.shortcuts import render
from django.db import models
from django.shortcuts import redirect
@@ -10,6 +15,7 @@ from django.contrib import messages
from django.contrib.auth import logout
from django.urls import reverse
from django.utils import timezone
from django.utils.safestring import mark_safe
from users.models import EmailVerification
from teams.models import TeamMembership, Team, TeamRole
@@ -379,6 +385,14 @@ def project_members_accept(request, project_pk):
return render(request, "projects/project_members_accept.html", {"project": project, "membership": membership})
def _sdk_code(part, context, lexer):
template = get_template("sdkconf/python/%s" % part)
code = template.render(context)
return mark_safe(
highlight(code, lexer, HtmlFormatter()).replace("highlight", "p-4 mt-4 bg-slate-50 syntax-coloring"))
@atomic_for_request_method
def project_sdk_setup(request, project_pk):
project = Project.objects.get(id=project_pk)
@@ -387,6 +401,12 @@ def project_sdk_setup(request, project_pk):
accepted=True).exists():
raise PermissionDenied("You are not a member of this project")
# NOTE about lexers:: I have bugsink/pyments_extensions; but the platforms mentioned there don't necessarily map to
# what I will make selectable here. "We'll see" whether yet another lookup dict will be needed.
return render(request, "projects/project_sdk_setup.html", {
"project": project,
"install": _sdk_code("install", {}, TextLexer()),
"conf": _sdk_code("conf", {"dsn": project.dsn}, PythonLexer()),
"verify": _sdk_code("verify", {}, PythonLexer()),
})

View File

@@ -15,3 +15,4 @@ monofy==1.1.*
user_agents
fastjsonschema
verbose_csrf_middleware
sdkconf