Skip to content

Instantly share code, notes, and snippets.

@1ambda
Last active March 2, 2019 08:16
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save 1ambda/58243be60514d0ebd32d61afb6468a15 to your computer and use it in GitHub Desktop.
Save 1ambda/58243be60514d0ebd32d61afb6468a15 to your computer and use it in GitHub Desktop.
yarn-find-apps.sh
#!/usr/bin/env bash
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
function usage() {
echo "Usage:
${0##*/} [-h][-n=APP][-r=SECONDS][-b=DATETIME][-s=STATES][-o=ORDER]
Options:
-h, --help
display this help and exit
-n, --name=PATTERN
a pattern of app names
-r, --recent=SECONDS
timestamp delta
-b, --begin=DATETIME
start datetime (YYYY-MM-DD)
-o, --order=ORDER
name, id
-s, --state=STATES
ALL, NEW, NEW_SAVING, SUBMITTED, ACCEPTED, RUNNING, FINISHED, FAILED, KILLED
"
exit 1
}
for i in "$@"
do
case $i in
-o=*|--order=*)
APP_ORDER="${i#*=}"
shift # past argument=value
;;
-s=*|--state=*)
APP_STATES="${i#*=}"
shift # past argument=value
;;
-b=*|--begin=*)
TIME_START="${i#*=}"
shift # past argument=value
;;
-r=*|--recent=*)
TIME_DELTA="${i#*=}" # seconds
shift # past argument=value
;;
-n=*|--name=*)
APP_PATTERN="${i#*=}"
shift # past argument=value
;;
-h=*|--help=*)
usage
shift # past argument=value
;;
*)
usage
shift
;;
esac
done
# setup default values
if [[ "${TIME_START}x" == "x" ]]; then
TIME_START=$(TZ=UTC-9 date +"%Y-%m-%d") # 현재 한국 시간으로 (TZ=UTC-9)
fi
if [[ "${TIME_DELTA}x" == "x" ]]; then
TIME_DELTA=0 # seconds
fi
if [[ "${APP_PATTERN}x" == "x" ]]; then
APP_PATTERN=""
fi
if [[ "${APP_STATES}x" == "x" ]]; then
APP_STATES="FINISHED"
fi
if [[ "${APP_ORDER}x" == "x" ]]; then
APP_ORDER="id"
fi
# calculate parameters
if [[ "${TIME_DELTA}x" == "0x" ]]; then
# TIME_DELTA 가 없을 경우 한국 시간으로 YYYY-MM-DD 앱에 대해서 검색
CONVERTED_TIME_START=$(date --date "${TIME_START} KST" +%s)
TIME_BEGIN=$(let x=${CONVERTED_TIME_START} && echo ${x})
else
# TIME_DELTA 가 있을 경우 UTC 시간 Timestamp 를 구해 delta 를 뺀 뒤 검색
CONVERTED_TIME_START=$(date +%s)
TIME_BEGIN=$(let x=${CONVERTED_TIME_START}-${TIME_DELTA} && echo ${x})
fi
# print parameters
TIME_BEGIN_TEXT=$(TZ=":Asia/Seoul" date --date @${TIME_BEGIN} +"%Y-%m-%d %H:%M:%S")
echo -e "APP_PATTERN:\t${APP_PATTERN}"
echo -e "APP_STATES:\t${APP_STATES}"
echo -e "TIME_BEGIN:\t${TIME_BEGIN} (${TIME_BEGIN_TEXT} KST)"
# main
RM="$(hostname -I | awk -F " " '{print $1}'):8088"
echo -e ""
YARN_FILE=".yarn.json"
YARN_FILE_FILTERED=".yarn.filtered.json"
if [[ "${APP_STATES}" == "FAILED" ]]; then
curl -s "${RM}/ws/v1/cluster/apps?states=FINISHED&startedTimeBegin=${TIME_BEGIN}000" | jq ".apps.app" > ${YARN_FILE}
cat ${YARN_FILE} | jq "map(select(.name | contains(\"${APP_PATTERN}\"))) | sort_by(.id) " > ${YARN_FILE_FILTERED}
cat ${YARN_FILE_FILTERED} | jq -r "map(select(.finalStatus | contains(\"${APP_STATES}\"))) | sort_by(.${APP_ORDER}) | .[] | \"APP: \(.id) \(.state):\(.finalStatus)\t NAME: \(.name) \((.elapsedTime / 1000 / 60) | floor) Mins\""
else
curl -s "${RM}/ws/v1/cluster/apps?states=${APP_STATES}&startedTimeBegin=${TIME_BEGIN}000" | jq ".apps.app" > ${YARN_FILE}
cat ${YARN_FILE} | jq "map(select(.name | contains(\"${APP_PATTERN}\"))) | sort_by(.id) " > ${YARN_FILE_FILTERED}
cat ${YARN_FILE_FILTERED} | jq -r "sort_by(.${APP_ORDER}) | .[] | \"APP: \(.id) \(.state):\(.finalStatus)\t NAME: \(.name) \((.elapsedTime / 1000 / 60) | floor) Mins\""
fi
echo -e ""
echo -e "COUNT: $(jq length ${YARN_FILE_FILTERED})"
echo -e ""
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment