summaryrefslogtreecommitdiff
path: root/regional-currency/diagnose.sh
blob: a0c513bca1fe42afe1a732b06711379de5060887 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
#!/usr/bin/env bash

# This file is in the public domain.

# Script for basic diagnostics of a Taler regio deployment.
# @author Florian Dold <dold@taler.net>

if [ "$(id -u)" -ne 0 ]; then
  echo "FATAL: Please run as root." >&2
  exit 1
fi

libeufin_bank_db=$(libeufin-bank config get libeufin-bankdb-postgres config)
libeufin_nexus_db=$(libeufin-nexus config get libeufin-nexusdb-postgres config)
exchange_db=$(taler-config -s exchangedb-postgres -o config)

if [[ $libeufin_nexus_db != $libeufin_bank_db ]]; then
  echo "FATAL: libeufin-bank and libeufin-nexus don't share the same database" >&2
  exit 1
fi

libeufin_db=$libeufin_bank_db

# runsql db RESNAME < query
function runsql() {
  local sql
  read -r -d '' sql
  res=$(cd / && sudo -u postgres psql "$1" -t --csv -c "$sql")
  printf -v "$2" '%s' "$res"
}

#
# Check for conversion trigger
#

runsql "$libeufin_db" have_conversion_triggers <<EOF
select count(*) from information_schema.triggers
  where trigger_schema='libeufin_nexus'
  and trigger_name='cashin_link';
EOF

echo "have_conversion_triggers" $have_conversion_triggers

#
# Check for transactions
#
runsql "$libeufin_db" num_nexus_incoming_transactions <<EOF
select count(*) from libeufin_nexus.incoming_transactions;
EOF
echo num_nexus_incoming_transactions: $num_nexus_incoming_transactions

runsql "$libeufin_db" num_nexus_talerable_transactions <<EOF
select count(*) from libeufin_nexus.talerable_incoming_transactions;
EOF
echo "num_nexus_talerable_transactions:" $num_nexus_talerable_transactions

runsql "$libeufin_db" num_nexus_bounced_transactions <<EOF
select count(*) from libeufin_nexus.bounced_transactions;
EOF
echo "num_nexus_bounced_transactions:" $num_nexus_bounced_transactions

runsql "$libeufin_db" num_bank_exchange_incoming <<EOF
select count(*) from libeufin_bank.taler_exchange_incoming;
EOF
echo "num_bank_exchange_incoming:" $num_bank_exchange_incoming

runsql "$exchange_db" num_exchange_reserves_in <<EOF
select count(*) from exchange.reserves_in;
EOF
echo num_exchange_reserves_in: $num_exchange_reserves_in

runsql "$exchange_db" num_exchange_reserves <<EOF
select count(*) from exchange.reserves;
EOF
echo num_exchange_reserves: $num_exchange_reserves


function expect_unit_active() {
  systemctl --quiet is-active "$1"
  if [[ $? -ne 0 ]]; then
    echo "WARNING: expected unit $1 to be active, but it is not active"
  fi
}

libeufin_units=(
libeufin-bank.service
libeufin-nexus-ebics-fetch.service
libeufin-nexus-ebics-submit.service
)

exchange_units=(
taler-exchange-aggregator.service
taler-exchange-closer.service
taler-exchange-expire.service
taler-exchange-httpd.service
taler-exchange-secmod-cs.service
taler-exchange-secmod-eddsa.service
taler-exchange-secmod-rsa.service
taler-exchange-transfer.service
taler-exchange-wirewatch.service
)


merchant_units=(
taler-merchant-httpd.service
)

all_units=()
all_units+=( "${libeufin_units[@]}" "${exchange_units[@]}" "${merchant_units[@]}" )

for unit in ${all_units[@]}; do
  expect_unit_active "$unit"
done

SINCE="7 days ago"
echo "analysing logs since $SINCE"

for unit in ${all_units[@]}; do
  num_warnings=$(journalctl -u "$unit" --since "$SINCE" | grep WARNING | wc -l)
  num_errors=$(journalctl -u "$unit" --since "$SINCE" | grep ERROR | wc -l)
  if [[ ( $num_errors -eq 0 ) && ( $num_warnings -eq 0 ) ]]; then
    continue
  fi
  echo "Please check logs for $unit ($num_warnings warnings, $num_errors errors)"
done