taler-deployment

Deployment scripts and configuration files
Log | Files | Refs | README

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