data_store: replace PeriodicCallback

Signed-off-by:  Eric Callahan <arksine.code@gmail.com>
This commit is contained in:
Eric Callahan 2021-12-09 06:31:08 -05:00
parent 4e625aef37
commit 5dadc2067d
1 changed files with 9 additions and 8 deletions

View File

@ -8,7 +8,6 @@ from __future__ import annotations
import logging import logging
import time import time
from collections import deque from collections import deque
from tornado.ioloop import PeriodicCallback
# Annotation imports # Annotation imports
from typing import ( from typing import (
@ -28,7 +27,7 @@ if TYPE_CHECKING:
GCQueue = Deque[Dict[str, Any]] GCQueue = Deque[Dict[str, Any]]
TempStore = Dict[str, Dict[str, Deque[float]]] TempStore = Dict[str, Dict[str, Deque[float]]]
TEMPERATURE_UPDATE_MS = 1000 TEMP_UPDATE_TIME = 1.
class DataStore: class DataStore:
def __init__(self, config: ConfigHelper) -> None: def __init__(self, config: ConfigHelper) -> None:
@ -40,8 +39,9 @@ class DataStore:
self.last_temps: Dict[str, Tuple[float, ...]] = {} self.last_temps: Dict[str, Tuple[float, ...]] = {}
self.gcode_queue: GCQueue = deque(maxlen=self.gcode_store_size) self.gcode_queue: GCQueue = deque(maxlen=self.gcode_store_size)
self.temperature_store: TempStore = {} self.temperature_store: TempStore = {}
self.temp_update_cb = PeriodicCallback( eventloop = self.server.get_event_loop()
self._update_temperature_store, TEMPERATURE_UPDATE_MS) self.temp_update_timer = eventloop.register_timer(
self._update_temperature_store)
# Register status update event # Register status update event
self.server.register_event_handler( self.server.register_event_handler(
@ -102,12 +102,12 @@ class DataStore:
del self.last_temps[sensor] del self.last_temps[sensor]
# Update initial temperatures # Update initial temperatures
self._set_current_temps(status) self._set_current_temps(status)
self.temp_update_cb.start() self.temp_update_timer.start()
else: else:
logging.info("No sensors found") logging.info("No sensors found")
self.last_temps = {} self.last_temps = {}
self.temperature_store = {} self.temperature_store = {}
self.temp_update_cb.stop() self.temp_update_timer.stop()
def _set_current_temps(self, data: Dict[str, Any]) -> None: def _set_current_temps(self, data: Dict[str, Any]) -> None:
for sensor in self.temperature_store: for sensor in self.temperature_store:
@ -119,7 +119,7 @@ class DataStore:
data[sensor].get('power', last_val[2]), data[sensor].get('power', last_val[2]),
data[sensor].get('speed', last_val[3])) data[sensor].get('speed', last_val[3]))
def _update_temperature_store(self) -> None: def _update_temperature_store(self, eventtime: float) -> float:
# XXX - If klippy is not connected, set values to zero # XXX - If klippy is not connected, set values to zero
# as they are unknown? # as they are unknown?
for sensor, vals in self.last_temps.items(): for sensor, vals in self.last_temps.items():
@ -127,6 +127,7 @@ class DataStore:
for val, item in zip(vals[1:], ["targets", "powers", "speeds"]): for val, item in zip(vals[1:], ["targets", "powers", "speeds"]):
if item in self.temperature_store[sensor]: if item in self.temperature_store[sensor]:
self.temperature_store[sensor][item].append(val) self.temperature_store[sensor][item].append(val)
return eventtime + TEMP_UPDATE_TIME
async def _handle_temp_store_request(self, async def _handle_temp_store_request(self,
web_request: WebRequest web_request: WebRequest
@ -137,7 +138,7 @@ class DataStore:
return store return store
async def close(self) -> None: async def close(self) -> None:
self.temp_update_cb.stop() self.temp_update_timer.stop()
def _update_gcode_store(self, response: str) -> None: def _update_gcode_store(self, response: str) -> None:
curtime = time.time() curtime = time.time()