mirror of
https://github.com/bugsink/bugsink.git
synced 2026-02-23 06:49:15 -06:00
View events only as part of an issue
This commit is contained in:
2
events/templates/events/base.html
Normal file
2
events/templates/events/base.html
Normal file
@@ -0,0 +1,2 @@
|
||||
{% extends "base.html" %}
|
||||
{% block title %}{{ issue.title }}{# note: dubious: should really be event.title... #} | {{ block.super }}{% endblock %}
|
||||
@@ -1,4 +1,4 @@
|
||||
{% extends "base.html" %}
|
||||
{% extends "events/base.html" %}
|
||||
|
||||
{% block content %}
|
||||
<div class="m-4">
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
from django.urls import path
|
||||
|
||||
from .views import event_detail, event_download, debug_get_hash
|
||||
from .views import event_download, debug_get_hash
|
||||
|
||||
|
||||
urlpatterns = [
|
||||
path('event/<uuid:pk>/', event_detail),
|
||||
# path('event/<uuid:pk>/', event_detail), perhaps should become a redirect to issue/.../event now?
|
||||
path('event/<uuid:pk>/raw/', event_download, kwargs={"as_attachment": False}),
|
||||
path('event/<uuid:pk>/download/', event_download, kwargs={"as_attachment": True}),
|
||||
path('debug_get_hash/<uuid:event_pk>/', debug_get_hash),
|
||||
|
||||
@@ -9,33 +9,6 @@ from issues.utils import get_hash_for_data, get_issue_grouper_for_data
|
||||
from .models import Event
|
||||
|
||||
|
||||
def event_detail(request, pk):
|
||||
obj = get_object_or_404(Event, pk=pk)
|
||||
|
||||
parsed_data = json.loads(obj.data)
|
||||
|
||||
# sentry/glitchtip have some code here to deal with the case that "values" is not present, and exception itself is
|
||||
# the list of exceptions, but we don't aim for endless backwards compat (yet) so we don't.
|
||||
exceptions = parsed_data["exception"]["values"] if "exception" in parsed_data else None
|
||||
|
||||
if "logentry" in parsed_data:
|
||||
logentry = parsed_data["logentry"]
|
||||
if "formatted" not in logentry:
|
||||
# TODO this is just a wild guess"
|
||||
if "message" in logentry:
|
||||
if "params" not in logentry:
|
||||
logentry["formatted"] = logentry["message"]
|
||||
else:
|
||||
logentry["formatted"] = logentry["message"].format(logentry["params"])
|
||||
|
||||
return render(request, "events/event_detail.html", {
|
||||
"obj": obj,
|
||||
"parsed_data": parsed_data,
|
||||
"exceptions": exceptions,
|
||||
"issue_grouper": get_issue_grouper_for_data(parsed_data),
|
||||
})
|
||||
|
||||
|
||||
def event_download(request, pk, as_attachment=False):
|
||||
obj = get_object_or_404(Event, pk=pk)
|
||||
result = HttpResponse(obj.data, content_type="application/json")
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
{% for issue in issue_list %}
|
||||
|
||||
<div class="m-4 ml-0 p-4 border-2 bg-slate-50">
|
||||
<div><a href="/issues/issue/{{ issue.id }}/events/" class="text-blue-800 font-bold">{{ issue.title }}</a> <span class="ml-2 italic">{{ issue.parsed_data.transaction }}</span> </div>
|
||||
<div><a href="/issues/issue/{{ issue.id }}/event/last/" class="text-blue-800 font-bold">{{ issue.title }}</a> <span class="ml-2 italic">{{ issue.parsed_data.transaction }}</span> </div>
|
||||
<div class="text-sm">from <b>8 Nov 12:33</b> | last <b>8 Nov 12:39</b> | with <b>3</b> events</div>
|
||||
</div>
|
||||
|
||||
|
||||
@@ -1,10 +1,12 @@
|
||||
from django.urls import path
|
||||
|
||||
from .views import issue_list, issue_event_list
|
||||
from .views import issue_list, issue_event_detail, issue_last_event, issue_event_list
|
||||
|
||||
|
||||
urlpatterns = [
|
||||
# path('issue/<uuid:pk>/', issue_detail),
|
||||
path('<int:project_id>/', issue_list),
|
||||
path('issue/<uuid:issue_pk>/event/<uuid:event_pk>/', issue_event_detail),
|
||||
path('issue/<uuid:issue_pk>/event/last/', issue_last_event),
|
||||
path('issue/<uuid:issue_pk>/events/', issue_event_list),
|
||||
]
|
||||
|
||||
@@ -1,5 +1,9 @@
|
||||
from django.shortcuts import render
|
||||
import json
|
||||
from django.shortcuts import render, get_object_or_404, redirect
|
||||
|
||||
from events.models import Event
|
||||
|
||||
from .utils import get_issue_grouper_for_data
|
||||
from .models import Issue
|
||||
|
||||
|
||||
@@ -12,7 +16,45 @@ def issue_list(request, project_id):
|
||||
})
|
||||
|
||||
|
||||
def issue_last_event(request, issue_pk):
|
||||
issue = get_object_or_404(Issue, pk=issue_pk)
|
||||
last_event = issue.events.order_by("timestamp").last()
|
||||
|
||||
return redirect(issue_event_detail, issue_pk=issue_pk, event_pk=last_event.pk)
|
||||
|
||||
|
||||
def issue_event_detail(request, issue_pk, event_pk):
|
||||
issue = get_object_or_404(Issue, pk=issue_pk)
|
||||
event = get_object_or_404(Event, pk=event_pk)
|
||||
|
||||
parsed_data = json.loads(event.data)
|
||||
|
||||
# sentry/glitchtip have some code here to deal with the case that "values" is not present, and exception itself is
|
||||
# the list of exceptions, but we don't aim for endless backwards compat (yet) so we don't.
|
||||
exceptions = parsed_data["exception"]["values"] if "exception" in parsed_data else None
|
||||
|
||||
if "logentry" in parsed_data:
|
||||
logentry = parsed_data["logentry"]
|
||||
if "formatted" not in logentry:
|
||||
# TODO this is just a wild guess"
|
||||
if "message" in logentry:
|
||||
if "params" not in logentry:
|
||||
logentry["formatted"] = logentry["message"]
|
||||
else:
|
||||
logentry["formatted"] = logentry["message"].format(logentry["params"])
|
||||
|
||||
return render(request, "events/event_detail.html", {
|
||||
"issue": issue,
|
||||
"event": event,
|
||||
"parsed_data": parsed_data,
|
||||
"exceptions": exceptions,
|
||||
"issue_grouper": get_issue_grouper_for_data(parsed_data),
|
||||
})
|
||||
|
||||
|
||||
def issue_event_list(request, issue_pk):
|
||||
# TODO un-uglify, refactor the html somewhat.
|
||||
|
||||
issue = Issue.objects.get(pk=issue_pk)
|
||||
|
||||
# note: once we have "Event" (with parsed info) we'll point straight to Issue from there which reduces the nr of
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<title>{% block title %}{% endblock %}</title>
|
||||
<title>{% block title %}Bugsink{% endblock %}</title>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
{% tailwind_css %}
|
||||
|
||||
Reference in New Issue
Block a user