mirror of
				https://github.com/nitnelave/lldap.git
				synced 2023-04-12 14:25:13 +00:00 
			
		
		
		
	Add logging + start wiring config
This commit is contained in:
		
							parent
							
								
									acc80d21e5
								
							
						
					
					
						commit
						0b6f482e51
					
				@ -8,7 +8,7 @@ actix-web = "3"
 | 
				
			|||||||
anyhow = "*"
 | 
					anyhow = "*"
 | 
				
			||||||
clap = "3.0.0-beta.2"
 | 
					clap = "3.0.0-beta.2"
 | 
				
			||||||
http = "*"
 | 
					http = "*"
 | 
				
			||||||
passablewords = "*"
 | 
					log = "*"
 | 
				
			||||||
serde = "*"
 | 
					serde = "*"
 | 
				
			||||||
thiserror = "*"
 | 
					thiserror = "*"
 | 
				
			||||||
tracing = "*"
 | 
					tracing = "*"
 | 
				
			||||||
 | 
				
			|||||||
@ -1,9 +1,17 @@
 | 
				
			|||||||
use clap::Clap;
 | 
					use clap::Clap;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/// lldap is a lightweight LDAP server
 | 
					/// lldap is a lightweight LDAP server
 | 
				
			||||||
#[derive(Debug, Clap)]
 | 
					#[derive(Debug, Clap, Clone)]
 | 
				
			||||||
#[clap(version = "0.1", author = "The LLDAP team")]
 | 
					#[clap(version = "0.1", author = "The LLDAP team")]
 | 
				
			||||||
pub struct CLIOpts;
 | 
					pub struct CLIOpts {
 | 
				
			||||||
 | 
					    /// Change config file name
 | 
				
			||||||
 | 
					    #[clap(short, long, default_value = "lldap_config.toml")]
 | 
				
			||||||
 | 
					    pub config_file: String,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /// Set verbose logging
 | 
				
			||||||
 | 
					    #[clap(short, long)]
 | 
				
			||||||
 | 
					    pub verbose: bool,
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pub fn init() -> CLIOpts {
 | 
					pub fn init() -> CLIOpts {
 | 
				
			||||||
    CLIOpts::parse()
 | 
					    CLIOpts::parse()
 | 
				
			||||||
 | 
				
			|||||||
@ -5,26 +5,33 @@ use figment::{
 | 
				
			|||||||
};
 | 
					};
 | 
				
			||||||
use serde::{Deserialize, Serialize};
 | 
					use serde::{Deserialize, Serialize};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#[derive(Debug, Deserialize, Serialize)]
 | 
					use crate::infra::cli::CLIOpts;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#[derive(Clone, Debug, Deserialize, Serialize)]
 | 
				
			||||||
pub struct Configuration {
 | 
					pub struct Configuration {
 | 
				
			||||||
    secret_pepper: String,
 | 
					    pub log_level_verbose: bool,
 | 
				
			||||||
    some_text: String,
 | 
					    pub secret_pepper: String,
 | 
				
			||||||
 | 
					    pub some_text: String,
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
impl Default for Configuration {
 | 
					impl Configuration {
 | 
				
			||||||
    fn default() -> Self {
 | 
					    fn from_cli(cli_opts: CLIOpts) -> Self {
 | 
				
			||||||
        Configuration {
 | 
					        Configuration {
 | 
				
			||||||
 | 
					            log_level_verbose: cli_opts.verbose,
 | 
				
			||||||
            secret_pepper: String::from("secretsecretpepper"),
 | 
					            secret_pepper: String::from("secretsecretpepper"),
 | 
				
			||||||
            some_text: String::new(),
 | 
					            some_text: String::new(),
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pub fn init() -> Result<Configuration> {
 | 
					pub fn init(cli_opts: CLIOpts) -> Result<Configuration> {
 | 
				
			||||||
    let config: Configuration = Figment::from(Serialized::defaults(Configuration::default()))
 | 
					    // FIXME cli arguments are less prioritary than toml config file or env... Not good.
 | 
				
			||||||
        .merge(Toml::file("lldap_config.toml"))
 | 
					    let config: Configuration = Figment::from(Serialized::defaults(Configuration::from_cli(
 | 
				
			||||||
        .merge(Env::prefixed("LLDAP_"))
 | 
					        cli_opts.clone(),
 | 
				
			||||||
        .extract()?;
 | 
					    )))
 | 
				
			||||||
 | 
					    .merge(Toml::file(cli_opts.config_file))
 | 
				
			||||||
 | 
					    .merge(Env::prefixed("LLDAP_"))
 | 
				
			||||||
 | 
					    .extract()?;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    Ok(config)
 | 
					    Ok(config)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										17
									
								
								src/infra/logging.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								src/infra/logging.rs
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,17 @@
 | 
				
			|||||||
 | 
					use crate::infra::configuration::Configuration;
 | 
				
			||||||
 | 
					use anyhow::Context;
 | 
				
			||||||
 | 
					use tracing::subscriber::set_global_default;
 | 
				
			||||||
 | 
					use tracing_log::LogTracer;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					pub fn init(_config: Configuration) -> anyhow::Result<()> {
 | 
				
			||||||
 | 
					    // TODO: use config.log_level_verbose to set level
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    let subscriber = tracing_subscriber::fmt()
 | 
				
			||||||
 | 
					        .with_timer(tracing_subscriber::fmt::time::time())
 | 
				
			||||||
 | 
					        .with_target(false)
 | 
				
			||||||
 | 
					        .with_level(true)
 | 
				
			||||||
 | 
					        .finish();
 | 
				
			||||||
 | 
					    LogTracer::init().context("Failed to set logger")?;
 | 
				
			||||||
 | 
					    set_global_default(subscriber).context("Failed to set subscriber")?;
 | 
				
			||||||
 | 
					    Ok(())
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -1,2 +1,3 @@
 | 
				
			|||||||
pub mod cli;
 | 
					pub mod cli;
 | 
				
			||||||
pub mod configuration;
 | 
					pub mod configuration;
 | 
				
			||||||
 | 
					pub mod logging;
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										15
									
								
								src/main.rs
									
									
									
									
									
								
							
							
						
						
									
										15
									
								
								src/main.rs
									
									
									
									
									
								
							@ -1,7 +1,16 @@
 | 
				
			|||||||
 | 
					use anyhow::Result;
 | 
				
			||||||
 | 
					use log::*;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
mod infra;
 | 
					mod infra;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
fn main() {
 | 
					fn main() -> Result<()> {
 | 
				
			||||||
    let config = infra::configuration::init();
 | 
					 | 
				
			||||||
    let cli_opts = infra::cli::init();
 | 
					    let cli_opts = infra::cli::init();
 | 
				
			||||||
    println!("Hello, world! Config: {:?}, CLI: {:?}", config, cli_opts);
 | 
					    let config = infra::configuration::init(cli_opts.clone())?;
 | 
				
			||||||
 | 
					    infra::logging::init(config.clone())?;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    info!("Starting....");
 | 
				
			||||||
 | 
					    debug!("Config: {:?}", config);
 | 
				
			||||||
 | 
					    debug!("CLI: {:?}", cli_opts);
 | 
				
			||||||
 | 
					    info!("End.");
 | 
				
			||||||
 | 
					    Ok(())
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user