mirror of
https://github.com/2e3s/awatcher.git
synced 2025-06-05 19:15:33 +00:00
Regulate verbosity with args
This commit is contained in:
parent
a841b69e47
commit
add5b4644e
@ -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,
|
||||
})
|
||||
}
|
||||
|
||||
|
21
src/main.rs
21
src/main.rs
@ -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 {
|
||||
|
@ -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),
|
||||
];
|
||||
|
Loading…
x
Reference in New Issue
Block a user