mirror of https://github.com/rapenne-s/bento
bento: status code is now in a function and supports a parameter to display it in a loop
This commit is contained in:
parent
8c762fe008
commit
43e48a0a7b
203
bento
203
bento
|
@ -35,6 +35,104 @@ check_bento() {
|
|||
fi
|
||||
}
|
||||
|
||||
display_status() {
|
||||
cd "${CHROOT_DIR}" || exit 5
|
||||
PRETTY_OUT_COLUMN=$(ls -1 | awk '{ if(length($1) > max) { max = length($1) }} END { print max }')
|
||||
|
||||
# printf isn't aware of emojis, need -2 chars per emoji
|
||||
printf "%${PRETTY_OUT_COLUMN}s %15s %16s %18s %40s\n" \
|
||||
"machine" "local version" "remote version" "state" "elapsed time since"
|
||||
|
||||
printf "%${PRETTY_OUT_COLUMN}s %15s %16s %18s %40s\n" \
|
||||
"-------" "---------" "-----------" "-------------" "-------------"
|
||||
|
||||
for i in *
|
||||
do
|
||||
test -d "${i}" || continue
|
||||
RESULT=$(find "${i}/logs/" -type f -cnewer "${i}/last_change_date" | sort -n)
|
||||
|
||||
# date calculation
|
||||
LASTLOG=$(find "${i}/logs/" -type f | sort -n | tail -n 1)
|
||||
LASTCONFIG=$(date -r "${i}/last_change_date" "+%s")
|
||||
ELAPSED_SINCE_LATE="new config $(elapsed_time $(( $(date +%s) - "$LASTCONFIG")))"
|
||||
EXPECTED_CONFIG="$(awk -F '=' -v host="${i}" 'host == $1 { print $2 }' states.txt | cut -b 1-8)"
|
||||
|
||||
if [ -z "${EXPECTED_CONFIG}" ]; then EXPECTED_CONFIG="non-flakes" ; fi
|
||||
|
||||
# skip if no logs (for new hosts)
|
||||
if [ -z "${LASTLOG}" ]
|
||||
then
|
||||
display_table "$PRETTY_OUT_COLUMN" "$i" "${EXPECTED_CONFIG}" "" "new machine " "($ELAPSED_SINCE_LATE) "
|
||||
continue
|
||||
fi
|
||||
|
||||
LASTLOGVERSION="$(echo "$LASTLOG" | awk -F '_' '{ print $2 }' | awk -F '-' '{ print $1 }' )"
|
||||
#NIXPKGS_DATE="$(echo "$LASTLOG" | awk -F '_' '{ print $2 }' | awk -F '-' '{ printf("%s", $NF) }' )"
|
||||
LASTTIME=$(date -r "$LASTLOG" "+%s")
|
||||
ELAPSED_SINCE_UPDATE="build $(elapsed_time $(( $(date +%s) - "$LASTTIME" )))"
|
||||
|
||||
|
||||
if grep "^${i}=${LASTLOGVERSION}" states.txt >/dev/null
|
||||
then
|
||||
MATCH="💚"
|
||||
MATCH_IF=1
|
||||
else
|
||||
# we don't know the state of a non-flake
|
||||
if [ "${EXPECTED_CONFIG}" = "non-flakes" ]
|
||||
then
|
||||
MATCH="📌"
|
||||
else
|
||||
MATCH="🛑"
|
||||
fi
|
||||
MATCH_IF=0
|
||||
fi
|
||||
|
||||
SHORT_VERSION="$(echo "$LASTLOGVERSION" | cut -b 1-8)"
|
||||
|
||||
# Too many logs while there should be only one
|
||||
if [ "$(echo "$RESULT" | awk 'END { print NR }')" -gt 1 ]
|
||||
then
|
||||
display_table "$PRETTY_OUT_COLUMN" "$i" "${EXPECTED_CONFIG}" "${SHORT_VERSION} ${MATCH}" "extra logs 🔥" "($ELAPSED_SINCE_UPDATE) ($ELAPSED_SINCE_LATE)"
|
||||
continue
|
||||
fi
|
||||
|
||||
# no result since we updated configuration files
|
||||
# the client is not up to date
|
||||
if [ -z "$RESULT" ]
|
||||
then
|
||||
if [ "${MATCH_IF}" -eq 0 ]
|
||||
then
|
||||
display_table "$PRETTY_OUT_COLUMN" "$i" "${EXPECTED_CONFIG}" "${SHORT_VERSION} ${MATCH}" "rebuild pending 🚩" "($ELAPSED_SINCE_UPDATE) ($ELAPSED_SINCE_LATE)"
|
||||
else
|
||||
display_table "$PRETTY_OUT_COLUMN" "$i" "${EXPECTED_CONFIG}" "${SHORT_VERSION} ${MATCH}" "sync pending 🚩" "($ELAPSED_SINCE_UPDATE) ($ELAPSED_SINCE_LATE)"
|
||||
fi
|
||||
# if no new log
|
||||
# then it can't be in another further state
|
||||
continue
|
||||
fi
|
||||
|
||||
# check if latest log contains rollback
|
||||
if echo "$LASTLOG" | grep rollback >/dev/null
|
||||
then
|
||||
display_table "$PRETTY_OUT_COLUMN" "$i" "${EXPECTED_CONFIG}" "${SHORT_VERSION} ${MATCH}" " rollbacked ⏪" "($ELAPSED_SINCE_UPDATE)"
|
||||
fi
|
||||
|
||||
# check if latest log contains success
|
||||
if echo "$LASTLOG" | grep success >/dev/null
|
||||
then
|
||||
display_table "$PRETTY_OUT_COLUMN" "$i" "${EXPECTED_CONFIG}" "${SHORT_VERSION} ${MATCH}" " up to date 💚" "($ELAPSED_SINCE_UPDATE)"
|
||||
fi
|
||||
|
||||
# check if latest log contains failure
|
||||
if echo "$LASTLOG" | grep failure >/dev/null
|
||||
then
|
||||
display_table "$PRETTY_OUT_COLUMN" "$i" "${EXPECTED_CONFIG}" "${SHORT_VERSION} ${MATCH}" " failing 🔥" "($ELAPSED_SINCE_UPDATE) ($ELAPSED_SINCE_LATE)"
|
||||
fi
|
||||
|
||||
done
|
||||
|
||||
|
||||
}
|
||||
user_exists() {
|
||||
user="$1"
|
||||
if ! id "${user}" >/dev/null 2>/dev/null
|
||||
|
@ -511,102 +609,17 @@ then
|
|||
. ./config.sh
|
||||
cd hosts || exit 5
|
||||
|
||||
cd "${CHROOT_DIR}" || exit 5
|
||||
if [ -n "$2" ]
|
||||
then
|
||||
while true
|
||||
do
|
||||
display_status
|
||||
sleep "$2"
|
||||
done
|
||||
else
|
||||
display_status
|
||||
fi
|
||||
|
||||
|
||||
PRETTY_OUT_COLUMN=$(ls -1 | awk '{ if(length($1) > max) { max = length($1) }} END { print max }')
|
||||
|
||||
# printf isn't aware of emojis, need -2 chars per emoji
|
||||
printf "%${PRETTY_OUT_COLUMN}s %15s %16s %18s %40s\n" \
|
||||
"machine" "local version" "remote version" "state" "elapsed time since"
|
||||
|
||||
printf "%${PRETTY_OUT_COLUMN}s %15s %16s %18s %40s\n" \
|
||||
"-------" "---------" "-----------" "-------------" "-------------"
|
||||
|
||||
for i in *
|
||||
do
|
||||
test -d "${i}" || continue
|
||||
RESULT=$(find "${i}/logs/" -type f -cnewer "${i}/last_change_date" | sort -n)
|
||||
|
||||
# date calculation
|
||||
LASTLOG=$(find "${i}/logs/" -type f | sort -n | tail -n 1)
|
||||
LASTCONFIG=$(date -r "${i}/last_change_date" "+%s")
|
||||
ELAPSED_SINCE_LATE="new config $(elapsed_time $(( $(date +%s) - "$LASTCONFIG")))"
|
||||
EXPECTED_CONFIG="$(awk -F '=' -v host="${i}" 'host == $1 { print $2 }' states.txt | cut -b 1-8)"
|
||||
|
||||
if [ -z "${EXPECTED_CONFIG}" ]; then EXPECTED_CONFIG="non-flakes" ; fi
|
||||
|
||||
# skip if no logs (for new hosts)
|
||||
if [ -z "${LASTLOG}" ]
|
||||
then
|
||||
display_table "$PRETTY_OUT_COLUMN" "$i" "${EXPECTED_CONFIG}" "" "new machine " "($ELAPSED_SINCE_LATE) "
|
||||
continue
|
||||
fi
|
||||
|
||||
LASTLOGVERSION="$(echo "$LASTLOG" | awk -F '_' '{ print $2 }' | awk -F '-' '{ print $1 }' )"
|
||||
#NIXPKGS_DATE="$(echo "$LASTLOG" | awk -F '_' '{ print $2 }' | awk -F '-' '{ printf("%s", $NF) }' )"
|
||||
LASTTIME=$(date -r "$LASTLOG" "+%s")
|
||||
ELAPSED_SINCE_UPDATE="build $(elapsed_time $(( $(date +%s) - "$LASTTIME" )))"
|
||||
|
||||
|
||||
if grep "^${i}=${LASTLOGVERSION}" states.txt >/dev/null
|
||||
then
|
||||
MATCH="💚"
|
||||
MATCH_IF=1
|
||||
else
|
||||
# we don't know the state of a non-flake
|
||||
if [ "${EXPECTED_CONFIG}" = "non-flakes" ]
|
||||
then
|
||||
MATCH="📌"
|
||||
else
|
||||
MATCH="🛑"
|
||||
fi
|
||||
MATCH_IF=0
|
||||
fi
|
||||
|
||||
SHORT_VERSION="$(echo "$LASTLOGVERSION" | cut -b 1-8)"
|
||||
|
||||
# Too many logs while there should be only one
|
||||
if [ "$(echo "$RESULT" | awk 'END { print NR }')" -gt 1 ]
|
||||
then
|
||||
display_table "$PRETTY_OUT_COLUMN" "$i" "${EXPECTED_CONFIG}" "${SHORT_VERSION} ${MATCH}" "extra logs 🔥" "($ELAPSED_SINCE_UPDATE) ($ELAPSED_SINCE_LATE)"
|
||||
continue
|
||||
fi
|
||||
|
||||
# no result since we updated configuration files
|
||||
# the client is not up to date
|
||||
if [ -z "$RESULT" ]
|
||||
then
|
||||
if [ "${MATCH_IF}" -eq 0 ]
|
||||
then
|
||||
display_table "$PRETTY_OUT_COLUMN" "$i" "${EXPECTED_CONFIG}" "${SHORT_VERSION} ${MATCH}" "rebuild pending 🚩" "($ELAPSED_SINCE_UPDATE) ($ELAPSED_SINCE_LATE)"
|
||||
else
|
||||
display_table "$PRETTY_OUT_COLUMN" "$i" "${EXPECTED_CONFIG}" "${SHORT_VERSION} ${MATCH}" "sync pending 🚩" "($ELAPSED_SINCE_UPDATE) ($ELAPSED_SINCE_LATE)"
|
||||
fi
|
||||
# if no new log
|
||||
# then it can't be in another further state
|
||||
continue
|
||||
fi
|
||||
|
||||
# check if latest log contains rollback
|
||||
if echo "$LASTLOG" | grep rollback >/dev/null
|
||||
then
|
||||
display_table "$PRETTY_OUT_COLUMN" "$i" "${EXPECTED_CONFIG}" "${SHORT_VERSION} ${MATCH}" " rollbacked ⏪" "($ELAPSED_SINCE_UPDATE)"
|
||||
fi
|
||||
|
||||
# check if latest log contains success
|
||||
if echo "$LASTLOG" | grep success >/dev/null
|
||||
then
|
||||
display_table "$PRETTY_OUT_COLUMN" "$i" "${EXPECTED_CONFIG}" "${SHORT_VERSION} ${MATCH}" " up to date 💚" "($ELAPSED_SINCE_UPDATE)"
|
||||
fi
|
||||
|
||||
# check if latest log contains failure
|
||||
if echo "$LASTLOG" | grep failure >/dev/null
|
||||
then
|
||||
display_table "$PRETTY_OUT_COLUMN" "$i" "${EXPECTED_CONFIG}" "${SHORT_VERSION} ${MATCH}" " failing 🔥" "($ELAPSED_SINCE_UPDATE) ($ELAPSED_SINCE_LATE)"
|
||||
fi
|
||||
|
||||
done
|
||||
exit 0
|
||||
fi
|
||||
|
||||
|
|
Loading…
Reference in New Issue