@ocpp-debugkit/toolkit 0.2.1 → 0.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +234 -12
- package/dist/cli/commands/anonymize.d.ts +15 -0
- package/dist/cli/commands/anonymize.d.ts.map +1 -0
- package/dist/cli/commands/anonymize.js +104 -0
- package/dist/cli/commands/anonymize.js.map +1 -0
- package/dist/cli/commands/ci.d.ts +10 -0
- package/dist/cli/commands/ci.d.ts.map +1 -0
- package/dist/cli/commands/ci.js +96 -0
- package/dist/cli/commands/ci.js.map +1 -0
- package/dist/cli/commands/diff.d.ts +10 -0
- package/dist/cli/commands/diff.d.ts.map +1 -0
- package/dist/cli/commands/diff.js +71 -0
- package/dist/cli/commands/diff.js.map +1 -0
- package/dist/cli/index.js +27 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/core/assertions.d.ts +36 -0
- package/dist/core/assertions.d.ts.map +1 -0
- package/dist/core/assertions.js +335 -0
- package/dist/core/assertions.js.map +1 -0
- package/dist/core/detection.d.ts +9 -1
- package/dist/core/detection.d.ts.map +1 -1
- package/dist/core/detection.js +344 -1
- package/dist/core/detection.js.map +1 -1
- package/dist/core/diff.d.ts +68 -0
- package/dist/core/diff.d.ts.map +1 -0
- package/dist/core/diff.js +199 -0
- package/dist/core/diff.js.map +1 -0
- package/dist/core/index.d.ts +4 -0
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +4 -0
- package/dist/core/index.js.map +1 -1
- package/dist/core/types.d.ts +77 -2
- package/dist/core/types.d.ts.map +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/scenarios/__scenarios__/heartbeat-irregular.d.ts +51 -0
- package/dist/scenarios/__scenarios__/heartbeat-irregular.d.ts.map +1 -0
- package/dist/scenarios/__scenarios__/heartbeat-irregular.js +81 -0
- package/dist/scenarios/__scenarios__/heartbeat-irregular.js.map +1 -0
- package/dist/scenarios/__scenarios__/meter-anomaly.d.ts +115 -0
- package/dist/scenarios/__scenarios__/meter-anomaly.d.ts.map +1 -0
- package/dist/scenarios/__scenarios__/meter-anomaly.js +152 -0
- package/dist/scenarios/__scenarios__/meter-anomaly.js.map +1 -0
- package/dist/scenarios/__scenarios__/short-session.d.ts +111 -0
- package/dist/scenarios/__scenarios__/short-session.d.ts.map +1 -0
- package/dist/scenarios/__scenarios__/short-session.js +129 -0
- package/dist/scenarios/__scenarios__/short-session.js.map +1 -0
- package/dist/scenarios/__scenarios__/slow-csms-response.d.ts +52 -0
- package/dist/scenarios/__scenarios__/slow-csms-response.d.ts.map +1 -0
- package/dist/scenarios/__scenarios__/slow-csms-response.js +61 -0
- package/dist/scenarios/__scenarios__/slow-csms-response.js.map +1 -0
- package/dist/scenarios/__scenarios__/unexpected-start.js +3 -3
- package/dist/scenarios/__scenarios__/unresponsive-csms.d.ts +53 -0
- package/dist/scenarios/__scenarios__/unresponsive-csms.d.ts.map +1 -0
- package/dist/scenarios/__scenarios__/unresponsive-csms.js +53 -0
- package/dist/scenarios/__scenarios__/unresponsive-csms.js.map +1 -0
- package/dist/scenarios/compare.d.ts +39 -0
- package/dist/scenarios/compare.d.ts.map +1 -0
- package/dist/scenarios/compare.js +77 -0
- package/dist/scenarios/compare.js.map +1 -0
- package/dist/scenarios/index.d.ts +10 -3
- package/dist/scenarios/index.d.ts.map +1 -1
- package/dist/scenarios/index.js +22 -1
- package/dist/scenarios/index.js.map +1 -1
- package/package.json +4 -4
package/dist/core/detection.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Failure detection — analyzes events and sessions for known failure patterns.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
4
|
+
* 16 detection rules (v0.1 + v0.2 + v0.3):
|
|
5
5
|
*
|
|
6
6
|
* v0.1:
|
|
7
7
|
* 1. FAILED_AUTHORIZATION — Authorize response with idTagInfo.status = "Invalid"
|
|
@@ -17,6 +17,14 @@
|
|
|
17
17
|
* 9. DIAGNOSTICS_FAILURE — DiagnosticsStatusNotification indicating failure
|
|
18
18
|
* 10. FIRMWARE_UPDATE_FAILURE — FirmwareStatusNotification indicating failure
|
|
19
19
|
*
|
|
20
|
+
* v0.3:
|
|
21
|
+
* 11. SUSPICIOUS_SESSION_DURATION — session < 60s or > 24h
|
|
22
|
+
* 12. SLOW_RESPONSE — gap between Call and matching CallResult/CallError > 10s
|
|
23
|
+
* 13. HEARTBEAT_INTERVAL_VIOLATION — heartbeat intervals deviate >50% from expected
|
|
24
|
+
* 14. METER_VALUE_ANOMALY — non-monotonic or negative meter readings
|
|
25
|
+
* 15. UNRESPONSIVE_CSMS — Call with no matching CallResult or CallError
|
|
26
|
+
* 16. REPEATED_BOOT_NOTIFICATION — 2+ BootNotification calls within 5 minutes
|
|
27
|
+
*
|
|
20
28
|
* @see ADR-0003
|
|
21
29
|
*/
|
|
22
30
|
// ---------------------------------------------------------------------------
|
|
@@ -88,6 +96,48 @@ const SUGGESTED_STEPS = {
|
|
|
88
96
|
'Retry the firmware update after addressing the failure cause',
|
|
89
97
|
'Contact the firmware provider if the image is defective',
|
|
90
98
|
],
|
|
99
|
+
SUSPICIOUS_SESSION_DURATION: [
|
|
100
|
+
'Review the session duration in the trace timeline',
|
|
101
|
+
'For very short sessions: check if the transaction was aborted or authorization failed mid-session',
|
|
102
|
+
'For very long sessions: check if the station forgot to send StopTransaction',
|
|
103
|
+
'Verify the station clock is synchronized (NTP)',
|
|
104
|
+
'Check if the session spans a maintenance window or firmware update',
|
|
105
|
+
],
|
|
106
|
+
SLOW_RESPONSE: [
|
|
107
|
+
'Check the CSMS processing time for the affected message type',
|
|
108
|
+
'Review system load and database performance on the CSMS',
|
|
109
|
+
'Verify network latency between station and CSMS',
|
|
110
|
+
'Check if the CSMS is running a long-running synchronous operation',
|
|
111
|
+
'Review CSMS logs for the specific message ID',
|
|
112
|
+
],
|
|
113
|
+
HEARTBEAT_INTERVAL_VIOLATION: [
|
|
114
|
+
'Verify the heartbeat interval configured on the station matches the BootNotification response',
|
|
115
|
+
'Check for network instability causing delayed heartbeats',
|
|
116
|
+
'Review the station clock synchronization (NTP)',
|
|
117
|
+
'Check if the station firmware has a known heartbeat timing bug',
|
|
118
|
+
'Inspect the WebSocket connection stability',
|
|
119
|
+
],
|
|
120
|
+
METER_VALUE_ANOMALY: [
|
|
121
|
+
'Verify the meter is functioning correctly and is properly calibrated',
|
|
122
|
+
'Check for meter communication errors or data corruption',
|
|
123
|
+
'Review the meter value sampling and reporting configuration',
|
|
124
|
+
'Inspect for potential tampering or hardware malfunction',
|
|
125
|
+
'Contact the meter vendor if the issue persists',
|
|
126
|
+
],
|
|
127
|
+
UNRESPONSIVE_CSMS: [
|
|
128
|
+
'Check if the CSMS was online and accepting connections during the session',
|
|
129
|
+
'Verify the WebSocket connection was stable at the time of the unanswered Call',
|
|
130
|
+
'Review CSMS logs for the specific message ID',
|
|
131
|
+
'Check if the CSMS crashed or restarted during the session',
|
|
132
|
+
'Inspect the network path between station and CSMS for packet loss',
|
|
133
|
+
],
|
|
134
|
+
REPEATED_BOOT_NOTIFICATION: [
|
|
135
|
+
'Check whether the station rebooted unexpectedly',
|
|
136
|
+
'Review station power and network stability during the boot window',
|
|
137
|
+
'Inspect station firmware logs for watchdog resets or startup failures',
|
|
138
|
+
'Verify the CSMS accepts the BootNotification and returns a valid interval',
|
|
139
|
+
'Contact the station vendor if repeated boots persist',
|
|
140
|
+
],
|
|
91
141
|
};
|
|
92
142
|
const SEVERITY = {
|
|
93
143
|
FAILED_AUTHORIZATION: 'warning',
|
|
@@ -100,6 +150,12 @@ const SEVERITY = {
|
|
|
100
150
|
STATUS_TRANSITION_VIOLATION: 'warning',
|
|
101
151
|
DIAGNOSTICS_FAILURE: 'critical',
|
|
102
152
|
FIRMWARE_UPDATE_FAILURE: 'warning',
|
|
153
|
+
SUSPICIOUS_SESSION_DURATION: 'warning',
|
|
154
|
+
SLOW_RESPONSE: 'warning',
|
|
155
|
+
HEARTBEAT_INTERVAL_VIOLATION: 'info',
|
|
156
|
+
METER_VALUE_ANOMALY: 'warning',
|
|
157
|
+
UNRESPONSIVE_CSMS: 'critical',
|
|
158
|
+
REPEATED_BOOT_NOTIFICATION: 'warning',
|
|
103
159
|
};
|
|
104
160
|
// ---------------------------------------------------------------------------
|
|
105
161
|
// Payload extraction helpers
|
|
@@ -289,6 +345,13 @@ export function detectFailures(events, sessions) {
|
|
|
289
345
|
failures.push(...detectStatusTransitionViolation(events));
|
|
290
346
|
failures.push(...detectDiagnosticsFailure(events));
|
|
291
347
|
failures.push(...detectFirmwareUpdateFailure(events));
|
|
348
|
+
// v0.3 rules
|
|
349
|
+
failures.push(...detectSuspiciousSessionDuration(events, sessions));
|
|
350
|
+
failures.push(...detectSlowResponse(events));
|
|
351
|
+
failures.push(...detectHeartbeatIntervalViolation(events));
|
|
352
|
+
failures.push(...detectMeterValueAnomaly(events, sessions));
|
|
353
|
+
failures.push(...detectUnresponsiveCsms(events));
|
|
354
|
+
failures.push(...detectRepeatedBootNotification(events));
|
|
292
355
|
return failures;
|
|
293
356
|
}
|
|
294
357
|
// ---------------------------------------------------------------------------
|
|
@@ -555,4 +618,284 @@ function detectFirmwareUpdateFailure(events) {
|
|
|
555
618
|
}
|
|
556
619
|
return failures;
|
|
557
620
|
}
|
|
621
|
+
// ---------------------------------------------------------------------------
|
|
622
|
+
// v0.3 detection rules
|
|
623
|
+
// ---------------------------------------------------------------------------
|
|
624
|
+
/** Minimum session duration to not be suspicious: 60 seconds. */
|
|
625
|
+
const MIN_SESSION_DURATION_MS = 60_000;
|
|
626
|
+
/** Maximum session duration to not be suspicious: 24 hours. */
|
|
627
|
+
const MAX_SESSION_DURATION_MS = 24 * 60 * 60 * 1000;
|
|
628
|
+
/** Threshold for slow response: 10 seconds. */
|
|
629
|
+
const SLOW_RESPONSE_THRESHOLD_MS = 10_000;
|
|
630
|
+
/** Deviation threshold for heartbeat interval violation: 50%. */
|
|
631
|
+
const HEARTBEAT_DEVIATION_THRESHOLD = 0.5;
|
|
632
|
+
/** Time window for repeated BootNotification calls: 5 minutes. */
|
|
633
|
+
const REPEATED_BOOT_NOTIFICATION_WINDOW_MS = 5 * 60 * 1000;
|
|
634
|
+
/**
|
|
635
|
+
* Rule 11: SUSPICIOUS_SESSION_DURATION
|
|
636
|
+
* Detects sessions that are suspiciously short (< 60s) or long (> 24h).
|
|
637
|
+
*/
|
|
638
|
+
function detectSuspiciousSessionDuration(_events, sessions) {
|
|
639
|
+
const failures = [];
|
|
640
|
+
for (const session of sessions) {
|
|
641
|
+
if (session.transactionId === null)
|
|
642
|
+
continue;
|
|
643
|
+
if (session.startTime === null || session.endTime === null)
|
|
644
|
+
continue;
|
|
645
|
+
const durationMs = session.endTime - session.startTime;
|
|
646
|
+
if (durationMs < MIN_SESSION_DURATION_MS) {
|
|
647
|
+
failures.push({
|
|
648
|
+
code: 'SUSPICIOUS_SESSION_DURATION',
|
|
649
|
+
description: `Session ${session.sessionId} (transaction ${session.transactionId}) lasted only ${durationMs}ms — suspiciously short session may indicate aborted start or authorization failure`,
|
|
650
|
+
severity: SEVERITY.SUSPICIOUS_SESSION_DURATION,
|
|
651
|
+
eventIds: session.events
|
|
652
|
+
.filter((e) => e.messageType === 'Call' &&
|
|
653
|
+
(e.action === 'StartTransaction' || e.action === 'StopTransaction'))
|
|
654
|
+
.map((e) => e.id),
|
|
655
|
+
suggestedSteps: SUGGESTED_STEPS.SUSPICIOUS_SESSION_DURATION,
|
|
656
|
+
});
|
|
657
|
+
}
|
|
658
|
+
else if (durationMs > MAX_SESSION_DURATION_MS) {
|
|
659
|
+
failures.push({
|
|
660
|
+
code: 'SUSPICIOUS_SESSION_DURATION',
|
|
661
|
+
description: `Session ${session.sessionId} (transaction ${session.transactionId}) lasted ${Math.round(durationMs / (60 * 60 * 1000))} hours — suspiciously long session may indicate forgotten charging or missing StopTransaction`,
|
|
662
|
+
severity: SEVERITY.SUSPICIOUS_SESSION_DURATION,
|
|
663
|
+
eventIds: session.events
|
|
664
|
+
.filter((e) => e.messageType === 'Call' &&
|
|
665
|
+
(e.action === 'StartTransaction' || e.action === 'StopTransaction'))
|
|
666
|
+
.map((e) => e.id),
|
|
667
|
+
suggestedSteps: SUGGESTED_STEPS.SUSPICIOUS_SESSION_DURATION,
|
|
668
|
+
});
|
|
669
|
+
}
|
|
670
|
+
}
|
|
671
|
+
return failures;
|
|
672
|
+
}
|
|
673
|
+
/**
|
|
674
|
+
* Rule 12: SLOW_RESPONSE
|
|
675
|
+
* Detects when the gap between a Call and its matching CallResult/CallError
|
|
676
|
+
* exceeds the threshold (default 10s).
|
|
677
|
+
*/
|
|
678
|
+
function detectSlowResponse(events) {
|
|
679
|
+
const failures = [];
|
|
680
|
+
// Build a map of messageId → CallResult/CallError timestamps
|
|
681
|
+
const responseMap = new Map();
|
|
682
|
+
for (const event of events) {
|
|
683
|
+
if ((event.messageType === 'CallResult' || event.messageType === 'CallError') &&
|
|
684
|
+
event.timestamp !== null) {
|
|
685
|
+
responseMap.set(event.messageId, event.timestamp);
|
|
686
|
+
}
|
|
687
|
+
}
|
|
688
|
+
for (const call of events) {
|
|
689
|
+
if (call.messageType !== 'Call' || call.timestamp === null)
|
|
690
|
+
continue;
|
|
691
|
+
const responseTime = responseMap.get(call.messageId);
|
|
692
|
+
if (responseTime === undefined)
|
|
693
|
+
continue; // No matching response — handled by UNRESPONSIVE_CSMS
|
|
694
|
+
const gapMs = responseTime - call.timestamp;
|
|
695
|
+
if (gapMs > SLOW_RESPONSE_THRESHOLD_MS) {
|
|
696
|
+
failures.push({
|
|
697
|
+
code: 'SLOW_RESPONSE',
|
|
698
|
+
description: `Response to ${call.action} (messageId: ${call.messageId}) took ${Math.round(gapMs / 1000)}s — exceeds ${SLOW_RESPONSE_THRESHOLD_MS / 1000}s threshold`,
|
|
699
|
+
severity: SEVERITY.SLOW_RESPONSE,
|
|
700
|
+
eventIds: [call.id],
|
|
701
|
+
suggestedSteps: SUGGESTED_STEPS.SLOW_RESPONSE,
|
|
702
|
+
});
|
|
703
|
+
}
|
|
704
|
+
}
|
|
705
|
+
return failures;
|
|
706
|
+
}
|
|
707
|
+
/**
|
|
708
|
+
* Rule 13: HEARTBEAT_INTERVAL_VIOLATION
|
|
709
|
+
* Detects when heartbeat intervals deviate >50% from the expected interval
|
|
710
|
+
* (from BootNotification response, or default 60s).
|
|
711
|
+
*/
|
|
712
|
+
function detectHeartbeatIntervalViolation(events) {
|
|
713
|
+
const failures = [];
|
|
714
|
+
// Extract expected heartbeat interval from BootNotification response
|
|
715
|
+
let expectedIntervalMs = DEFAULT_HEARTBEAT_INTERVAL_MS;
|
|
716
|
+
const bootIndex = events.findIndex((e) => e.messageType === 'Call' && e.action === 'BootNotification');
|
|
717
|
+
if (bootIndex !== -1) {
|
|
718
|
+
const bootEvent = events[bootIndex];
|
|
719
|
+
if (bootEvent) {
|
|
720
|
+
const bootResponse = events.find((e) => e.messageType === 'CallResult' &&
|
|
721
|
+
e.messageId === bootEvent.messageId &&
|
|
722
|
+
typeof e.payload?.interval === 'number');
|
|
723
|
+
if (bootResponse) {
|
|
724
|
+
const interval = bootResponse.payload.interval;
|
|
725
|
+
expectedIntervalMs = interval * 1000;
|
|
726
|
+
}
|
|
727
|
+
}
|
|
728
|
+
}
|
|
729
|
+
// Collect heartbeat timestamps in order
|
|
730
|
+
const heartbeatTimestamps = events
|
|
731
|
+
.filter((e) => e.messageType === 'Call' && e.action === 'Heartbeat' && e.timestamp !== null)
|
|
732
|
+
.map((e) => ({ id: e.id, timestamp: e.timestamp }));
|
|
733
|
+
if (heartbeatTimestamps.length < 2)
|
|
734
|
+
return failures;
|
|
735
|
+
for (let i = 1; i < heartbeatTimestamps.length; i++) {
|
|
736
|
+
const prev = heartbeatTimestamps[i - 1];
|
|
737
|
+
const curr = heartbeatTimestamps[i];
|
|
738
|
+
if (!prev || !curr)
|
|
739
|
+
continue;
|
|
740
|
+
const actualGap = curr.timestamp - prev.timestamp;
|
|
741
|
+
const deviation = Math.abs(actualGap - expectedIntervalMs) / expectedIntervalMs;
|
|
742
|
+
if (deviation > HEARTBEAT_DEVIATION_THRESHOLD) {
|
|
743
|
+
failures.push({
|
|
744
|
+
code: 'HEARTBEAT_INTERVAL_VIOLATION',
|
|
745
|
+
description: `Heartbeat interval deviation: ${Math.round(actualGap / 1000)}s between heartbeats, expected ~${Math.round(expectedIntervalMs / 1000)}s (${Math.round(deviation * 100)}% deviation)`,
|
|
746
|
+
severity: SEVERITY.HEARTBEAT_INTERVAL_VIOLATION,
|
|
747
|
+
eventIds: [prev.id, curr.id],
|
|
748
|
+
suggestedSteps: SUGGESTED_STEPS.HEARTBEAT_INTERVAL_VIOLATION,
|
|
749
|
+
});
|
|
750
|
+
}
|
|
751
|
+
}
|
|
752
|
+
return failures;
|
|
753
|
+
}
|
|
754
|
+
/**
|
|
755
|
+
* Rule 14: METER_VALUE_ANOMALY
|
|
756
|
+
* Detects non-monotonic (decreasing) or negative meter readings during
|
|
757
|
+
* an active transaction.
|
|
758
|
+
*/
|
|
759
|
+
function detectMeterValueAnomaly(_events, sessions) {
|
|
760
|
+
const failures = [];
|
|
761
|
+
for (const session of sessions) {
|
|
762
|
+
if (session.transactionId === null)
|
|
763
|
+
continue;
|
|
764
|
+
// Collect meter values from MeterValues calls in order
|
|
765
|
+
const meterEvents = session.events.filter((e) => e.messageType === 'Call' && e.action === 'MeterValues');
|
|
766
|
+
if (meterEvents.length === 0)
|
|
767
|
+
continue;
|
|
768
|
+
// Extract numeric meter values from the payload
|
|
769
|
+
// OCPP 1.6 MeterValues: { connectorId, transactionId, meterValue: [{ timestamp, sampledValue: [{ value, ... }] }] }
|
|
770
|
+
const readings = [];
|
|
771
|
+
for (const event of meterEvents) {
|
|
772
|
+
const payload = event.payload;
|
|
773
|
+
const meterValues = payload?.meterValue;
|
|
774
|
+
if (!Array.isArray(meterValues))
|
|
775
|
+
continue;
|
|
776
|
+
for (const mv of meterValues) {
|
|
777
|
+
const sampledValues = mv?.sampledValue;
|
|
778
|
+
if (!Array.isArray(sampledValues))
|
|
779
|
+
continue;
|
|
780
|
+
for (const sv of sampledValues) {
|
|
781
|
+
const rawValue = sv?.value;
|
|
782
|
+
if (typeof rawValue === 'string') {
|
|
783
|
+
const numValue = Number.parseFloat(rawValue);
|
|
784
|
+
if (!Number.isNaN(numValue)) {
|
|
785
|
+
readings.push({ eventId: event.id, value: numValue });
|
|
786
|
+
}
|
|
787
|
+
}
|
|
788
|
+
else if (typeof rawValue === 'number') {
|
|
789
|
+
readings.push({ eventId: event.id, value: rawValue });
|
|
790
|
+
}
|
|
791
|
+
}
|
|
792
|
+
}
|
|
793
|
+
}
|
|
794
|
+
if (readings.length === 0)
|
|
795
|
+
continue;
|
|
796
|
+
// Check for negative values
|
|
797
|
+
for (const reading of readings) {
|
|
798
|
+
if (reading.value < 0) {
|
|
799
|
+
failures.push({
|
|
800
|
+
code: 'METER_VALUE_ANOMALY',
|
|
801
|
+
description: `Negative meter value detected: ${reading.value} in session ${session.sessionId} (transaction ${session.transactionId})`,
|
|
802
|
+
severity: SEVERITY.METER_VALUE_ANOMALY,
|
|
803
|
+
eventIds: [reading.eventId],
|
|
804
|
+
suggestedSteps: SUGGESTED_STEPS.METER_VALUE_ANOMALY,
|
|
805
|
+
});
|
|
806
|
+
}
|
|
807
|
+
}
|
|
808
|
+
// Check for non-monotonic (decreasing) values
|
|
809
|
+
for (let i = 1; i < readings.length; i++) {
|
|
810
|
+
const prev = readings[i - 1];
|
|
811
|
+
const curr = readings[i];
|
|
812
|
+
if (!prev || !curr)
|
|
813
|
+
continue;
|
|
814
|
+
if (curr.value < prev.value) {
|
|
815
|
+
failures.push({
|
|
816
|
+
code: 'METER_VALUE_ANOMALY',
|
|
817
|
+
description: `Non-monotonic meter reading: value decreased from ${prev.value} to ${curr.value} in session ${session.sessionId} (transaction ${session.transactionId})`,
|
|
818
|
+
severity: SEVERITY.METER_VALUE_ANOMALY,
|
|
819
|
+
eventIds: [prev.eventId, curr.eventId],
|
|
820
|
+
suggestedSteps: SUGGESTED_STEPS.METER_VALUE_ANOMALY,
|
|
821
|
+
});
|
|
822
|
+
}
|
|
823
|
+
}
|
|
824
|
+
}
|
|
825
|
+
return failures;
|
|
826
|
+
}
|
|
827
|
+
/**
|
|
828
|
+
* Rule 15: UNRESPONSIVE_CSMS
|
|
829
|
+
* Detects Call messages that have no matching CallResult or CallError
|
|
830
|
+
* (the CSMS never responded).
|
|
831
|
+
*/
|
|
832
|
+
function detectUnresponsiveCsms(events) {
|
|
833
|
+
const failures = [];
|
|
834
|
+
// Build a set of messageIds that have responses
|
|
835
|
+
const respondedMessageIds = new Set();
|
|
836
|
+
for (const event of events) {
|
|
837
|
+
if (event.messageType === 'CallResult' || event.messageType === 'CallError') {
|
|
838
|
+
respondedMessageIds.add(event.messageId);
|
|
839
|
+
}
|
|
840
|
+
}
|
|
841
|
+
for (const call of events) {
|
|
842
|
+
if (call.messageType !== 'Call')
|
|
843
|
+
continue;
|
|
844
|
+
if (!respondedMessageIds.has(call.messageId)) {
|
|
845
|
+
failures.push({
|
|
846
|
+
code: 'UNRESPONSIVE_CSMS',
|
|
847
|
+
description: `No response received for ${call.action} Call (messageId: ${call.messageId}) — CSMS did not respond with CallResult or CallError`,
|
|
848
|
+
severity: SEVERITY.UNRESPONSIVE_CSMS,
|
|
849
|
+
eventIds: [call.id],
|
|
850
|
+
suggestedSteps: SUGGESTED_STEPS.UNRESPONSIVE_CSMS,
|
|
851
|
+
});
|
|
852
|
+
}
|
|
853
|
+
}
|
|
854
|
+
return failures;
|
|
855
|
+
}
|
|
856
|
+
/**
|
|
857
|
+
* Rule 16: REPEATED_BOOT_NOTIFICATION
|
|
858
|
+
* Detects when a station sends 2+ BootNotification Calls within 5 minutes.
|
|
859
|
+
*/
|
|
860
|
+
function detectRepeatedBootNotification(events) {
|
|
861
|
+
const failures = [];
|
|
862
|
+
const bootEvents = events
|
|
863
|
+
.filter((event) => event.messageType === 'Call' &&
|
|
864
|
+
event.action === 'BootNotification' &&
|
|
865
|
+
event.timestamp !== null)
|
|
866
|
+
.sort((a, b) => a.timestamp - b.timestamp);
|
|
867
|
+
for (let i = 0; i < bootEvents.length; i++) {
|
|
868
|
+
const firstBoot = bootEvents[i];
|
|
869
|
+
if (!firstBoot || firstBoot.timestamp === null)
|
|
870
|
+
continue;
|
|
871
|
+
const repeatedBoots = [firstBoot];
|
|
872
|
+
let j = i + 1;
|
|
873
|
+
while (j < bootEvents.length) {
|
|
874
|
+
const nextBoot = bootEvents[j];
|
|
875
|
+
if (!nextBoot || nextBoot.timestamp === null) {
|
|
876
|
+
j++;
|
|
877
|
+
continue;
|
|
878
|
+
}
|
|
879
|
+
if (nextBoot.timestamp - firstBoot.timestamp > REPEATED_BOOT_NOTIFICATION_WINDOW_MS) {
|
|
880
|
+
break;
|
|
881
|
+
}
|
|
882
|
+
repeatedBoots.push(nextBoot);
|
|
883
|
+
j++;
|
|
884
|
+
}
|
|
885
|
+
if (repeatedBoots.length >= 2) {
|
|
886
|
+
const windowSeconds = Math.round(((repeatedBoots[repeatedBoots.length - 1]?.timestamp ?? firstBoot.timestamp) -
|
|
887
|
+
firstBoot.timestamp) /
|
|
888
|
+
1000);
|
|
889
|
+
failures.push({
|
|
890
|
+
code: 'REPEATED_BOOT_NOTIFICATION',
|
|
891
|
+
description: `${repeatedBoots.length} BootNotification calls detected within ${windowSeconds}s — station may be rebooting repeatedly or failing startup`,
|
|
892
|
+
severity: SEVERITY.REPEATED_BOOT_NOTIFICATION,
|
|
893
|
+
eventIds: repeatedBoots.map((event) => event.id),
|
|
894
|
+
suggestedSteps: SUGGESTED_STEPS.REPEATED_BOOT_NOTIFICATION,
|
|
895
|
+
});
|
|
896
|
+
i = j - 1;
|
|
897
|
+
}
|
|
898
|
+
}
|
|
899
|
+
return failures;
|
|
900
|
+
}
|
|
558
901
|
//# sourceMappingURL=detection.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"detection.js","sourceRoot":"","sources":["../../src/core/detection.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"detection.js","sourceRoot":"","sources":["../../src/core/detection.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Trace diffing — compare two parsed traces and surface differences.
|
|
3
|
+
*
|
|
4
|
+
* Matches events by `messageId` (OCPP UniqueId), then compares:
|
|
5
|
+
* - timestamp, direction, action, payload (deep equality), errorCode
|
|
6
|
+
* - detected failures (by code)
|
|
7
|
+
* - session summaries (human-readable difference strings)
|
|
8
|
+
*
|
|
9
|
+
* Pure function — no I/O, no side effects. Browser-safe (no Node built-ins).
|
|
10
|
+
*
|
|
11
|
+
* @module @ocpp-debugkit/toolkit/core
|
|
12
|
+
*/
|
|
13
|
+
import type { Event, Failure, ParseResult, SessionSummary } from './types.js';
|
|
14
|
+
/** A field-level difference between two events that share a messageId. */
|
|
15
|
+
export interface EventDiff {
|
|
16
|
+
/** The OCPP UniqueId shared by both events. */
|
|
17
|
+
messageId: string;
|
|
18
|
+
/** The field that differs. */
|
|
19
|
+
field: 'timestamp' | 'direction' | 'action' | 'payload' | 'errorCode';
|
|
20
|
+
/** The value in trace A (or null if the field was absent). */
|
|
21
|
+
valueA: unknown;
|
|
22
|
+
/** The value in trace B (or null if the field was absent). */
|
|
23
|
+
valueB: unknown;
|
|
24
|
+
}
|
|
25
|
+
/** Summary-level differences between two traces. */
|
|
26
|
+
export interface SummaryDiff {
|
|
27
|
+
/** Summary of trace A (or null if A has no sessions). */
|
|
28
|
+
a: SessionSummary | null;
|
|
29
|
+
/** Summary of trace B (or null if B has no sessions). */
|
|
30
|
+
b: SessionSummary | null;
|
|
31
|
+
/** Human-readable difference descriptions. */
|
|
32
|
+
differences: string[];
|
|
33
|
+
}
|
|
34
|
+
/** The complete diff result between two traces. */
|
|
35
|
+
export interface TraceDiff {
|
|
36
|
+
/** Events present in trace A but not B (by messageId). */
|
|
37
|
+
onlyInA: Event[];
|
|
38
|
+
/** Events present in trace B but not A (by messageId). */
|
|
39
|
+
onlyInB: Event[];
|
|
40
|
+
/** Events present in both but with field-level differences. */
|
|
41
|
+
modified: EventDiff[];
|
|
42
|
+
/** Failures detected in A but not B. */
|
|
43
|
+
failuresOnlyInA: Failure[];
|
|
44
|
+
/** Failures detected in B but not A. */
|
|
45
|
+
failuresOnlyInB: Failure[];
|
|
46
|
+
/** Summary differences. */
|
|
47
|
+
summaryDiff: SummaryDiff;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Compare two parsed traces and return a structured diff.
|
|
51
|
+
*
|
|
52
|
+
* @param a - Parse result of trace A
|
|
53
|
+
* @param b - Parse result of trace B
|
|
54
|
+
* @returns A {@link TraceDiff} describing all differences
|
|
55
|
+
*
|
|
56
|
+
* @example
|
|
57
|
+
* ```typescript
|
|
58
|
+
* const resultA = parseTrace(traceAJson);
|
|
59
|
+
* const resultB = parseTrace(traceBJson);
|
|
60
|
+
* const diff = diffTraces(resultA, resultB);
|
|
61
|
+
*
|
|
62
|
+
* if (diff.onlyInA.length > 0) {
|
|
63
|
+
* console.log(`${diff.onlyInA.length} events only in trace A`);
|
|
64
|
+
* }
|
|
65
|
+
* ```
|
|
66
|
+
*/
|
|
67
|
+
export declare function diffTraces(a: ParseResult, b: ParseResult): TraceDiff;
|
|
68
|
+
//# sourceMappingURL=diff.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diff.d.ts","sourceRoot":"","sources":["../../src/core/diff.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAS9E,0EAA0E;AAC1E,MAAM,WAAW,SAAS;IACxB,+CAA+C;IAC/C,SAAS,EAAE,MAAM,CAAC;IAClB,8BAA8B;IAC9B,KAAK,EAAE,WAAW,GAAG,WAAW,GAAG,QAAQ,GAAG,SAAS,GAAG,WAAW,CAAC;IACtE,8DAA8D;IAC9D,MAAM,EAAE,OAAO,CAAC;IAChB,8DAA8D;IAC9D,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,oDAAoD;AACpD,MAAM,WAAW,WAAW;IAC1B,yDAAyD;IACzD,CAAC,EAAE,cAAc,GAAG,IAAI,CAAC;IACzB,yDAAyD;IACzD,CAAC,EAAE,cAAc,GAAG,IAAI,CAAC;IACzB,8CAA8C;IAC9C,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,mDAAmD;AACnD,MAAM,WAAW,SAAS;IACxB,0DAA0D;IAC1D,OAAO,EAAE,KAAK,EAAE,CAAC;IACjB,0DAA0D;IAC1D,OAAO,EAAE,KAAK,EAAE,CAAC;IACjB,+DAA+D;IAC/D,QAAQ,EAAE,SAAS,EAAE,CAAC;IACtB,wCAAwC;IACxC,eAAe,EAAE,OAAO,EAAE,CAAC;IAC3B,wCAAwC;IACxC,eAAe,EAAE,OAAO,EAAE,CAAC;IAC3B,2BAA2B;IAC3B,WAAW,EAAE,WAAW,CAAC;CAC1B;AAqCD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,UAAU,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,WAAW,GAAG,SAAS,CAyIpE"}
|