From d6c1ea45bf5569774730176e330656f0ec88ec00 Mon Sep 17 00:00:00 2001 From: "Roger A. Light" Date: Tue, 1 Nov 2022 15:07:55 +0000 Subject: [PATCH] $SYS updates are now aligned to `sys_interval` seconds. This means that if set to 10, for example, updates will be sent at times matching x0 seconds. Previously update intervals were aligned to the time the broker was started. --- ChangeLog.txt | 3 +++ src/sys_tree.c | 6 ++++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/ChangeLog.txt b/ChangeLog.txt index 2aaee403..2b64f6b7 100644 --- a/ChangeLog.txt +++ b/ChangeLog.txt @@ -65,6 +65,9 @@ Broker: preferred websockets implementation. - Add support for X-Forwarded-For header for built in websockets. - Report persistence stats when starting. +- $SYS updates are now aligned to `sys_interval` seconds, meaning that if set + to 10, for example, updates will be sent at times matching x0 seconds. + Previously update intervals were aligned to the time the broker was started. Plugins / plugin interface: - Add persist-sqlite plugin. diff --git a/src/sys_tree.c b/src/sys_tree.c index 0cba911a..a8acc53b 100644 --- a/src/sys_tree.c +++ b/src/sys_tree.c @@ -226,9 +226,10 @@ void sys_tree__update(void) uint32_t len; bool initial_publish; time_t next_event; + static time_t last_update_real = 0; if(db.config->sys_interval){ - next_event = last_update - db.now_s + db.config->sys_interval; + next_event = db.config->sys_interval - db.now_real_s % db.config->sys_interval - 1; if(next_event <= 0){ next_event = db.config->sys_interval; } @@ -236,7 +237,7 @@ void sys_tree__update(void) } if(db.config->sys_interval - && db.now_s - db.config->sys_interval >= last_update){ + && db.now_real_s % db.config->sys_interval == 0 && last_update_real != db.now_real_s){ uptime = db.now_s - start_time; len = (uint32_t)snprintf(buf, BUFLEN, "%" PRIu64 " seconds", (uint64_t)uptime); @@ -408,6 +409,7 @@ void sys_tree__update(void) } last_update = db.now_s; + last_update_real = db.now_real_s; } }