forked from platypush/platypush
Support for CPU load_average
entity.
This commit is contained in:
parent
1cee0459cf
commit
0073239a40
2 changed files with 18 additions and 3 deletions
|
@ -1,10 +1,11 @@
|
||||||
import socket
|
import socket
|
||||||
|
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from typing import Union, List, Optional, Dict
|
from typing import Tuple, Union, List, Optional, Dict
|
||||||
from typing_extensions import override
|
from typing_extensions import override
|
||||||
|
|
||||||
from platypush.entities import Entity
|
from platypush.entities import Entity
|
||||||
|
from platypush.entities.devices import Device
|
||||||
from platypush.entities.managers import EntityManager
|
from platypush.entities.managers import EntityManager
|
||||||
from platypush.entities.sensors import NumericSensor, PercentSensor
|
from platypush.entities.sensors import NumericSensor, PercentSensor
|
||||||
from platypush.entities.system import (
|
from platypush.entities.system import (
|
||||||
|
@ -194,7 +195,7 @@ class SystemPlugin(SensorPlugin, EntityManager):
|
||||||
return self._cpu_frequency_per_cpu() if per_cpu else self._cpu_frequency_avg()
|
return self._cpu_frequency_per_cpu() if per_cpu else self._cpu_frequency_avg()
|
||||||
|
|
||||||
@action
|
@action
|
||||||
def load_avg(self) -> List[float]:
|
def load_avg(self) -> Tuple[float, float, float]:
|
||||||
"""
|
"""
|
||||||
Get the average load as a vector that represents the load within the last 1, 5 and 15 minutes.
|
Get the average load as a vector that represents the load within the last 1, 5 and 15 minutes.
|
||||||
"""
|
"""
|
||||||
|
@ -792,6 +793,7 @@ class SystemPlugin(SensorPlugin, EntityManager):
|
||||||
'cpu': {
|
'cpu': {
|
||||||
'frequency': self._cpu_frequency_avg(),
|
'frequency': self._cpu_frequency_avg(),
|
||||||
'info': self._cpu_info,
|
'info': self._cpu_info,
|
||||||
|
'load_avg': self.load_avg().output,
|
||||||
'stats': self._cpu_stats(),
|
'stats': self._cpu_stats(),
|
||||||
'times': self._cpu_times_avg(),
|
'times': self._cpu_times_avg(),
|
||||||
'percent': self.cpu_percent().output / 100.0, # type: ignore
|
'percent': self.cpu_percent().output / 100.0, # type: ignore
|
||||||
|
@ -839,6 +841,18 @@ class SystemPlugin(SensorPlugin, EntityManager):
|
||||||
for key, time_percent in cpu['times'].items()
|
for key, time_percent in cpu['times'].items()
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
|
Device(
|
||||||
|
id='system:cpu:load_avg',
|
||||||
|
name='Load Average',
|
||||||
|
children=[
|
||||||
|
NumericSensor(
|
||||||
|
id=f'system:cpu:load_avg:{mins}',
|
||||||
|
name=f'Last {mins} minute(s)',
|
||||||
|
value=round(val, 2),
|
||||||
|
)
|
||||||
|
for val, mins in zip(cpu['load_avg'], [1, 5, 15])
|
||||||
|
],
|
||||||
|
),
|
||||||
NumericSensor(
|
NumericSensor(
|
||||||
id='system:cpu:frequency',
|
id='system:cpu:frequency',
|
||||||
name='Frequency',
|
name='Frequency',
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
from dataclasses import dataclass, field
|
from dataclasses import dataclass, field
|
||||||
from typing import List, Optional
|
from typing import List, Optional, Tuple
|
||||||
|
|
||||||
from marshmallow import pre_load
|
from marshmallow import pre_load
|
||||||
from marshmallow.validate import Range
|
from marshmallow.validate import Range
|
||||||
|
@ -222,6 +222,7 @@ class CpuData:
|
||||||
times: CpuTimes
|
times: CpuTimes
|
||||||
frequency: CpuFrequency
|
frequency: CpuFrequency
|
||||||
stats: CpuStats
|
stats: CpuStats
|
||||||
|
load_avg: Tuple[float, float, float]
|
||||||
percent: float = percent_field()
|
percent: float = percent_field()
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue