it works
This commit is contained in:
parent
05b51d1c85
commit
f55484be15
7
Cargo.lock
generated
7
Cargo.lock
generated
|
|
@ -29,6 +29,7 @@ dependencies = [
|
|||
"log",
|
||||
"serde",
|
||||
"serde_yaml_ng",
|
||||
"xdg",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
|
@ -413,3 +414,9 @@ dependencies = [
|
|||
"js-sys",
|
||||
"wasm-bindgen",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "xdg"
|
||||
version = "2.5.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "213b7324336b53d2414b2db8537e56544d981803139155afa84f76eeebb7a546"
|
||||
|
|
|
|||
|
|
@ -8,6 +8,7 @@ anyhow = "1.0.95"
|
|||
femme = "2.2.1"
|
||||
serde = { version = "1.0.217", features = ["derive"] }
|
||||
serde_yaml_ng = "0.10.0"
|
||||
xdg = "2.5.2"
|
||||
[dependencies.log]
|
||||
version = "0.4.25"
|
||||
features = ["kv", "serde"]
|
||||
|
|
|
|||
24
src/config.rs
Normal file
24
src/config.rs
Normal file
|
|
@ -0,0 +1,24 @@
|
|||
use std::{collections::BTreeMap, env, fs::File, net::IpAddr, path::PathBuf, str::FromStr};
|
||||
|
||||
use serde::Deserialize;
|
||||
|
||||
#[derive(Debug, Deserialize)]
|
||||
pub struct Config {
|
||||
pub domains: BTreeMap<IpAddr, Vec<String>>,
|
||||
}
|
||||
|
||||
impl Config {
|
||||
pub fn load() -> anyhow::Result<Self> {
|
||||
let config_loc = env::var("DNS_CHECK_CONFIG")
|
||||
.map_err(anyhow::Error::new)
|
||||
.and_then(|path| PathBuf::from_str(path.as_str()).map_err(anyhow::Error::new))
|
||||
.or_else(|_| -> anyhow::Result<_> {
|
||||
// .or_else::<_, impl FnOnce(_) -> anyhow::Result<_>>(|_| {
|
||||
let cfg_loc = xdg::BaseDirectories::with_prefix("dns-check")?
|
||||
.place_config_file("config.yml")?;
|
||||
Ok(cfg_loc)
|
||||
})?;
|
||||
let file = File::open(config_loc)?;
|
||||
Ok(serde_yaml_ng::from_reader(file)?)
|
||||
}
|
||||
}
|
||||
19
src/main.rs
19
src/main.rs
|
|
@ -1,18 +1,23 @@
|
|||
mod config;
|
||||
pub mod dig_response;
|
||||
|
||||
use std::net::IpAddr;
|
||||
use std::{net::IpAddr, thread::sleep, time::Duration};
|
||||
|
||||
use config::Config;
|
||||
use dig_response::DigResponse;
|
||||
|
||||
use anyhow::anyhow;
|
||||
|
||||
fn main() -> anyhow::Result<()> {
|
||||
run_dns_check("techwork.zone", "67.240.19.249".parse()?)
|
||||
// let txt = File::open("example.txt")?;
|
||||
// let data: DigResponse = serde_yaml_ng::from_reader(txt)?;
|
||||
// println!("{data:?}");
|
||||
// println!("{:?}", data.answers()?);
|
||||
// Ok(())
|
||||
let config = Config::load()?;
|
||||
println!("starting DNS check for {} domains", config.domains.len());
|
||||
for (expected_ip, domains) in config.domains.into_iter() {
|
||||
for domain in &domains {
|
||||
sleep(Duration::from_millis(250));
|
||||
run_dns_check(domain, expected_ip)?;
|
||||
}
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn run_dns_check(domain: impl AsRef<str>, expected_ip: IpAddr) -> anyhow::Result<()> {
|
||||
|
|
|
|||
Loading…
Reference in a new issue