Skip to content

Commit

Permalink
feat: [#656] Tracker Checker sopports env var for config
Browse files Browse the repository at this point in the history
Run providing a config file path:

```text
cargo run --bin tracker_checker -- --config-path "./share/default/config/tracker_checker.json"
TORRUST_CHECKER_CONFIG_PATH="./share/default/config/tracker_checker.json" cargo run --bin tracker_checker
```

Run providing the configuration:

```text
TORRUST_CHECKER_CONFIG=$(cat "./share/default/config/tracker_checker.json") cargo run --bin tracker_checker
```
  • Loading branch information
josecelano committed Jan 30, 2024
1 parent 7f43fbd commit 1bab582
Show file tree
Hide file tree
Showing 3 changed files with 33 additions and 11 deletions.
11 changes: 10 additions & 1 deletion src/bin/tracker_checker.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,16 @@
//! Program to run checks against running trackers.
//!
//! Run providing a config file path:
//!
//! ```text
//! cargo run --bin tracker_checker -- --config-path "./share/default/config/tracker_checker.json"
//! TORRUST_CHECKER_CONFIG_PATH="./share/default/config/tracker_checker.json" cargo run --bin tracker_checker
//! ```
//!
//! Run providing the configuration:
//!
//! ```text
//! cargo run --bin tracker_checker "./share/default/config/tracker_checker.json"
//! TORRUST_CHECKER_CONFIG=$(cat "./share/default/config/tracker_checker.json") cargo run --bin tracker_checker
//! ```
use torrust_tracker::checker::app;

Expand Down
29 changes: 21 additions & 8 deletions src/checker/app.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
use std::path::PathBuf;
use std::sync::Arc;

use anyhow::Context;
use anyhow::{Context, Result};
use clap::Parser;

use super::config::Configuration;
Expand All @@ -12,16 +12,22 @@ use crate::checker::config::parse_from_json;
#[derive(Parser, Debug)]
#[clap(author, version, about, long_about = None)]
struct Args {
config_path: PathBuf,
/// Path to the JSON configuration file.
#[clap(short, long, env = "TORRUST_CHECKER_CONFIG_PATH")]
config_path: Option<PathBuf>,

/// Direct configuration content in JSON.
#[clap(env = "TORRUST_CHECKER_CONFIG", hide_env_values = true)]
config_content: Option<String>,
}

/// # Errors
///
/// Will return an error if it can't read or parse the configuration file.
pub async fn run() -> anyhow::Result<Vec<CheckResult>> {
/// Will return an error if the configuration was not provided.
pub async fn run() -> Result<Vec<CheckResult>> {
let args = Args::parse();

let config = setup_config(&args)?;
let config = setup_config(args)?;

let console_printer = Console {};

Expand All @@ -33,9 +39,16 @@ pub async fn run() -> anyhow::Result<Vec<CheckResult>> {
Ok(service.run_checks().await)
}

fn setup_config(args: &Args) -> anyhow::Result<Configuration> {
let file_content =
std::fs::read_to_string(&args.config_path).with_context(|| format!("can't read config file {:?}", args.config_path))?;
fn setup_config(args: Args) -> Result<Configuration> {
match (args.config_path, args.config_content) {
(Some(config_path), _) => load_config_from_file(&config_path),
(_, Some(config_content)) => parse_from_json(&config_content).context("invalid config format"),
_ => Err(anyhow::anyhow!("no configuration provided")),
}
}

fn load_config_from_file(path: &PathBuf) -> Result<Configuration> {
let file_content = std::fs::read_to_string(path).with_context(|| format!("can't read config file {path:?}"))?;

parse_from_json(&file_content).context("invalid config format")
}
4 changes: 2 additions & 2 deletions src/e2e/runner.rs
Original file line number Diff line number Diff line change
Expand Up @@ -197,14 +197,14 @@ fn write_tracker_checker_config_file(config_file_path: &Path, config: &str) {
/// Will panic if the config path is not a valid string.
pub fn run_tracker_checker(config_path: &Path) -> io::Result<()> {
info!(
"Running Tracker Checker: cargo --bin tracker_checker {}",
"Running Tracker Checker: cargo run --bin tracker_checker -- --config-path \"{}\"",
config_path.display()
);

let path = config_path.to_str().expect("The path should be a valid string");

let status = Command::new("cargo")
.args(["run", "--bin", "tracker_checker", path])
.args(["run", "--bin", "tracker_checker", "--", "--config-path", path])
.status()?;

if status.success() {
Expand Down

0 comments on commit 1bab582

Please sign in to comment.