def METHOD_NAME(self, usage=True):
    from utilities.converters import convert_size
    if self.zpool:
        data = {
            "type": self.type,
            "name": self.name,
            "capabilities": self.capabilities,
            "head": self.zpool,
        }
        if not usage:
            return data
        cmd = ["zpool", "get", "-H", "size,alloc,free", "-p", self.zpool]
        out, err, ret = justcall(cmd)
        if ret != 0:
            data["error"] = err
            return data
        lines = out.splitlines()
        data["size"] = convert_size(lines[0].split()[2], default_unit="", _to="kb")
        data["used"] = convert_size(lines[1].split()[2], default_unit="", _to="kb")
        data["free"] = convert_size(lines[2].split()[2], default_unit="", _to="kb")
        return data
    elif self.vg:
        data = {
            "type": self.type,
            "name": self.name,
            "capabilities": self.capabilities,
            "head": self.vg,
        }
        if not usage:
            return data
        cmd = ["vgs", "-o", "Size,Free", "--units", "k", "--noheadings", self.vg]
        out, err, ret = justcall(cmd)
        if ret != 0:
            return data
        l = out.splitlines()[-1].split()
        data["free"] = int(l[1].split(".")[0].rstrip("k"))
        data["size"] = int(l[0].split(".")[0].rstrip("k"))
        data["used"] = data["size"] - data["free"]
        return data
    else:
        if not os.path.exists(self.path):
            os.makedirs(self.path)
        data = {
            "type": self.type,
            "name": self.name,
            "capabilities": self.capabilities,
            "head": self.path,
        }
        if not usage:
            return data
        cmd = ["df", "-P", self.path]
        out, err, ret = justcall(cmd)
        if ret != 0:
            return data
        l = out.splitlines()[-1].split()
        data["free"] = int(l[3])
        data["used"] = int(l[2])
        data["size"] = int(l[1])
        return data