platform_collector.py 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. # -*- coding: utf-8
  2. from __future__ import unicode_literals
  3. import platform as pf
  4. from .metrics_core import GaugeMetricFamily
  5. from .registry import REGISTRY
  6. class PlatformCollector(object):
  7. """Collector for python platform information"""
  8. def __init__(self, registry=REGISTRY, platform=None):
  9. self._platform = pf if platform is None else platform
  10. info = self._info()
  11. system = self._platform.system()
  12. if system == "Java":
  13. info.update(self._java())
  14. self._metrics = [
  15. self._add_metric("python_info", "Python platform information", info)
  16. ]
  17. if registry:
  18. registry.register(self)
  19. def collect(self):
  20. return self._metrics
  21. @staticmethod
  22. def _add_metric(name, documentation, data):
  23. labels = data.keys()
  24. values = [data[k] for k in labels]
  25. g = GaugeMetricFamily(name, documentation, labels=labels)
  26. g.add_metric(values, 1)
  27. return g
  28. def _info(self):
  29. major, minor, patchlevel = self._platform.python_version_tuple()
  30. return {
  31. "version": self._platform.python_version(),
  32. "implementation": self._platform.python_implementation(),
  33. "major": major,
  34. "minor": minor,
  35. "patchlevel": patchlevel
  36. }
  37. def _java(self):
  38. java_version, _, vminfo, osinfo = self._platform.java_ver()
  39. vm_name, vm_release, vm_vendor = vminfo
  40. return {
  41. "jvm_version": java_version,
  42. "jvm_release": vm_release,
  43. "jvm_vendor": vm_vendor,
  44. "jvm_name": vm_name
  45. }
  46. PLATFORM_COLLECTOR = PlatformCollector()
  47. """PlatformCollector in default Registry REGISTRY"""