Add size checking and retry for diagnostics

previous
Dominik Dzienia 9 months ago committed by dominik
parent b26ff0c2a7
commit f7cffdf5cc

@ -428,6 +428,7 @@ aptGetWasUpdated=0
freshInstall=0
cachedMenuDomain=''
lastTimeSpaceInfo=0
diagnosticsSizeOk=0
MIKRUS_APIKEY=''
MIKRUS_HOST=''
@ -1606,8 +1607,8 @@ cleanup_menu() {
update_menu() {
while :; do
local CHOICE=$(whiptail --title "Aktualizuj" --menu "\n" 11 40 4 \
"S)" "Aktualizuj system" \
"N)" "Aktualizuj to narzędzie" \
"S)" "Aktualizuj system" \
"K)" "Aktualizuj kontenery" \
"M)" "Powrót do menu" \
--ok-button="$uni_select" --cancel-button="$uni_back" \
@ -1755,29 +1756,17 @@ get_domain_status() {
fi
}
send_diagnostics() {
LOG_KEY=$(<$LOG_ENCRYPTION_KEY_FILE)
gather_diagnostics() {
yesnodlg "Wysyłać diagnostykę?" \
"$uni_send" "$uni_resign" \
"Czy chcesz zgromadzić i wysłać sobie mailem dane diagnostyczne?" \
"\n$(
pad_multiline \
"\n${uni_bullet}diagnostyka zawiera logi i informacje o serwerze i usługach" \
"\n${uni_bullet}wysyłka na e-mail na który zamówiono serwer Mikr.us" \
"\n${uni_bullet}dane będą skompresowane i zaszyfrowane" \
"\n${uni_bullet}maila prześlij dalej do zaufanej osoby wspierającej" \
"\n${uni_bullet_pad}(z którą to wcześniej zaplanowano i uzgodniono!!!)" \
"\n${uni_bullet}hasło przekaż INNĄ DROGĄ (komunikatorem, SMSem, osobiście)" \
"\n\n${uni_bullet_pad}Hasło do logów: $LOG_KEY"
)"
local maxNsLogs=$1
local maxDbLogs=$2
local curr_time=$3
if ! [ $? -eq 1 ]; then
diagnosticsSizeOk=0
ohai "Zbieranie diagnostyki"
local domain=$(get_td_domain)
local curr_time=$(date -u +"%Y-%m-%dT%H:%M:%SZ")
local ns_tag=$(dotenv-tool -r get -f $ENV_FILE_DEP "NS_NIGHTSCOUT_TAG")
local mikrus_h=$(hostname)
@ -1806,7 +1795,6 @@ send_diagnostics() {
echo " Watchdog: $(get_watchdog_status "$(get_watchdog_status_code)" "$uni_watchdog_ok")"
} >>$SUPPORT_LOG
ohai "Zbieranie informacji o zasobach"
local spaceInfo=$(get_space_info)
local remainingTxt=$(echo "$spaceInfo" | awk '{print $3}' | numfmt --to iec-i --suffix=B)
local totalTxt=$(echo "$spaceInfo" | awk '{print $2}' | numfmt --to iec-i --suffix=B)
@ -1846,24 +1834,75 @@ send_diagnostics() {
echo "$LOG_DIVIDER"
echo " Nightscout log"
echo "$LOG_DIVIDER"
timeout -k 15 10 docker logs ns-server --tail 500 >>$SUPPORT_LOG 2>&1
timeout -k 15 10 docker logs ns-server --tail "$maxNsLogs" >>$SUPPORT_LOG 2>&1
echo "$LOG_DIVIDER"
echo " MongoDB database log"
echo "$LOG_DIVIDER"
timeout -k 15 10 docker logs ns-database --tail 100 >>$SUPPORT_LOG 2>&1
timeout -k 15 10 docker logs ns-database --tail "$maxDbLogs" >>$SUPPORT_LOG 2>&1
} >>$SUPPORT_LOG
ohai "Kompresowanie i szyfrowanie raportu"
gzip $SUPPORT_LOG
gzip -9 $SUPPORT_LOG
local logkey=$(<$LOG_ENCRYPTION_KEY_FILE)
gpg --passphrase "$logkey" --batch --quiet --yes -a -c "$SUPPORT_LOG.gz"
}
retry_diagnostics() {
local maxNsLogs=$1
local maxDbLogs=$2
local curr_time=$3
if ((diagnosticsSizeOk == 0)); then
ohai "Sprawdzanie rozmiaru raportu"
local logSize=$(stat --printf="%s" "$SUPPORT_LOG.gz.asc")
local allowedTxt=$(echo "18000" | numfmt --to si --suffix=B)
local currentTxt=$(echo "$logSize" | numfmt --to si --suffix=B)
if ((logSize > 18000)); then
msgerr "Zebrana diagnostyka jest zbyt duża do wysłania (${currentTxt})"
ohai "Spróbuję zebrać mniej danych aby zmieścić się w limicie (${allowedTxt})"
gather_diagnostics "$maxNsLogs" "$maxDbLogs" "$curr_time"
else
diagnosticsSizeOk=1
msgok "Raport ma rozmiar ${currentTxt} i mieści się w limicie ${allowedTxt} dla usługi pusher-a"
fi
fi
}
send_diagnostics() {
LOG_KEY=$(<$LOG_ENCRYPTION_KEY_FILE)
yesnodlg "Wysyłać diagnostykę?" \
"$uni_send" "$uni_resign" \
"Czy chcesz zgromadzić i wysłać sobie mailem dane diagnostyczne?" \
"\n$(
pad_multiline \
"\n${uni_bullet}diagnostyka zawiera logi i informacje o serwerze i usługach" \
"\n${uni_bullet}wysyłka na e-mail na który zamówiono serwer Mikr.us" \
"\n${uni_bullet}dane będą skompresowane i zaszyfrowane" \
"\n${uni_bullet}maila prześlij dalej do zaufanej osoby wspierającej" \
"\n${uni_bullet_pad}(z którą to wcześniej zaplanowano i uzgodniono!!!)" \
"\n${uni_bullet}hasło przekaż INNĄ DROGĄ (komunikatorem, SMSem, osobiście)" \
"\n\n${uni_bullet_pad}Hasło do logów: $LOG_KEY"
)"
if ! [ $? -eq 1 ]; then
local curr_time=$(date -u +"%Y-%m-%dT%H:%M:%SZ")
gather_diagnostics 500 100 "$curr_time"
retry_diagnostics 200 50 "$curr_time"
retry_diagnostics 100 50 "$curr_time"
retry_diagnostics 50 50 "$curr_time"
ohai "Wysyłanie maila"
{
local sentStatus=$({
echo "Ta wiadomość zawiera poufne dane diagnostyczne Twojego serwera Nightscout."
echo "Mogą one pomóc Tobie lub zaufanej osobie w identyfikacji problemu."
echo " "
@ -1877,12 +1916,21 @@ send_diagnostics() {
echo " "
echo " "
cat "$SUPPORT_LOG.gz.asc"
} | pusher "Diagnostyka_serwera_Nightscout_-_$curr_time"
} | pusher "Diagnostyka_serwera_Nightscout_-_$curr_time")
local regexEm='Email sent'
if [[ "$sentStatus" =~ $regexEm ]]; then
okdlg "Diagnostyka wysłana" \
"Sprawdź swoją skrzynkę pocztową,\n" \
"otrzymanego maila przekaż zaufanemu wspierającemu.\n\n" \
"Komunikatorem lub SMS przekaż hasło do logów:\n\n$LOG_KEY"
else
msgerr "Błąd podczas wysyłki maila: $sentStatus"
okdlg "Błąd wysyłki maila" \
"Nieststy nie udało się wysłać diagnostyki" \
"${NL}zgłoś poniższy błąd twórcom narzędzia (na grupie Technologie Diabetyka)" \
"${TL}$sentStatus"
fi
fi
}

@ -412,6 +412,7 @@ aptGetWasUpdated=0
freshInstall=0
cachedMenuDomain=''
lastTimeSpaceInfo=0
diagnosticsSizeOk=0
MIKRUS_APIKEY=''
MIKRUS_HOST=''
@ -1590,8 +1591,8 @@ cleanup_menu() {
update_menu() {
while :; do
local CHOICE=$(whiptail --title "Aktualizuj" --menu "\n" 11 40 4 \
"S)" "Aktualizuj system" \
"N)" "Aktualizuj to narzędzie" \
"S)" "Aktualizuj system" \
"K)" "Aktualizuj kontenery" \
"M)" "Powrót do menu" \
--ok-button="$uni_select" --cancel-button="$uni_back" \
@ -1739,29 +1740,17 @@ get_domain_status() {
fi
}
send_diagnostics() {
LOG_KEY=$(<$LOG_ENCRYPTION_KEY_FILE)
gather_diagnostics() {
yesnodlg "Wysyłać diagnostykę?" \
"$uni_send" "$uni_resign" \
"Czy chcesz zgromadzić i wysłać sobie mailem dane diagnostyczne?" \
"\n$(
pad_multiline \
"\n${uni_bullet}diagnostyka zawiera logi i informacje o serwerze i usługach" \
"\n${uni_bullet}wysyłka na e-mail na który zamówiono serwer Mikr.us" \
"\n${uni_bullet}dane będą skompresowane i zaszyfrowane" \
"\n${uni_bullet}maila prześlij dalej do zaufanej osoby wspierającej" \
"\n${uni_bullet_pad}(z którą to wcześniej zaplanowano i uzgodniono!!!)" \
"\n${uni_bullet}hasło przekaż INNĄ DROGĄ (komunikatorem, SMSem, osobiście)" \
"\n\n${uni_bullet_pad}Hasło do logów: $LOG_KEY"
)"
local maxNsLogs=$1
local maxDbLogs=$2
local curr_time=$3
if ! [ $? -eq 1 ]; then
diagnosticsSizeOk=0
ohai "Zbieranie diagnostyki"
local domain=$(get_td_domain)
local curr_time=$(date -u +"%Y-%m-%dT%H:%M:%SZ")
local ns_tag=$(dotenv-tool -r get -f $ENV_FILE_DEP "NS_NIGHTSCOUT_TAG")
local mikrus_h=$(hostname)
@ -1790,7 +1779,6 @@ send_diagnostics() {
echo " Watchdog: $(get_watchdog_status "$(get_watchdog_status_code)" "$uni_watchdog_ok")"
} >>$SUPPORT_LOG
ohai "Zbieranie informacji o zasobach"
local spaceInfo=$(get_space_info)
local remainingTxt=$(echo "$spaceInfo" | awk '{print $3}' | numfmt --to iec-i --suffix=B)
local totalTxt=$(echo "$spaceInfo" | awk '{print $2}' | numfmt --to iec-i --suffix=B)
@ -1830,24 +1818,75 @@ send_diagnostics() {
echo "$LOG_DIVIDER"
echo " Nightscout log"
echo "$LOG_DIVIDER"
timeout -k 15 10 docker logs ns-server --tail 500 >>$SUPPORT_LOG 2>&1
timeout -k 15 10 docker logs ns-server --tail "$maxNsLogs" >>$SUPPORT_LOG 2>&1
echo "$LOG_DIVIDER"
echo " MongoDB database log"
echo "$LOG_DIVIDER"
timeout -k 15 10 docker logs ns-database --tail 100 >>$SUPPORT_LOG 2>&1
timeout -k 15 10 docker logs ns-database --tail "$maxDbLogs" >>$SUPPORT_LOG 2>&1
} >>$SUPPORT_LOG
ohai "Kompresowanie i szyfrowanie raportu"
gzip $SUPPORT_LOG
gzip -9 $SUPPORT_LOG
local logkey=$(<$LOG_ENCRYPTION_KEY_FILE)
gpg --passphrase "$logkey" --batch --quiet --yes -a -c "$SUPPORT_LOG.gz"
}
retry_diagnostics() {
local maxNsLogs=$1
local maxDbLogs=$2
local curr_time=$3
if ((diagnosticsSizeOk == 0)); then
ohai "Sprawdzanie rozmiaru raportu"
local logSize=$(stat --printf="%s" "$SUPPORT_LOG.gz.asc")
local allowedTxt=$(echo "18000" | numfmt --to si --suffix=B)
local currentTxt=$(echo "$logSize" | numfmt --to si --suffix=B)
if ((logSize > 18000)); then
msgerr "Zebrana diagnostyka jest zbyt duża do wysłania (${currentTxt})"
ohai "Spróbuję zebrać mniej danych aby zmieścić się w limicie (${allowedTxt})"
gather_diagnostics "$maxNsLogs" "$maxDbLogs" "$curr_time"
else
diagnosticsSizeOk=1
msgok "Raport ma rozmiar ${currentTxt} i mieści się w limicie ${allowedTxt} dla usługi pusher-a"
fi
fi
}
send_diagnostics() {
LOG_KEY=$(<$LOG_ENCRYPTION_KEY_FILE)
yesnodlg "Wysyłać diagnostykę?" \
"$uni_send" "$uni_resign" \
"Czy chcesz zgromadzić i wysłać sobie mailem dane diagnostyczne?" \
"\n$(
pad_multiline \
"\n${uni_bullet}diagnostyka zawiera logi i informacje o serwerze i usługach" \
"\n${uni_bullet}wysyłka na e-mail na który zamówiono serwer Mikr.us" \
"\n${uni_bullet}dane będą skompresowane i zaszyfrowane" \
"\n${uni_bullet}maila prześlij dalej do zaufanej osoby wspierającej" \
"\n${uni_bullet_pad}(z którą to wcześniej zaplanowano i uzgodniono!!!)" \
"\n${uni_bullet}hasło przekaż INNĄ DROGĄ (komunikatorem, SMSem, osobiście)" \
"\n\n${uni_bullet_pad}Hasło do logów: $LOG_KEY"
)"
if ! [ $? -eq 1 ]; then
local curr_time=$(date -u +"%Y-%m-%dT%H:%M:%SZ")
gather_diagnostics 500 100 "$curr_time"
retry_diagnostics 200 50 "$curr_time"
retry_diagnostics 100 50 "$curr_time"
retry_diagnostics 50 50 "$curr_time"
ohai "Wysyłanie maila"
{
local sentStatus=$({
echo "Ta wiadomość zawiera poufne dane diagnostyczne Twojego serwera Nightscout."
echo "Mogą one pomóc Tobie lub zaufanej osobie w identyfikacji problemu."
echo " "
@ -1861,12 +1900,21 @@ send_diagnostics() {
echo " "
echo " "
cat "$SUPPORT_LOG.gz.asc"
} | pusher "Diagnostyka_serwera_Nightscout_-_$curr_time"
} | pusher "Diagnostyka_serwera_Nightscout_-_$curr_time")
local regexEm='Email sent'
if [[ "$sentStatus" =~ $regexEm ]]; then
okdlg "Diagnostyka wysłana" \
"Sprawdź swoją skrzynkę pocztową,\n" \
"otrzymanego maila przekaż zaufanemu wspierającemu.\n\n" \
"Komunikatorem lub SMS przekaż hasło do logów:\n\n$LOG_KEY"
else
msgerr "Błąd podczas wysyłki maila: $sentStatus"
okdlg "Błąd wysyłki maila" \
"Nieststy nie udało się wysłać diagnostyki" \
"${NL}zgłoś poniższy błąd twórcom narzędzia (na grupie Technologie Diabetyka)" \
"${TL}$sentStatus"
fi
fi
}

@ -1 +1 @@
2024-10-06T07:12:57.316Z
2024-10-06T08:06:29.319Z
Loading…
Cancel
Save