all lists on lists.proxmox.com
 help / color / mirror / Atom feed
* [pve-devel] [PATCH installer] tui: install_progress: write low-level non-JSON messages to separate file
@ 2024-02-26 14:18 Christoph Heiss
  0 siblings, 0 replies; only message in thread
From: Christoph Heiss @ 2024-02-26 14:18 UTC (permalink / raw)
  To: pve-devel

The low-level installer prints quite a few messages during the install
to its stdout which are not JSON-formatted and thus parseable.

Thus catch them early and write them to `/tmp/install-low-level.log`, to
avoid polluting the log tty at /dev/tty2 with mostly useless parse
errors.

Signed-off-by: Christoph Heiss <c.heiss@proxmox.com>
---
Nothing actually critical, but makes the log tty a lot more useful ..

 .../src/views/install_progress.rs               | 17 +++++++++++++++--
 1 file changed, 15 insertions(+), 2 deletions(-)

diff --git a/proxmox-tui-installer/src/views/install_progress.rs b/proxmox-tui-installer/src/views/install_progress.rs
index 4626fe4..c2c9ddf 100644
--- a/proxmox-tui-installer/src/views/install_progress.rs
+++ b/proxmox-tui-installer/src/views/install_progress.rs
@@ -6,6 +6,7 @@ use cursive::{
 };
 use serde::Deserialize;
 use std::{
+    fs::File,
     io::{BufRead, BufReader, Write},
     sync::{Arc, Mutex},
     thread,
@@ -86,6 +87,9 @@ impl InstallProgressView {
                 .map_err(|err| format!("failed to serialize install config: {err}"))?;
             writeln!(writer).map_err(|err| format!("failed to write install config: {err}"))?;

+            let mut lowlevel_log = File::create("/tmp/install-low-level.log")
+                .map_err(|err| format!("failed to open low-level installer logfile: {err}"))?;
+
             let writer = Arc::new(Mutex::new(writer));

             for line in reader.lines() {
@@ -94,11 +98,20 @@ impl InstallProgressView {
                     Err(err) => return Err(format!("low-level installer exited early: {err}")),
                 };

+                // The low-level installer also spews the output of any command it runs on its
+                // stdout. Use a very simple heuricstic to determine whether it is actually JSON
+                // or not.
+                if !line.starts_with('{') || !line.ends_with('}') {
+                    let _ = writeln!(lowlevel_log, "{}", line);
+                    continue;
+                }
+
                 let msg = match serde_json::from_str::<UiMessage>(&line) {
                     Ok(msg) => msg,
-                    Err(stray) => {
+                    Err(err) => {
                         // Not a fatal error, so don't abort the installation by returning
-                        eprintln!("low-level installer: {stray}");
+                        eprintln!("low-level installer: error while parsing message: '{err}'");
+                        eprintln!("    original message was: '{line}'");
                         continue;
                     }
                 };
--
2.43.0





^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2024-02-26 14:20 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-02-26 14:18 [pve-devel] [PATCH installer] tui: install_progress: write low-level non-JSON messages to separate file Christoph Heiss

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.
Service provided by Proxmox Server Solutions GmbH | Privacy | Legal