mirror of
https://github.com/2e3s/awatcher.git
synced 2025-06-07 03:55:29 +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 file_config;
|
||||||
mod filters;
|
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 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 struct Config {
|
||||||
pub port: u32,
|
pub port: u32,
|
||||||
@ -17,13 +17,14 @@ pub struct Config {
|
|||||||
pub idle_bucket_name: String,
|
pub idle_bucket_name: String,
|
||||||
pub active_window_bucket_name: String,
|
pub active_window_bucket_name: String,
|
||||||
pub no_server: bool,
|
pub no_server: bool,
|
||||||
|
pub verbosity: LevelFilter,
|
||||||
filters: Vec<Filter>,
|
filters: Vec<Filter>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Config {
|
impl Config {
|
||||||
pub fn from_cli() -> anyhow::Result<Self> {
|
pub fn from_cli() -> anyhow::Result<Self> {
|
||||||
let matches = Command::new("Activity Watcher")
|
let matches = Command::new("Activity Watcher")
|
||||||
.version("0.1.0")
|
.version("0.0.1")
|
||||||
.about("A set of ActivityWatch desktop watchers")
|
.about("A set of ActivityWatch desktop watchers")
|
||||||
.args([
|
.args([
|
||||||
arg!(-c --config <FILE> "Custom config file").value_parser(value_parser!(PathBuf)),
|
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")
|
arg!(--"no-server" "Don't communicate to the ActivityWatch server")
|
||||||
.value_parser(value_parser!(bool))
|
.value_parser(value_parser!(bool))
|
||||||
.action(ArgAction::SetTrue),
|
.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();
|
.get_matches();
|
||||||
|
|
||||||
@ -53,6 +58,13 @@ impl Config {
|
|||||||
let hostname = gethostname::gethostname().into_string().unwrap();
|
let hostname = gethostname::gethostname().into_string().unwrap();
|
||||||
let idle_bucket_name = format!("aw-watcher-afk_{hostname}");
|
let idle_bucket_name = format!("aw-watcher-afk_{hostname}");
|
||||||
let active_window_bucket_name = format!("aw-watcher-window_{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 {
|
Ok(Self {
|
||||||
port: config.server.port,
|
port: config.server.port,
|
||||||
@ -64,6 +76,7 @@ impl Config {
|
|||||||
active_window_bucket_name,
|
active_window_bucket_name,
|
||||||
filters: config.client.filters,
|
filters: config.client.filters,
|
||||||
no_server: *matches.get_one("no-server").unwrap(),
|
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 config::Config;
|
||||||
use fern::colors::{Color, ColoredLevelConfig};
|
use fern::colors::{Color, ColoredLevelConfig};
|
||||||
|
use log::LevelFilter;
|
||||||
use report_client::ReportClient;
|
use report_client::ReportClient;
|
||||||
use std::env;
|
|
||||||
use std::{sync::Arc, thread};
|
use std::{sync::Arc, thread};
|
||||||
|
use watchers::ConstructorFilter;
|
||||||
|
|
||||||
use crate::watchers::ConstructorFilter;
|
fn setup_logger(verbosity: LevelFilter) -> Result<(), fern::InitError> {
|
||||||
|
|
||||||
fn setup_logger() -> Result<(), fern::InitError> {
|
|
||||||
let log_setting = env::var("AWATCHER_LOG").unwrap_or("info".to_string());
|
|
||||||
|
|
||||||
fern::Dispatch::new()
|
fern::Dispatch::new()
|
||||||
.format(|out, message, record| {
|
.format(|out, message, record| {
|
||||||
let colors = ColoredLevelConfig::new()
|
let colors = ColoredLevelConfig::new()
|
||||||
@ -32,20 +29,18 @@ fn setup_logger() -> Result<(), fern::InitError> {
|
|||||||
message
|
message
|
||||||
));
|
));
|
||||||
})
|
})
|
||||||
.level(log::LevelFilter::Warn)
|
.level(log::LevelFilter::Error)
|
||||||
.level_for(
|
.level_for("awatcher", verbosity)
|
||||||
"awatcher",
|
|
||||||
log_setting.parse().unwrap_or(log::LevelFilter::Info),
|
|
||||||
)
|
|
||||||
.chain(std::io::stdout())
|
.chain(std::io::stdout())
|
||||||
.apply()?;
|
.apply()?;
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
fn main() -> anyhow::Result<()> {
|
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);
|
let client = Arc::new(client);
|
||||||
|
|
||||||
if client.config.no_server {
|
if client.config.no_server {
|
||||||
|
@ -57,7 +57,8 @@ pub const IDLE: &WatcherConstructors = &[
|
|||||||
|
|
||||||
pub const ACTIVE_WINDOW: &WatcherConstructors = &[
|
pub const ACTIVE_WINDOW: &WatcherConstructors = &[
|
||||||
watcher!(wl_foreign_toplevel::WindowWatcher),
|
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!(kwin_window::WindowWatcher),
|
||||||
|
watcher!(x11_window::WindowWatcher),
|
||||||
watcher!(gnome_window::WindowWatcher),
|
watcher!(gnome_window::WindowWatcher),
|
||||||
];
|
];
|
||||||
|
Loading…
x
Reference in New Issue
Block a user