implement log localization config generation

This commit is contained in:
ju6ge 2025-02-20 22:25:55 +01:00
parent c38ac4d3da
commit 8e75e7aee3
Signed by: judge
GPG Key ID: 6512C30DD8E017B5
2 changed files with 25 additions and 4 deletions

View File

@ -1,5 +1,6 @@
use std::{collections::HashMap, sync::Mutex};
use std::{collections::{BTreeMap, HashMap}, sync::Mutex};
use serde::Serialize;
use strum::{EnumIter, IntoEnumIterator};
use strum_macros::IntoStaticStr;
use esp_idf_svc::systime::EspSystemTime;
@ -129,7 +130,7 @@ mod tests {
#[derive(IntoStaticStr)]
#[derive(IntoStaticStr, EnumIter, Serialize, PartialEq, Eq, PartialOrd, Ord, Clone)]
pub enum LogMessage {
#[strum(serialize = "Reset due to {{txt_long}} requires rtc clear {{a}} and force config mode {{b}}")]
reset_reason,
@ -156,3 +157,14 @@ pub enum LogMessage {
#[strum(serialize = "Unknown topic recieved {{txt_long}}")]
unknown_topic,
}
impl LogMessage {
pub fn to_log_localisation_config() -> BTreeMap<LogMessage,&'static str> {
let mut data = BTreeMap::new();
for msg_type in LogMessage::iter() {
let s: &'static str = msg_type.clone().into();
data.insert(msg_type, s);
}
data
}
}

View File

@ -5,7 +5,7 @@ use std::{
sync::{atomic::AtomicBool, Arc},
};
use crate::{
espota::OtaUpdate, get_version, map_range_moisture, plant_hal::{FileInfo, PLANT_COUNT}, BOARD_ACCESS,
espota::OtaUpdate, get_version, log::LogMessage, map_range_moisture, plant_hal::{FileInfo, PLANT_COUNT}, BOARD_ACCESS
};
use anyhow::bail;
use chrono::DateTime;
@ -214,6 +214,10 @@ fn get_log(
anyhow::Ok(Some(serde_json::to_string(&output)?))
}
fn get_log_localization_config() -> Result<std::string::String, anyhow::Error> {
anyhow::Ok(serde_json::to_string(&LogMessage::to_log_localisation_config())?)
}
fn get_version_web(
_request: &mut Request<&mut EspHttpConnection>,
) -> Result<Option<std::string::String>, anyhow::Error> {
@ -366,6 +370,11 @@ pub fn httpd(reboot_now: Arc<AtomicBool>) -> Box<EspHttpServer<'static>> {
handle_error_to500(request, get_log)
})
.unwrap();
server.fn_handler("/log_localization", Method::Get, |request| {
cors_response(request, 200, &get_log_localization_config().unwrap())
})
.unwrap();
server
.fn_handler("/battery", Method::Get, |request| {
handle_error_to500(request, get_battery_state)