diff --git a/plugins/hibiscus/example-graphs/hibiscus_account_balances-1.png b/plugins/hibiscus/example-graphs/hibiscus_account_balances-1.png new file mode 100644 index 00000000..ec266952 Binary files /dev/null and b/plugins/hibiscus/example-graphs/hibiscus_account_balances-1.png differ diff --git a/plugins/hibiscus/example-graphs/hibiscus_last_account_update-1.png b/plugins/hibiscus/example-graphs/hibiscus_last_account_update-1.png new file mode 100644 index 00000000..8ad9cc9c Binary files /dev/null and b/plugins/hibiscus/example-graphs/hibiscus_last_account_update-1.png differ diff --git a/plugins/hibiscus/hibiscus_account_balances b/plugins/hibiscus/hibiscus_account_balances new file mode 100755 index 00000000..91cf1c1f --- /dev/null +++ b/plugins/hibiscus/hibiscus_account_balances @@ -0,0 +1,148 @@ +#!/bin/bash +# -*- sh -*- +set -e +set -o pipefail + +: << =cut + +=head1 NAME + +hibiscus_account_balances - Show all account balances + +Connects to the database of a "Hibiscus Server" homebanking instance. + +This script helps to get notified when the balance of accounts +drop below a threshold value. + +=head1 CONFIGURATION + +=head2 ENVIRONMENT VARIABLES + + host - Hostname of MySQL/MariaDB server + user - Database user + password - Database password + database - Database name + mysql - MySQL/MariaDB binary + host_name - To put the graph onto a different host + warning - Warning threshold for all accounts + critical - Critical threshold for all accounts + acct_X_warning - Warning threshold for a single account with ID X + acct_X_critical - Critical threshold for a single account with ID X + label_filter - String to remove from account labels + graph_title - Title of the graph in munin + include - Comma-separated list of account IDs to include in the account list + exclude - Comma-separated list of account IDs to remove from the list + +Warning/critical thresholds value examples: +-"500:" for a balance lower than 500 +-"1000" for a balance over 1000 +-"1000:2000" for a balance outside 1000 and 2000 + +The account IDs are shown at the end of the labels: "Accountlabel #23". + +=head2 CONFIGURATION EXAMPLE + + [hibiscus_*] + env.user hibiscususer + env.password thisismypassword + env.mysql /usr/bin/mariadb + +=head1 REQUIREMENTS + +"bash" and "mysql"/"mariadb" are required. + +"bash" instead of "sh" needed because of "set -o pipefail", which is not +supported in Debian 12 yet. + +=head1 SEE ALSO + +https://www.willuhn.de/products/hibiscus-server/ + +=head1 AUTHOR +Christian Weiske + +=head1 LICENSE + +AGPL-3.0-only https://spdx.org/licenses/AGPL-3.0-only.html + +=head1 MAGIC MARKERS + +#%# family=manual + +=cut + +# variables +database=${database:-hibiscus} +host=${host:-localhost} +user=${user:-} +pass=${password:-} +mysql=${mysql:-/usr/bin/mysql} +host_name=${host_name:-} +label_filter=${label_filter:-} +graph_title=${graph_title:-Hibiscus account balances} +include=${include:-} +exclude=${exclude:-} + + +case $1 in + config) + echo "graph_title ${graph_title}" + echo "graph_vlabel Value in EUR" + echo "graph_args --base 1000" + echo "graph_category banking" + + if [ ! -z "$include" ]; then + include="AND id IN ($include)" + fi + if [ ! -z "$exclude" ]; then + exclude="AND id NOT IN ($exclude)" + fi + + echo "\ + SELECT\ + id,\ + IF(kategorie IS NULL, bezeichnung, CONCAT(kategorie, ': ', bezeichnung)) AS label\ + FROM konto\ + WHERE flags IS NULL $include $exclude\ + ORDER BY label"\ + | $mysql\ + --batch\ + --skip-ssl\ + --skip-column-names\ + -h"$host" -u"$user" -p"$password"\ + "$database"\ + | while read acctid acctlabel; do + if [ ! -z "$label_filter" ]; then + echo "acct_$acctid.label $acctlabel #$acctid" | sed "s/$label_filter//" + else + echo "acct_$acctid.label $acctlabel #$acctid" + fi + echo "acct_$acctid.draw LINE" + warnvar="acct_${acctid}_warning" + acctwarning=${!warnvar:-${warning:-}} + if [ ! -z "$acctwarning" ]; then + echo "acct_$acctid.warning $acctwarning" + fi + done + if [ -n "$host_name" ]; then + echo "host_name $host_name" + fi + exit 0;; +esac + +echo "\ + SELECT\ + id,\ + saldo\ + FROM konto\ + WHERE flags IS NULL\ + ORDER BY id"\ + | $mysql\ + --batch\ + --skip-ssl\ + --skip-column-names\ + -h"$host" -u"$user" -p"$password"\ + "$database"\ + | while read acctid acctbalance; do + echo "acct_$acctid.value $acctbalance" + done diff --git a/plugins/hibiscus/hibiscus_last_account_update b/plugins/hibiscus/hibiscus_last_account_update new file mode 100755 index 00000000..ca5f193d --- /dev/null +++ b/plugins/hibiscus/hibiscus_last_account_update @@ -0,0 +1,99 @@ +#!/bin/bash +# -*- sh -*- +set -e +set -o pipefail + +: << =cut + +=head1 NAME + +hibiscus_last_account_update - Age of the last bank account update + +Connects to the database of a "Hibiscus Server" homebanking instance. +Checks bank accounts and returns the balance ("Saldo") update date of +the account that was updated least recently. + +This script helps to get notified when the automatic updates stopped +because a TAN needs to be entered manually after 90 days. + +=head1 CONFIGURATION + +=head2 ENVIRONMENT VARIABLES + + host - Hostname of MySQL/MariaDB server + user - Database user + password - Database password + database - Database name + mysql - MySQL/MariaDB binary + host_name - To put the graph onto a different host + +=head2 CONFIGURATION EXAMPLE + + [hibiscus_*] + env.user hibiscususer + env.password thisismypassword + env.mysql /usr/bin/mariadb + +=head1 REQUIREMENTS + +"bash" and "mysql"/"mariadb" are required. + +"bash" instead of "sh" needed because of "set -o pipefail", which is not +supported in Debian 12 yet. + +=head1 SEE ALSO + +https://www.willuhn.de/products/hibiscus-server/ + +=head1 AUTHOR +Christian Weiske + +=head1 LICENSE + +AGPL-3.0-only https://spdx.org/licenses/AGPL-3.0-only.html + +=head1 MAGIC MARKERS + +#%# family=manual + +=cut + +# variables +database=${database:-hibiscus} +host=${host:-localhost} +user=${user:-} +pass=${password:-} +mysql=${mysql:-/usr/bin/mysql} +host_name=${host_name:-} + + +case $1 in + config) + echo "graph_title Hibiscus last account update" + echo "graph_vlabel Age in hours" + echo "graph_args --base 1000 -l 0" + echo "graph_category banking" + echo "graph_order age" + echo "age.label Oldest account update age" + echo "age.draw AREA" + echo "age.warning 72" + if [ -n "$host_name" ]; then + echo "host_name $host_name" + fi + exit 0;; +esac + +age_hours=$( + echo "\ + SELECT HOUR(TIMEDIFF(NOW(), saldo_datum)) AS age\ + FROM konto\ + WHERE flags IS NULL\ + ORDER BY age DESC\ + LIMIT 1"\ + | $mysql\ + --skip-ssl\ + --skip-column-names\ + -h"$host" -u"$user" -p"$password"\ + "$database" +) +echo "age.value $age_hours"