diff --git a/zabbix-agent-scripts/get_teamfolders_metrics.py b/zabbix-agent-scripts/get_teamfolders_metrics.py index 941ab97..7c51b44 100644 --- a/zabbix-agent-scripts/get_teamfolders_metrics.py +++ b/zabbix-agent-scripts/get_teamfolders_metrics.py @@ -27,96 +27,111 @@ cmd = "sudo -u www-data /usr/bin/php /var/www/nextcloud/occ groupfolders:list --output json".split() -teamfolders_output = subprocess.check_output(cmd) +try: + teamfolders_output = subprocess.check_output(cmd) +except: + print("It seems that the app groupfolders is not installed") -teamfolders = json.loads(teamfolders_output.decode()) + results = { + "teamfolder_nr": 0, + "teamfolder_total_quota_gb": 0, + "teamfolder_nr_files_trash": 0, + "teamfolder_nr_files_versions": 0, + "teamfolder_nr_files": 0, + "teamfolder_total_trash_size_gb": 0, + "teamfolder_total_size_gb": 0, + "teamfolder_total_versions_size_gb": 0, + } -gb_conversion_factor = 1./(1024.*1024.*1024.) +else: + teamfolders = json.loads(teamfolders_output.decode()) -cmd = "sudo -u www-data /usr/bin/php /var/www/nextcloud/occ config:system:get datadirectory".split() - -datadir = subprocess.check_output(cmd).strip(b"\n").decode() - -#################### -# Metrics -#################### - -# Number of team folders -teamfolder_nr = len(teamfolders) - -# Total quota assigned to team folders -teamfolders_quota = [teamfolder['quota'] for teamfolder in teamfolders] - -teamfolder_total_quota_gb = sum(teamfolders_quota)*gb_conversion_factor - -# Number of files and folders in team folders (excluding versions and trash) -cmd = "find /{datadir}/__groupfolders/ -not -path */versions/* -not -path */trash/*".format(datadir=datadir).split() - -teamfolder_nr_files_find = subprocess.Popen(cmd, - stdout=subprocess.PIPE) - -teamfolder_nr_files = subprocess.check_output(('wc', '-l'), - stdin=teamfolder_nr_files_find.stdout) - -teamfolder_nr_files_find.wait() - -teamfolder_nr_files = int(teamfolder_nr_files.decode().strip()) - -# Number of files in team folders versions -cmd = 'find /{datadir}/__groupfolders/versions/'.format(datadir=datadir).split() - -teamfolder_nr_files_versions_find = subprocess.Popen(cmd, stdout=subprocess.PIPE) - -teamfolder_nr_files_versions = subprocess.check_output(('wc', '-l'), - stdin=teamfolder_nr_files_versions_find.stdout) - -teamfolder_nr_files_versions_find.wait() - -teamfolder_nr_files_versions = int(teamfolder_nr_files_versions.decode().strip())-teamfolder_nr-1 - -# Number of files in team folders trash -cmd = 'find /ncdata/__groupfolders/trash/'.split() - -teamfolder_nr_files_trash_find = subprocess.Popen(cmd, stdout=subprocess.PIPE) - -teamfolder_nr_files_trash = subprocess.check_output(('wc', '-l'), - stdin=teamfolder_nr_files_trash_find.stdout) - -teamfolder_nr_files_trash_find.wait() - -teamfolder_nr_files_trash = int(teamfolder_nr_files_trash.decode().strip())-teamfolder_nr-1 - -# Storage used by team folders (excluding versions and trash) -cmd = "du -b -d1 {datadir}/__groupfolders/".format(datadir=datadir).split() - -teamfolder_total_size_output = subprocess.check_output(cmd) - -df_teamfolder_total_size = pd.read_table(io.StringIO(teamfolder_total_size_output.decode()),names=["folder_size", "folder"]) - -df_teamfolder_total_size["folder"] = df_teamfolder_total_size.folder.str.removeprefix("{datadir}/__groupfolders/".format(datadir=datadir)) - -df_teamfolder_total_size["folder_size_gb"] = df_teamfolder_total_size["folder_size"]*gb_conversion_factor - -# Storage used by team folders (excluding versions and trash) -teamfolder_total_size_gb = float(df_teamfolder_total_size.query("folder not in ('trash', 'versions') and folder != ''").folder_size_gb.sum()) - -# Storage used by team folders versions -teamfolder_total_versions_size_gb = float(df_teamfolder_total_size.query("folder == 'versions'").folder_size_gb.sum()) - -# Storage used by team folders trash -teamfolder_total_trash_size_gb = float(df_teamfolder_total_size.query("folder == 'trash'").folder_size_gb.sum()) - -results = { - "teamfolder_nr": teamfolder_nr, - "teamfolder_total_quota_gb": teamfolder_total_quota_gb, - "teamfolder_nr_files_trash": teamfolder_nr_files_trash, - "teamfolder_nr_files_versions":teamfolder_nr_files_versions, - "teamfolder_nr_files":teamfolder_nr_files, - "teamfolder_total_trash_size_gb": teamfolder_total_trash_size_gb, - "teamfolder_total_size_gb": teamfolder_total_size_gb, - "teamfolder_total_versions_size_gb": teamfolder_total_versions_size_gb, -} - + gb_conversion_factor = 1./(1024.*1024.*1024.) + + cmd = "sudo -u www-data /usr/bin/php /var/www/nextcloud/occ config:system:get datadirectory".split() + + datadir = subprocess.check_output(cmd).strip(b"\n").decode() + + #################### + # Metrics + #################### + + # Number of team folders + teamfolder_nr = len(teamfolders) + + # Total quota assigned to team folders + teamfolders_quota = [teamfolder['quota'] for teamfolder in teamfolders] + + teamfolder_total_quota_gb = sum(teamfolders_quota)*gb_conversion_factor + + # Number of files and folders in team folders (excluding versions and trash) + cmd = "find /{datadir}/__groupfolders/ -not -path */versions/* -not -path */trash/*".format(datadir=datadir).split() + + teamfolder_nr_files_find = subprocess.Popen(cmd, + stdout=subprocess.PIPE) + + teamfolder_nr_files = subprocess.check_output(('wc', '-l'), + stdin=teamfolder_nr_files_find.stdout) + + teamfolder_nr_files_find.wait() + + teamfolder_nr_files = int(teamfolder_nr_files.decode().strip()) + + # Number of files in team folders versions + cmd = 'find /{datadir}/__groupfolders/versions/'.format(datadir=datadir).split() + + teamfolder_nr_files_versions_find = subprocess.Popen(cmd, stdout=subprocess.PIPE) + + teamfolder_nr_files_versions = subprocess.check_output(('wc', '-l'), + stdin=teamfolder_nr_files_versions_find.stdout) + + teamfolder_nr_files_versions_find.wait() + + teamfolder_nr_files_versions = int(teamfolder_nr_files_versions.decode().strip())-teamfolder_nr-1 + + # Number of files in team folders trash + cmd = 'find /ncdata/__groupfolders/trash/'.split() + + teamfolder_nr_files_trash_find = subprocess.Popen(cmd, stdout=subprocess.PIPE) + + teamfolder_nr_files_trash = subprocess.check_output(('wc', '-l'), + stdin=teamfolder_nr_files_trash_find.stdout) + + teamfolder_nr_files_trash_find.wait() + + teamfolder_nr_files_trash = int(teamfolder_nr_files_trash.decode().strip())-teamfolder_nr-1 + + # Storage used by team folders (excluding versions and trash) + cmd = "du -b -d1 {datadir}/__groupfolders/".format(datadir=datadir).split() + + teamfolder_total_size_output = subprocess.check_output(cmd) + + df_teamfolder_total_size = pd.read_table(io.StringIO(teamfolder_total_size_output.decode()),names=["folder_size", "folder"]) + + df_teamfolder_total_size["folder"] = df_teamfolder_total_size.folder.str.removeprefix("{datadir}/__groupfolders/".format(datadir=datadir)) + + df_teamfolder_total_size["folder_size_gb"] = df_teamfolder_total_size["folder_size"]*gb_conversion_factor + + # Storage used by team folders (excluding versions and trash) + teamfolder_total_size_gb = float(df_teamfolder_total_size.query("folder not in ('trash', 'versions') and folder != ''").folder_size_gb.sum()) + + # Storage used by team folders versions + teamfolder_total_versions_size_gb = float(df_teamfolder_total_size.query("folder == 'versions'").folder_size_gb.sum()) + + # Storage used by team folders trash + teamfolder_total_trash_size_gb = float(df_teamfolder_total_size.query("folder == 'trash'").folder_size_gb.sum()) + + results = { + "teamfolder_nr": teamfolder_nr, + "teamfolder_total_quota_gb": teamfolder_total_quota_gb, + "teamfolder_nr_files_trash": teamfolder_nr_files_trash, + "teamfolder_nr_files_versions":teamfolder_nr_files_versions, + "teamfolder_nr_files":teamfolder_nr_files, + "teamfolder_total_trash_size_gb": teamfolder_total_trash_size_gb, + "teamfolder_total_size_gb": teamfolder_total_size_gb, + "teamfolder_total_versions_size_gb": teamfolder_total_versions_size_gb, + } + json.dump(results, - open("/var/lib/zabbix/output/nc_teamfolders_metrics.json","w") - ) + open("/var/lib/zabbix/output/nc_teamfolders_metrics.json","w") + )