2024-08-14 19:07:00 -06:00
|
|
|
#!/usr/bin/env zsh
|
2024-04-13 16:57:22 -06:00
|
|
|
#
|
2025-02-19 21:58:02 -07:00
|
|
|
# must work as a standalone zsh script
|
2024-04-13 16:57:22 -06:00
|
|
|
#
|
2025-02-19 21:58:02 -07:00
|
|
|
eval "$(scwrypts --config)" \
|
|
|
|
&& use omni --group remote \
|
|
|
|
&& utils.check-environment \
|
|
|
|
|| { echo 'scwrypts config error; aborting' >&2; sleep 5; return 1; }
|
2024-04-13 16:57:22 -06:00
|
|
|
|
|
|
|
#####################################################################
|
|
|
|
|
2025-02-19 21:58:02 -07:00
|
|
|
OMNI_LOGFILE="${OMNI_LOGDIR}/omni.current.txt"
|
2024-04-13 16:57:22 -06:00
|
|
|
|
2025-02-19 21:58:02 -07:00
|
|
|
[ -f "${OMNI_LOGFILE}" ] && {
|
2024-05-08 23:33:06 -06:00
|
|
|
for x in {1..99}
|
|
|
|
do
|
2025-02-19 21:58:02 -07:00
|
|
|
[ ! -f "${OMNI_LOGDIR}/omni.${x}.txt" ] && {
|
|
|
|
mv "${OMNI_LOGFILE}" "${OMNI_LOGDIR}/omni.${x}.txt"
|
|
|
|
break
|
|
|
|
}
|
2024-05-08 23:33:06 -06:00
|
|
|
done
|
|
|
|
}
|
|
|
|
|
2025-02-19 21:58:02 -07:00
|
|
|
echo "OMNI MANAGER START : $(date)" > "${OMNI_LOGFILE}"
|
2024-04-13 16:57:22 -06:00
|
|
|
|
2025-02-19 21:58:02 -07:00
|
|
|
#####################################################################
|
2024-04-13 16:57:22 -06:00
|
|
|
|
2025-02-19 21:58:02 -07:00
|
|
|
get-unique-window-id() {
|
2024-04-13 16:57:22 -06:00
|
|
|
local MODE=use-default
|
|
|
|
|
2025-02-19 21:58:02 -07:00
|
|
|
local WINDOW_ID="$(eval echo "\$WINDOW_ID__${REMOTE_NAME}")"
|
2024-04-13 16:57:22 -06:00
|
|
|
: \
|
2025-02-19 21:58:02 -07:00
|
|
|
&& [[ $(eval echo "\$CAN_CONNECT__${REMOTE_NAME}") =~ true ]] \
|
|
|
|
&& [ ${WINDOW_ID} ] \
|
|
|
|
&& echo ${WINDOW_ID} \
|
2024-04-13 16:57:22 -06:00
|
|
|
&& return 0 \
|
|
|
|
;
|
|
|
|
|
2025-02-19 21:58:02 -07:00
|
|
|
unset WINDOW_ID__${REMOTE_NAME} &>>"${OMNI_LOGFILE}"
|
2024-04-13 16:57:22 -06:00
|
|
|
|
|
|
|
WINDOW_ID="$1"
|
2025-02-19 21:58:02 -07:00
|
|
|
WINDOW_ID=$(remote.config.yq .sessions.${REMOTE_NAME}.id)
|
|
|
|
[ ${WINDOW_ID} ] && MODE=specify-preferred
|
2024-04-13 16:57:22 -06:00
|
|
|
|
|
|
|
WINDOW_ID_IS_TAKEN() {
|
|
|
|
: \
|
2025-02-19 21:58:02 -07:00
|
|
|
&& [[ $(remote.omni.tmux list-windows -t=omni | grep "^${WINDOW_ID}:" | wc -l) -gt 0 ]] \
|
|
|
|
&& [[ ! $(remote.omni.tmux list-windows -t=omni | grep "^${WINDOW_ID}:" | awk '{print $2;}' =~ ^${REMOTE_NAME}$) ]] \
|
2024-04-13 16:57:22 -06:00
|
|
|
;
|
|
|
|
}
|
|
|
|
|
|
|
|
local FALLBACK_STARTING_POINT
|
2025-02-19 21:58:02 -07:00
|
|
|
case ${MODE} in
|
2024-04-13 16:57:22 -06:00
|
|
|
use-default ) FALLBACK_STARTING_POINT=42 ;;
|
|
|
|
specify-preferred ) FALLBACK_STARTING_POINT=69 ;;
|
|
|
|
esac
|
|
|
|
|
|
|
|
local I=0
|
|
|
|
while WINDOW_ID_IS_TAKEN
|
|
|
|
do
|
2025-02-19 21:58:02 -07:00
|
|
|
echo "${REMOTE_NAME} tried to acquire window id ${WINDOW_ID}, but it is already in-use (trying $((${FALLBACK_STARTING_POINT}-${I})))" >&2
|
|
|
|
WINDOW_ID=$((${FALLBACK_STARTING_POINT}-${I}))
|
2024-04-13 16:57:22 -06:00
|
|
|
((I+=1))
|
2025-02-19 21:58:02 -07:00
|
|
|
[[ ${I} -gt 10 ]] && WINDOW_ID= && break
|
2024-04-13 16:57:22 -06:00
|
|
|
done
|
|
|
|
|
2025-02-19 21:58:02 -07:00
|
|
|
echo ${WINDOW_ID}
|
2024-04-13 16:57:22 -06:00
|
|
|
}
|
|
|
|
|
|
|
|
#####################################################################
|
|
|
|
|
2025-02-19 21:58:02 -07:00
|
|
|
remote.omni.tmux new-window -t=omni-manager -dn 'harakiri' "
|
|
|
|
echo 'waiting for omni-manager to close'
|
2024-04-13 16:57:22 -06:00
|
|
|
while true
|
|
|
|
do
|
|
|
|
sleep 5
|
2025-02-19 21:58:02 -07:00
|
|
|
tmux -L ${OMNI_SOCKET} list-sessions 2>/dev/null | grep -v omni-manager | grep -qi omni || {
|
|
|
|
echo 'no active sessions detected; killing omni-manager session'
|
|
|
|
tmux -L ${OMNI_SOCKET} kill-session -t omni-manager
|
|
|
|
}
|
2024-04-13 16:57:22 -06:00
|
|
|
done
|
|
|
|
"
|
|
|
|
|
|
|
|
while true
|
|
|
|
do
|
2025-02-19 21:58:02 -07:00
|
|
|
#clear
|
|
|
|
for REMOTE_NAME in $(remote.config.yq '.sessions | keys | .[]')
|
2024-04-13 16:57:22 -06:00
|
|
|
do
|
2025-02-19 21:58:02 -07:00
|
|
|
WINDOW_ID=$(get-unique-window-id)
|
|
|
|
export WINDOW_ID__${REMOTE_NAME}=${WINDOW_ID}
|
2024-04-13 16:57:22 -06:00
|
|
|
|
2025-02-19 21:58:02 -07:00
|
|
|
remote.omni.tmux list-windows -t=omni | awk '{print $2;}' | grep -q ${REMOTE_NAME} \
|
2024-04-13 16:57:22 -06:00
|
|
|
&& continue
|
|
|
|
|
2025-02-19 21:58:02 -07:00
|
|
|
printf "testing connection ${REMOTE_NAME}..."
|
|
|
|
echo "testing connection ${REMOTE_NAME}..." &>>"${OMNI_LOGFILE}"
|
2024-05-08 23:33:06 -06:00
|
|
|
scwrypts --name test --group remote --type zsh \
|
2024-04-13 16:57:22 -06:00
|
|
|
-- \
|
2025-02-19 21:58:02 -07:00
|
|
|
--name ${REMOTE_NAME} \
|
2024-04-13 16:57:22 -06:00
|
|
|
--command 'command -v tmux' \
|
2025-02-19 21:58:02 -07:00
|
|
|
&>>"${OMNI_LOGFILE}" \
|
|
|
|
&& export CAN_CONNECT__${REMOTE_NAME}=true \
|
|
|
|
|| export CAN_CONNECT__${REMOTE_NAME}=false \
|
2024-04-13 16:57:22 -06:00
|
|
|
;
|
|
|
|
|
2025-02-19 21:58:02 -07:00
|
|
|
[[ $(eval echo "\$CAN_CONNECT__${REMOTE_NAME}") =~ true ]] \
|
|
|
|
&& utils.colors.print bright-green " ✔\n" >&2 \
|
|
|
|
|| { utils.colors.print bright-red " ✖\n" >&2; continue; }
|
2024-04-13 16:57:22 -06:00
|
|
|
|
2025-02-19 21:58:02 -07:00
|
|
|
remote.omni.tmux new-window \
|
|
|
|
-t=omni:${WINDOW_ID} \
|
|
|
|
-dn ${REMOTE_NAME} "
|
2024-04-13 16:57:22 -06:00
|
|
|
source ~/.zshrc &>/dev/null
|
2025-02-19 21:58:02 -07:00
|
|
|
TMUX='' scwrypts -n connect/${REMOTE_NAME} -- --type tmux
|
2024-04-13 16:57:22 -06:00
|
|
|
echo 'connection closed'
|
|
|
|
sleep 2
|
|
|
|
"
|
|
|
|
|
2025-02-19 21:58:02 -07:00
|
|
|
remote.omni.tmux list-window -t=omni | awk '{print $1;}' | grep -q '99:' && remote.omni.tmux kill-window -t omni:99
|
2024-04-13 16:57:22 -06:00
|
|
|
|
2025-02-19 21:58:02 -07:00
|
|
|
remote.omni.tmux list-windows -t=omni | awk '{print $2;}' | grep -q ${REMOTE_NAME} \
|
|
|
|
|| export CAN_CONNECT__${REMOTE_NAME}=false
|
2024-04-13 16:57:22 -06:00
|
|
|
done
|
|
|
|
|
2025-02-19 21:58:02 -07:00
|
|
|
#clear
|
2024-04-13 16:57:22 -06:00
|
|
|
echo "connections:\n"
|
|
|
|
{
|
2025-02-19 21:58:02 -07:00
|
|
|
for REMOTE_NAME in $(remote.config.yq '.sessions | keys | .[]')
|
2024-04-13 16:57:22 -06:00
|
|
|
do
|
2025-02-19 21:58:02 -07:00
|
|
|
[[ $(eval echo "\$CAN_CONNECT__${REMOTE_NAME}") =~ true ]] \
|
|
|
|
&& echo "${REMOTE_NAME}^$(eval echo "\$WINDOW_ID__${REMOTE_NAME}")^$(utils.colors.print bright-green connected)" \
|
|
|
|
|| echo "${REMOTE_NAME}^-^$(utils.colors.print bright-red disconnected)" \
|
2024-04-13 16:57:22 -06:00
|
|
|
;
|
|
|
|
done
|
|
|
|
} | column -ts '^'
|
|
|
|
echo "\nPress ENTER to search again now (checks every 60 seconds)" >&2
|
|
|
|
read -t 60
|
|
|
|
done
|