mirror of
https://github.com/munin-monitoring/contrib.git
synced 2025-07-21 10:39:53 +00:00
1. Last account update age in hours 2. Account balances The plugins have been in use for several months now and warn when the balance of accounts drop below a configurable value, and when Hibiscus stopped updating data because a TAN needs to be entered manually after 90 days. The plugins directly query the MySQL database of a Hibiscus server instance. See https://www.willuhn.de/products/hibiscus-server/ for more information.
148 lines
3.9 KiB
Bash
Executable file
148 lines
3.9 KiB
Bash
Executable file
#!/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 <cweiske@cweiske.de>
|
|
|
|
=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
|