Projet

Général

Profil

Révision 96ec850d

ID96ec850d2106db190b43c527f1222def6a882c0a
Parent c31cb283
Enfant ae458562

Ajouté par Sebastian L il y a plus de 4 ans

nextcloud_groupfolders_: Monitor sizes of groupfolders

Voir les différences:

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