Sentry: event_from_exception() zu HTML

Ich habe ein Python-Wörterbuch, das von der Sentry-Methode zurückgegeben wird event_from_exception().

Ich möchte es als nettes HTML formatieren.

Aber ich denke, das wurde schon vorher erfunden.

Erforderliche Funktionen:

  • Open Source
  • in Python implementiert

Beispiel zum Erstellen der Ereignisdatenstruktur:

import sys
import json

from sentry_sdk.utils import event_from_exception

try:
    raise ValueError()
except Exception as exc:
    event, info = event_from_exception(sys.exc_info(), with_locals=True)
    print(json.dumps(event, indent=2))

Ein allgemeiner hübscher Druck von json ist ein erster Schritt, aber so etwas ist viel besser:Traceback-in-Django-Debug-Ansicht

Hier ist ein Beispiel, wie json aussieht:

{
  "exception": {
    "values": [
      {
        "stacktrace": {
          "frames": [
            {
              "function": "<module>", 
              "abs_path": "/home/foo/tmp/t.py", 
              "pre_context": [
                "import json", 
                "", 
                "from sentry_sdk.utils import event_from_exception", 
                "", 
                "try:"
              ], 
              "lineno": 7, 
              "vars": {
                "exc": "ValueError()", 
                "__builtins__": "<module '__builtin__' (built-in)>", 
                "event_from_exception": "<function event_from_exception at 0x7f620a1d0578>", 
                "__file__": "'tmp/t.py'", 
                "__package__": "None", 
                "sys": "<module 'sys' (built-in)>", 
                "json": "<module 'json' from '/usr/lib/python2.7/json/__init__.pyc'>", 
                "__name__": "'__main__'", 
                "__doc__": "None"
              }, 
              "context_line": "    raise ValueError()", 
              "post_context": [
                "except Exception as exc:", 
                "    event, info = event_from_exception(sys.exc_info(), with_locals=True)", 
                "    print(json.dumps(event, indent=2))", 
                ""
              ], 
              "module": "__main__", 
              "filename": "t.py"
            }
          ]
        }, 
        "type": "ValueError", 
        "value": "", 
        "module": "exceptions", 
        "mechanism": null
      }
    ]
  }, 
  "level": "error"
}
Möglicherweise verwandt, aber keinesfalls passend, eine alte, gut aufgenommene Frage von mir: Die große, einheitliche Theorie der PHP-Fehlerbehandlung
@Mawg AFAIK Sentry hat auch einen Client/SDK für PHP. In meinem Fall möchte ich den Server vermeiden. Alles, was mir derzeit fehlt, ist ein nettes HTML, das aus der Sentry-Datenstruktur erstellt wird.
Können Sie ein Beispiel für eine solche Struktur posten?
@Mawg Ich habe die Frage aktualisiert. Es enthält jetzt ein Beispiel-JSON.
Danke. Ich denke, das gibt Ihnen eine bessere Chance, eine dedizierte Antwort zu bekommen.

Antworten (2)

Ich glaube nicht, dass das, was Sie wollen, spezifisch für ist sentry_sdk.

Sie möchten nur eine generische Funktion für pretty printein Python-Wörterbuch in HTML.

Es ist einfach genug, für sich selbst zu codieren (und Spaß mit Rekursion ;-), aber andere haben dieses spezielle Rad bereits erfunden.

Siehe zum Beispiel:

  • dieses Python-Wörterbuchobjekt für den HTML5-JSON-Formulargenerator

  • den Blogeintrag Pretty Printing a Python Dictionary to HTML

  • und diese SO-Frage , die besagt, dass Sie dies mit Pandas tun können , und zeigt, wie dieser Code:

    pandas als pd importieren

    a = {'Job1': {'2017-01-10': [44, 33, 11, 75, 22]},
    'Job2': {'2017-01-05': [25, 25, 0, 100 , 25],
    '2017-01-10': [50, 50, 0, 100, 25]},
    'Job3': {'2017-01-03': [44, 22, 22, 50, 22],
    '2017-01-04': [66, 36, 30, 54, 22],
    '2017-01-06': [88, 52, 36, 59, 22],
    '2017-01-10': [132 , 68, 64, 51, 22],
    '2017-01-02': [22, 9, 13, 40, 22],
    '2017-01-08': [110, 52, 58, 47, 22]} ,
    'Job4': {'2017-01-10': [25, 25, 0, 100, 25]}}

    df = pd.DataFrame(data=a) df = df.fillna(' ').T df

