81 lines
2.1 KiB
Python
Executable File
81 lines
2.1 KiB
Python
Executable File
#!/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)
|