chore(node): preserve pre-canonicalization experiment snapshot
Historical working copy retained for audit before consolidation into main. The canonicalized plugin architecture and later fixes already live in main; this snapshot is not a release or a request to restore obsolete source layout.
This commit is contained in:
@@ -18,6 +18,7 @@ _EXTRA_FIELDS: Final = (
|
||||
"connection_mode",
|
||||
"error_category",
|
||||
"error_code",
|
||||
"transport_error_code",
|
||||
"reason_code",
|
||||
"failed_phase",
|
||||
"dialogue_stage",
|
||||
@@ -32,6 +33,20 @@ _EXTRA_FIELDS: Final = (
|
||||
"device_write_confirmed",
|
||||
"ble_att_error_code",
|
||||
"ble_att_error_name",
|
||||
"resolved_write_mode",
|
||||
"max_write_without_response_size",
|
||||
"mtu_size",
|
||||
"frame_length",
|
||||
"bridge_frame_length",
|
||||
"quick_connect_frame_length",
|
||||
"scan_elapsed_ms",
|
||||
"scanner_start_ms",
|
||||
"initial_window_ms",
|
||||
"first_candidate_ms",
|
||||
"scan_extended",
|
||||
"candidate_count",
|
||||
"likely_k1_candidate_count",
|
||||
"discovery_generation",
|
||||
"helper_stage",
|
||||
"helper_elapsed_ms",
|
||||
"status_reconciliation",
|
||||
@@ -102,6 +117,26 @@ class ScannerDiagnosticJsonFormatter(logging.Formatter):
|
||||
value = getattr(record, field, None)
|
||||
if value is not None and isinstance(value, (str, int, bool)):
|
||||
document[field] = value
|
||||
if record.exc_info is not None:
|
||||
exception_type, _exception, traceback = record.exc_info
|
||||
if exception_type is not None:
|
||||
document["exception_type"] = exception_type.__name__[:128]
|
||||
if traceback is not None:
|
||||
while traceback.tb_next is not None:
|
||||
traceback = traceback.tb_next
|
||||
code = traceback.tb_frame.f_code
|
||||
# Preserve the failure location, never exception text, locals,
|
||||
# source lines or absolute paths that may contain private data.
|
||||
document["exception_site"] = (
|
||||
f"{Path(code.co_filename).name}:{traceback.tb_lineno}:{code.co_name}"
|
||||
)[:256]
|
||||
properties = getattr(record, "write_characteristic_properties", None)
|
||||
if isinstance(properties, (list, tuple)) and all(
|
||||
isinstance(value, str)
|
||||
and value in {"read", "write", "write-without-response", "notify", "indicate"}
|
||||
for value in properties
|
||||
):
|
||||
document["write_characteristic_properties"] = sorted(set(properties))
|
||||
return json.dumps(document, ensure_ascii=False, separators=(",", ":"))
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user