erzeugt diese HTML-Tabelle:
Geben Sie hier die Bildbeschreibung ein

Ich wollte das JSON aus Ihrem Beispiel nehmen und es durch jedes dieser Beispiele laufen lassen, aber Sie haben es nicht gepostet und ich kann es nicht generieren, da ich es nicht habe sentry_sdk.

Wie gesagt, ich denke, Sie wollen eine generische Lösung, nicht etwas Spezifisches für sentry_sdk. Wenn Sie einverstanden sind, ändern Sie den Titel Ihrer Frage in etwas wie "HTML-Tabelle aus Python-Wörterbuch generieren". Ich bin mir sicher, dass @SteveBarnes und andere weitere Vorschläge machen werden, möglicherweise besser als diese.

Ja, schöner Druck ist ein erster Schritt. Du hast Recht. Ich habe meine Frage aktualisiert.
Aber ich habe den Titel nicht geändert :-) Ok, jetzt scheint es, dass Sie sich nicht so viele Gedanken über JSON machen wie über den Stack-Trace (es sei denn, der Trace ist in JSON angegeben; haben Sie ein Beispiel?). Auch dies ist nichts, was spezifisch für dieses SDK ist, und wenn Sie eine allgemeine Frage stellen, ist es viel wahrscheinlicher, dass Sie eine Antwort erhalten.
Ja, ich habe den Titel nicht geändert. Welcher Titel würde deiner Meinung nach passen?
Ich suche nach einer Möglichkeit, diese bestimmte Struktur anzuzeigen.
Ja, aber es ist höchst unwahrscheinlich, dass jemand Code geschrieben hat, der dieser bestimmten Struktur gewidmet ist. Wenn ja, ist es hier auch unwahrscheinlich, dass irgendjemand hier jemals davon gehört hat; In einem Forum, das diesem SDK gewidmet ist, würden Sie wahrscheinlich eine bessere Antwort erhalten als hier. Ich denke immer noch, dass Ihre Daten (die Sie nicht zeigen (rohes JSON, bitte?)) und nichts Besonderes sind und dass eine generische Lösung damit umgehen wird. Und generische Lösungen sind viel einfacher zu finden als maßgeschneiderte Spezifika, und sie können in Zukunft an vielen Stellen wiederverwendet werden.
Ich bin tiefenentspannt. Ich bin nicht in Eile. Ich suche nicht nach einer einfach zu findenden Lösung. Ich suche nach einer Lösung, die mich zum Lächeln bringt.
Lol. Und dein Kommentar bringt mich zum Schmunzeln :-) Ich wünsche dir viel Erfolg bei deiner Suche

Da ich keine Lösung finden konnte, habe ich selbst eine geschrieben: https://github.com/guettli/sentry-event-to-html

Es ist eine einfache Python-Bibliothek, die den vom Sentry-Client erstellten json nimmt und HTML erstellt.

Bitte akzeptieren Sie Ihre eigene Antwort, um anderen, die dies lesen, zu zeigen, dass es funktioniert. Natürlich hast du auf der falschen Seite gefragt; Codierungsfragen gehören auf stackoverflow.com Wie ich Ihrem Profil entnehmen kann, wissen Sie das jetzt, also ist diese Bemerkung nur für andere
Nein, warte, akzeptiere deine gewonnene Antwort nicht, weil dein GitHub " State Unfinished" sagt. Warum hast du uns überhaupt davon erzählt? Das hilft keinem
@MawgsaysreinstateMonica Sie sagen, das hilft niemandem. Mein unvollendetes Projekt ist ein erster Schritt. Sie dürfen es verbessern. Der erste Schritt könnte Menschen helfen, die den zweiten Schritt lösen können.
Einverstanden + positive Bewertung. Entschuldigung. Mein erster Gedanke war, dass dies keine Antwort ist, aber Sie haben Recht, wir können es forken. Nur aus Neugier - 1) wirst du mehr daran arbeiten? 2) ist es/kann es generisch sein? Nichts mit JSON/Sentinel zu tun, nur ein generischer Ausnahmehandler?
@MawgsaysreinstateMonica Ich werde in den nächsten Monaten keine Zeit dafür haben. Fühlen Sie sich frei, es zu klonen. Oder ich könnte Ihnen sogar das Eignerschiff übergeben.