Regulate verbosity with args

This commit is contained in:
Demmie 2023-04-26 01:41:38 -04:00
parent a841b69e47
commit add5b4644e
No known key found for this signature in database
GPG Key ID: B06DAA3D432C6E9A
3 changed files with 28 additions and 19 deletions

View File

@ -2,11 +2,11 @@ mod defaults;
mod file_config;
mod filters;
use clap::{arg, value_parser, ArgAction, Command};
use file_config::FileConfig;
use std::{path::PathBuf, time::Duration};
use self::filters::{Filter, Replacement};
use clap::{arg, value_parser, Arg, ArgAction, Command};
use file_config::FileConfig;
use log::LevelFilter;
use std::{path::PathBuf, time::Duration};
pub struct Config {
pub port: u32,
@ -17,13 +17,14 @@ pub struct Config {
pub idle_bucket_name: String,
pub active_window_bucket_name: String,
pub no_server: bool,
pub verbosity: LevelFilter,
filters: Vec<Filter>,
}
impl Config {
pub fn from_cli() -> anyhow::Result<Self> {
let matches = Command::new("Activity Watcher")
.version("0.1.0")
.version("0.0.1")
.about("A set of ActivityWatch desktop watchers")
.args([
arg!(-c --config <FILE> "Custom config file").value_parser(value_parser!(PathBuf)),
@ -45,6 +46,10 @@ impl Config {
arg!(--"no-server" "Don't communicate to the ActivityWatch server")
.value_parser(value_parser!(bool))
.action(ArgAction::SetTrue),
Arg::new("verbosity")
.short('v')
.help("Verbosity level: -v for warnings, -vv for info, -vvv for debug, -vvvv for trace")
.action(ArgAction::Count),
])
.get_matches();
@ -53,6 +58,13 @@ impl Config {
let hostname = gethostname::gethostname().into_string().unwrap();
let idle_bucket_name = format!("aw-watcher-afk_{hostname}");
let active_window_bucket_name = format!("aw-watcher-window_{hostname}");
let verbosity = match matches.get_count("verbosity") {
0 => LevelFilter::Error,
1 => LevelFilter::Warn,
2 => LevelFilter::Info,
3 => LevelFilter::Debug,
_ => LevelFilter::Trace,
};
Ok(Self {
port: config.server.port,
@ -64,6 +76,7 @@ impl Config {
active_window_bucket_name,
filters: config.client.filters,
no_server: *matches.get_one("no-server").unwrap(),
verbosity,
})
}

View File

@ -9,15 +9,12 @@ mod watchers;
use config::Config;
use fern::colors::{Color, ColoredLevelConfig};
use log::LevelFilter;
use report_client::ReportClient;
use std::env;
use std::{sync::Arc, thread};
use watchers::ConstructorFilter;
use crate::watchers::ConstructorFilter;
fn setup_logger() -> Result<(), fern::InitError> {
let log_setting = env::var("AWATCHER_LOG").unwrap_or("info".to_string());
fn setup_logger(verbosity: LevelFilter) -> Result<(), fern::InitError> {
fern::Dispatch::new()
.format(|out, message, record| {
let colors = ColoredLevelConfig::new()
@ -32,20 +29,18 @@ fn setup_logger() -> Result<(), fern::InitError> {
message
));
})
.level(log::LevelFilter::Warn)
.level_for(
"awatcher",
log_setting.parse().unwrap_or(log::LevelFilter::Info),
)
.level(log::LevelFilter::Error)
.level_for("awatcher", verbosity)
.chain(std::io::stdout())
.apply()?;
Ok(())
}
fn main() -> anyhow::Result<()> {
setup_logger()?;
let config = Config::from_cli()?;
setup_logger(config.verbosity)?;
let client = ReportClient::new(Config::from_cli()?)?;
let client = ReportClient::new(config)?;
let client = Arc::new(client);
if client.config.no_server {

View File

@ -57,7 +57,8 @@ pub const IDLE: &WatcherConstructors = &[
pub const ACTIVE_WINDOW: &WatcherConstructors = &[
watcher!(wl_foreign_toplevel::WindowWatcher),
watcher!(x11_window::WindowWatcher),
// XWayland gives _NET_WM_NAME on some windows in KDE, but not on others
watcher!(kwin_window::WindowWatcher),
watcher!(x11_window::WindowWatcher),
watcher!(gnome_window::WindowWatcher),
];