Trace Diffing

OCPP DebugKit can compare two parsed traces and surface differences at multiple levels: events, failures, and session summaries. This is useful for debugging regression issues, comparing good vs bad sessions, and tracking changes after fixes.

Programmatic API

import { parseTrace, diffTraces } from '@ocpp-debugkit/toolkit/core';

const resultA = parseTrace(traceAJson);
const resultB = parseTrace(traceBJson);
const diff = diffTraces(resultA, resultB);

console.log('Events only in A:', diff.onlyInA.length);
console.log('Events only in B:', diff.onlyInB.length);
console.log('Modified events:', diff.modified.length);
console.log('Failures only in A:', diff.failuresOnlyInA.map(f => f.code));
console.log('Failures only in B:', diff.failuresOnlyInB.map(f => f.code));

TraceDiff Output

  • onlyInA / onlyInB — Events present in only one trace (by messageId)
  • modified — Field-level differences for events in both (timestamp, direction, action, payload, errorCode)
  • failuresOnlyInA / failuresOnlyInB — Failures detected in one but not the other
  • summaryDiff — Session summary differences (event count, failure count, duration, status)

CLI Usage

ocpp-debugkit diff trace-a.json trace-b.json
ocpp-debugkit diff trace-a.json trace-b.json --format json

How Matching Works

Events are matched by their OCPP messageId (UniqueId). A Call and its CallResult share the same messageId — they are compared positionally within the same messageId group.

Payloads are compared using deep equality. Any difference in nested fields is surfaced as a single payload modification.