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