Coverage for /pythoncovmergedfiles/medio/medio/usr/local/lib/python3.8/site-packages/prometheus_client/platform_collector.py: 88%

Shortcuts on this page

r m x   toggle line displays

j k   next/prev highlighted chunk

0   (zero) top of page

1   (one) first highlighted chunk

32 statements  

1import platform as pf 

2from typing import Any, Iterable, Optional 

3 

4from .metrics_core import GaugeMetricFamily, Metric 

5from .registry import Collector, CollectorRegistry, REGISTRY 

6 

7 

8class PlatformCollector(Collector): 

9 """Collector for python platform information""" 

10 

11 def __init__(self, 

12 registry: Optional[CollectorRegistry] = REGISTRY, 

13 platform: Optional[Any] = None, 

14 ): 

15 self._platform = pf if platform is None else platform 

16 info = self._info() 

17 system = self._platform.system() 

18 if system == "Java": 

19 info.update(self._java()) 

20 self._metrics = [ 

21 self._add_metric("python_info", "Python platform information", info) 

22 ] 

23 if registry: 

24 registry.register(self) 

25 

26 def collect(self) -> Iterable[Metric]: 

27 return self._metrics 

28 

29 @staticmethod 

30 def _add_metric(name, documentation, data): 

31 labels = data.keys() 

32 values = [data[k] for k in labels] 

33 g = GaugeMetricFamily(name, documentation, labels=labels) 

34 g.add_metric(values, 1) 

35 return g 

36 

37 def _info(self): 

38 major, minor, patchlevel = self._platform.python_version_tuple() 

39 return { 

40 "version": self._platform.python_version(), 

41 "implementation": self._platform.python_implementation(), 

42 "major": major, 

43 "minor": minor, 

44 "patchlevel": patchlevel 

45 } 

46 

47 def _java(self): 

48 java_version, _, vminfo, osinfo = self._platform.java_ver() 

49 vm_name, vm_release, vm_vendor = vminfo 

50 return { 

51 "jvm_version": java_version, 

52 "jvm_release": vm_release, 

53 "jvm_vendor": vm_vendor, 

54 "jvm_name": vm_name 

55 } 

56 

57 

58PLATFORM_COLLECTOR = PlatformCollector() 

59"""PlatformCollector in default Registry REGISTRY"""