Allow different timestamps (zones or dates) between client and server while keeping the temperature graph working
The server now sends the current server time with each temperature update as well as the initial temperature data, allowing the client to translate the timestamps contained in the temperature logs to its local timescale.
Followup to commit f19d0f0360 which caused a problem with large deviations between server and client time.
This commit is contained in:
parent
9ecd59c6e1
commit
d43bc2e17e
2 changed files with 16 additions and 11 deletions
|
|
@ -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})
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
Loading…
Reference in a new issue