From 48b89a98010a58bc572f7e2041c21e80085142cd Mon Sep 17 00:00:00 2001 From: l_samenv Date: Wed, 25 Sep 2024 07:46:28 +0200 Subject: [PATCH] fix mechanism to strip overlapping data for live update fix bug when when there was no last value yet --- influxgraph.py | 28 +++++++++++----------------- 1 file changed, 11 insertions(+), 17 deletions(-) diff --git a/influxgraph.py b/influxgraph.py index f7104fc..b070783 100644 --- a/influxgraph.py +++ b/influxgraph.py @@ -190,7 +190,7 @@ class InfluxGraph: """ Polls the last known values for all the available variables, and returns only those whose polled values are more recent than the most recent displayed one. Every plain minute, all the variables are returned with a point having their last known value at the current timestamp to synchronize all the curves on the GUI. - + Returns : {"type":"graph-update", "time":(int), "graph":{(str):[[(int),(float)]]}} | None : a dictionnary with its "graph-update" type (so it can be processed by the client), and a "graph" dictionnary with the variable names as key, and an array of points, which are an array containing the timestamp @@ -201,21 +201,15 @@ class InfluxGraph: now, = self.get_abs_time([0]) result = self.influx_data_getter.poll_last_values(list(self.variables.keys()), self.lastvalues, now) - for variable in self.lastvalues.keys(): - if variable in result.keys(): - - # removes points older than the last known point (queries are in seconds and might return points already displayed) - while len(result[variable]) > 0: - if result[variable][0][0] <= self.lastvalues[variable][0]: - result[variable].pop(0) - else: - break - - if len(result[variable]) > 0 and result[variable][-1][0] > self.lastvalues[variable][0]: - self.lastvalues[variable] = (result[variable][-1][0], result[variable][-1][1]) - else: - del result[variable] - + for variable, values in list(result.items()): + tlast = self.lastvalues.get(variable, (0,))[0] + # removes points older than the last known point (queries are in seconds and might return points already displayed) + while values and values[0][0] <= tlast: + values.pop(0) + if values and values[-1][0] > tlast: + self.lastvalues[variable] = values[-1] + else: + del result[variable] if int(now / 60) != int(self.end_query / 60): # Update unchanged values every plain minute for var, (_, lastx) in self.lastvalues.items(): @@ -224,4 +218,4 @@ class InfluxGraph: self.end_query = now if len(result) > 0: return dict(type='graph-update', time=now, graph=result) - return None \ No newline at end of file + return None