#!/usr/bin/python3

import os
import re
import sys
import glob

def kmgt(sz, frac=1):
    t = {
        'K': pow(1024, 1),
        'M': pow(1024, 2),
        'G': pow(1024, 3),
        'T': pow(1024, 4),
        '': 1}

    for k in sorted(t, key=t.__getitem__, reverse=True):
        if sz >= t[k]:
            n = sz / float(t[k])
            tpl = "{:." + str(frac) + "f}{}"
            return tpl.format(n, k)

def du(path):
    total = 0

    if os.path.isfile(path):
        return os.stat(path).st_size

    for root, dirs, files in os.walk(path, topdown=False):
        for f in files:
            filepath = os.path.join(root, f)
            try:
                if os.path.isfile(filepath) and not os.path.islink(filepath):
                    total += os.path.getsize(filepath)
            except OSError as e:
                pass
    return total

# read parameters
prefix = os.getenv('PREFIX')
basename = os.getenv('BASENAME')

pathlist = os.getenv('PATHLIST','/root /home/*')
maxlim = os.getenv('MAXLIM','1G')
skip = os.getenv('SKIP','')
fullpath = int(os.getenv('FULLPATH','0'))


for path in pathlist.split(' '):
    for curpath in glob.glob(path):
        if skip and re.search(skip, curpath):
            continue

        sz = du(curpath)

        print("NAME: {}{}".format(prefix, curpath if fullpath else os.path.basename(curpath)))
        print("TAGS: dirsize")
        print("METHOD: numerical|maxlim={}".format(maxlim))
        print("DETAILS: {}".format(kmgt(sz)))
        print("STATUS: {}".format(sz))
        print()
