#!/usr/bin/python3 # # Imports # import sys import time import subprocess 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" command = "du %s %s" % (arguments, path) status, output = subprocess.getstatusoutput(command) if status != 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 = 'shuttle' interval = 10 directories = [ ['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'], ['software', '/media/data/Shared/Software'] ] # # Command line arguments # parser = argparse.ArgumentParser(description="Get DU 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)