platypush/platypush/schemas/system/_cpu/_base.py

57 lines
1.5 KiB
Python

from marshmallow import pre_load
from .._base import SystemBaseSchema
class CpuInfoBaseSchema(SystemBaseSchema):
"""
Base schema for CPU info.
"""
@pre_load
def pre_load(self, data: dict, **_) -> dict:
data = super().pre_load(data)
if data.get('hz_advertised'):
data['frequency_advertised'] = data.pop('hz_advertised')[0]
if data.get('hz_actual'):
data['frequency_actual'] = data.pop('hz_actual')[0]
for key, value in data.items():
if key.endswith("_cache_size") and isinstance(value, str):
tokens = value.split(" ")
unit = None
if len(tokens) > 1:
unit = tokens[1]
value = int(tokens[0])
if unit == "KiB":
value *= 1024
elif unit == "MiB":
value *= 1024 * 1024
elif unit == "GiB":
value *= 1024 * 1024 * 1024
data[key] = value
return data
class CpuTimesBaseSchema(SystemBaseSchema):
"""
Base schema for CPU times.
"""
@pre_load
def pre_load(self, data, **_) -> dict:
"""
Convert the underlying object to dict and normalize all the percentage
values from [0, 100] to [0, 1].
"""
data = super().pre_load(data)
return {
key: value / 100.0
for key, value in (
data if isinstance(data, dict) else data._asdict()
).items()
}