#!/bin/bash set -u watch_mode=false ns_filter="" query="" all_namespaces=false while [[ $# -gt 0 ]]; do case "$1" in -w|--watch) watch_mode=true; shift ;; -n|--namespace) ns_filter="$2"; shift 2 ;; -s|--service) query="$2"; shift 2 ;; -A|--all) all_namespaces=true; shift ;; all) all_namespaces=true; shift ;; *) query="$1"; shift ;; esac done render_pods() { local raw if [[ "$all_namespaces" == true ]]; then raw=$(kubectl get pods -A -o wide 2>/dev/null || true) elif [[ -n "$ns_filter" ]]; then raw=$(kubectl get pods -n "$ns_filter" -o wide 2>/dev/null || true) elif [[ -n "$query" ]]; then raw=$(kubectl get pods -A -o wide 2>/dev/null | awk -v q="$query" 'NR==1 || tolower($1) ~ tolower(q) || tolower($2) ~ tolower(q)' || true) else raw=$(kubectl get pods -A -o wide 2>/dev/null | awk 'NR==1 || ($1 !~ /^(kube-system|flux-system|cert-manager|external-secrets)$/ && $4 != "Completed")' || true) fi echo "$raw" | awk ' BEGIN { ERR = "\033[38;2;255;46;76m" RUN = "\033[38;2;180;190;254m" WARN = "\033[38;2;250;179;135m" HEAD = "\033[38;2;147;154;183m" RST = "\033[0m" } NR==1 { print HEAD $0 RST; next } { if ($0 ~ /CrashLoopBackOff|Error|OOMKilled|ImagePullBackOff/) { print ERR $0 RST } else if ($0 ~ /ContainerCreating|Pending|Terminating|Init:/ || ($0 ~ /Running/ && $2 ~ /^0\//)) { print WARN $0 RST } else if ($0 ~ /Running/) { print RUN $0 RST } else { print $0 } }' } if [[ "$watch_mode" == true ]]; then trap 'tput cnorm 2>/dev/null || true; echo ""; exit 0' INT TERM tput civis 2>/dev/null || true clear while true; do tput cup 0 0 2>/dev/null || true render_pods tput ed 2>/dev/null || true sleep 1 done else render_pods fi