From 00040d4372e34b4848cd375a17295bc30d555e37 Mon Sep 17 00:00:00 2001 From: DL6ER Date: Thu, 23 Apr 2020 16:24:12 +0200 Subject: [PATCH] Fill missing time intervals with zero Signed-off-by: DL6ER --- api_db.php | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/api_db.php b/api_db.php index 33f8728b..99358589 100644 --- a/api_db.php +++ b/api_db.php @@ -368,15 +368,30 @@ if (isset($_GET['getGraphData']) && $auth) // Parse the DB result into graph data, filling in missing interval sections with zero function parseDBData($results, $interval, $from, $until) { $data = array(); + $first_db_timestamp = -1; if(!is_bool($results)) { // Read in the data while($row = $results->fetchArray()) { // $data[timestamp] = value_in_this_interval $data[$row[0]] = intval($row[1]); + if($first_db_timestamp === -1) + $first_db_timestamp = intval($row[0]); } } + // It is unpredictable what the first timestamp returned by the database + // will be. This depends on live data. Hence, we re-align the FROM + // timestamp to avoid unaligned holes appearing as additional + // (incorrect) data points + $aligned_from = $from + (($first_db_timestamp - $from) % $interval); + + // Fill gaps in returned data + for($i = $aligned_from; $i < $until; $i += $interval) { + if(!array_key_exists($i, $data)) + $data[$i] = 0; + } + return $data; }