'Obtain and print disk usage statistics
:param hosts: set of hosts to check. in the format of:
set([(\'127.0.0.1\', 6020), (\'127.0.0.2\', 6030)])'

def disk_usage(self, hosts, top=0, lowest=0, human_readable=False):

    stats = {}
    highs = []
    lows = []
    raw_total_used = []
    raw_total_avail = []
    percents = {}
    top_percents = ([(None, 0)] * top)
    low_percents = ([(None, 100)] * lowest)
    recon = Scout('diskusage', self.verbose, self.suppress_errors, self.timeout)
    print(('[%s]    Checking    disk    usage    now' % self._ptime()))
    for (url, response, status, ts_start, ts_end) in self.pool.imap(recon.scout, hosts):
        if (status == 200):
            hostusage = []
            for entry in response:
                if (not isinstance(entry['mounted'], bool)):
                    print(('->    %s/%s:    Error:    %s' % (url, entry['device'], entry['mounted'])))
                elif entry['mounted']:
                    used = ((float(entry['used']) / float(entry['size'])) * 100.0)
                    raw_total_used.append(entry['used'])
                    raw_total_avail.append(entry['avail'])
                    hostusage.append(round(used, 2))
                    for (ident, oused) in top_percents:
                        if (oused < used):
                            top_percents.append((((url + '    ') + entry['device']), used))
                            top_percents.sort(key=(lambda x: (- x[1])))
                            top_percents.pop()
                            break
                    for (ident, oused) in low_percents:
                        if (oused > used):
                            low_percents.append((((url + '    ') + entry['device']), used))
                            low_percents.sort(key=(lambda x: x[1]))
                            low_percents.pop()
                            break
            stats[url] = hostusage
    for url in stats:
        if (len(stats[url]) > 0):
            low = min(stats[url])
            high = max(stats[url])
            highs.append(high)
            lows.append(low)
            for percent in stats[url]:
                percents[int(percent)] = (percents.get(int(percent), 0) + 1)
        else:
            print(('->    %s:    Error.    No    drive    info    available.' % url))
    if (len(lows) > 0):
        low = min(lows)
        high = max(highs)
        print('Distribution    Graph:')
        mul = (69.0 / max(percents.values()))
        for percent in sorted(percents):
            print(('%    3d%%%5d    %s' % (percent, percents[percent], ('*' * int((percents[percent] * mul))))))
        raw_used = sum(raw_total_used)
        raw_avail = sum(raw_total_avail)
        raw_total = (raw_used + raw_avail)
        avg_used = ((100.0 * raw_used) / raw_total)
        if human_readable:
            raw_used = size_suffix(raw_used)
            raw_avail = size_suffix(raw_avail)
            raw_total = size_suffix(raw_total)
        print(('Disk    usage:    space    used:    %s    of    %s' % (raw_used, raw_total)))
        print(('Disk    usage:    space    free:    %s    of    %s' % (raw_avail, raw_total)))
        print(('Disk    usage:    lowest:    %s%%,    highest:    %s%%,    avg:    %s%%' % (low, high, avg_used)))
    else:
        print('No    hosts    returned    valid    data.')
    print(('=' * 79))
    if top_percents:
        print(('TOP    %s' % top))
        for (ident, used) in top_percents:
            if ident:
                (url, device) = ident.split()
                host = urlparse(url).netloc.split(':')[0]
                print(('%.02f%%        %s' % (used, ('%-15s    %s' % (host, device)))))
    if low_percents:
        print(('LOWEST    %s' % lowest))
        for (ident, used) in low_percents:
            if ident:
                (url, device) = ident.split()
                host = urlparse(url).netloc.split(':')[0]
                print(('%.02f%%        %s' % (used, ('%-15s    %s' % (host, device)))))
