From e5f73771d348644e3d8b4b40f4fe611a81ec8993 Mon Sep 17 00:00:00 2001 From: Thomas Basler Date: Tue, 20 Sep 2022 19:52:16 +0200 Subject: [PATCH] webapp: Extended NTP admin to sync time manually --- webapp/src/components/NtpAdminView.vue | 91 ++++++++++++++++++++++++++ 1 file changed, 91 insertions(+) diff --git a/webapp/src/components/NtpAdminView.vue b/webapp/src/components/NtpAdminView.vue index eb28a44..83e2d71 100644 --- a/webapp/src/components/NtpAdminView.vue +++ b/webapp/src/components/NtpAdminView.vue @@ -50,6 +50,38 @@ + + @@ -72,6 +104,9 @@ export default defineComponent({ }, timezoneList: {}, timezoneSelect: "", + mcuTime: new Date(), + localTime: new Date(), + dataAgeInterval: 0, alertMessage: "", alertType: "info", showAlert: false, @@ -86,8 +121,16 @@ export default defineComponent({ created() { this.getTimezoneList(); this.getNtpConfig(); + this.getCurrentTime(); + this.initDataAgeing(); }, methods: { + initDataAgeing() { + this.dataAgeInterval = setInterval(() => { + this.mcuTime = new Date(this.mcuTime.setSeconds(this.mcuTime.getSeconds() + 1)); + this.localTime = new Date(this.localTime.setSeconds(this.localTime.getSeconds() + 1)); + }, 1000); + }, getTimezoneList() { this.timezoneLoading = true; fetch("/zones.json") @@ -112,6 +155,54 @@ export default defineComponent({ } ); }, + getCurrentTime() { + this.dataLoading = true; + fetch("/api/ntp/time") + .then((response) => response.json()) + .then( + (data) => { + this.mcuTime = new Date( + data.year, data.month - 1, data.day, + data.hour, data.minute, data.second); + this.dataLoading = false; + } + ); + }, + setCurrentTime() { + const formData = new FormData(); + const time = { + year: this.localTime.getFullYear(), + month: this.localTime.getMonth() + 1, + day: this.localTime.getDate(), + hour: this.localTime.getHours(), + minute: this.localTime.getMinutes(), + second: this.localTime.getSeconds(), + }; + console.log(time); + formData.append("data", JSON.stringify(time)); + + fetch("/api/ntp/time", { + method: "POST", + body: formData, + }) + .then(function (response) { + if (response.status != 200) { + throw response.status; + } else { + return response.json(); + } + }) + .then( + (response) => { + this.alertMessage = response.message; + this.alertType = response.type; + this.showAlert = true; + } + ) + .then(() => { + this.getCurrentTime(); + }); + }, saveNtpConfig(e: Event) { e.preventDefault();