From 195a733d5d6ed6377e61335a3e5432e49dbcc33e Mon Sep 17 00:00:00 2001 From: Olivier Mehani Date: Mon, 31 Aug 2020 12:43:34 +1000 Subject: [PATCH 1/5] [nextcloud_] Add support for --pidebug, and more parameters Signed-off-by: Olivier Mehani --- plugins/nextcloud/nextcloud_ | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/plugins/nextcloud/nextcloud_ b/plugins/nextcloud/nextcloud_ index e7e57fcd..94132991 100755 --- a/plugins/nextcloud/nextcloud_ +++ b/plugins/nextcloud/nextcloud_ @@ -28,6 +28,8 @@ Set username and password in your munin-node configuration [nextcloud_cloud.domain.tld] env.username env.password +env.api_path +env.timeout 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. @@ -47,15 +49,22 @@ GPLv2 =cut +# shellcheck disable=SC1090 . "$MUNIN_LIBDIR/plugins/plugin.sh" -API_PATH="/ocs/v2.php/apps/serverinfo/api/v1/info?format=json" +if [ "${MUNIN_DEBUG:-0}" = 1 ]; then + set -x +fi + +API_PATH="${api_path:-/ocs/v2.php/apps/serverinfo/api/v1/info}?format=json" DOMAIN="${0##*nextcloud_}" +TIMEOUT="${timeout:-2}" CLEANDOMAIN="$(clean_fieldname "$DOMAIN")" USERNAME="${username:-}" PASSWORD="${password:-}" print_json_data() { + # shellcheck disable=SC2039 local FIRST="$1" [ -z "$FIRST" ] && exit 0 shift 1 @@ -67,7 +76,7 @@ print_json_data() { test_https() { [ -z "$DOMAIN" ] && exit 0 - curl -s -f -m 2 -I "https://$DOMAIN" > /dev/null && echo true && exit 0 + curl -s -f -m "${TIMEOUT}" -I "https://$DOMAIN" > /dev/null && echo true && exit 0 } case $1 in @@ -76,7 +85,7 @@ case $1 in if [ -x /usr/bin/curl ]; then if [ -x /usr/bin/jq ]; then [ "$(test_https)" ] && DOMAIN="https://$DOMAIN" || DOMAIN="http://$DOMAIN" - curl -s -f -m 2 -u "$USERNAME:$PASSWORD" -I "$DOMAIN$API_PATH" | grep -iq "Content-Type: application/json" && echo "yes" && exit 0 || echo "no (invalid or empty response from nextlcoud serverinfo api)" && exit 0 + curl -s -f -m "${TIMEOUT}" -u "$USERNAME:$PASSWORD" -I "$DOMAIN$API_PATH" | grep -iq "Content-Type: application/json" && echo "yes" && exit 0 || echo "no (invalid or empty response from nextlcoud serverinfo api)" && exit 0 else echo "no (jq not found)" && exit 0 fi @@ -202,7 +211,7 @@ esac # Get JSON data [ "$(test_https)" ] && DOMAIN="https://$DOMAIN" || DOMAIN="http://$DOMAIN" -JSONSTATS=$(curl -s -f -m 2 -u "$USERNAME:$PASSWORD" "$DOMAIN$API_PATH" | sed 's/\\/\\\\/g' | jq -cr ".ocs.data") +JSONSTATS=$(curl -s -f -m "${TIMEOUT}" -u "$USERNAME:$PASSWORD" "$DOMAIN$API_PATH" | sed 's/\\/\\\\/g' | jq -cr ".ocs.data") USERS=$(echo "$JSONSTATS" | jq -cr ".activeUsers") STORAGE=$(echo "$JSONSTATS" | jq -cr ".nextcloud.storage") SHARES=$(echo "$JSONSTATS" | jq -cr ".nextcloud.shares") From a7d44887e4ab2cf3d96cff4a4a27d8340d72e291 Mon Sep 17 00:00:00 2001 From: Olivier Mehani Date: Mon, 31 Aug 2020 16:43:23 +1000 Subject: [PATCH 2/5] [nextcloud_] Use fewer requests to work out the protocol to use Signed-off-by: Olivier Mehani --- plugins/nextcloud/nextcloud_ | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/plugins/nextcloud/nextcloud_ b/plugins/nextcloud/nextcloud_ index 94132991..02eea43e 100755 --- a/plugins/nextcloud/nextcloud_ +++ b/plugins/nextcloud/nextcloud_ @@ -74,23 +74,26 @@ print_json_data() { done } -test_https() { - [ -z "$DOMAIN" ] && exit 0 - curl -s -f -m "${TIMEOUT}" -I "https://$DOMAIN" > /dev/null && echo true && exit 0 +fetch_url () { + curl -s -f -m "${TIMEOUT}" "$@" } case $1 in autoconf) - if [ -x /usr/bin/curl ]; then - if [ -x /usr/bin/jq ]; then - [ "$(test_https)" ] && DOMAIN="https://$DOMAIN" || DOMAIN="http://$DOMAIN" - curl -s -f -m "${TIMEOUT}" -u "$USERNAME:$PASSWORD" -I "$DOMAIN$API_PATH" | grep -iq "Content-Type: application/json" && echo "yes" && exit 0 || echo "no (invalid or empty response from nextlcoud serverinfo api)" && exit 0 + if [ -x "$(command -v curl)" ]; then + if [ -x "$(command -v jq)" ]; then + (fetch_url -I -u "$USERNAME:$PASSWORD" -I "https://${DOMAIN}${API_PATH}" \ + | grep -iq "Content-Type: application/json" \ + || fetch_url -I -u "$USERNAME:$PASSWORD" -I "http://${DOMAIN}${API_PATH}" \ + | grep -iq "Content-Type: application/json") \ + && echo "yes" && exit 0 \ + || echo "no (invalid or empty response from nextlcoud serverinfo api)" && exit 0 else echo "no (jq not found)" && exit 0 fi else - echo "no (/usr/bin/curl not found)" && exit 0 + echo "no (curl not found)" && exit 0 fi ;; @@ -210,8 +213,10 @@ EOM esac # Get JSON data -[ "$(test_https)" ] && DOMAIN="https://$DOMAIN" || DOMAIN="http://$DOMAIN" -JSONSTATS=$(curl -s -f -m "${TIMEOUT}" -u "$USERNAME:$PASSWORD" "$DOMAIN$API_PATH" | sed 's/\\/\\\\/g' | jq -cr ".ocs.data") +JSONSTATS=$( + fetch_url -u "$USERNAME:$PASSWORD" "https://${DOMAIN}${API_PATH}" | sed 's/\\/\\\\/g' | jq -cr ".ocs.data" 2>&1 \ + || fetch_url -u "$USERNAME:$PASSWORD" "http://${DOMAIN}${API_PATH}" | sed 's/\\/\\\\/g' | jq -cr ".ocs.data" +) USERS=$(echo "$JSONSTATS" | jq -cr ".activeUsers") STORAGE=$(echo "$JSONSTATS" | jq -cr ".nextcloud.storage") SHARES=$(echo "$JSONSTATS" | jq -cr ".nextcloud.shares") From 12cb113403437a3ab7a0f82ecf561ffc5ab54aa4 Mon Sep 17 00:00:00 2001 From: Olivier Mehani Date: Thu, 3 Sep 2020 22:27:19 +1000 Subject: [PATCH 3/5] [nextcloud_] Allow to control warnings on the number of available updates Signed-off-by: Olivier Mehani --- plugins/nextcloud/nextcloud_ | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/plugins/nextcloud/nextcloud_ b/plugins/nextcloud/nextcloud_ index 02eea43e..b1b35641 100755 --- a/plugins/nextcloud/nextcloud_ +++ b/plugins/nextcloud/nextcloud_ @@ -1,4 +1,5 @@ #!/bin/sh +# shellcheck shell=dash set -e @@ -30,6 +31,7 @@ env.username env.password env.api_path env.timeout +env.updates_warning 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. @@ -59,12 +61,12 @@ fi API_PATH="${api_path:-/ocs/v2.php/apps/serverinfo/api/v1/info}?format=json" DOMAIN="${0##*nextcloud_}" TIMEOUT="${timeout:-2}" +UPDATES_WARNING="${updates_warning:-1}" CLEANDOMAIN="$(clean_fieldname "$DOMAIN")" USERNAME="${username:-}" PASSWORD="${password:-}" print_json_data() { - # shellcheck disable=SC2039 local FIRST="$1" [ -z "$FIRST" ] && exit 0 shift 1 @@ -202,7 +204,7 @@ graph_category cloud num_updates_available.label available app updates num_updates_available.info number of available app updates num_updates_available.min 0 -num_updates_available.warning 1 +num_updates_available.warning ${UPDATES_WARNING} num_installed.label installed apps num_installed.info number of installed apps num_installed.min 0 From f47fddf3266ace30a90b137bc0bfbc1283f21dca Mon Sep 17 00:00:00 2001 From: Olivier Mehani Date: Thu, 10 Sep 2020 22:36:33 +1000 Subject: [PATCH 4/5] [nextcloud_] Add scheme configuration and cleanup autoconf Signed-off-by: Olivier Mehani --- plugins/nextcloud/nextcloud_ | 33 +++++++++++++++------------------ 1 file changed, 15 insertions(+), 18 deletions(-) diff --git a/plugins/nextcloud/nextcloud_ b/plugins/nextcloud/nextcloud_ index b1b35641..c9a9002d 100755 --- a/plugins/nextcloud/nextcloud_ +++ b/plugins/nextcloud/nextcloud_ @@ -30,6 +30,7 @@ Set username and password in your munin-node configuration env.username env.password env.api_path +env.scheme env.timeout env.updates_warning @@ -60,6 +61,7 @@ fi API_PATH="${api_path:-/ocs/v2.php/apps/serverinfo/api/v1/info}?format=json" DOMAIN="${0##*nextcloud_}" +SCHEME="${scheme:-https}://" TIMEOUT="${timeout:-2}" UPDATES_WARNING="${updates_warning:-1}" CLEANDOMAIN="$(clean_fieldname "$DOMAIN")" @@ -68,7 +70,7 @@ PASSWORD="${password:-}" print_json_data() { local FIRST="$1" - [ -z "$FIRST" ] && exit 0 + [ -z "$FIRST" ] && (echo "incorrect call to print_json_data $*">&2; exit 1) shift 1 for KEY in "$@"; do VALUE=$(echo "$FIRST" | jq -cr ".$KEY") @@ -83,22 +85,18 @@ fetch_url () { case $1 in autoconf) - if [ -x "$(command -v curl)" ]; then - if [ -x "$(command -v jq)" ]; then - (fetch_url -I -u "$USERNAME:$PASSWORD" -I "https://${DOMAIN}${API_PATH}" \ + if [ ! -x "$(command -v curl)" ]; then + echo "no (curl not found)" + elif [ ! -x "$(command -v jq)" ]; then + echo "no (jq not found)"exit 0 + else + fetch_url -I -u "$USERNAME:$PASSWORD" -I "${SCHEME}${DOMAIN}${API_PATH}" \ | grep -iq "Content-Type: application/json" \ - || fetch_url -I -u "$USERNAME:$PASSWORD" -I "http://${DOMAIN}${API_PATH}" \ - | grep -iq "Content-Type: application/json") \ - && echo "yes" && exit 0 \ - || echo "no (invalid or empty response from nextlcoud serverinfo api)" && exit 0 - else - echo "no (jq not found)" && exit 0 - fi - else - echo "no (curl not found)" && exit 0 - fi - ;; - + && echo "yes" \ + || echo "no (invalid or empty response from nextlcoud serverinfo api)" + fi + exit 0 + ;; config) cat << EOM @@ -216,8 +214,7 @@ esac # Get JSON data JSONSTATS=$( - fetch_url -u "$USERNAME:$PASSWORD" "https://${DOMAIN}${API_PATH}" | sed 's/\\/\\\\/g' | jq -cr ".ocs.data" 2>&1 \ - || fetch_url -u "$USERNAME:$PASSWORD" "http://${DOMAIN}${API_PATH}" | sed 's/\\/\\\\/g' | jq -cr ".ocs.data" + fetch_url -u "$USERNAME:$PASSWORD" "${SCHEME}${DOMAIN}${API_PATH}" | sed 's/\\/\\\\/g' | jq -cr ".ocs.data" 2>&1 ) USERS=$(echo "$JSONSTATS" | jq -cr ".activeUsers") STORAGE=$(echo "$JSONSTATS" | jq -cr ".nextcloud.storage") From 7dcbc91c7e271ca813eb6991bfd0f7158fae7e61 Mon Sep 17 00:00:00 2001 From: Olivier Mehani Date: Fri, 11 Sep 2020 10:03:43 +1000 Subject: [PATCH 5/5] [nextcloud_] Softer failure on missing data Signed-off-by: Olivier Mehani --- plugins/nextcloud/nextcloud_ | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/plugins/nextcloud/nextcloud_ b/plugins/nextcloud/nextcloud_ index c9a9002d..85538dfd 100755 --- a/plugins/nextcloud/nextcloud_ +++ b/plugins/nextcloud/nextcloud_ @@ -70,10 +70,13 @@ PASSWORD="${password:-}" print_json_data() { local FIRST="$1" - [ -z "$FIRST" ] && (echo "incorrect call to print_json_data $*">&2; exit 1) + local VALUE="U" shift 1 + test -z "$FIRST" && echo "missing data for 'print_json_data "" $*'">&2 for KEY in "$@"; do - VALUE=$(echo "$FIRST" | jq -cr ".$KEY") + if [ -n "$FIRST" ]; then + VALUE=$(echo "$FIRST" | jq -cr ".$KEY") + fi echo "$KEY.value $VALUE" done }