sysinfo.py 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. # -*- coding: utf-8 -*-
  2. """System information utilities."""
  3. from __future__ import absolute_import, unicode_literals
  4. import os
  5. from math import ceil
  6. from kombu.utils.objects import cached_property
  7. __all__ = ['load_average', 'df']
  8. if hasattr(os, 'getloadavg'):
  9. def _load_average():
  10. return tuple(ceil(l * 1e2) / 1e2 for l in os.getloadavg())
  11. else: # pragma: no cover
  12. # Windows doesn't have getloadavg
  13. def _load_average(): # noqa
  14. return (0.0, 0.0, 0.0)
  15. def load_average():
  16. """Return system load average as a triple."""
  17. return _load_average()
  18. class df(object):
  19. """Disk information."""
  20. def __init__(self, path):
  21. self.path = path
  22. @property
  23. def total_blocks(self):
  24. return self.stat.f_blocks * self.stat.f_frsize / 1024
  25. @property
  26. def available(self):
  27. return self.stat.f_bavail * self.stat.f_frsize / 1024
  28. @property
  29. def capacity(self):
  30. avail = self.stat.f_bavail
  31. used = self.stat.f_blocks - self.stat.f_bfree
  32. return int(ceil(used * 100.0 / (used + avail) + 0.5))
  33. @cached_property
  34. def stat(self):
  35. return os.statvfs(os.path.abspath(self.path))