sysinfo.py 959 B

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. # -*- coding: utf-8 -*-
  2. from __future__ import absolute_import
  3. import os
  4. from math import ceil
  5. from kombu.utils import cached_property
  6. if hasattr(os, 'getloadavg'):
  7. def load_average():
  8. return tuple(ceil(l * 1e2) / 1e2 for l in os.getloadavg())
  9. else: # pragma: no cover
  10. # Windows doesn't have getloadavg
  11. def load_average(): # noqa
  12. return (0.0, 0.0, 0.0)
  13. class df(object):
  14. def __init__(self, path):
  15. self.path = path
  16. @property
  17. def total_blocks(self):
  18. return self.stat.f_blocks * self.stat.f_frsize / 1024
  19. @property
  20. def available(self):
  21. return self.stat.f_bavail * self.stat.f_frsize / 1024
  22. @property
  23. def capacity(self):
  24. avail = self.stat.f_bavail
  25. used = self.stat.f_blocks - self.stat.f_bfree
  26. return int(ceil(used * 100.0 / (used + avail) + 0.5))
  27. @cached_property
  28. def stat(self):
  29. return os.statvfs(os.path.abspath(self.path))