From 715ef62c85b631b68f446c4bc37c28bfa57c5ec6 Mon Sep 17 00:00:00 2001 From: Sriman Achanta <68172138+srimanachanta@users.noreply.github.com> Date: Sun, 25 Jun 2023 21:07:27 -0400 Subject: [PATCH] Update backend to provide more useful info to frontend (#866) --- photon-client/src/App.vue | 2 +- .../pipeline/CameraAndPipelineSelect.vue | 56 +- photon-client/src/views/CamerasView.vue | 99 +-- photon-client/src/views/LogsView.vue | 2 +- .../src/views/PipelineViews/OutputTab.vue | 2 +- .../src/views/SettingsViews/DeviceControl.vue | 292 ++++++--- .../src/views/SettingsViews/Networking.vue | 47 +- .../src/views/SettingsViews/Stats.vue | 19 - .../common/configuration/ConfigManager.java | 18 +- .../common/configuration/ConfigProvider.java | 8 +- .../configuration/LegacyConfigProvider.java | 21 +- .../common/configuration/NetworkConfig.java | 9 - .../configuration/SqlConfigProvider.java | 36 +- .../common/util/file/FileUtils.java | 35 +- .../src/main/java/org/photonvision/Main.java | 2 +- .../photonvision/server/RequestHandler.java | 611 +++++++++++------- .../java/org/photonvision/server/Server.java | 64 +- 17 files changed, 838 insertions(+), 485 deletions(-) diff --git a/photon-client/src/App.vue b/photon-client/src/App.vue index 164253f09f..053635c21d 100644 --- a/photon-client/src/App.vue +++ b/photon-client/src/App.vue @@ -345,7 +345,7 @@ export default { this.previouslySelectedIndices = null; }, switchToSettingsTab() { - this.axios.post('http://' + this.$address + '/api/sendMetrics', {}) + this.axios.post('http://' + this.$address + '/api/utils/publishMetrics') } } }; diff --git a/photon-client/src/components/pipeline/CameraAndPipelineSelect.vue b/photon-client/src/components/pipeline/CameraAndPipelineSelect.vue index 7fd3a1ccd9..66c7404ec8 100644 --- a/photon-client/src/components/pipeline/CameraAndPipelineSelect.vue +++ b/photon-client/src/components/pipeline/CameraAndPipelineSelect.vue @@ -1,5 +1,13 @@ @@ -431,17 +432,17 @@ export default { }, data() { return { - snack: false, + calibrationDialog: false, calibrationInProgress: false, calibrationFailed: false, filteredVideomodeIndex: 0, settingsValid: true, unfilteredStreamDivisors: [1, 2, 4], - uploadSnackData: { + snackbar: { color: "success", text: "", }, - uploadSnack: false, + snack: false, } }, computed: { @@ -617,43 +618,34 @@ export default { }; this.axios - .post("http://" + this.$address + "/api/calibration/import", data, { + .post("http://" + this.$address + "/api/calibration/importFromCalibDB", data, { headers: { "Content-Type": "text/plain" }, }) - .then(() => { - this.uploadSnackData = { - color: "success", - text: - "Calibration imported successfully!", - }; - this.uploadSnack = true; + .then((response) => { + this.snackbar = { + color: response.status === 200 ? "success" : "error", + text: response.data.text || response.data + } + this.snack = true; }) .catch((err) => { - if (err.response) { - this.uploadSnackData = { + if (err.request) { + this.snackbar = { color: "error", - text: - "Error while uploading calibration file! Could not process provided file.", - }; - } else if (err.request) { - this.uploadSnackData = { - color: "error", - text: - "Error while uploading calibration file! No respond to upload attempt.", + text: "Error while uploading calibration file! The backend didn't respond to the upload attempt.", }; } else { - this.uploadSnackData = { + this.snackbar = { color: "error", text: "Error while uploading calibration file!", }; } - this.uploadSnack = true; + this.snack = true; }); - }) }, closeDialog() { - this.snack = false; + this.calibrationDialog = false; this.calibrationInProgress = false; this.calibrationFailed = false; }, @@ -747,15 +739,33 @@ export default { doc.save(`calibrationTarget-${config.type}.pdf`) }, sendCameraSettings() { - this.axios.post("http://" + this.$address + "/api/settings/camera", { - "settings": this.cameraSettings, - "index": this.$store.state.currentCameraIndex - }).then(response => { - if (response.status === 200) { - this.$store.state.saveBar = true; + this.axios.post("http://" + this.$address + "/api/settings/camera", {"settings": this.cameraSettings, "index": this.$store.state.currentCameraIndex}) + .then(response => { + this.snackbar = { + color: "success", + text: response.data.text || response.data + } + this.snack = true; + }) + .catch(error => { + if(error.response) { + this.snackbar = { + color: "error", + text: error.response.data.text || error.response.data } - } - ) + } else if(error.request) { + this.snackbar = { + color: "error", + text: "Error while trying to process the request! The backend didn't respond.", + }; + } else { + this.snackbar = { + color: "error", + text: "An error occurred while trying to process the request.", + }; + } + this.snack = true; + }) }, isCalibrated(resolution) { return this.$store.getters.currentCameraSettings.calibrations @@ -782,16 +792,13 @@ export default { sendCalibrationFinish() { console.log("finishing calibration for index " + this.$store.getters.currentCameraIndex); - this.snack = true; + this.calibrationDialog = true; this.calibrationInProgress = true; - this.axios.post("http://" + this.$address + "/api/settings/endCalibration", {idx: this.$store.getters.currentCameraIndex}) - .then((response) => { - if (response.status === 200) { - this.calibrationInProgress = false; - } else { - this.calibrationFailed = true; - } + this.axios.post("http://" + this.$address + "/api/calibration/end", {index: this.$store.getters.currentCameraIndex}) + .then(() => { + // End calibration will always return a 200 code on success + this.calibrationInProgress = false; } ).catch(() => { this.calibrationFailed = true; diff --git a/photon-client/src/views/LogsView.vue b/photon-client/src/views/LogsView.vue index fbb9c86d53..ca05a334b2 100644 --- a/photon-client/src/views/LogsView.vue +++ b/photon-client/src/views/LogsView.vue @@ -23,7 +23,7 @@ diff --git a/photon-client/src/views/PipelineViews/OutputTab.vue b/photon-client/src/views/PipelineViews/OutputTab.vue index 66906ccc2b..7866b832b9 100644 --- a/photon-client/src/views/PipelineViews/OutputTab.vue +++ b/photon-client/src/views/PipelineViews/OutputTab.vue @@ -43,7 +43,7 @@ /> diff --git a/photon-client/src/views/SettingsViews/DeviceControl.vue b/photon-client/src/views/SettingsViews/DeviceControl.vue index ef6c772ee8..ea4f7054d8 100644 --- a/photon-client/src/views/SettingsViews/DeviceControl.vue +++ b/photon-client/src/views/SettingsViews/DeviceControl.vue @@ -54,7 +54,7 @@ > mdi-import @@ -62,7 +62,6 @@ Import Settings - - - {{ snackbar.text }} - - - + + Import Settings + + Upload and apply previously saved or exported PhotonVision settings to this device + + + + + + + + + + mdi-import + + Import Settings + + + + + + @@ -156,18 +196,28 @@ +