gistfile1.txt
· 2.4 KiB · Text
原始檔案
function ui::logs::fw_row() {
local ts="${1:-}" client="${2:-}" dest_ip="${3:-}" dest_port="${4:-}" \
proto="${5:-}" svc_name="${6:-}" count="${7:-1}" \
w_client="${8:-20}" w_dest="${9:-30}" \
src_endpoint="${10:-}" w_endpoint="${11:-0}"
local ts_pad client_pad
ts_pad=$(printf "%-11s" "$ts")
client_pad=$(printf "%-${w_client}s" "$client")
# ── Source endpoint column ──
local src_col=""
if [[ "$w_endpoint" -gt 0 ]]; then
local src_pad_n
if [[ -n "$src_endpoint" ]]; then
local src_resolved
src_resolved=$(resolve::ip "$src_endpoint" 2>/dev/null || echo "")
[[ "$src_resolved" == "$src_endpoint" ]] && src_resolved=""
if [[ -n "$src_resolved" ]]; then
src_col="${src_endpoint} \033[2m→ ${src_resolved}\033[0m"
else
src_col="${src_endpoint}"
fi
src_pad_n=$(( w_endpoint - ${#src_endpoint} ))
else
src_pad_n="$w_endpoint"
fi
[[ $src_pad_n -lt 0 ]] && src_pad_n=0
src_col="${src_col}$(printf '%*s' "$src_pad_n" '')"
fi
# ── Destination column ──
# svc_display: "npm/tcp" or "pihole (icmp)" — used for padding
# raw_suffix: dim "(10.0.0.101:3260)" — appended after padding
local svc_display raw_suffix=""
if [[ -n "$svc_name" ]]; then
[[ -n "$dest_port" ]] && svc_display="${svc_name}/${proto}" || svc_display="${svc_name} (${proto})"
[[ -n "$dest_port" ]] && raw_suffix=" \033[2m(${dest_ip}:${dest_port})\033[0m" \
|| raw_suffix=" \033[2m(${dest_ip})\033[0m"
else
[[ -n "$dest_port" ]] && svc_display="${dest_ip}:${dest_port}/${proto}" \
|| svc_display="${dest_ip} (${proto})"
fi
local dest_pad_n=$(( w_dest - ${#svc_display} ))
[[ $dest_pad_n -lt 0 ]] && dest_pad_n=0
# ── Count ──
local count_suffix=""
[[ "$count" -gt 1 ]] && count_suffix=" \033[2m(x${count})\033[0m"
# ── Render ──
local src_padded
if [[ -n "$src_endpoint" ]]; then
local src_colored="$src_endpoint"
[[ -n "$src_resolved" ]] && src_colored="${src_endpoint} \033[2m→ ${src_resolved}\033[0m"
src_padded=$(ui::pad_mb "$src_colored" "$w_endpoint")
else
src_padded=$(printf "%${w_endpoint}s" "")
fi
printf " %s %s %b \033[1;31m→\033[0m %s%*s%b%b\n" \
"$ts_pad" "$client_pad" \
"$src_padded" \
"$svc_display" "$dest_pad_n" "" \
"$raw_suffix" "$count_suffix"
}
| 1 | function ui::logs::fw_row() { |
| 2 | local ts="${1:-}" client="${2:-}" dest_ip="${3:-}" dest_port="${4:-}" \ |
| 3 | proto="${5:-}" svc_name="${6:-}" count="${7:-1}" \ |
| 4 | w_client="${8:-20}" w_dest="${9:-30}" \ |
| 5 | src_endpoint="${10:-}" w_endpoint="${11:-0}" |
| 6 | |
| 7 | local ts_pad client_pad |
| 8 | ts_pad=$(printf "%-11s" "$ts") |
| 9 | client_pad=$(printf "%-${w_client}s" "$client") |
| 10 | |
| 11 | # ── Source endpoint column ── |
| 12 | local src_col="" |
| 13 | if [[ "$w_endpoint" -gt 0 ]]; then |
| 14 | local src_pad_n |
| 15 | if [[ -n "$src_endpoint" ]]; then |
| 16 | local src_resolved |
| 17 | src_resolved=$(resolve::ip "$src_endpoint" 2>/dev/null || echo "") |
| 18 | [[ "$src_resolved" == "$src_endpoint" ]] && src_resolved="" |
| 19 | if [[ -n "$src_resolved" ]]; then |
| 20 | src_col="${src_endpoint} \033[2m→ ${src_resolved}\033[0m" |
| 21 | else |
| 22 | src_col="${src_endpoint}" |
| 23 | fi |
| 24 | src_pad_n=$(( w_endpoint - ${#src_endpoint} )) |
| 25 | else |
| 26 | src_pad_n="$w_endpoint" |
| 27 | fi |
| 28 | [[ $src_pad_n -lt 0 ]] && src_pad_n=0 |
| 29 | src_col="${src_col}$(printf '%*s' "$src_pad_n" '')" |
| 30 | fi |
| 31 | |
| 32 | # ── Destination column ── |
| 33 | # svc_display: "npm/tcp" or "pihole (icmp)" — used for padding |
| 34 | # raw_suffix: dim "(10.0.0.101:3260)" — appended after padding |
| 35 | local svc_display raw_suffix="" |
| 36 | if [[ -n "$svc_name" ]]; then |
| 37 | [[ -n "$dest_port" ]] && svc_display="${svc_name}/${proto}" || svc_display="${svc_name} (${proto})" |
| 38 | [[ -n "$dest_port" ]] && raw_suffix=" \033[2m(${dest_ip}:${dest_port})\033[0m" \ |
| 39 | || raw_suffix=" \033[2m(${dest_ip})\033[0m" |
| 40 | else |
| 41 | [[ -n "$dest_port" ]] && svc_display="${dest_ip}:${dest_port}/${proto}" \ |
| 42 | || svc_display="${dest_ip} (${proto})" |
| 43 | fi |
| 44 | |
| 45 | local dest_pad_n=$(( w_dest - ${#svc_display} )) |
| 46 | [[ $dest_pad_n -lt 0 ]] && dest_pad_n=0 |
| 47 | |
| 48 | # ── Count ── |
| 49 | local count_suffix="" |
| 50 | [[ "$count" -gt 1 ]] && count_suffix=" \033[2m(x${count})\033[0m" |
| 51 | |
| 52 | # ── Render ── |
| 53 | local src_padded |
| 54 | if [[ -n "$src_endpoint" ]]; then |
| 55 | local src_colored="$src_endpoint" |
| 56 | [[ -n "$src_resolved" ]] && src_colored="${src_endpoint} \033[2m→ ${src_resolved}\033[0m" |
| 57 | src_padded=$(ui::pad_mb "$src_colored" "$w_endpoint") |
| 58 | else |
| 59 | src_padded=$(printf "%${w_endpoint}s" "") |
| 60 | fi |
| 61 | |
| 62 | printf " %s %s %b \033[1;31m→\033[0m %s%*s%b%b\n" \ |
| 63 | "$ts_pad" "$client_pad" \ |
| 64 | "$src_padded" \ |
| 65 | "$svc_display" "$dest_pad_n" "" \ |
| 66 | "$raw_suffix" "$count_suffix" |
| 67 | } |