Add live log buffering support and endpoint; enhance log display functionality.
This commit is contained in:
@@ -13,7 +13,7 @@ use crate::webserver::get_json::{
|
||||
delete_save, get_battery_state, get_config, get_live_moisture, get_log_localization_config,
|
||||
get_solar_state, get_time, get_timezones, get_version_web, list_saves, tank_info,
|
||||
};
|
||||
use crate::webserver::get_log::get_log;
|
||||
use crate::webserver::get_log::{get_live_log, get_log};
|
||||
use crate::webserver::get_static::{serve_bundle, serve_favicon, serve_index};
|
||||
use crate::webserver::ota::ota_operations;
|
||||
use crate::webserver::post_json::{
|
||||
@@ -64,7 +64,6 @@ impl Handler for HTTPRequestRouter {
|
||||
e
|
||||
})?
|
||||
} else {
|
||||
crate::log::INTERCEPTOR.start_capture().await;
|
||||
match method {
|
||||
Method::Get => match path {
|
||||
"/favicon.ico" => serve_favicon(conn).await?,
|
||||
@@ -84,6 +83,14 @@ impl Handler for HTTPRequestRouter {
|
||||
"/timezones" => Some(get_timezones().await),
|
||||
"/moisture" => Some(get_live_moisture(conn).await),
|
||||
"/list_saves" => Some(list_saves(conn).await),
|
||||
// /live_log accepts an optional ?after=N query parameter
|
||||
p if p == "/live_log" || p.starts_with("/live_log?") => {
|
||||
let after: Option<u64> = p
|
||||
.find("after=")
|
||||
.and_then(|pos| p[pos + 6..].split('&').next())
|
||||
.and_then(|s| s.parse().ok());
|
||||
Some(get_live_log(after).await)
|
||||
}
|
||||
// /get_config accepts an optional ?saveidx=N query parameter
|
||||
p if p == "/get_config" || p.starts_with("/get_config?") => {
|
||||
let saveidx: Option<usize> = p
|
||||
@@ -167,7 +174,6 @@ impl Handler for HTTPRequestRouter {
|
||||
let response_time = Instant::now().duration_since(start).as_millis();
|
||||
|
||||
info!("\"{method} {path}\" {code} {response_time}ms");
|
||||
crate::log::INTERCEPTOR.stop_capture().await;
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
@@ -265,17 +271,9 @@ where
|
||||
}
|
||||
},
|
||||
Err(err) => {
|
||||
let mut error_text = err.to_string();
|
||||
let error_text = err.to_string();
|
||||
info!("error handling process {error_text}");
|
||||
|
||||
if let Some(logs) = crate::log::INTERCEPTOR.stop_capture().await {
|
||||
error_text.push_str("\n\nCaptured Logs:\n");
|
||||
for log in logs {
|
||||
error_text.push_str(&log);
|
||||
error_text.push('\n');
|
||||
}
|
||||
}
|
||||
|
||||
conn.initiate_response(
|
||||
500,
|
||||
Some("OK"),
|
||||
|
||||
Reference in New Issue
Block a user