18a3c0430323c28c1fbe8ceecd2cd8e58b64a9295Johnny Chen#!/usr/bin/env python
28a3c0430323c28c1fbe8ceecd2cd8e58b64a9295Johnny Chen
38a3c0430323c28c1fbe8ceecd2cd8e58b64a9295Johnny Chen"""This collects filesystem capacity info using the 'df' command. Tuples of
48a3c0430323c28c1fbe8ceecd2cd8e58b64a9295Johnny Chenfilesystem name and percentage are stored in a list. A simple report is
58a3c0430323c28c1fbe8ceecd2cd8e58b64a9295Johnny Chenprinted. Filesystems over 95% capacity are highlighted. Note that this does not
68a3c0430323c28c1fbe8ceecd2cd8e58b64a9295Johnny Chenparse filesystem names after the first space, so names with spaces in them will
78a3c0430323c28c1fbe8ceecd2cd8e58b64a9295Johnny Chenbe truncated. This will produce ambiguous results for automount filesystems on
88a3c0430323c28c1fbe8ceecd2cd8e58b64a9295Johnny ChenApple OSX. """
98a3c0430323c28c1fbe8ceecd2cd8e58b64a9295Johnny Chen
108a3c0430323c28c1fbe8ceecd2cd8e58b64a9295Johnny Chenimport pexpect
118a3c0430323c28c1fbe8ceecd2cd8e58b64a9295Johnny Chen
128a3c0430323c28c1fbe8ceecd2cd8e58b64a9295Johnny Chenchild = pexpect.spawn ('df')
138a3c0430323c28c1fbe8ceecd2cd8e58b64a9295Johnny Chen
148a3c0430323c28c1fbe8ceecd2cd8e58b64a9295Johnny Chen# parse 'df' output into a list.
158a3c0430323c28c1fbe8ceecd2cd8e58b64a9295Johnny Chenpattern = "\n(\S+).*?([0-9]+)%"
168a3c0430323c28c1fbe8ceecd2cd8e58b64a9295Johnny Chenfilesystem_list = []
178a3c0430323c28c1fbe8ceecd2cd8e58b64a9295Johnny Chenfor dummy in range (0, 1000):
188a3c0430323c28c1fbe8ceecd2cd8e58b64a9295Johnny Chen    i = child.expect ([pattern, pexpect.EOF])
198a3c0430323c28c1fbe8ceecd2cd8e58b64a9295Johnny Chen    if i == 0:
208a3c0430323c28c1fbe8ceecd2cd8e58b64a9295Johnny Chen        filesystem_list.append (child.match.groups())
218a3c0430323c28c1fbe8ceecd2cd8e58b64a9295Johnny Chen    else:
228a3c0430323c28c1fbe8ceecd2cd8e58b64a9295Johnny Chen        break
238a3c0430323c28c1fbe8ceecd2cd8e58b64a9295Johnny Chen
248a3c0430323c28c1fbe8ceecd2cd8e58b64a9295Johnny Chen# Print report
258a3c0430323c28c1fbe8ceecd2cd8e58b64a9295Johnny Chenprint
268a3c0430323c28c1fbe8ceecd2cd8e58b64a9295Johnny Chenfor m in filesystem_list:
278a3c0430323c28c1fbe8ceecd2cd8e58b64a9295Johnny Chen    s = "Filesystem %s is at %s%%" % (m[0], m[1])
288a3c0430323c28c1fbe8ceecd2cd8e58b64a9295Johnny Chen    # highlight filesystems over 95% capacity
298a3c0430323c28c1fbe8ceecd2cd8e58b64a9295Johnny Chen    if int(m[1]) > 95:
308a3c0430323c28c1fbe8ceecd2cd8e58b64a9295Johnny Chen        s = '! ' + s
318a3c0430323c28c1fbe8ceecd2cd8e58b64a9295Johnny Chen    else:
328a3c0430323c28c1fbe8ceecd2cd8e58b64a9295Johnny Chen        s = '  ' + s
338a3c0430323c28c1fbe8ceecd2cd8e58b64a9295Johnny Chen    print s
348a3c0430323c28c1fbe8ceecd2cd8e58b64a9295Johnny Chen
35