{{ event.ingested_at|date:"j M G:i T" }} (Event {{ event.digest_order|intcomma }} of {{ issue.digested_event_count|intcomma }})
{% include "issues/_event_nav.html" %}
{# NOTE if we store event.grouper on the event, we could also show that here #}
Key info
{% for key, value in key_info %}
{{ key }}
{{ value }}
{% endfor %}
{% if logentry_info %}
Log Entry
{% for key, value in logentry_info %}
{{ key }}
{{ value }}
{% endfor %}
{% endif %}
{% if deployment_info %}
Deployment
{% for key, value in deployment_info %}
{{ key }}
{{ value }}
{% endfor %}
{% endif %}
{% if parsed_data.tags %}
Tags
{% for key, value in parsed_data.tags|items %}
{{ key }}
{{ value }}
{% endfor %}
{% endif %}
{% if parsed_data.user %}
{# note: in the (September 2024) sentry.io interface, user info is displayed under 'contexts', but in the data it simply lives top-level as #}
{# is implied by parsed_data.user -- I checked in a recent (September 2024) event.schema.json #}
User
{% for key, value in parsed_data.user|items %}
{{ key }}
{{ value }}
{% endfor %}
{% endif %}
{% if parsed_data.request %}
Request
{% for key, value in parsed_data.request|items %}
{% if key != "headers" and key != "env" %}{# we deal with these below #}
{{ key }}
{{ value }}
{# forloop.last doesn't work given the if-statement; we can fix that by pre-processing in the view #}
{% endif %}
{% endfor %}
{% if parsed_data.request.headers %}
REQUEST HEADERS
{% for key, value in parsed_data.request.headers.items %}
{{ key }}
{{ value }}
{% endfor %}
{% endif %} {# end if parsed_data.request.headers #}
{% if parsed_data.request.env %}
REQUEST ENV
{% for key, value in parsed_data.request.env.items %}
{{ key }}
{{ value }}
{% endfor %}
{% endif %} {# end if parsed_data.request.env #}
{% endif %}
{% if contexts %}
Contexts
{% for context_key, context in contexts|items %}
{{ context_key|upper }}
{% for key, value in context|items %}
{{ key }}
{{ value }}
{% endfor %}
{% endfor %}
{% endif %}
{% comment %}
earlier I said about "tracing": I don't believe much in this whole business of tracing, so I'm not going to display the associated data either
now that we "just display all contexts" this is no longer true... some of the feeling persists, but I don't think
that I'm so much anti-tracing that I want specifically exclude it from a generic loop. The data's there, let's just
show it (in a non-special way)
{% endcomment %}
{% comment %}
commented-out like it's 1999.
this is now part of the more general "contexts" handling right above this section.
the fact that we commented-out rather than clobbered reveals a small amount of doubt about whether this is the way.
{% if parsed_data.contexts.runtime %}
{# sentry gives this prime location (even a picture)... but why... it's kinda obvious what you're working in right? Maybe I could put it at the top of the modules list instead. And check if there's any other relevant info in that runtime context (RTFM) #}
Runtime
{% for key, value in parsed_data.contexts.runtime|items %}
{{ key }}
{{ value }}
{% endfor %}
{% endif %}
{% endcomment %}
{% if parsed_data.modules %}
Modules
{# we have observed that (emperically) the keys in most of the above are sorted in some kind of meaningful way from important to non-important #}
{# however, for modules I'd rather just have an alphabetical list. #}
{% for key, value in parsed_data.modules|sorted_items %}
{{ key }}
{{ value }}
{% endfor %}
{% endif %}
{% if parsed_data.sdk %}
SDK
{% for key, value in parsed_data.sdk|items %}
{{ key }}
{{ value }}
{# the actual value may be a dict/list, but we'll just print it as a string; this is plenty of space for something as (hopefully) irrelevant as the SDK #}
{% endfor %}
{% endif %}
{% if parsed_data.extra %}
Extra
{% for key, value in parsed_data.extra|items %}
{{ key }}
{{ value }}
{# the actual value may be a dict/list, but we'll just print it as a string; this is plenty of space for something as (hopefully) irrelevant #}