function cmd::logs::show_wg_events() { local filter_ip="${1:-}" filter_name="${2:-}" filter_type="${3:-}" \ limit="${4:-50}" collapse="${5:-1}" \ since="${6:-}" filter_event="${7:-}" sort_order="${8:-desc}" [[ ! -f "$WG_EVENTS_LOG" ]] && return 0 local data data=$(json::wg_events \ "$WG_EVENTS_LOG" "$filter_name" "$filter_type" \ "$limit" "$collapse" "$since" "$filter_event" \ "$(ctx::endpoint_cache)" "$sort_order" \ 2>/dev/null) [[ -z "$data" ]] && return 0 # Resolve endpoints and measure column widths local w_client=16 w_endpoint=16 local resolved_data="" while IFS='|' read -r ts client endpoint event count gap_seconds; do [[ -z "$ts" ]] && continue (( ${#client} > w_client )) && w_client=${#client} # Estimate endpoint column width — raw IP + " → resolved_name" # Max annotation is " → " (3) + ~12 chars for hostname = ~15 extra local ep_len=${#endpoint} [[ -z "$endpoint" ]] && ep_len=1 (( ep_len > w_endpoint )) && w_endpoint=$ep_len done <<< "$data" (( w_client += 2 )) # Add extra width for annotation (resolved name after →) (( w_endpoint += 18 )) # " → resolved_name" typical max echo "DEBUG: data_lines=$(echo "$data" | wc -l) resolved_lines=$(echo "$resolved_data" | wc -l)" >&2 ui::logs::wg_section_header while IFS='|' read -r ts client endpoint event count gap_seconds resolved; do [[ -z "$ts" ]] && continue ui::logs::wg_row "$ts" "$client" "$endpoint" "$event" \ "$count" "$w_client" "$w_endpoint" "$gap_seconds" "$resolved" done <<< "$resolved_data" printf "\n" }