Add size checking and retry for diagnostics

previous
Dominik Dzienia 7 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=''
@ -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
}

@ -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
}

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