Improved watchdog statuses

pull/3/head
Dominik Dzienia 1 year ago
parent c691d05f5b
commit 261d23c50c

@ -5,8 +5,6 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [Unreleased]
## [1.8.0] - 2024-01-06 ## [1.8.0] - 2024-01-06
### Added ### Added
@ -18,7 +16,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
### Changed ### Changed
- Main menu status show overal calculated status instead of Nightscout container - Main menu status show live calculated status instead of Nightscout container status
### Fixed ### Fixed

@ -42,7 +42,7 @@ TOOL_LINK=/usr/bin/nightscout-tool
UPDATES_DIR=/srv/nightscout/updates UPDATES_DIR=/srv/nightscout/updates
UPDATE_CHANNEL=master UPDATE_CHANNEL=master
SCRIPT_VERSION="1.8.0" #auto-update SCRIPT_VERSION="1.8.0" #auto-update
SCRIPT_BUILD_TIME="2024.01.06" #auto-update SCRIPT_BUILD_TIME="2024.01.07" #auto-update
#======================================= #=======================================
# SETUP # SETUP
@ -132,8 +132,10 @@ tty_reset="$(tty_escape 0)"
emoji_check="\U2705" emoji_check="\U2705"
emoji_ok="\U1F197" emoji_ok="\U1F197"
emoji_err="\U274C" emoji_err="\U274C"
emoji_note="\U1F4A1"
uni_bullet=" $(printf '\u2022') " uni_bullet=" $(printf '\u2022') "
uni_copyright="$(printf '\uA9\uFE0F')"
uni_bullet_pad=" " uni_bullet_pad=" "
uni_exit=" $(printf '\U274C') Wyjdź " uni_exit=" $(printf '\U274C') Wyjdź "
@ -152,6 +154,9 @@ uni_confirm_ed=" $(printf '\U1F4DD') Edytuj "
uni_install=" $(printf '\U1F680') Instaluj " uni_install=" $(printf '\U1F680') Instaluj "
uni_resign=" $(printf '\U1F6AB') Rezygnuję " uni_resign=" $(printf '\U1F6AB') Rezygnuję "
uni_ns_ok="$(printf '\U1F7E2') działa"
uni_watchdog_ok="$(printf '\U1F415') Nightscout działa"
#======================================= #=======================================
# UTILS # UTILS
#======================================= #=======================================
@ -179,6 +184,11 @@ msgok() {
printf "$emoji_ok $1\n" printf "$emoji_ok $1\n"
} }
msgnote() {
# shellcheck disable=SC2059
printf "$emoji_note $1\n"
}
msgcheck() { msgcheck() {
# shellcheck disable=SC2059 # shellcheck disable=SC2059
printf "$emoji_check $1\n" printf "$emoji_check $1\n"
@ -545,15 +555,18 @@ setup_firewall_for_ns() {
} }
install_cron() { install_cron() {
local croncmd="$TOOL_LINK -w > $WATCHDOG_CRON_LOG 2>&1" local croncmd="$TOOL_LINK -w > $WATCHDOG_CRON_LOG 2>&1"
local cronjob="*/5 * * * * $croncmd" local cronjob="*/5 * * * * $croncmd"
msgok "Configuring watchdog..." msgok "Configuring watchdog..."
( crontab -l | grep -v -F "$croncmd" || : ; echo "$cronjob" ) | crontab - (
crontab -l | grep -v -F "$croncmd" || :
echo "$cronjob"
) | crontab -
} }
uninstall_cron() { uninstall_cron() {
local croncmd="nightscout-tool" local croncmd="nightscout-tool"
( crontab -l | grep -v -F "$croncmd" ) | crontab - (crontab -l | grep -v -F "$croncmd") | crontab -
} }
get_docker_status() { get_docker_status() {
@ -758,7 +771,7 @@ update_if_needed() {
about_dialog() { about_dialog() {
okdlg "O tym narzędziu..." \ okdlg "O tym narzędziu..." \
"$(printf '\U1F9D1') (c) 2023 Dominik Dzienia\n$(printf '\U1F4E7') dominik.dzienia@gmail.com\n\n$(printf '\U1F3DB') To narzędzie jest dystrybuowane na licencji CC BY-NC-ND 4.0\nhttps://creativecommons.org/licenses/by-nc-nd/4.0/deed.pl\n\nwersja: $SCRIPT_VERSION ($SCRIPT_BUILD_TIME)" "$(printf '\U1F9D1') (c) 2023 Dominik Dzienia\n$(printf '\U1F4E7') dominik.dzienia@gmail.com\n\n$(printf '\U1F3DB') To narzędzie jest dystrybuowane na licencji CC BY-NC-ND 4.0\nhttps://creativecommons.org/licenses/by-nc-nd/4.0/deed.pl\n\nwersja: $SCRIPT_VERSION ($SCRIPT_BUILD_TIME) $UPDATE_CHANNEL"
} }
prompt_welcome() { prompt_welcome() {
@ -1015,6 +1028,151 @@ admin_panel_promo() {
whiptail --title "Panel zarządzania Mikr.us-em" --msgbox "$(center_multiline "Ta instalacja Nightscout dodaje dodatkowy panel administracyjny\ndo zarządzania serwerem i konfiguracją - online.\n\nZnajdziesz go klikając na ikonkę serwera w menu strony Nightscout\nlub dodając /mikrus na końcu swojego adresu Nightscout" 70)" 12 75 whiptail --title "Panel zarządzania Mikr.us-em" --msgbox "$(center_multiline "Ta instalacja Nightscout dodaje dodatkowy panel administracyjny\ndo zarządzania serwerem i konfiguracją - online.\n\nZnajdziesz go klikając na ikonkę serwera w menu strony Nightscout\nlub dodając /mikrus na końcu swojego adresu Nightscout" 70)" 12 75
} }
get_watchdog_age_string() {
local curr_time=$(date -u +"%Y-%m-%dT%H:%M:%SZ")
local last_time=$(date -u +"%Y-%m-%dT%H:%M:%SZ")
if [[ -f $WATCHDOG_TIME_FILE ]]; then
last_time=$(cat $WATCHDOG_TIME_FILE)
local status_ago=$(dateutils.ddiff "$last_time" "$curr_time" -f '%Mmin. %Ssek.')
echo "$last_time ($status_ago temu)"
else
echo "jescze nie uruchomiony"
fi
}
get_watchdog_status_code() {
local curr_time=$(date -u +"%Y-%m-%dT%H:%M:%SZ")
local last_time=$(date -u +"%Y-%m-%dT%H:%M:%SZ")
local status="unknown"
if [[ -f $WATCHDOG_TIME_FILE ]]; then
last_time=$(cat $WATCHDOG_TIME_FILE)
fi
if [[ -f $WATCHDOG_STATUS_FILE ]]; then
status=$(cat $WATCHDOG_STATUS_FILE)
fi
local status_ago=$(dateutils.ddiff "$curr_time" "$last_time" -f '%S')
if [ "$status_ago" -gt 900 ]; then
status="unknown"
fi
echo "$status"
}
get_watchdog_status_code_live() {
local curr_time=$(date -u +"%Y-%m-%dT%H:%M:%SZ")
local last_time=$(date -u +"%Y-%m-%dT%H:%M:%SZ")
local status="unknown"
if [[ -f $WATCHDOG_TIME_FILE ]]; then
last_time=$(cat $WATCHDOG_TIME_FILE)
fi
if [[ -f $WATCHDOG_STATUS_FILE ]]; then
status=$(cat $WATCHDOG_STATUS_FILE)
fi
local status_ago=$(dateutils.ddiff "$curr_time" "$last_time" -f '%S')
if [ "$status_ago" -gt 900 ]; then
status="unknown"
fi
local NS_STATUS=$(get_container_status_code 'ns-server')
local DB_STATUS=$(get_container_status_code 'ns-database')
local COMBINED_STATUS="$NS_STATUS $DB_STATUS"
if [ "$COMBINED_STATUS" = "running running" ]; then
local domain=$(get_td_domain)
local html=$(curl -Lks "$domain")
if [[ "$html" =~ github.com/nightscout/cgm-remote-monitor ]]; then
status="ok"
fi
if [[ "$html" =~ 'MongoDB connection failed' ]]; then
status="crashed"
fi
regex3='MIKR.US - coś poszło nie tak'
if [[ "$html" =~ $regex3 ]]; then
status="restarting"
fi
else
if [ "$NS_STATUS" = "restarting" ] || [ "$DB_STATUS" = "restarting" ]; then
status="restarting"
else
status="not_running"
fi
fi
echo "$status"
}
get_watchdog_status() {
local status="$1"
case "$status" in
"ok")
echo "$2"
;;
"restart")
printf "\U1F680 wymuszono restart NS"
;;
"restarting")
printf "\U23F3 uruchamia się"
;;
"unknown")
printf "\U1F4A4 brak statusu"
;;
"not_running")
printf "\U1F534 serwer nie działa"
;;
"detection_failed")
printf "\U2753 nieznany stan"
;;
"crashed")
printf "\U1F4A5 awaria NS"
;;
esac
}
show_watchdog_logs() {
local col=$((COLUMNS - 10))
local rws=$((LINES - 3))
if [ $col -gt 120 ]; then
col=160
fi
if [ $col -lt 60 ]; then
col=60
fi
if [ $rws -lt 12 ]; then
rws=12
fi
local tmpfile=$(mktemp)
{
echo "Ostatnie uruchomienie watchdoga:"
get_watchdog_age_string
echo "-------------------------------------------------------"
echo "Statusy ostatnich przebiegów watchdoga:"
tail -5 "$WATCHDOG_LOG_FILE"
echo "-------------------------------------------------------"
echo "Log ostatniego przebiegu watchdoga:"
cat "$WATCHDOG_CRON_LOG"
} >"$tmpfile"
whiptail --title "Logi Watchdoga" --scrolltext --textbox "$tmpfile" $rws $col
rm "$tmpfile"
}
get_container_status() { get_container_status() {
local ID=$(docker ps -a --no-trunc --filter name="^$1$" --format '{{ .ID }}') local ID=$(docker ps -a --no-trunc --filter name="^$1$" --format '{{ .ID }}')
if [[ "$ID" =~ [0-9a-fA-F]{12,} ]]; then if [[ "$ID" =~ [0-9a-fA-F]{12,} ]]; then
@ -1079,10 +1237,11 @@ show_logs() {
status_menu() { status_menu() {
while :; do while :; do
local CHOICE=$(whiptail --title "Status kontenerów" --menu "\nWybierz pozycję aby zobaczyć logi:\n" 15 60 5 \ local CHOICE=$(whiptail --title "Status kontenerów" --menu "\n Aktualizacja: kontenery na żywo, watchdog co 5 minut\n\n Wybierz pozycję aby zobaczyć logi:\n" 17 60 5 \
"1)" " Nightscout: $(get_container_status 'ns-server')" \ "1)" " Nightscout: $(get_container_status 'ns-server')" \
"2)" " Baza danych: $(get_container_status 'ns-database')" \ "2)" " Baza danych: $(get_container_status 'ns-database')" \
"3)" " Backup: $(get_container_status 'ns-backup')" \ "3)" " Backup: $(get_container_status 'ns-backup')" \
"4)" " Watchdog: $(get_watchdog_status "$(get_watchdog_status_code)" "$uni_watchdog_ok")" \
"M)" "Powrót do menu" \ "M)" "Powrót do menu" \
--ok-button="Zobacz logi" --cancel-button="$uni_back" \ --ok-button="Zobacz logi" --cancel-button="$uni_back" \
3>&2 2>&1 1>&3) 3>&2 2>&1 1>&3)
@ -1097,6 +1256,9 @@ status_menu() {
"3)") "3)")
show_logs 'ns-backup' 'usługi kopii zapasowych' show_logs 'ns-backup' 'usługi kopii zapasowych'
;; ;;
"4)")
show_watchdog_logs
;;
"M)") "M)")
break break
;; ;;
@ -1240,7 +1402,7 @@ uninstall_menu() {
if ! [ $? -eq 1 ]; then if ! [ $? -eq 1 ]; then
docker_compose_down docker_compose_down
dialog --title " Odinstalowanie" --infobox "\n Usuwanie plików\n ... Proszę czekać ..." 6 32 dialog --title " Odinstalowanie" --infobox "\n Usuwanie plików\n ... Proszę czekać ..." 6 32
uninstall_cron uninstall_cron
rm -r "${MONGO_DB_DIR:?}/data" rm -r "${MONGO_DB_DIR:?}/data"
rm -r "${CONFIG_ROOT_DIR:?}" rm -r "${CONFIG_ROOT_DIR:?}"
rm "$TOOL_LINK" rm "$TOOL_LINK"
@ -1279,7 +1441,7 @@ get_domain_status() {
main_menu() { main_menu() {
while :; do while :; do
local ns_tag=$(dotenv-tool -r get -f $ENV_FILE_DEP "NS_NIGHTSCOUT_TAG") local ns_tag=$(dotenv-tool -r get -f $ENV_FILE_DEP "NS_NIGHTSCOUT_TAG")
local quickStatus=$(center_text "Nightscout: $(get_container_status 'ns-server')" 55) local quickStatus=$(center_text "Strona Nightscout: $(get_watchdog_status "$(get_watchdog_status_code_live)" "$uni_ns_ok")" 55)
local quickVersion=$(center_text "Wersja: $ns_tag" 55) local quickVersion=$(center_text "Wersja: $ns_tag" 55)
local quickDomain=$(center_text "Domena: $(get_domain_status 'ns-server')" 55) local quickDomain=$(center_text "Domena: $(get_domain_status 'ns-server')" 55)
local CHOICE=$(whiptail --title "Zarządzanie Nightscoutem :: $SCRIPT_VERSION" --menu "\n$quickStatus\n$quickVersion\n$quickDomain\n" 20 60 9 \ local CHOICE=$(whiptail --title "Zarządzanie Nightscoutem :: $SCRIPT_VERSION" --menu "\n$quickStatus\n$quickVersion\n$quickDomain\n" 20 60 9 \
@ -1408,8 +1570,8 @@ watchdog_check() {
if [ "$COMBINED_STATUS" = "running running" ]; then if [ "$COMBINED_STATUS" = "running running" ]; then
echo "Will check page contents" echo "Will check page contents"
local ns_external_port=$(dotenv-tool -r get -f $ENV_FILE_DEP "NS_PORT") local domain=$(get_td_domain)
local html=$(curl -s "127.0.0.1:$ns_external_port") local html=$(curl -Lks "$domain")
WATCHDOG_STATUS="detection_failed" WATCHDOG_STATUS="detection_failed"
@ -1421,13 +1583,13 @@ watchdog_check() {
if [[ "$html" =~ 'MongoDB connection failed' ]]; then if [[ "$html" =~ 'MongoDB connection failed' ]]; then
echo "Nightscout is crashed, restarting..." echo "Nightscout is crashed, restarting..."
WATCHDOG_STATUS="restart" WATCHDOG_STATUS="restart"
if [ "$WATCHDOG_LAST_STATUS" != "restart" ]; then if [ "$WATCHDOG_LAST_STATUS" != "restart" ]; then
docker restart 'ns-server' docker restart 'ns-server'
echo "...done" echo "...done"
fi fi
fi fi
regex3='MIKR.US - coś poszło nie tak' regex3='MIKR.US - coś poszło nie tak'
if [[ "$html" =~ $regex3 ]]; then if [[ "$html" =~ $regex3 ]]; then
echo "Nightscout is still restarting..." echo "Nightscout is still restarting..."
WATCHDOG_STATUS="restarting" WATCHDOG_STATUS="restarting"
@ -1461,13 +1623,19 @@ watchdog_check() {
load_update_channel() { load_update_channel() {
if [[ -f $UPDATE_CHANNEL_FILE ]]; then if [[ -f $UPDATE_CHANNEL_FILE ]]; then
UPDATE_CHANNEL=$(cat $UPDATE_CHANNEL_FILE) UPDATE_CHANNEL=$(cat $UPDATE_CHANNEL_FILE)
msgok "Loaded update channel: $UPDATE_CHANNEL" msgok "Loaded update channel: $UPDATE_CHANNEL"
fi fi
} }
startup_version() {
msgnote "nightscout-tool version $SCRIPT_VERSION ($SCRIPT_BUILD_TIME)"
msgnote "$uni_copyright 2023-2024 Dominik Dzienia"
msgnote "Licensed under CC BY-NC-ND 4.0"
}
parse_commandline_args() { parse_commandline_args() {
load_update_channel load_update_channel
CMDARGS=$(getopt --quiet -o wvdp --long watchdog,version,develop,production -n 'nightscout-tool' -- "$@") CMDARGS=$(getopt --quiet -o wvdp --long watchdog,version,develop,production -n 'nightscout-tool' -- "$@")
@ -1492,16 +1660,16 @@ parse_commandline_args() {
exit 0 exit 0
;; ;;
-d | --develop) -d | --develop)
warn "Switching to DEVELOP update channel" warn "Switching to DEVELOP update channel"
UPDATE_CHANNEL=develop UPDATE_CHANNEL=develop
echo "$UPDATE_CHANNEL" > $UPDATE_CHANNEL_FILE echo "$UPDATE_CHANNEL" >$UPDATE_CHANNEL_FILE
shift shift
;; ;;
-p | --production) -p | --production)
warn "Switching to PRODUCTION update channel" warn "Switching to PRODUCTION update channel"
UPDATE_CHANNEL=master UPDATE_CHANNEL=master
echo "$UPDATE_CHANNEL" > $UPDATE_CHANNEL_FILE echo "$UPDATE_CHANNEL" >$UPDATE_CHANNEL_FILE
shift shift
;; ;;
--) --)
shift shift
@ -1522,6 +1690,7 @@ parse_commandline_args() {
# MAIN SCRIPT # MAIN SCRIPT
#======================================= #=======================================
startup_version
parse_commandline_args "$@" parse_commandline_args "$@"
# check_interactive # check_interactive
check_git check_git

@ -26,7 +26,7 @@ TOOL_LINK=/usr/bin/nightscout-tool
UPDATES_DIR=/srv/nightscout/updates UPDATES_DIR=/srv/nightscout/updates
UPDATE_CHANNEL=master UPDATE_CHANNEL=master
SCRIPT_VERSION="1.8.0" #auto-update SCRIPT_VERSION="1.8.0" #auto-update
SCRIPT_BUILD_TIME="2024.01.06" #auto-update SCRIPT_BUILD_TIME="2024.01.07" #auto-update
#======================================= #=======================================
# SETUP # SETUP
@ -116,8 +116,10 @@ tty_reset="$(tty_escape 0)"
emoji_check="\U2705" emoji_check="\U2705"
emoji_ok="\U1F197" emoji_ok="\U1F197"
emoji_err="\U274C" emoji_err="\U274C"
emoji_note="\U1F4A1"
uni_bullet=" $(printf '\u2022') " uni_bullet=" $(printf '\u2022') "
uni_copyright="$(printf '\uA9\uFE0F')"
uni_bullet_pad=" " uni_bullet_pad=" "
uni_exit=" $(printf '\U274C') Wyjdź " uni_exit=" $(printf '\U274C') Wyjdź "
@ -136,6 +138,9 @@ uni_confirm_ed=" $(printf '\U1F4DD') Edytuj "
uni_install=" $(printf '\U1F680') Instaluj " uni_install=" $(printf '\U1F680') Instaluj "
uni_resign=" $(printf '\U1F6AB') Rezygnuję " uni_resign=" $(printf '\U1F6AB') Rezygnuję "
uni_ns_ok="$(printf '\U1F7E2') działa"
uni_watchdog_ok="$(printf '\U1F415') Nightscout działa"
#======================================= #=======================================
# UTILS # UTILS
#======================================= #=======================================
@ -163,6 +168,11 @@ msgok() {
printf "$emoji_ok $1\n" printf "$emoji_ok $1\n"
} }
msgnote() {
# shellcheck disable=SC2059
printf "$emoji_note $1\n"
}
msgcheck() { msgcheck() {
# shellcheck disable=SC2059 # shellcheck disable=SC2059
printf "$emoji_check $1\n" printf "$emoji_check $1\n"
@ -529,15 +539,18 @@ setup_firewall_for_ns() {
} }
install_cron() { install_cron() {
local croncmd="$TOOL_LINK -w > $WATCHDOG_CRON_LOG 2>&1" local croncmd="$TOOL_LINK -w > $WATCHDOG_CRON_LOG 2>&1"
local cronjob="*/5 * * * * $croncmd" local cronjob="*/5 * * * * $croncmd"
msgok "Configuring watchdog..." msgok "Configuring watchdog..."
( crontab -l | grep -v -F "$croncmd" || : ; echo "$cronjob" ) | crontab - (
crontab -l | grep -v -F "$croncmd" || :
echo "$cronjob"
) | crontab -
} }
uninstall_cron() { uninstall_cron() {
local croncmd="nightscout-tool" local croncmd="nightscout-tool"
( crontab -l | grep -v -F "$croncmd" ) | crontab - (crontab -l | grep -v -F "$croncmd") | crontab -
} }
get_docker_status() { get_docker_status() {
@ -742,7 +755,7 @@ update_if_needed() {
about_dialog() { about_dialog() {
okdlg "O tym narzędziu..." \ okdlg "O tym narzędziu..." \
"$(printf '\U1F9D1') (c) 2023 Dominik Dzienia\n$(printf '\U1F4E7') dominik.dzienia@gmail.com\n\n$(printf '\U1F3DB') To narzędzie jest dystrybuowane na licencji CC BY-NC-ND 4.0\nhttps://creativecommons.org/licenses/by-nc-nd/4.0/deed.pl\n\nwersja: $SCRIPT_VERSION ($SCRIPT_BUILD_TIME)" "$(printf '\U1F9D1') (c) 2023 Dominik Dzienia\n$(printf '\U1F4E7') dominik.dzienia@gmail.com\n\n$(printf '\U1F3DB') To narzędzie jest dystrybuowane na licencji CC BY-NC-ND 4.0\nhttps://creativecommons.org/licenses/by-nc-nd/4.0/deed.pl\n\nwersja: $SCRIPT_VERSION ($SCRIPT_BUILD_TIME) $UPDATE_CHANNEL"
} }
prompt_welcome() { prompt_welcome() {
@ -999,6 +1012,151 @@ admin_panel_promo() {
whiptail --title "Panel zarządzania Mikr.us-em" --msgbox "$(center_multiline "Ta instalacja Nightscout dodaje dodatkowy panel administracyjny\ndo zarządzania serwerem i konfiguracją - online.\n\nZnajdziesz go klikając na ikonkę serwera w menu strony Nightscout\nlub dodając /mikrus na końcu swojego adresu Nightscout" 70)" 12 75 whiptail --title "Panel zarządzania Mikr.us-em" --msgbox "$(center_multiline "Ta instalacja Nightscout dodaje dodatkowy panel administracyjny\ndo zarządzania serwerem i konfiguracją - online.\n\nZnajdziesz go klikając na ikonkę serwera w menu strony Nightscout\nlub dodając /mikrus na końcu swojego adresu Nightscout" 70)" 12 75
} }
get_watchdog_age_string() {
local curr_time=$(date -u +"%Y-%m-%dT%H:%M:%SZ")
local last_time=$(date -u +"%Y-%m-%dT%H:%M:%SZ")
if [[ -f $WATCHDOG_TIME_FILE ]]; then
last_time=$(cat $WATCHDOG_TIME_FILE)
local status_ago=$(dateutils.ddiff "$last_time" "$curr_time" -f '%Mmin. %Ssek.')
echo "$last_time ($status_ago temu)"
else
echo "jescze nie uruchomiony"
fi
}
get_watchdog_status_code() {
local curr_time=$(date -u +"%Y-%m-%dT%H:%M:%SZ")
local last_time=$(date -u +"%Y-%m-%dT%H:%M:%SZ")
local status="unknown"
if [[ -f $WATCHDOG_TIME_FILE ]]; then
last_time=$(cat $WATCHDOG_TIME_FILE)
fi
if [[ -f $WATCHDOG_STATUS_FILE ]]; then
status=$(cat $WATCHDOG_STATUS_FILE)
fi
local status_ago=$(dateutils.ddiff "$curr_time" "$last_time" -f '%S')
if [ "$status_ago" -gt 900 ]; then
status="unknown"
fi
echo "$status"
}
get_watchdog_status_code_live() {
local curr_time=$(date -u +"%Y-%m-%dT%H:%M:%SZ")
local last_time=$(date -u +"%Y-%m-%dT%H:%M:%SZ")
local status="unknown"
if [[ -f $WATCHDOG_TIME_FILE ]]; then
last_time=$(cat $WATCHDOG_TIME_FILE)
fi
if [[ -f $WATCHDOG_STATUS_FILE ]]; then
status=$(cat $WATCHDOG_STATUS_FILE)
fi
local status_ago=$(dateutils.ddiff "$curr_time" "$last_time" -f '%S')
if [ "$status_ago" -gt 900 ]; then
status="unknown"
fi
local NS_STATUS=$(get_container_status_code 'ns-server')
local DB_STATUS=$(get_container_status_code 'ns-database')
local COMBINED_STATUS="$NS_STATUS $DB_STATUS"
if [ "$COMBINED_STATUS" = "running running" ]; then
local domain=$(get_td_domain)
local html=$(curl -Lks "$domain")
if [[ "$html" =~ github.com/nightscout/cgm-remote-monitor ]]; then
status="ok"
fi
if [[ "$html" =~ 'MongoDB connection failed' ]]; then
status="crashed"
fi
regex3='MIKR.US - coś poszło nie tak'
if [[ "$html" =~ $regex3 ]]; then
status="restarting"
fi
else
if [ "$NS_STATUS" = "restarting" ] || [ "$DB_STATUS" = "restarting" ]; then
status="restarting"
else
status="not_running"
fi
fi
echo "$status"
}
get_watchdog_status() {
local status="$1"
case "$status" in
"ok")
echo "$2"
;;
"restart")
printf "\U1F680 wymuszono restart NS"
;;
"restarting")
printf "\U23F3 uruchamia się"
;;
"unknown")
printf "\U1F4A4 brak statusu"
;;
"not_running")
printf "\U1F534 serwer nie działa"
;;
"detection_failed")
printf "\U2753 nieznany stan"
;;
"crashed")
printf "\U1F4A5 awaria NS"
;;
esac
}
show_watchdog_logs() {
local col=$((COLUMNS - 10))
local rws=$((LINES - 3))
if [ $col -gt 120 ]; then
col=160
fi
if [ $col -lt 60 ]; then
col=60
fi
if [ $rws -lt 12 ]; then
rws=12
fi
local tmpfile=$(mktemp)
{
echo "Ostatnie uruchomienie watchdoga:"
get_watchdog_age_string
echo "-------------------------------------------------------"
echo "Statusy ostatnich przebiegów watchdoga:"
tail -5 "$WATCHDOG_LOG_FILE"
echo "-------------------------------------------------------"
echo "Log ostatniego przebiegu watchdoga:"
cat "$WATCHDOG_CRON_LOG"
} >"$tmpfile"
whiptail --title "Logi Watchdoga" --scrolltext --textbox "$tmpfile" $rws $col
rm "$tmpfile"
}
get_container_status() { get_container_status() {
local ID=$(docker ps -a --no-trunc --filter name="^$1$" --format '{{ .ID }}') local ID=$(docker ps -a --no-trunc --filter name="^$1$" --format '{{ .ID }}')
if [[ "$ID" =~ [0-9a-fA-F]{12,} ]]; then if [[ "$ID" =~ [0-9a-fA-F]{12,} ]]; then
@ -1063,10 +1221,11 @@ show_logs() {
status_menu() { status_menu() {
while :; do while :; do
local CHOICE=$(whiptail --title "Status kontenerów" --menu "\nWybierz pozycję aby zobaczyć logi:\n" 15 60 5 \ local CHOICE=$(whiptail --title "Status kontenerów" --menu "\n Aktualizacja: kontenery na żywo, watchdog co 5 minut\n\n Wybierz pozycję aby zobaczyć logi:\n" 17 60 5 \
"1)" " Nightscout: $(get_container_status 'ns-server')" \ "1)" " Nightscout: $(get_container_status 'ns-server')" \
"2)" " Baza danych: $(get_container_status 'ns-database')" \ "2)" " Baza danych: $(get_container_status 'ns-database')" \
"3)" " Backup: $(get_container_status 'ns-backup')" \ "3)" " Backup: $(get_container_status 'ns-backup')" \
"4)" " Watchdog: $(get_watchdog_status "$(get_watchdog_status_code)" "$uni_watchdog_ok")" \
"M)" "Powrót do menu" \ "M)" "Powrót do menu" \
--ok-button="Zobacz logi" --cancel-button="$uni_back" \ --ok-button="Zobacz logi" --cancel-button="$uni_back" \
3>&2 2>&1 1>&3) 3>&2 2>&1 1>&3)
@ -1081,6 +1240,9 @@ status_menu() {
"3)") "3)")
show_logs 'ns-backup' 'usługi kopii zapasowych' show_logs 'ns-backup' 'usługi kopii zapasowych'
;; ;;
"4)")
show_watchdog_logs
;;
"M)") "M)")
break break
;; ;;
@ -1224,7 +1386,7 @@ uninstall_menu() {
if ! [ $? -eq 1 ]; then if ! [ $? -eq 1 ]; then
docker_compose_down docker_compose_down
dialog --title " Odinstalowanie" --infobox "\n Usuwanie plików\n ... Proszę czekać ..." 6 32 dialog --title " Odinstalowanie" --infobox "\n Usuwanie plików\n ... Proszę czekać ..." 6 32
uninstall_cron uninstall_cron
rm -r "${MONGO_DB_DIR:?}/data" rm -r "${MONGO_DB_DIR:?}/data"
rm -r "${CONFIG_ROOT_DIR:?}" rm -r "${CONFIG_ROOT_DIR:?}"
rm "$TOOL_LINK" rm "$TOOL_LINK"
@ -1263,7 +1425,7 @@ get_domain_status() {
main_menu() { main_menu() {
while :; do while :; do
local ns_tag=$(dotenv-tool -r get -f $ENV_FILE_DEP "NS_NIGHTSCOUT_TAG") local ns_tag=$(dotenv-tool -r get -f $ENV_FILE_DEP "NS_NIGHTSCOUT_TAG")
local quickStatus=$(center_text "Nightscout: $(get_container_status 'ns-server')" 55) local quickStatus=$(center_text "Strona Nightscout: $(get_watchdog_status "$(get_watchdog_status_code_live)" "$uni_ns_ok")" 55)
local quickVersion=$(center_text "Wersja: $ns_tag" 55) local quickVersion=$(center_text "Wersja: $ns_tag" 55)
local quickDomain=$(center_text "Domena: $(get_domain_status 'ns-server')" 55) local quickDomain=$(center_text "Domena: $(get_domain_status 'ns-server')" 55)
local CHOICE=$(whiptail --title "Zarządzanie Nightscoutem :: $SCRIPT_VERSION" --menu "\n$quickStatus\n$quickVersion\n$quickDomain\n" 20 60 9 \ local CHOICE=$(whiptail --title "Zarządzanie Nightscoutem :: $SCRIPT_VERSION" --menu "\n$quickStatus\n$quickVersion\n$quickDomain\n" 20 60 9 \
@ -1392,8 +1554,8 @@ watchdog_check() {
if [ "$COMBINED_STATUS" = "running running" ]; then if [ "$COMBINED_STATUS" = "running running" ]; then
echo "Will check page contents" echo "Will check page contents"
local ns_external_port=$(dotenv-tool -r get -f $ENV_FILE_DEP "NS_PORT") local domain=$(get_td_domain)
local html=$(curl -s "127.0.0.1:$ns_external_port") local html=$(curl -Lks "$domain")
WATCHDOG_STATUS="detection_failed" WATCHDOG_STATUS="detection_failed"
@ -1405,13 +1567,13 @@ watchdog_check() {
if [[ "$html" =~ 'MongoDB connection failed' ]]; then if [[ "$html" =~ 'MongoDB connection failed' ]]; then
echo "Nightscout is crashed, restarting..." echo "Nightscout is crashed, restarting..."
WATCHDOG_STATUS="restart" WATCHDOG_STATUS="restart"
if [ "$WATCHDOG_LAST_STATUS" != "restart" ]; then if [ "$WATCHDOG_LAST_STATUS" != "restart" ]; then
docker restart 'ns-server' docker restart 'ns-server'
echo "...done" echo "...done"
fi fi
fi fi
regex3='MIKR.US - coś poszło nie tak' regex3='MIKR.US - coś poszło nie tak'
if [[ "$html" =~ $regex3 ]]; then if [[ "$html" =~ $regex3 ]]; then
echo "Nightscout is still restarting..." echo "Nightscout is still restarting..."
WATCHDOG_STATUS="restarting" WATCHDOG_STATUS="restarting"
@ -1445,13 +1607,19 @@ watchdog_check() {
load_update_channel() { load_update_channel() {
if [[ -f $UPDATE_CHANNEL_FILE ]]; then if [[ -f $UPDATE_CHANNEL_FILE ]]; then
UPDATE_CHANNEL=$(cat $UPDATE_CHANNEL_FILE) UPDATE_CHANNEL=$(cat $UPDATE_CHANNEL_FILE)
msgok "Loaded update channel: $UPDATE_CHANNEL" msgok "Loaded update channel: $UPDATE_CHANNEL"
fi fi
} }
startup_version() {
msgnote "nightscout-tool version $SCRIPT_VERSION ($SCRIPT_BUILD_TIME)"
msgnote "$uni_copyright 2023-2024 Dominik Dzienia"
msgnote "Licensed under CC BY-NC-ND 4.0"
}
parse_commandline_args() { parse_commandline_args() {
load_update_channel load_update_channel
CMDARGS=$(getopt --quiet -o wvdp --long watchdog,version,develop,production -n 'nightscout-tool' -- "$@") CMDARGS=$(getopt --quiet -o wvdp --long watchdog,version,develop,production -n 'nightscout-tool' -- "$@")
@ -1476,16 +1644,16 @@ parse_commandline_args() {
exit 0 exit 0
;; ;;
-d | --develop) -d | --develop)
warn "Switching to DEVELOP update channel" warn "Switching to DEVELOP update channel"
UPDATE_CHANNEL=develop UPDATE_CHANNEL=develop
echo "$UPDATE_CHANNEL" > $UPDATE_CHANNEL_FILE echo "$UPDATE_CHANNEL" >$UPDATE_CHANNEL_FILE
shift shift
;; ;;
-p | --production) -p | --production)
warn "Switching to PRODUCTION update channel" warn "Switching to PRODUCTION update channel"
UPDATE_CHANNEL=master UPDATE_CHANNEL=master
echo "$UPDATE_CHANNEL" > $UPDATE_CHANNEL_FILE echo "$UPDATE_CHANNEL" >$UPDATE_CHANNEL_FILE
shift shift
;; ;;
--) --)
shift shift

@ -26,6 +26,7 @@ if [[ ! -d "$DIR" ]]; then DIR="$PWD"; fi
# MAIN SCRIPT # MAIN SCRIPT
#======================================= #=======================================
startup_version
parse_commandline_args "$@" parse_commandline_args "$@"
# check_interactive # check_interactive
check_git check_git

@ -1 +1 @@
2024-01-06T21:57:56.813Z 2024-01-07T13:33:40.615Z
Loading…
Cancel
Save