Seiten
Inhalt
API
Trace ID Workflow
@xpulse/httperzeugt pro Request einetraceId.traceIdwird anreq.traceIdangehaengt und inhttp:*Events emittiert.@xpulse/controllergibt sie als_traceIdan Templates weiter.@xpulse/templatetraegttraceIdin Render-Events.@xpulse/debugsammelt alles pro Trace und speichert untervar/cache/debug/_<traceId>/.
Web Profiler Konfiguration
debug kann ein Boolean oder ein Objekt sein. Wenn debug true ist, ist der Profiler aktiv.
Zusätzlich kann der Web Profiler konfiguriert werden und Routen können ausgeschlossen werden:
| { |
| "debug": { |
| "enabled": true, |
| "web-profiler": { |
| "enabled": true, |
| "excluded-routes": [ |
| "*._debug.*", |
| "*.get._debug.web-profiler.*" |
| ] |
| } |
| } |
| } |
excluded-routes unterstützt * Wildcards und matched gegen Request-Path,
Route-Name und einen normalisierten Key wie get._debug.web-profiler.traceId.dashboard.
Package-Defaults sind in @xpulse/debug/xpulse.json definiert und koennen
durch die App-xpulse.json ueberschrieben werden.
Template-Methode
Wenn debug aktiv ist, wird die Template-Methode debug(value) registriert
(via @xpulse/template). Sie rendert einen sicheren HTML-Dump:
| {{ debug(user) }} |
debug:events:list
Listet alle registrierten Events und Listener.
debug:config:show
Zeigt die geladene Konfiguration aus @xpulse/config.
debug:routes:list
Listet alle registrierten Routen (wenn @xpulse/router installiert ist).
debug:packages:list
Listet alle installierten @xpulse/* Packages mit Version.
debug:app:bootstrap
Bootstrapped die App (oder simuliert den Bootstrap) und registriert Routes.
DataCollector API
Jedes @xpulse/* Package kann eigene Daten im Web Profiler anzeigen, indem es einen DataCollector implementiert und unter src/datacollectors/ ablegt. @xpulse/debug discovert diese Dateien automatisch — keine Konfiguration nötig.
Einrichten
| // src/datacollectors/mein-collector.js |
| import { DataCollector } from '@xpulse/debug/collector'; |
| export default class MeinCollector extends DataCollector { |
| configure() { |
| this.setName('mein-package') |
| .setIcon('🔧') |
| .setPackage('@xpulse/mein-package'); |
| } |
| async collect() { |
| this.on('mein:event', (payload) => { |
| this.setBadge('aktiv'); |
| this.addArea({ |
| title: 'Ergebnis', |
| rows: [{ label: 'Wert', value: payload.value }] |
| }); |
| }); |
| } |
| } |
@xpulse/debug muss in optionalDependencies eingetragen sein:
| "optionalDependencies": { |
| "@xpulse/debug": "^1.0.11" |
| } |
configure()
Wird vor collect() aufgerufen. Setzt Metadaten des Panels.
| Methode | Beschreibung |
|---|---|
this.setName(name) |
Panel-ID und Dateiname (name.json) |
this.setIcon(icon) |
Emoji oder Icon-String für die Toolbar |
this.setPackage(pkg) |
Package-Name für die Panel-Anzeige |
collect()
Registriert Event-Listener via this.on(). Die Methode wird einmal beim Startup aufgerufen.
| this.on('mein:event', (payload, traceId) => { |
| // traceId ist die aktive Request-ID |
| // payload ist das Event-Payload |
| }); |
Listener werden nur ausgeführt wenn eine aktive traceId vorhanden ist (d.h. im Kontext eines HTTP-Requests). Events außerhalb eines Requests werden ignoriert.
Daten-Methoden (innerhalb von Listenern)
| Methode | Beschreibung |
|---|---|
this.setBadge(text) |
Badge-Text in der Debug-Toolbar |
this.addArea(area) |
Sektion im Panel hinzufügen |
this.addSubPanel(panel) |
Unter-Panel hinzufügen |
this.addSpan(span) |
Waterfall-Span zur zentralen Zeitleiste hinzufügen |
this.addTraceEvent(evt) |
Event-Eintrag zur Zeitleiste hinzufügen |
Area-Format
| this.addArea({ |
| title: 'Abschnitt-Titel', |
| rows: [ |
| { label: 'Schlüssel', value: 'Wert' }, |
| { label: 'Anzahl', value: 42 }, |
| ] |
| }); |
SubPanel-Format
| this.addSubPanel({ |
| title: 'Detail-Panel', |
| rows: [...] |
| }); |
Panel-Output
Nach jedem http:response Event schreibt der Collector automatisch:
| var/cache/debug/_<traceId>/packages/<name>.json |
Diese Datei wird vom Web Profiler eingelesen und als Panel-Tab dargestellt.
appInit(options)
| import debug from '@xpulse/debug'; |
| await debug.appInit({ http: true, cli: false, debug: true }); |
Simuliert den App-Bootstrap basierend auf vorhandenen Packages. Wenn
@xpulse/app installiert ist, wird app.init(...) genutzt.