From ab877571bb9d779bad8f7344d6b60994969aaa1b Mon Sep 17 00:00:00 2001 From: Michael Geers Date: Tue, 27 Feb 2024 22:59:18 +0100 Subject: [PATCH] Better offline detection (#12513) --- assets/js/app.js | 3 ++- assets/js/views/App.vue | 11 +++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/assets/js/app.js b/assets/js/app.js index 0f6903181..38b3e9573 100644 --- a/assets/js/app.js +++ b/assets/js/app.js @@ -24,7 +24,6 @@ const app = createApp({ watch: { offline: function (value) { console.log(`we are ${value ? "offline" : "online"}`); - sendToApp({ type: value ? "offline" : "online" }); }, }, methods: { @@ -51,9 +50,11 @@ const app = createApp({ }, setOnline: function () { this.offline = false; + sendToApp({ type: "online" }); }, setOffline: function () { this.offline = true; + sendToApp({ type: "offline" }); }, }, render: function () { diff --git a/assets/js/views/App.vue b/assets/js/views/App.vue index e80dbf72a..86944f22a 100644 --- a/assets/js/views/App.vue +++ b/assets/js/views/App.vue @@ -15,6 +15,16 @@ import BatterySettingsModal from "../components/BatterySettingsModal.vue"; import HelpModal from "../components/HelpModal.vue"; import collector from "../mixins/collector"; +// assume offline if not data received for 60 seconds +let lastDataReceived = new Date(); +const maxDataAge = 60 * 1000; +setInterval(() => { + if (new Date() - lastDataReceived > maxDataAge) { + console.log("no data received, assume we are offline"); + window.app.setOffline(); + } +}, 1000); + export default { name: "App", components: { GlobalSettingsModal, HelpModal, BatterySettingsModal }, @@ -120,6 +130,7 @@ export default { try { var msg = JSON.parse(evt.data); store.update(msg); + lastDataReceived = new Date(); } catch (error) { window.app.raise({ message: `Failed to parse web socket data: ${error.message} [${evt.data}]`,