added 'clean' command to cleanup leftovers

This commit is contained in:
Michael Krayer 2021-03-26 16:17:49 +01:00
parent 5d98199bf9
commit 67845a10a0
1 changed files with 59 additions and 27 deletions

66
session
View File

@ -36,8 +36,9 @@ EXIT_INVALID_SUBMODE=2
EXIT_SESSION_EXISTS=3
EXIT_SESSION_NOT_EXIST=4
EXIT_ALREADY_IN_SESSION=5
EXIT_CONFIG_NOT_GENERATED=6
EXIT_INVALID_CHOICE=7
EXIT_NOT_ATTACHED=6
EXIT_CONFIG_NOT_GENERATED=7
EXIT_INVALID_CHOICE=8
## Functions
print_help() {
@ -82,7 +83,7 @@ print_help() {
echo >&2 "non-existent, can be initialized with '$(basename $0) config generate'."
echo >&2 "All sessions are logged by default in order to provide a scrollback"
echo >&2 "buffer at attaching. The logs are located in '${config[socket_dir]}'"
echo >&2 "and logs of terminated sessions may be cleared using '$(basename $0) log clear'."
echo >&2 "and logs of terminated sessions may be cleared using '$(basename $0) clean log'."
}
get_available_sessions() {
@ -108,11 +109,18 @@ get_available_logs() {
}
get_session_path() {
echo "${SOCKET_PREFIX}${1}${SOCKET_SUFFIX}"
local session_name=$1
echo "${SOCKET_PREFIX}${session_name}${SOCKET_SUFFIX}"
}
get_log_path() {
echo "${SOCKET_PREFIX}${1}${LOG_SUFFIX}"
local session_name=$1
echo "${SOCKET_PREFIX}${session_name}${LOG_SUFFIX}"
}
get_session_pid() {
local session_name=$1
fuser $(get_session_path $session_name) 2> /dev/null
}
is_existing_session_path() {
@ -142,6 +150,13 @@ exit_if_in_session() {
fi
}
exit_if_not_in_session() {
if [ -z $DTACH_SOCKET_PATH ]; then
echo >&2 "Currently not attached to any session."
exit $EXIT_NOT_ATTACHED
fi
}
exit_if_existing_session() {
if is_existing_session_name $session_name; then
echo >&2 "Session '$session_name' already exists."
@ -177,13 +192,9 @@ shift
## Now enter mode specific code
case $mode in
"")
if [ -z "$DTACH_SESSION_NAME" ];then
echo "Currently not attached."
exit $EXIT_NOT_ATTACHED
else
exit_if_not_in_session
echo "Currently attached to '$DTACH_SESSION_NAME'."
exit $EXIT_SUCCESS
fi
;;
"attach"|"att"|"a")
exit_if_in_session
@ -214,6 +225,14 @@ case $mode in
eval $CMD
exit $EXITSUCCESS
;;
# "detach"|"det"|"d")
# exit_if_not_in_session
# PID=$(get_session_pid $DTACH_SESSION_NAME)
# echo $PID
# kill -SIGHUP $PID
# #echo -e "" > $(tty)
# exit $EXIT_SUCCESS
# ;;
"new"|"n")
exit_if_in_session
#PROMPT_COMMAND="echo -ne \"\033]0;$1 (on $HOSTNAME)\007\""
@ -266,16 +285,15 @@ case $mode in
exit_if_nonexisting_session $session_name
fi
for sname in ${session_name[@]}; do
spath=$(get_session_path $sname)
logpath=$(get_log_path $sname)
PID=$(fuser $spath 2> /dev/null)
PID=$(get_session_pid $sname)
if [ ! -z "$PID" ]; then
CMD="kill $SIGNAL $PID"
eval $CMD
else # this seems to be an orphan
CLEANUP=1
fi
[[ "$CLEANUP" -eq 1 ]] && rm $spath
[[ "$CLEANUP" -eq 1 ]] && rm $(get_session_path $sname)
done
exit $EXIT_SUCCESS
;;
@ -322,11 +340,9 @@ case $mode in
done
exit $EXIT_SUCCESS
;;
"clean")
case "$1" in
"log")
if [[ "$1" != "clear" ]]; then
echo >&2 "Use '$(basename $0) log clear' to clear all unused log files."
exit $EXIT_INVALID_SUBMODE
fi
logs_avail=($(get_available_logs))
for sname in ${logs_avail[@]}; do
if ! is_existing_session_name $sname; then
@ -335,6 +351,22 @@ case $mode in
done
exit $EXIT_SUCCESS
;;
"socket")
sessions_avail=($(get_available_sessions))
for sname in ${sessions_avail[@]}; do
PID=$(get_session_pid $sname)
if [ -z "$PID" ]; then
rm $(get_session_path $sname)
fi
done
exit $EXIT_SUCCESS
;;
*)
echo >&2 "'$(basename $0) clean' accepts:"
echo >&2 " log, socket"
exit $EXIT_INVALID_SUBMODE
esac
;;
*)
echo >&2 "Invalid mode: ${mode}"
print_help