diagnose.sh (3497B)
1 #!/usr/bin/env bash 2 3 # This file is in the public domain. 4 5 # Script for basic diagnostics of a Taler regio deployment. 6 # @author Florian Dold <dold@taler.net> 7 8 if [ "$(id -u)" -ne 0 ]; then 9 echo "FATAL: Please run as root." >&2 10 exit 1 11 fi 12 13 libeufin_bank_db=$(libeufin-bank config get libeufin-bankdb-postgres config) 14 libeufin_nexus_db=$(libeufin-nexus config get libeufin-nexusdb-postgres config) 15 exchange_db=$(taler-exchange-config -s exchangedb-postgres -o config) 16 17 if [[ $libeufin_nexus_db != $libeufin_bank_db ]]; then 18 echo "FATAL: libeufin-bank and libeufin-nexus don't share the same database" >&2 19 exit 1 20 fi 21 22 libeufin_db=$libeufin_bank_db 23 24 # runsql db RESNAME < query 25 function runsql() { 26 local sql 27 read -r -d '' sql 28 res=$(cd / && sudo -u postgres psql "$1" -t --csv -c "$sql") 29 printf -v "$2" '%s' "$res" 30 } 31 32 # 33 # Check for conversion trigger 34 # 35 36 runsql "$libeufin_db" have_conversion_triggers <<EOF 37 select count(*) from information_schema.triggers 38 where trigger_schema='libeufin_nexus' 39 and trigger_name='cashin_link'; 40 EOF 41 42 echo "have_conversion_triggers" $have_conversion_triggers 43 44 # 45 # Check for transactions 46 # 47 runsql "$libeufin_db" num_nexus_incoming_transactions <<EOF 48 select count(*) from libeufin_nexus.incoming_transactions; 49 EOF 50 echo num_nexus_incoming_transactions: $num_nexus_incoming_transactions 51 52 runsql "$libeufin_db" num_nexus_talerable_transactions <<EOF 53 select count(*) from libeufin_nexus.talerable_incoming_transactions; 54 EOF 55 echo "num_nexus_talerable_transactions:" $num_nexus_talerable_transactions 56 57 runsql "$libeufin_db" num_nexus_bounced_transactions <<EOF 58 select count(*) from libeufin_nexus.bounced_transactions; 59 EOF 60 echo "num_nexus_bounced_transactions:" $num_nexus_bounced_transactions 61 62 runsql "$libeufin_db" num_bank_exchange_incoming <<EOF 63 select count(*) from libeufin_bank.taler_exchange_incoming; 64 EOF 65 echo "num_bank_exchange_incoming:" $num_bank_exchange_incoming 66 67 runsql "$exchange_db" num_exchange_reserves_in <<EOF 68 select count(*) from exchange.reserves_in; 69 EOF 70 echo num_exchange_reserves_in: $num_exchange_reserves_in 71 72 runsql "$exchange_db" num_exchange_reserves <<EOF 73 select count(*) from exchange.reserves; 74 EOF 75 echo num_exchange_reserves: $num_exchange_reserves 76 77 78 function expect_unit_active() { 79 systemctl --quiet is-active "$1" 80 if [[ $? -ne 0 ]]; then 81 echo "WARNING: expected unit $1 to be active, but it is not active" 82 fi 83 } 84 85 libeufin_units=( 86 libeufin-bank.service 87 libeufin-nexus-ebics-fetch.service 88 libeufin-nexus-ebics-submit.service 89 ) 90 91 exchange_units=( 92 taler-exchange-aggregator.service 93 taler-exchange-closer.service 94 taler-exchange-expire.service 95 taler-exchange-httpd.service 96 taler-exchange-secmod-cs.service 97 taler-exchange-secmod-eddsa.service 98 taler-exchange-secmod-rsa.service 99 taler-exchange-transfer.service 100 taler-exchange-wirewatch.service 101 ) 102 103 104 merchant_units=( 105 taler-merchant-httpd.service 106 ) 107 108 all_units=() 109 all_units+=( "${libeufin_units[@]}" "${exchange_units[@]}" "${merchant_units[@]}" ) 110 111 for unit in ${all_units[@]}; do 112 expect_unit_active "$unit" 113 done 114 115 SINCE="7 days ago" 116 nlogs=20000 117 echo "analysing logs since $SINCE, max $nlogs entries" 118 119 for unit in ${all_units[@]}; do 120 num_warnings=$(journalctl -u "$unit" --since "$SINCE" -n $nlogs | grep WARNING | wc -l) 121 num_errors=$(journalctl -u "$unit" --since "$SINCE" -n $nlogs | grep ERROR | wc -l) 122 if [[ ( $num_errors -eq 0 ) && ( $num_warnings -eq 0 ) ]]; then 123 continue 124 fi 125 echo "Please check logs for $unit ($num_warnings warnings, $num_errors errors)" 126 done