zarya/cmd/pods.sh

61 lines
1.9 KiB
Bash
Executable file

#!/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