Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 9a85d2d0 authored by Hansong Zhang's avatar Hansong Zhang
Browse files

Load log level from config_util, and use info by default

Bug: 189501475
Tag: #floss
Test: initctl start btmanagerd
Change-Id: I46934d0afd0954dcac63e698e88d79ed30aee053
parent f8b63dd2
Loading
Loading
Loading
Loading
+42 −0
Original line number Diff line number Diff line
use log::Level;
use serde_json::{Map, Value};

// Directory for Bluetooth hci devices
@@ -37,6 +38,19 @@ pub fn read_config() -> std::io::Result<String> {
    std::fs::read_to_string(BTMANAGERD_CONF)
}

pub fn get_log_level() -> Option<Level> {
    get_log_level_internal(read_config().ok()?)
}

fn get_log_level_internal(config: String) -> Option<Level> {
    serde_json::from_str::<Value>(config.as_str())
        .ok()?
        .get("log_level")?
        .as_str()?
        .parse::<Level>()
        .ok()
}

/// Returns whether hci N is enabled in config; defaults to true.
pub fn is_hci_n_enabled(n: i32) -> bool {
    match read_config().ok().and_then(|config| is_hci_n_enabled_internal(config, n)) {
@@ -124,6 +138,34 @@ mod tests {
        is_hci_n_enabled_internal(config, n).or(Some(true)).unwrap()
    }

    #[test]
    fn parse_log_level() {
        assert_eq!(
            get_log_level_internal("{\"log_level\": \"error\"}".to_string()).unwrap(),
            Level::Error
        );
        assert_eq!(
            get_log_level_internal("{\"log_level\": \"warn\"}".to_string()).unwrap(),
            Level::Warn
        );
        assert_eq!(
            get_log_level_internal("{\"log_level\": \"info\"}".to_string()).unwrap(),
            Level::Info
        );
        assert_eq!(
            get_log_level_internal("{\"log_level\": \"debug\"}".to_string()).unwrap(),
            Level::Debug
        );
        assert_eq!(
            get_log_level_internal("{\"log_level\": \"trace\"}".to_string()).unwrap(),
            Level::Trace
        );
        assert_eq!(
            get_log_level_internal("{\"log_level\": \"random\"}".to_string()).is_none(),
            true
        );
    }

    #[test]
    fn parse_hci0_enabled() {
        assert_eq!(
+7 −1
Original line number Diff line number Diff line
@@ -45,7 +45,13 @@ struct ManagerContext {

#[tokio::main]
pub async fn main() -> Result<(), Box<dyn std::error::Error>> {
    log::set_logger(&LOGGER).map(|()| log::set_max_level(LevelFilter::Debug)).unwrap();
    log::set_logger(&LOGGER)
        .map(|()| {
            log::set_max_level(
                config_util::get_log_level().unwrap_or(Level::Info).to_level_filter(),
            )
        })
        .unwrap();

    // Initialize config util
    config_util::fix_config_file_format();