49 lines
1.4 KiB
Django/Jinja
49 lines
1.4 KiB
Django/Jinja
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)
|