3
from landscape.lib.monitor import CoverageMonitor
4
from landscape.lib.sysstats import get_thermal_zones
6
from landscape.accumulate import Accumulator
7
from landscape.monitor.monitor import MonitorPlugin
10
class Temperature(MonitorPlugin):
11
"""Capture thermal zone temperatures and trip point settings."""
13
persist_name = "temperature"
14
# Prevent the Plugin base-class from scheduling looping calls.
17
def __init__(self, interval=30, monitor_interval=60*60,
18
thermal_zone_path=None, create_time=time.time):
19
self.thermal_zone_path = thermal_zone_path
20
self._interval = interval
21
self._monitor_interval = monitor_interval
22
self._create_time = create_time
23
self._thermal_zones = []
24
self._temperatures = {}
26
for thermal_zone in get_thermal_zones(self.thermal_zone_path):
27
self._thermal_zones.append(thermal_zone.name)
28
self._temperatures[thermal_zone.name] = []
30
def register(self, registry):
31
super(Temperature, self).register(registry)
32
if self._thermal_zones:
33
self.registry = registry
34
self._accumulate = Accumulator(self._persist,
35
self.registry.step_size)
37
registry.reactor.call_every(self._interval, self.run)
39
self._monitor = CoverageMonitor(self._interval, 0.8,
40
"temperature snapshot",
41
create_time=self._create_time)
42
registry.reactor.call_every(self._monitor_interval,
44
registry.reactor.call_on("stop", self._monitor.log, priority=2000)
45
self.call_on_accepted("temperature", self.exchange, True)
47
def create_messages(self):
49
for zone in self._thermal_zones:
50
temperatures = self._temperatures[zone]
51
self._temperatures[zone] = []
54
messages.append({"type": "temperature", "thermal-zone": zone,
55
"temperatures": temperatures})
58
def send_messages(self, urgent):
59
for message in self.create_messages():
60
self.registry.broker.send_message(message, urgent=urgent)
62
def exchange(self, urgent=False):
63
self.registry.broker.call_if_accepted("temperature",
64
self.send_messages, urgent)
68
now = int(self._create_time())
69
for zone in get_thermal_zones(self.thermal_zone_path):
70
if zone.temperature_value is not None:
71
key = ("accumulate", zone.name)
72
step_data = self._accumulate(now, zone.temperature_value, key)
74
self._temperatures[zone.name].append(step_data)