diff --git a/src/octoprint/server/util/sockjs.py b/src/octoprint/server/util/sockjs.py index 67137a99..b8985ef5 100644 --- a/src/octoprint/server/util/sockjs.py +++ b/src/octoprint/server/util/sockjs.py @@ -8,6 +8,7 @@ __copyright__ = "Copyright (C) 2014 The OctoPrint Project - Released under terms import logging import threading import sockjs.tornado +import time import octoprint.timelapse import octoprint.server @@ -98,6 +99,7 @@ class PrinterStateConnection(sockjs.tornado.SockJSConnection, octoprint.printer. busy_files.append(dict(origin=data["job"]["file"]["origin"], name=data["job"]["file"]["name"])) data.update({ + "serverTime": time.time(), "temps": temperatures, "logs": logs, "messages": messages, @@ -106,7 +108,9 @@ class PrinterStateConnection(sockjs.tornado.SockJSConnection, octoprint.printer. self._emit("current", data) def on_printer_send_initial_data(self, data): - self._emit("history", data) + data_to_send = dict(data) + data_to_send["serverTime"] = time.time() + self._emit("history", data_to_send) def sendEvent(self, type, payload=None): self._emit("event", {"type": type, "payload": payload}) diff --git a/src/octoprint/static/js/app/viewmodels/temperature.js b/src/octoprint/static/js/app/viewmodels/temperature.js index 4657630a..9b58d2ec 100644 --- a/src/octoprint/static/js/app/viewmodels/temperature.js +++ b/src/octoprint/static/js/app/viewmodels/temperature.js @@ -117,13 +117,13 @@ $(function() { self.fromCurrentData = function(data) { self._processStateData(data.state); - self._processTemperatureUpdateData(data.temps); + self._processTemperatureUpdateData(data.serverTime, data.temps); self._processOffsetData(data.offsets); }; self.fromHistoryData = function(data) { self._processStateData(data.state); - self._processTemperatureHistoryData(data.temps); + self._processTemperatureHistoryData(data.serverTime, data.temps); self._processOffsetData(data.offsets); }; @@ -137,7 +137,7 @@ $(function() { self.isLoading(data.flags.loading); }; - self._processTemperatureUpdateData = function(data) { + self._processTemperatureUpdateData = function(serverTime, data) { if (data.length == 0) return; @@ -161,12 +161,12 @@ $(function() { if (!CONFIG_TEMPERATURE_GRAPH) return; - self.temperatures = self._processTemperatureData(data, self.temperatures); + self.temperatures = self._processTemperatureData(serverTime, data, self.temperatures); self.updatePlot(); }; - self._processTemperatureHistoryData = function(data) { - self.temperatures = self._processTemperatureData(data); + self._processTemperatureHistoryData = function(serverTime, data) { + self.temperatures = self._processTemperatureData(serverTime, data); self.updatePlot(); }; @@ -183,8 +183,9 @@ $(function() { } }; - self._processTemperatureData = function(data, result) { + self._processTemperatureData = function(serverTime, data, result) { var types = _.keys(self.heaterOptions()); + var clientTime = Date.now(); // make sure result is properly initialized if (!result) { @@ -201,7 +202,8 @@ $(function() { // convert data _.each(data, function(d) { - var time = d.time * 1000; + var timeDiff = (serverTime - d.time) * 1000; + var time = clientTime - timeDiff; _.each(types, function(type) { if (!d[type]) return; result[type].actual.push([time, d[type].actual]); @@ -211,9 +213,8 @@ $(function() { }) }); - var now = Date.now(); var filterOld = function(item) { - return item[0] >= now - self.temperature_cutoff() * 60 * 1000; + return item[0] >= clientTime - self.temperature_cutoff() * 60 * 1000; }; _.each(_.keys(self.heaterOptions()), function(d) {