diff options
author | Galen Guyer <galen@galenguyer.com> | 2022-12-28 15:51:40 -0800 |
---|---|---|
committer | Galen Guyer <galen@galenguyer.com> | 2022-12-28 15:51:40 -0800 |
commit | 35426530a54786c66bf7a486b2c58595eacf14e6 (patch) | |
tree | 1831abee31b3f6c33ff682a2eee6892f77986ba0 | |
parent | 46d1a26a81fa03e806544d4e9472ecf123c893da (diff) |
-rw-r--r-- | Cargo.lock | 2 | ||||
-rw-r--r-- | Cargo.toml | 2 | ||||
-rw-r--r-- | Dockerfile | 2 | ||||
-rwxr-xr-x | deploy.sh | 11 | ||||
-rw-r--r-- | src/main.rs | 69 |
5 files changed, 41 insertions, 45 deletions
@@ -237,7 +237,7 @@ dependencies = [ [[package]] name = "dns-server" -version = "0.1.10" +version = "0.1.12" dependencies = [ "deadpool-postgres", "dotenvy", @@ -1,6 +1,6 @@ [package] name = "dns-server" -version = "0.1.10" +version = "0.1.12" edition = "2021" license = "MIT" @@ -1,4 +1,4 @@ -FROM rust:1.62-bullseye AS builder +FROM rust:1.66-bullseye AS builder WORKDIR /src/ RUN cargo init --bin COPY Cargo.toml Cargo.lock /src/ diff --git a/deploy.sh b/deploy.sh deleted file mode 100755 index 191d66b..0000000 --- a/deploy.sh +++ /dev/null @@ -1,11 +0,0 @@ -#!/usr/bin/env bash - -cargo build --release - -for ns in ns{1..4}.fdns.dev; do - scp target/release/dns-server root@$ns:/tmp/coredns - ssh root@$ns << EOF - systemctl stop coredns && mv /tmp/coredns /usr/local/sbin/coredns && systemctl start coredns -EOF - -done diff --git a/src/main.rs b/src/main.rs index af87437..2b66e5a 100644 --- a/src/main.rs +++ b/src/main.rs @@ -70,13 +70,15 @@ async fn main() { let pg_pool = Arc::new(Pool::builder(mgr).max_size(64).build().unwrap()); log::info!("Connected to data postgres"); - let metrics_pool = Arc::new( - PgPoolOptions::new() - .max_connections(12) - .connect(&env::var("METRICS_URL").expect("METRICS_URL not set")) - .await - .unwrap(), - ); + let metrics_pool = Arc::new(None); + + // let metrics_pool = Arc::new(Some( + // PgPoolOptions::new() + // .max_connections(12) + // .connect(&env::var("METRICS_URL").expect("METRICS_URL not set")) + // .await + // .unwrap(), + // )); log::info!("Connected to metrics postgres"); let addr = env::var("BIND_ADDR") @@ -109,26 +111,32 @@ async fn main() { log::trace!("Spawning new task"); tokio::spawn(async move { let metrics = handle_message(raw_message, &pg_pool, sender).await; - log::trace!("Packet handled, logging metrics"); - if let Ok(metrics) = metrics { - let hostname = match hostname::get() { - Ok(hostname) => hostname.to_str().unwrap_or("unknown").to_owned(), - Err(_) => String::from("unknown"), - }; - if metrics.duration_us > 5 * 1000 { - log::warn!("Query took over 5ms: {} {}", metrics.qname, metrics.qtype) - } - if let Err(e) = sqlx::query(&INSERT_METRICS_SQL) - .bind(&metrics.source_ip) - .bind(&metrics.qname) - .bind(&metrics.qtype) - .bind(&metrics.rcode) - .bind(metrics.duration_us) - .bind(hostname) - .execute(&*metrics_pool) - .await - { - log::error!("{e}"); + if let Some(metrics_pool) = &*metrics_pool { + log::trace!("Packet handled, logging metrics"); + if let Ok(metrics) = metrics { + let hostname = match hostname::get() { + Ok(hostname) => hostname.to_str().unwrap_or("unknown").to_owned(), + Err(_) => String::from("unknown"), + }; + if metrics.duration_us > 5 * 1000 { + log::warn!( + "Query took over 5ms: {} {}", + metrics.qname, + metrics.qtype + ) + } + if let Err(e) = sqlx::query(&INSERT_METRICS_SQL) + .bind(&metrics.source_ip) + .bind(&metrics.qname) + .bind(&metrics.qtype) + .bind(&metrics.rcode) + .bind(metrics.duration_us) + .bind(hostname) + .execute(metrics_pool) + .await + { + log::error!("{e}"); + } } } }); @@ -184,7 +192,7 @@ async fn handle_message( log::trace!("[{}] Query for {qname} completed", message.id()); // TODO: CNAME resolution - message.add_answers(randomize_records( + message.add_answers( records .iter() .filter(|r| r.record_type == qtype) @@ -239,9 +247,8 @@ async fn handle_message( }) .clone() }) - .filter(|r| r.data().is_some()) - .collect(), - )); + .filter(|r| r.data().is_some()), + ); log::trace!("[{}] Answers set", message.id()); if message.answers().is_empty() { |