summaryrefslogtreecommitdiff
path: root/miscripts/shigoto_kfxx.sh
diff options
context:
space:
mode:
Diffstat (limited to 'miscripts/shigoto_kfxx.sh')
-rw-r--r--miscripts/shigoto_kfxx.sh114
1 files changed, 114 insertions, 0 deletions
diff --git a/miscripts/shigoto_kfxx.sh b/miscripts/shigoto_kfxx.sh
new file mode 100644
index 0000000..29526ce
--- /dev/null
+++ b/miscripts/shigoto_kfxx.sh
@@ -0,0 +1,114 @@
+#!/bin/bash
+
+FIVEXX_ONLY=true
+CONTAINER_SELECT=false
+WRITE_TO_FILE=false
+FLAGS=""
+HELP_TEXT="script usage: $(basename $0) [-h (prints this message)] [-a (print all logs, not just 5xx errors)] [-c (view logs of a certain container)] [-C (view logs of all containers)] [-p (previous pod state)] [-s TIMEDELTA (print logs since TIMEDELTA)] pod_name"
+
+while getopts 'hacCwps:' OPTION; do
+ case "$OPTION" in
+ h)
+ echo "$HELP_TEXT" >&2 ; exit 0
+ ;;
+ a)
+ FIVEXX_ONLY=false
+ ;;
+ c)
+ CONTAINER_SELECT=true
+ ;;
+ C)
+ [[ $CONTAINER_SELECT == true ]] && echo "ERROR: -C AND -c CAN'T BE USED AS PART OF THE SAME COMMAND" && exit -2
+ FLAGS="$FLAGS --all-containers"
+ echo "VIEWING LOGS OF ALL CONTAINERS IN POD"
+ ;;
+ p)
+ FLAGS="$FLAGS -p"
+ echo "VIEWING LOGS OF POD'S PREVIOUS STATE"
+ ;;
+ w)
+ WRITE_TO_FILE=true
+ echo "WRITE TO FILE: TRUE"
+ ;;
+ s)
+ TIMEDELTA="$OPTARG"
+ echo "TIME DELTA SPECIFIED: $TIMEDELTA"
+ FLAGS="$FLAGS --since=$TIMEDELTA"
+ ;;
+ ?)
+ echo "$HELP_TEXT" >&2 ; exit 0
+ exit 0
+ ;;
+ esac
+done
+shift "$(($OPTIND -1))"
+
+POD_ARG="$1"
+ENV="$( kubectx -c | cut -d "-" -f3 )"
+POD_LIST="$( kubectl get pods --all-namespaces | grep "$POD_ARG" | awk '$0!=""{print NR, $0}' )"
+POD_NUM="$( echo "$POD_LIST" | wc -l )"
+POD=""
+CONTAINER=""
+
+get_containers () {
+ CONTAINER_LIST="$( kubectl get pods "$POD" -o jsonpath="{.spec['containers','initContainers'][*].name}" | tr ' ' '\n' | awk '$0!=""{print NR, $0}' )"
+ CONTAINER_NUM="$( echo "$CONTAINER_LIST" | wc -l )"
+ if [[ "$CONTAINER_NUM" -gt 1 ]]; then
+ echo -e "\nLIST OF CONTAINERS IN POD ${POD}:\n${CONTAINER_LIST}\n"
+ read -p 'PLEASE SELECT POD NUMBER: ' containerindex
+ [[ "$containerindex" =~ [0-9]+ ]] || echo "FUNKY INPUT, DEFAULTING TO 1" && containerindex=1
+ if [[ "$containerindex" -le "$CONTAINER_NUM" ]]; then
+ CONTAINER="$( echo "$CONTAINER_LIST" | sed -n "${containerindex}p" | sed -r "s|^[^ ]* *||g" )"
+ else
+ echo "ERROR: INDEX OF CONTAINER EXCEEDS NUMBER OF CONTAINERS FOUND INSIDE POD"
+ exit 1
+ fi
+ elif [[ "$CONTAINER_NUM" -eq 1 ]]; then
+ CONTAINER="$( echo "$CONTAINER_LIST" | sed -r "s|^[^ ]* *||g" )"
+ else
+ echo "NO CONTAINERS FOUND IN $POD"
+ exit -1
+ fi
+ FLAGS="$FLAGS --container="$CONTAINER""
+}
+
+get_logs () {
+ grepstr=""
+ echostr="ALL LOGS FOR POD ${POD}:\n"
+ tmp_file="$( mktemp -p "/tmp" "${POD}_logs_tmp_XXXXX" )"
+ file="${POD}_logs.txt"
+ NS="$( echo "$POD_LIST" | grep "$POD" | sed -r "s|^[^ ]* *([^ ]*) *(.*?)|\1|g" )"
+ [[ ! $( kubens -c | grep "$NS" ) ]] && kubens "$NS"
+ [[ $( kubens -c | grep "$NS" ) ]] || exit -1
+ [[ $CONTAINER_SELECT == true ]] && get_containers && echostr="$( echo "$echostr" | sed -r "s|:| (container $CONTAINER):|g" )"
+ [[ ! $FIVEXX_ONLY ]] && echostr="$( echo "$echostr" | sed -r "s|^ALL|5XX|" )" && grepstr="[^\.0-9a-zA-Z\-]5[0-9]{2}[^\.0-9a-zA-Z\-]"
+ echo -e "$echostr"
+ kubectl logs "$POD" $FLAGS --timestamps=true --prefix=true | grep --color=always -E "$grepstr" | tee "$tmp_file"
+
+ [[ "$WRITE_TO_FILE" = "true" ]] && cat "$tmp_file" | sed -e 's/\x1b\[[0-9;]*m//g' > "$file" && echo "Logs saved to '$file'."
+
+ rm -f "$tmp_file"
+}
+
+[[ -z "$POD_ARG" ]] && echo "ERROR: MUST SPECIFY POD" && exit -1
+
+echo -e "CURRENT ENV: $ENV\n"
+
+if [[ "$POD_NUM" -gt 1 ]]; then
+ echo -e "FOUND MORE THAN ONE POD THAT MATCHES STRING:\n${POD_LIST}\n"
+ read -p 'PLEASE SELECT POD NUMBER: ' podindex
+ [[ "$podindex" =~ [0-9]+ ]] || echo "FUNKY INPUT, DEFAULTING TO 1" && podindex=1
+ if [[ "$podindex" -le "$POD_NUM" ]]; then
+ POD="$( echo "$POD_LIST" | sed -n "${podindex}p" | sed -r "s|^([^ ]* *){2}||g" | grep -o -E "^[^ ]*" )"
+ get_logs
+ else
+ echo "ERROR: INDEX OF POD EXCEEDS NUMBER OF PODS FOUND"
+ exit 1
+ fi
+elif [[ "$POD_NUM" -eq 1 ]]; then
+ POD="$( echo "$POD_LIST" | sed -r "s|^([^ ]* *){2}||g" | grep -o -E "^[^ ]*" )"
+ get_logs
+else
+ echo "POD NOT FOUND ON $ENV"
+ exit -1
+fi