Repository
Munin (contrib)
Last change
2021-05-29
Graph Categories
Family
manual
Capabilities
Keywords
Language
Shell
License
curl
Authors

nextcloud_groupfolders_

Name

nextcloud_groupfolders - Monitor usage of nextcloud groupfolders

Applicable Systems

Nexcloud instances with enabled groupfolders app

Configuration

Requires installed curl and jq, a command-line json processor.

This is a wildcard plugin. To monitor a groupfolders of a nextcloud instance, link nextcloud_groupfolders_<nextcloud-domain> to this file. You can even append a port (:8443) to the file if needed. For example,

ln -s /usr/share/munin/plugins/nextcloud_groupfolders_ \
      /etc/munin/plugins/nextcloud_groupfolders_cloud.domain.tld

Set username and password in your munin-node configuration

    [nextcloud_groupfolders_cloud.domain.tld]
    env.username <nexcloud_user>
    env.password <nextcloud_password>
    env.path <default: apps/groupfolders/folders>
    env.scheme <default: https>
    env.timeout <default: 2s>

It’s advised to set an app password (for this plugin) in your nextcloud instance and not to use the “real” password of your nextcloud user.

Author

Copyright (C) 2020 Sebastian L. (https://momou.ch), Olivier Mehani <shtrom+munin@ssji.net>

License

GPLv2

Magic Markers

#%# family=manual
#%# capabilities=autoconf
#!/bin/sh
# shellcheck shell=dash

set -e

: << =cut

=head1 NAME

nextcloud_groupfolders - Monitor usage of nextcloud groupfolders

=head1 APPLICABLE SYSTEMS

Nexcloud instances with enabled groupfolders app

=head1 CONFIGURATION

Requires installed curl and jq, a command-line json processor.

This is a wildcard plugin. To monitor a groupfolders of a nextcloud 
instance, link nextcloud_groupfolders_<nextcloud-domain> to this file.
You can even append a port (:8443) to the file if needed. For example,

  ln -s /usr/share/munin/plugins/nextcloud_groupfolders_ \
        /etc/munin/plugins/nextcloud_groupfolders_cloud.domain.tld

Set username and password in your munin-node configuration

	[nextcloud_groupfolders_cloud.domain.tld]
	env.username <nexcloud_user>
	env.password <nextcloud_password>
	env.path <default: apps/groupfolders/folders>
	env.scheme <default: https>
	env.timeout <default: 2s>

It's advised to set an app password (for this plugin) in your nextcloud 
instance and not to use the "real" password of your nextcloud user.

=head1 AUTHOR

Copyright (C) 2020 Sebastian L. (https://momou.ch),
		   Olivier Mehani <shtrom+munin@ssji.net>

=head1 LICENSE

GPLv2

=head1 MAGIC MARKERS

 #%# family=manual
 #%# capabilities=autoconf

=cut

# shellcheck disable=SC1090
. "$MUNIN_LIBDIR/plugins/plugin.sh"

if [ "${MUNIN_DEBUG:-0}" = 1 ]; then
    set -x
fi

API_PATH="${api_path:-/apps/groupfolders/folders}?format=json"
DOMAIN="${0##*nextcloud_groupfolders_}"
SCHEME="${scheme:-https}://"
TIMEOUT="${timeout:-2}"
CLEANDOMAIN="$(clean_fieldname "${DOMAIN}")"
USERNAME="${username:-}"
PASSWORD="${password:-}"

fetch_url () {
    curl -s -f -m "${TIMEOUT}" "$@" -H "OCS-APIRequest: true"
}

case $1 in

    autoconf)
	    if [ ! -x "$(command -v curl)" ]; then
		    echo "no (curl not found)"
	    elif [ ! -x "$(command -v jq)" ]; then
		    echo "no (jq not found)"
	    else
		    fetch_url -I -u "${USERNAME}:${PASSWORD}" -I "${SCHEME}${DOMAIN}${API_PATH}" \
			    | grep -iq "Content-Type: application/json" \
			    && echo "yes" \
			    || echo "no (invalid or empty response from nextcloud groupfolder rest api)"
	    fi
	    exit 0
	    ;;
   config)
   
  	DATA=$(fetch_url -u "${USERNAME}:${PASSWORD}" "${SCHEME}${DOMAIN}${API_PATH}" | sed 's/\\/\\\\/g' | jq -r '.ocs.data' )
  	
cat << EOM
multigraph nextcloud_groupfolders_${CLEANDOMAIN}
graph_title Nextcloud groupfolders on ${DOMAIN}
graph_args --base 1000 -l 0
graph_printf %.0lf
graph_vlabel Groupfolders
graph_info Number of groupfolders
graph_category cloud
number.label Number of groupfolders
number.info number of groupfolders
number.min 0
multigraph nextcloud_groupfolders_usage_${CLEANDOMAIN}
graph_title Nextcloud groupfolders usage on ${DOMAIN}
graph_args --base 1000 -l 0
graph_printf %.0lf
graph_vlabel Groupfolders usage
graph_info Sizes of groupfolders
graph_category cloud
EOM

	for FOLDER in $(echo "$DATA" | jq -c 'keys | .[]')
	do
		MOUNTPOINT=$(echo "$DATA" | jq -r ".$FOLDER.mount_point")
		ID=$(echo "$DATA" | jq -r ".$FOLDER.id")
		echo size"$ID".label "$MOUNTPOINT" folder size
		echo size"$ID".info size of groupfolder "$MOUNTPOINT"
		echo size"$ID".draw AREA
		echo size"$ID".min 0
	done

	exit 0
        ;;

esac

DATA=$(fetch_url -u "${USERNAME}:${PASSWORD}" "${SCHEME}${DOMAIN}${API_PATH}" | sed 's/\\/\\\\/g' | jq -r '.ocs.data' )
echo multigraph nextcloud_groupfolders_"${CLEANDOMAIN}"
echo number.value "$(echo "$DATA" | jq length)"
echo multigraph nextcloud_groupfolders_usage_"${CLEANDOMAIN}"
for FOLDER in $(echo "$DATA" | jq -c 'keys | .[]')
do
	ID=$(echo "$DATA" | jq -r ".$FOLDER.id")
	echo size"$ID".value "$(echo "$DATA" | jq -r ".$FOLDER.size" | sed 's/ null$/ U/')"
done