diff --git a/install.sh b/install.sh index 90d4e09..5c97c3b 100644 --- a/install.sh +++ b/install.sh @@ -428,6 +428,7 @@ aptGetWasUpdated=0 freshInstall=0 cachedMenuDomain='' lastTimeSpaceInfo=0 +diagnosticsSizeOk=0 MIKRUS_APIKEY='' MIKRUS_HOST='' @@ -1499,22 +1500,22 @@ do_cleanup_sys() { ohai "Sprzątanie dziennik systemowego..." journalctl --vacuum-size=50M >>$LOGTO 2>&1 ohai "Czyszczenie systemu apt..." - msgnote "Ta operacja może TROCHĘ potrwać (od kilku do kilkudziesięciu minut...)" - apt-get -y autoremove >>$LOGTO 2>&1 && apt-get -y clean >>$LOGTO 2>&1 - msgcheck "Czyszczenie dziennika i apt zakończono" + msgnote "Ta operacja może TROCHĘ potrwać (od kilku do kilkudziesięciu minut...)" + apt-get -y autoremove >>$LOGTO 2>&1 && apt-get -y clean >>$LOGTO 2>&1 + msgcheck "Czyszczenie dziennika i apt zakończono" } do_cleanup_docker() { ohai "Usuwanie nieużywanych obrazów Dockera..." - msgnote "Ta operacja może TROCHĘ potrwać (do kilku minut...)" + msgnote "Ta operacja może TROCHĘ potrwać (do kilku minut...)" docker image prune -af >>$LOGTO 2>&1 - msgcheck "Czyszczenie Dockera zakończono" + msgcheck "Czyszczenie Dockera zakończono" } do_cleanup_db() { ohai "Usuwanie kopii zapasowych bazy danych..." - find /srv/nightscout/data/dbbackup ! -type d -delete - msgcheck "Czyszczenie kopii zapasowych zakończono" + find /srv/nightscout/data/dbbackup ! -type d -delete + msgcheck "Czyszczenie kopii zapasowych zakończono" } cleanup_menu() { @@ -1532,7 +1533,7 @@ cleanup_menu() { local savedB=$((nowB - lastTimeB)) local savedTxt=$(echo "$savedB" | numfmt --to iec-i --suffix=B) - if (( savedB < 1)); then + if ((savedB < 1)); then savedTxt="---" fi @@ -1559,10 +1560,10 @@ cleanup_menu() { noyesdlg "Posprzątać wszystko?" "$uni_confirm_del" "$uni_resign" \ "Czy chcesz posprzątać i usunąć:" \ "$(pad_multiline \ - "${NL}${uni_bullet}nieużywane pliki apt i dziennika" \ - "${NL}${uni_bullet}nieużywane obrazy Dockera" \ - "${NL} ${uni_bullet}kopie zapasowe bazy danych")" \ - "${TL}(ta operacja może potrwać od kilku do kilkudziesięciu minut)" + "${NL}${uni_bullet}nieużywane pliki apt i dziennika" \ + "${NL}${uni_bullet}nieużywane obrazy Dockera" \ + "${NL} ${uni_bullet}kopie zapasowe bazy danych")" \ + "${TL}(ta operacja może potrwać od kilku do kilkudziesięciu minut)" if ! [ $? -eq 1 ]; then do_cleanup_sys do_cleanup_docker @@ -1572,7 +1573,7 @@ cleanup_menu() { "S)") noyesdlg "Posprzątać zasoby systemowe?" "$uni_confirm_del" "$uni_resign" \ "Czy chcesz usunąć nieużywane pakiety apt i poprzątać dziennik systemowy?" \ - "${TL}(ta operacja może potrwać od kilku do kilkudziesięciu minut)" + "${TL}(ta operacja może potrwać od kilku do kilkudziesięciu minut)" if ! [ $? -eq 1 ]; then do_cleanup_sys fi @@ -1580,7 +1581,7 @@ cleanup_menu() { "D)") noyesdlg "Posprzątać obrazy Dockera?" "$uni_confirm_del" "$uni_resign" \ "Czy chcesz usunąć nieużywane obrazy Dockera?" \ - "${TL}(ta operacja może potrwać kilka minut)" + "${TL}(ta operacja może potrwać kilka minut)" if ! [ $? -eq 1 ]; then do_cleanup_docker fi @@ -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,115 +1756,153 @@ 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" + 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) + local domain=$(get_td_domain) + local ns_tag=$(dotenv-tool -r get -f $ENV_FILE_DEP "NS_NIGHTSCOUT_TAG") + local mikrus_h=$(hostname) - local LOG_DIVIDER="=======================================================" + local LOG_DIVIDER="=======================================================" - rm -f $SUPPORT_LOG - rm -f "$SUPPORT_LOG.gz" - rm -f "$SUPPORT_LOG.gz.asc" + rm -f $SUPPORT_LOG + rm -f "$SUPPORT_LOG.gz" + rm -f "$SUPPORT_LOG.gz.asc" - { - echo "Dane diagnostyczne zebrane $curr_time" - echo " serwer : $mikrus_h" - echo " domena : $domain" - echo " wersja NS : $ns_tag" - } >$SUPPORT_LOG + { + echo "Dane diagnostyczne zebrane $curr_time" + echo " serwer : $mikrus_h" + echo " domena : $domain" + echo " wersja NS : $ns_tag" + } >$SUPPORT_LOG + + ohai "Zbieranie statusu usług" - ohai "Zbieranie statusu usług" + { + echo "$LOG_DIVIDER" + echo " Statusy usług" + echo "$LOG_DIVIDER" + echo " Nightscout: $(get_container_status 'ns-server')" + echo " Baza danych: $(get_container_status 'ns-database')" + echo " Backup: $(get_container_status 'ns-backup')" + echo " Watchdog: $(get_watchdog_status "$(get_watchdog_status_code)" "$uni_watchdog_ok")" + } >>$SUPPORT_LOG + + 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) + local percTxt=$(echo "$spaceInfo" | awk '{print $4}') + + { + echo "$LOG_DIVIDER" + echo " Miejsce na dysku" + echo "$LOG_DIVIDER" + echo " Dostępne: ${remainingTxt}" + echo " Zajęte: ${percTxt} (z ${totalTxt})" + } >>$SUPPORT_LOG + ohai "Zbieranie logów watchdoga" + + if [[ -f $WATCHDOG_LOG_FILE ]]; then { echo "$LOG_DIVIDER" - echo " Statusy usług" + echo " Watchdog log" echo "$LOG_DIVIDER" - echo " Nightscout: $(get_container_status 'ns-server')" - echo " Baza danych: $(get_container_status 'ns-database')" - echo " Backup: $(get_container_status 'ns-backup')" - echo " Watchdog: $(get_watchdog_status "$(get_watchdog_status_code)" "$uni_watchdog_ok")" + timeout -k 15 10 cat $WATCHDOG_LOG_FILE } >>$SUPPORT_LOG + fi - 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) - local percTxt=$(echo "$spaceInfo" | awk '{print $4}') - + if [[ -f $WATCHDOG_FAILURES_FILE ]]; then { echo "$LOG_DIVIDER" - echo " Miejsce na dysku" + echo " Watchdog failures log" echo "$LOG_DIVIDER" - echo " Dostępne: ${remainingTxt}" - echo " Zajęte: ${percTxt} (z ${totalTxt})" + timeout -k 15 10 cat $WATCHDOG_FAILURES_FILE } >>$SUPPORT_LOG + fi - ohai "Zbieranie logów watchdoga" + ohai "Zbieranie logów usług" - if [[ -f $WATCHDOG_LOG_FILE ]]; then - { - echo "$LOG_DIVIDER" - echo " Watchdog log" - echo "$LOG_DIVIDER" - timeout -k 15 10 cat $WATCHDOG_LOG_FILE - } >>$SUPPORT_LOG - fi + { + echo "$LOG_DIVIDER" + echo " Nightscout log" + echo "$LOG_DIVIDER" + 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 "$maxDbLogs" >>$SUPPORT_LOG 2>&1 + } >>$SUPPORT_LOG - if [[ -f $WATCHDOG_FAILURES_FILE ]]; then - { - echo "$LOG_DIVIDER" - echo " Watchdog failures log" - echo "$LOG_DIVIDER" - timeout -k 15 10 cat $WATCHDOG_FAILURES_FILE - } >>$SUPPORT_LOG - fi + ohai "Kompresowanie i szyfrowanie raportu" - ohai "Zbieranie logów usług" + gzip -9 $SUPPORT_LOG - { - echo "$LOG_DIVIDER" - echo " Nightscout log" - echo "$LOG_DIVIDER" - timeout -k 15 10 docker logs ns-server --tail 500 >>$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 - } >>$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) - ohai "Kompresowanie i szyfrowanie raportu" + 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" + )" - gzip $SUPPORT_LOG + if ! [ $? -eq 1 ]; then - local logkey=$(<$LOG_ENCRYPTION_KEY_FILE) + local curr_time=$(date -u +"%Y-%m-%dT%H:%M:%SZ") - gpg --passphrase "$logkey" --batch --quiet --yes -a -c "$SUPPORT_LOG.gz" + 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" - - 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" + } | 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 } diff --git a/src/lib.sh b/src/lib.sh index 64ba934..ea04d68 100644 --- a/src/lib.sh +++ b/src/lib.sh @@ -412,6 +412,7 @@ aptGetWasUpdated=0 freshInstall=0 cachedMenuDomain='' lastTimeSpaceInfo=0 +diagnosticsSizeOk=0 MIKRUS_APIKEY='' MIKRUS_HOST='' @@ -1483,22 +1484,22 @@ do_cleanup_sys() { ohai "Sprzątanie dziennik systemowego..." journalctl --vacuum-size=50M >>$LOGTO 2>&1 ohai "Czyszczenie systemu apt..." - msgnote "Ta operacja może TROCHĘ potrwać (od kilku do kilkudziesięciu minut...)" - apt-get -y autoremove >>$LOGTO 2>&1 && apt-get -y clean >>$LOGTO 2>&1 - msgcheck "Czyszczenie dziennika i apt zakończono" + msgnote "Ta operacja może TROCHĘ potrwać (od kilku do kilkudziesięciu minut...)" + apt-get -y autoremove >>$LOGTO 2>&1 && apt-get -y clean >>$LOGTO 2>&1 + msgcheck "Czyszczenie dziennika i apt zakończono" } do_cleanup_docker() { ohai "Usuwanie nieużywanych obrazów Dockera..." - msgnote "Ta operacja może TROCHĘ potrwać (do kilku minut...)" + msgnote "Ta operacja może TROCHĘ potrwać (do kilku minut...)" docker image prune -af >>$LOGTO 2>&1 - msgcheck "Czyszczenie Dockera zakończono" + msgcheck "Czyszczenie Dockera zakończono" } do_cleanup_db() { ohai "Usuwanie kopii zapasowych bazy danych..." - find /srv/nightscout/data/dbbackup ! -type d -delete - msgcheck "Czyszczenie kopii zapasowych zakończono" + find /srv/nightscout/data/dbbackup ! -type d -delete + msgcheck "Czyszczenie kopii zapasowych zakończono" } cleanup_menu() { @@ -1516,7 +1517,7 @@ cleanup_menu() { local savedB=$((nowB - lastTimeB)) local savedTxt=$(echo "$savedB" | numfmt --to iec-i --suffix=B) - if (( savedB < 1)); then + if ((savedB < 1)); then savedTxt="---" fi @@ -1543,10 +1544,10 @@ cleanup_menu() { noyesdlg "Posprzątać wszystko?" "$uni_confirm_del" "$uni_resign" \ "Czy chcesz posprzątać i usunąć:" \ "$(pad_multiline \ - "${NL}${uni_bullet}nieużywane pliki apt i dziennika" \ - "${NL}${uni_bullet}nieużywane obrazy Dockera" \ - "${NL} ${uni_bullet}kopie zapasowe bazy danych")" \ - "${TL}(ta operacja może potrwać od kilku do kilkudziesięciu minut)" + "${NL}${uni_bullet}nieużywane pliki apt i dziennika" \ + "${NL}${uni_bullet}nieużywane obrazy Dockera" \ + "${NL} ${uni_bullet}kopie zapasowe bazy danych")" \ + "${TL}(ta operacja może potrwać od kilku do kilkudziesięciu minut)" if ! [ $? -eq 1 ]; then do_cleanup_sys do_cleanup_docker @@ -1556,7 +1557,7 @@ cleanup_menu() { "S)") noyesdlg "Posprzątać zasoby systemowe?" "$uni_confirm_del" "$uni_resign" \ "Czy chcesz usunąć nieużywane pakiety apt i poprzątać dziennik systemowy?" \ - "${TL}(ta operacja może potrwać od kilku do kilkudziesięciu minut)" + "${TL}(ta operacja może potrwać od kilku do kilkudziesięciu minut)" if ! [ $? -eq 1 ]; then do_cleanup_sys fi @@ -1564,7 +1565,7 @@ cleanup_menu() { "D)") noyesdlg "Posprzątać obrazy Dockera?" "$uni_confirm_del" "$uni_resign" \ "Czy chcesz usunąć nieużywane obrazy Dockera?" \ - "${TL}(ta operacja może potrwać kilka minut)" + "${TL}(ta operacja może potrwać kilka minut)" if ! [ $? -eq 1 ]; then do_cleanup_docker fi @@ -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,115 +1740,153 @@ 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" + 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) + local domain=$(get_td_domain) + local ns_tag=$(dotenv-tool -r get -f $ENV_FILE_DEP "NS_NIGHTSCOUT_TAG") + local mikrus_h=$(hostname) - local LOG_DIVIDER="=======================================================" + local LOG_DIVIDER="=======================================================" - rm -f $SUPPORT_LOG - rm -f "$SUPPORT_LOG.gz" - rm -f "$SUPPORT_LOG.gz.asc" + rm -f $SUPPORT_LOG + rm -f "$SUPPORT_LOG.gz" + rm -f "$SUPPORT_LOG.gz.asc" - { - echo "Dane diagnostyczne zebrane $curr_time" - echo " serwer : $mikrus_h" - echo " domena : $domain" - echo " wersja NS : $ns_tag" - } >$SUPPORT_LOG + { + echo "Dane diagnostyczne zebrane $curr_time" + echo " serwer : $mikrus_h" + echo " domena : $domain" + echo " wersja NS : $ns_tag" + } >$SUPPORT_LOG + + ohai "Zbieranie statusu usług" - ohai "Zbieranie statusu usług" + { + echo "$LOG_DIVIDER" + echo " Statusy usług" + echo "$LOG_DIVIDER" + echo " Nightscout: $(get_container_status 'ns-server')" + echo " Baza danych: $(get_container_status 'ns-database')" + echo " Backup: $(get_container_status 'ns-backup')" + echo " Watchdog: $(get_watchdog_status "$(get_watchdog_status_code)" "$uni_watchdog_ok")" + } >>$SUPPORT_LOG + + 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) + local percTxt=$(echo "$spaceInfo" | awk '{print $4}') + + { + echo "$LOG_DIVIDER" + echo " Miejsce na dysku" + echo "$LOG_DIVIDER" + echo " Dostępne: ${remainingTxt}" + echo " Zajęte: ${percTxt} (z ${totalTxt})" + } >>$SUPPORT_LOG + ohai "Zbieranie logów watchdoga" + + if [[ -f $WATCHDOG_LOG_FILE ]]; then { echo "$LOG_DIVIDER" - echo " Statusy usług" + echo " Watchdog log" echo "$LOG_DIVIDER" - echo " Nightscout: $(get_container_status 'ns-server')" - echo " Baza danych: $(get_container_status 'ns-database')" - echo " Backup: $(get_container_status 'ns-backup')" - echo " Watchdog: $(get_watchdog_status "$(get_watchdog_status_code)" "$uni_watchdog_ok")" + timeout -k 15 10 cat $WATCHDOG_LOG_FILE } >>$SUPPORT_LOG + fi - 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) - local percTxt=$(echo "$spaceInfo" | awk '{print $4}') - + if [[ -f $WATCHDOG_FAILURES_FILE ]]; then { echo "$LOG_DIVIDER" - echo " Miejsce na dysku" + echo " Watchdog failures log" echo "$LOG_DIVIDER" - echo " Dostępne: ${remainingTxt}" - echo " Zajęte: ${percTxt} (z ${totalTxt})" + timeout -k 15 10 cat $WATCHDOG_FAILURES_FILE } >>$SUPPORT_LOG + fi - ohai "Zbieranie logów watchdoga" + ohai "Zbieranie logów usług" - if [[ -f $WATCHDOG_LOG_FILE ]]; then - { - echo "$LOG_DIVIDER" - echo " Watchdog log" - echo "$LOG_DIVIDER" - timeout -k 15 10 cat $WATCHDOG_LOG_FILE - } >>$SUPPORT_LOG - fi + { + echo "$LOG_DIVIDER" + echo " Nightscout log" + echo "$LOG_DIVIDER" + 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 "$maxDbLogs" >>$SUPPORT_LOG 2>&1 + } >>$SUPPORT_LOG - if [[ -f $WATCHDOG_FAILURES_FILE ]]; then - { - echo "$LOG_DIVIDER" - echo " Watchdog failures log" - echo "$LOG_DIVIDER" - timeout -k 15 10 cat $WATCHDOG_FAILURES_FILE - } >>$SUPPORT_LOG - fi + ohai "Kompresowanie i szyfrowanie raportu" - ohai "Zbieranie logów usług" + gzip -9 $SUPPORT_LOG - { - echo "$LOG_DIVIDER" - echo " Nightscout log" - echo "$LOG_DIVIDER" - timeout -k 15 10 docker logs ns-server --tail 500 >>$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 - } >>$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) - ohai "Kompresowanie i szyfrowanie raportu" + 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" + )" - gzip $SUPPORT_LOG + if ! [ $? -eq 1 ]; then - local logkey=$(<$LOG_ENCRYPTION_KEY_FILE) + local curr_time=$(date -u +"%Y-%m-%dT%H:%M:%SZ") - gpg --passphrase "$logkey" --batch --quiet --yes -a -c "$SUPPORT_LOG.gz" + 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" - - 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" + } | 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 } diff --git a/updated b/updated index e4f1eb4..f9623ad 100644 --- a/updated +++ b/updated @@ -1 +1 @@ -2024-10-06T07:12:57.316Z \ No newline at end of file +2024-10-06T08:06:29.319Z \ No newline at end of file