#!/usr/bin/python # # Imports # import os import sys import time import commands import argparse # # Methods # def get_disk_usage(path, human_readable): '''disk usage in human readable format (e.g. '2,1GB')''' arguments = '-sh' if human_readable else '-s' path = os.path.realpath(path) command = 'sudo du %s %s' % (arguments, path) status, output = commands.getstatusoutput(command) if status is not 0: raise Exception(command) disk_usage = output.split()[0] if not human_readable: # du reports in units of 1024 bytes, convert to plain number of bytes disk_usage = int(disk_usage) * 1024 return disk_usage # # Directories to scan # hostname = 'server' interval = 10 directories = [ #['bram', '/media/data/Personal/Bram'], ['rik', '/media/data/Personal/Rik'], ['books', '/media/data/Shared/Books'], ['games', '/media/data/Shared/Games'], ['misc', '/media/data/Shared/Miscellaneous'], ['shows', '/media/data/Shared/Video/Shows'], ['movies', '/media/data/Shared/Video/Movies'], ['music', '/media/data/Shared/Music'], ['photographs', '/media/data/Shared/Photographs'], ['pictures', '/media/data/Shared/Pictures'], ['raw', '/media/data/Shared/Raw'], ['software', '/media/data/Shared/Software'] ] # # Command line arguments # parser = argparse.ArgumentParser(description='Get BTRFS disk usage') parser.add_argument('-s', action='store_true', help='print in human readable format') args = parser.parse_args() human_readable = args.s # # Main # if (human_readable): for (name, path) in directories: disk_usage = get_disk_usage(path, human_readable) print('%s: %s' % (name, disk_usage)) else: # RRD mode while True: for (name, path) in directories: disk_usage = get_disk_usage(path, human_readable) timestamp = int(time.time()) size = float(disk_usage) print('PUTVAL {}/exec-du_{}/gauge-size {}:{:.1f}'.format(hostname, name, timestamp, size)) sys.stdout.flush() time.sleep(interval)