Révision 96ec850d
nextcloud_groupfolders_: Monitor sizes of groupfolders
| plugins/nextcloud/nextcloud_groupfolders_ | ||
|---|---|---|
| 1 |
#!/bin/sh |
|
| 2 |
# shellcheck shell=dash |
|
| 3 |
|
|
| 4 |
set -e |
|
| 5 |
|
|
| 6 |
: << =cut |
|
| 7 |
|
|
| 8 |
=head1 NAME |
|
| 9 |
|
|
| 10 |
nextcloud_groupfolders - Monitor usage of nextcloud groupfolders |
|
| 11 |
|
|
| 12 |
=head1 APPLICABLE SYSTEMS |
|
| 13 |
|
|
| 14 |
Nexcloud instances with enabled groupfolders app |
|
| 15 |
|
|
| 16 |
=head1 CONFIGURATION |
|
| 17 |
|
|
| 18 |
Requires installed curl and jq, a command-line json processor. |
|
| 19 |
|
|
| 20 |
This is a wildcard plugin. To monitor a groupfolders of a nextcloud |
|
| 21 |
instance, link nextcloud_groupfolders_<nextcloud-domain> to this file. |
|
| 22 |
You can even append a port (:8443) to the file if needed. For example, |
|
| 23 |
|
|
| 24 |
ln -s /usr/share/munin/plugins/nextcloud_groupfolders_ \ |
|
| 25 |
/etc/munin/plugins/nextcloud_groupfolders_cloud.domain.tld |
|
| 26 |
|
|
| 27 |
Set username and password in your munin-node configuration |
|
| 28 |
|
|
| 29 |
[nextcloud_groupfolders_cloud.domain.tld] |
|
| 30 |
env.username <nexcloud_user> |
|
| 31 |
env.password <nextcloud_password> |
|
| 32 |
env.path <default: apps/groupfolders/folders> |
|
| 33 |
env.scheme <default: https> |
|
| 34 |
env.timeout <default: 2s> |
|
| 35 |
|
|
| 36 |
It's advised to set an app password (for this plugin) in your nextcloud |
|
| 37 |
instance and not to use the "real" password of your nextcloud user. |
|
| 38 |
|
|
| 39 |
=head1 AUTHOR |
|
| 40 |
|
|
| 41 |
Copyright (C) 2020 Sebastian L. (https://momou.ch), |
|
| 42 |
Olivier Mehani <shtrom+munin@ssji.net> |
|
| 43 |
|
|
| 44 |
=head1 LICENSE |
|
| 45 |
|
|
| 46 |
GPLv2 |
|
| 47 |
|
|
| 48 |
=head1 MAGIC MARKERS |
|
| 49 |
|
|
| 50 |
#%# family=manual |
|
| 51 |
#%# capabilities=autoconf |
|
| 52 |
|
|
| 53 |
=cut |
|
| 54 |
|
|
| 55 |
# shellcheck disable=SC1090 |
|
| 56 |
. "$MUNIN_LIBDIR/plugins/plugin.sh" |
|
| 57 |
|
|
| 58 |
if [ "${MUNIN_DEBUG:-0}" = 1 ]; then
|
|
| 59 |
set -x |
|
| 60 |
fi |
|
| 61 |
|
|
| 62 |
API_PATH="${api_path:-/apps/groupfolders/folders}?format=json"
|
|
| 63 |
DOMAIN="${0##*nextcloud_groupfolders_}"
|
|
| 64 |
SCHEME="${scheme:-https}://"
|
|
| 65 |
TIMEOUT="${timeout:-2}"
|
|
| 66 |
CLEANDOMAIN="$(clean_fieldname "${DOMAIN}")"
|
|
| 67 |
USERNAME="${username:-}"
|
|
| 68 |
PASSWORD="${password:-}"
|
|
| 69 |
|
|
| 70 |
fetch_url () {
|
|
| 71 |
curl -s -f -m "${TIMEOUT}" "$@" -H "OCS-APIRequest: true"
|
|
| 72 |
} |
|
| 73 |
|
|
| 74 |
case $1 in |
|
| 75 |
|
|
| 76 |
autoconf) |
|
| 77 |
if [ ! -x "$(command -v curl)" ]; then |
|
| 78 |
echo "no (curl not found)" |
|
| 79 |
elif [ ! -x "$(command -v jq)" ]; then |
|
| 80 |
echo "no (jq not found)" |
|
| 81 |
else |
|
| 82 |
fetch_url -I -u "${USERNAME}:${PASSWORD}" -I "${SCHEME}${DOMAIN}${API_PATH}" \
|
|
| 83 |
| grep -iq "Content-Type: application/json" \ |
|
| 84 |
&& echo "yes" \ |
|
| 85 |
|| echo "no (invalid or empty response from nextcloud groupfolder rest api)" |
|
| 86 |
fi |
|
| 87 |
exit 0 |
|
| 88 |
;; |
|
| 89 |
config) |
|
| 90 |
|
|
| 91 |
DATA=$(fetch_url -u "${USERNAME}:${PASSWORD}" "${SCHEME}${DOMAIN}${API_PATH}" | sed 's/\\/\\\\/g' | jq -r '.ocs.data' )
|
|
| 92 |
|
|
| 93 |
cat << EOM |
|
| 94 |
multigraph nextcloud_groupfolders_${CLEANDOMAIN}
|
|
| 95 |
graph_title Nextcloud groupfolders on ${DOMAIN}
|
|
| 96 |
graph_args --base 1000 -l 0 |
|
| 97 |
graph_printf %.0lf |
|
| 98 |
graph_vlabel Groupfolders |
|
| 99 |
graph_info Number of groupfolders |
|
| 100 |
graph_category cloud |
|
| 101 |
number.label Number of groupfolders |
|
| 102 |
number.info number of groupfolders |
|
| 103 |
number.min 0 |
|
| 104 |
multigraph nextcloud_groupfolders_usage_${CLEANDOMAIN}
|
|
| 105 |
graph_title Nextcloud groupfolders usage on ${DOMAIN}
|
|
| 106 |
graph_args --base 1000 -l 0 |
|
| 107 |
graph_printf %.0lf |
|
| 108 |
graph_vlabel Groupfolders usage |
|
| 109 |
graph_info Sizes of groupfolders |
|
| 110 |
graph_category cloud |
|
| 111 |
EOM |
|
| 112 |
|
|
| 113 |
for FOLDER in $(echo "$DATA" | jq -c 'keys | .[]') |
|
| 114 |
do |
|
| 115 |
MOUNTPOINT=$(echo "$DATA" | jq -r ".$FOLDER.mount_point") |
|
| 116 |
ID=$(echo "$DATA" | jq -r ".$FOLDER.id") |
|
| 117 |
echo size"$ID".label "$MOUNTPOINT" folder size |
|
| 118 |
echo size"$ID".info size of groupfolder "$MOUNTPOINT" |
|
| 119 |
echo size"$ID".draw AREA |
|
| 120 |
echo size"$ID".min 0 |
|
| 121 |
done |
|
| 122 |
|
|
| 123 |
exit 0 |
|
| 124 |
;; |
|
| 125 |
|
|
| 126 |
esac |
|
| 127 |
|
|
| 128 |
DATA=$(fetch_url -u "${USERNAME}:${PASSWORD}" "${SCHEME}${DOMAIN}${API_PATH}" | sed 's/\\/\\\\/g' | jq -r '.ocs.data' )
|
|
| 129 |
echo multigraph nextcloud_groupfolders_"${CLEANDOMAIN}"
|
|
| 130 |
echo number.value "$(echo "$DATA" | jq length)" |
|
| 131 |
echo multigraph nextcloud_groupfolders_usage_"${CLEANDOMAIN}"
|
|
| 132 |
for FOLDER in $(echo "$DATA" | jq -c 'keys | .[]') |
|
| 133 |
do |
|
| 134 |
ID=$(echo "$DATA" | jq -r ".$FOLDER.id") |
|
| 135 |
echo size"$ID".value "$(echo "$DATA" | jq -r ".$FOLDER.size" | sed 's/ null$/ U/')" |
|
| 136 |
done |
|
Formats disponibles : Unified diff