import json from prometheus_client import Gauge, Summary, start_http_server import subprocess import schedule from time import sleep gauge_groupfolder_quota = Gauge('nextcloud_groupfolder_quota_bytes', 'nextcloud groupfolder quota', ['folder']) gauge_groupfolder_size = Gauge('nextcloud_groupfolder_bytes', 'nextcloud groupfolder size', ['folder']) def occ(cmd): args = ['/usr/bin/php', '/usr/share/nextcloud/occ', cmd, '--output=json'] process = subprocess.run(args, capture_output=True) output = None try: process.check_returncode() output = json.loads(process.stdout.decode('utf-8')) except Exception as e: print('OCC command returned an error:') print(str(e)) print(process.stderr.decode('utf-8')) return output def update_groupfolders(): groupfolders = occ('groupfolders:list') if not groupfolders: return for groupfolder in groupfolders: gauge_groupfolder_quota.labels(groupfolder['mount_point']).set(int(groupfolder['quota'])) gauge_groupfolder_size.labels(groupfolder['mount_point']).set(int(groupfolder['size'])) if __name__ == '__main__': update_groupfolders() schedule.every().minute.do(update_groupfolders) start_http_server(addr='127.0.0.1', port={{ nextcloud.prometheus_exporter.port }}) while True: schedule.run_pending() sleep(1)