diff --git a/octoprint/printer.py b/octoprint/printer.py index 442979c..bf2438b 100644 --- a/octoprint/printer.py +++ b/octoprint/printer.py @@ -29,6 +29,8 @@ def getConnectionOptions(): class Printer(): def __init__(self, gcodeManager): + from collections import deque + self._gcodeManager = gcodeManager # state @@ -37,19 +39,19 @@ class Printer(): self._targetTemp = None self._targetBedTemp = None self._temps = { - "actual": [], - "target": [], - "actualBed": [], - "targetBed": [] + "actual": deque([], 300), + "target": deque([], 300), + "actualBed": deque([], 300), + "targetBed": deque([], 300) } self._tempBacklog = [] self._latestMessage = None - self._messages = [] + self._messages = deque([], 300) self._messageBacklog = [] self._latestLog = None - self._log = [] + self._log = deque([], 300) self._logBacklog = [] self._state = None @@ -233,12 +235,10 @@ class Printer(): def _addLog(self, log): self._log.append(log) - self._log = self._log[-300:] self._stateMonitor.addLog(log) def _addMessage(self, message): self._messages.append(message) - self._messages = self._messages[-300:] self._stateMonitor.addMessage(message) def _setProgressData(self, progress, filepos, printTime, printTimeLeft): @@ -264,16 +264,9 @@ class Printer(): currentTimeUtc = int(time.time() * 1000) self._temps["actual"].append((currentTimeUtc, temp)) - self._temps["actual"] = self._temps["actual"][-300:] - self._temps["target"].append((currentTimeUtc, targetTemp)) - self._temps["target"] = self._temps["target"][-300:] - self._temps["actualBed"].append((currentTimeUtc, bedTemp)) - self._temps["actualBed"] = self._temps["actualBed"][-300:] - self._temps["targetBed"].append((currentTimeUtc, bedTargetTemp)) - self._temps["targetBed"] = self._temps["targetBed"][-300:] self._temp = temp self._bedTemp = bedTemp @@ -315,9 +308,9 @@ class Printer(): try: data = self._stateMonitor.getCurrentData() data.update({ - "temperatureHistory": self._temps, - "logHistory": self._log, - "messageHistory": self._messages + "temperatureHistory": list(self._temps), + "logHistory": list(self._log), + "messageHistory": list(self._messages) }) callback.sendHistoryData(data) except Exception, err: diff --git a/octoprint/util/comm.py b/octoprint/util/comm.py index 1ce3fca..20d306e 100644 --- a/octoprint/util/comm.py +++ b/octoprint/util/comm.py @@ -366,6 +366,8 @@ class MachineCom(object): STATE_TRANSFERING_FILE = 11 def __init__(self, port = None, baudrate = None, callbackObject = None): + from collections import deque + self._logger = logging.getLogger(__name__) self._serialLogger = logging.getLogger("SERIAL") @@ -400,7 +402,7 @@ class MachineCom(object): self._alwaysSendChecksum = settings().getBoolean(["feature", "alwaysSendChecksum"]) self._currentLine = 0 self._resendDelta = None - self._lastLines = [] + self._lastLines = deque([], 50) self._sendNextLock = threading.Lock() self._sendingLock = threading.Lock() @@ -971,15 +973,13 @@ class MachineCom(object): self._currentLine = newLineNumber + 1 # after a reset of the line number we have no way to determine what line exactly the printer now wants - self._lastLines = [] + self._lastLines.clear() self._resendDelta = None return self._doSend(cmd, sendChecksum) def _addToLastLines(self, cmd): self._lastLines.append(cmd) - if len(self._lastLines) > 50: - self._lastLines = self._lastLines[-50:] # only keep the last 50 lines in memory self._logger.debug("Got %d lines of history in memory" % len(self._lastLines)) def _doSend(self, cmd, sendChecksum=False):