sysinfo.py 993 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  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. __all__ = ['load_average', 'df']
  7. if hasattr(os, 'getloadavg'):
  8. def load_average():
  9. return tuple(ceil(l * 1e2) / 1e2 for l in os.getloadavg())
  10. else: # pragma: no cover
  11. # Windows doesn't have getloadavg
  12. def load_average(): # noqa
  13. return (0.0, 0.0, 0.0)
  14. class df(object):
  15. def __init__(self, path):
  16. self.path = path
  17. @property
  18. def total_blocks(self):
  19. return self.stat.f_blocks * self.stat.f_frsize / 1024
  20. @property
  21. def available(self):
  22. return self.stat.f_bavail * self.stat.f_frsize / 1024
  23. @property
  24. def capacity(self):
  25. avail = self.stat.f_bavail
  26. used = self.stat.f_blocks - self.stat.f_bfree
  27. return int(ceil(used * 100.0 / (used + avail) + 0.5))
  28. @cached_property
  29. def stat(self):
  30. return os.statvfs(os.path.abspath(self.path))