diff options
Diffstat (limited to 'nextcloud_apps')
-rwxr-xr-x | nextcloud_apps | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/nextcloud_apps b/nextcloud_apps new file mode 100755 index 0000000..574d932 --- /dev/null +++ b/nextcloud_apps @@ -0,0 +1,70 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- + +# Plugin to monitor the number of available nextcloud app updates +# +# Parameters understood: +# config (required) +# autoconf (optional - used by munin-config) + +# Magic markers - optional - used by installation scripts and +# munin-config: +# +# #%# family=manual +# #%# capabilities=autoconf +import requests +import sys +import os + + +class NextcloudApps: + if (sys.argv.__len__() == 2) and (sys.argv[1] == "config"): + print('graph_title Nextcloud pending App updates') + print('graph_args --base 1024 -l 0') + print('graph_vlabel updates available') + print('graph_info graph showing the number of available app updates') + print('graph_category nextcloud') + + print('num_updates_available.label available app updates') + print('num_updates_available.info number of available app updates') + elif (sys.argv.__len__() == 2) and (sys.argv[1] == 'autoconf'): + # check host if env variables are set + try: + if None not in {os.environ['url'], os.environ['username'], os.environ['password']}: + print('yes') + except KeyError: + print('no env configuration options are missing') + else: + # read the configuration from munin environment + URL = os.environ['url'] + auth = (os.environ['username'], os.environ['password']) + + # init requests session with specific header and credentials + with requests.Session() as s: + s.auth = auth + s.headers.update({'Accept': 'application/json'}) + s.stream = False + + # request data from api + r = s.get(URL) + + # if status code is successful close connection and continue + if r.status_code == 200: + s.close() + api_response = r.json() + num_updates_available = api_response['ocs']['data']['nextcloud']['system']['apps']['num_updates_available'] + print('num_updates_available.value %s' % num_updates_available) + + elif r.status_code == 996: + print('server error') + elif r.status_code == 997: + print('not authorized') + elif r.status_code == 998: + print('not found') + else: + print('unknown error') + + +if __name__ == "__main__": + NextcloudApps() + quit(0) |