diff options
Diffstat (limited to 'exes/rest/src')
| -rw-r--r-- | exes/rest/src/config.rs | 2 | ||||
| -rw-r--r-- | exes/rest/src/lib.rs | 8 | ||||
| -rw-r--r-- | exes/rest/src/ratelimit_client/mod.rs | 20 | ||||
| -rw-r--r-- | exes/rest/src/ratelimit_client/remote_hashring.rs | 8 | 
4 files changed, 22 insertions, 16 deletions
diff --git a/exes/rest/src/config.rs b/exes/rest/src/config.rs index 3bfe8db..e87757c 100644 --- a/exes/rest/src/config.rs +++ b/exes/rest/src/config.rs @@ -26,4 +26,6 @@ pub struct Discord {  pub struct ReverseProxyConfig {      pub server: ServerSettings,      pub discord: Discord, +    pub ratelimiter_address: String, +    pub ratelimiter_port: u16,  } diff --git a/exes/rest/src/lib.rs b/exes/rest/src/lib.rs index 0910d5e..19ecdde 100644 --- a/exes/rest/src/lib.rs +++ b/exes/rest/src/lib.rs @@ -7,7 +7,7 @@ use hyper::{      Body, Client, Request, Server,  };  use leash::{AnyhowResultFuture, Component}; -use opentelemetry::{global, trace::{Tracer}}; +use opentelemetry::{global, trace::Tracer};  use opentelemetry_http::HeaderExtractor;  use shared::config::Settings;  use std::{convert::Infallible, sync::Arc}; @@ -29,7 +29,7 @@ impl Component for ReverseProxyServer {      ) -> AnyhowResultFuture<()> {          Box::pin(async move {              // Client to the remote ratelimiters -            let ratelimiter = ratelimit_client::RemoteRatelimiter::new(); +            let ratelimiter = ratelimit_client::RemoteRatelimiter::new(settings.config.clone());              let https = hyper_rustls::HttpsConnectorBuilder::new()                  .with_native_roots()                  .https_only() @@ -47,8 +47,8 @@ impl Component for ReverseProxyServer {                          let parent_cx = global::get_text_map_propagator(|propagator| {                              propagator.extract(&HeaderExtractor(request.headers()))                          }); -                        let _span = global::tracer("") -                            .start_with_context("handle_request", &parent_cx); +                        let _span = +                            global::tracer("").start_with_context("handle_request", &parent_cx);                          let client = client.clone();                          let ratelimiter = ratelimiter.clone(); diff --git a/exes/rest/src/ratelimit_client/mod.rs b/exes/rest/src/ratelimit_client/mod.rs index 7493af9..6212529 100644 --- a/exes/rest/src/ratelimit_client/mod.rs +++ b/exes/rest/src/ratelimit_client/mod.rs @@ -1,3 +1,5 @@ +use crate::config::ReverseProxyConfig; +  use self::remote_hashring::{HashRingWrapper, MetadataMap, VNode};  use opentelemetry::global;  use proto::nova::ratelimit::ratelimiter::bucket_submit_ticket_request::{Data, Headers}; @@ -13,7 +15,7 @@ use tokio::sync::oneshot::{self};  use tokio::sync::{broadcast, mpsc, RwLock};  use tokio_stream::wrappers::ReceiverStream;  use tonic::Request; -use tracing::{debug, debug_span, Instrument, Span, instrument}; +use tracing::{debug, debug_span, instrument, Instrument, Span};  use tracing_opentelemetry::OpenTelemetrySpanExt;  mod remote_hashring; @@ -22,6 +24,7 @@ mod remote_hashring;  pub struct RemoteRatelimiter {      remotes: Arc<RwLock<HashRingWrapper>>,      stop: Arc<tokio::sync::broadcast::Sender<()>>, +    config: ReverseProxyConfig,  }  impl Drop for RemoteRatelimiter { @@ -41,15 +44,15 @@ type IssueTicket = Pin<  impl RemoteRatelimiter {      async fn get_ratelimiters(&self) -> Result<(), anyhow::Error> {          // get list of dns responses -        /*let responses = dns_lookup::lookup_host("localhost") -        .unwrap() -        .into_iter() -        .map(|f| f.to_string());*/ +        let responses = dns_lookup::lookup_host(&self.config.ratelimiter_address) +            .unwrap() +            .into_iter() +            .map(|f| f.to_string());          let mut write = self.remotes.write().await; -        for ip in ["ratelimit"] { -            let a = VNode::new(ip.into()).await?; +        for ip in responses { +            let a = VNode::new(ip, self.config.ratelimiter_port).await?;              write.add(a.clone());          } @@ -57,11 +60,12 @@ impl RemoteRatelimiter {      }      #[must_use] -    pub fn new() -> Self { +    pub fn new(config: ReverseProxyConfig) -> Self {          let (rx, mut tx) = broadcast::channel(1);          let obj = Self {              remotes: Arc::new(RwLock::new(HashRingWrapper::default())),              stop: Arc::new(rx), +            config,          };          let obj_clone = obj.clone(); diff --git a/exes/rest/src/ratelimit_client/remote_hashring.rs b/exes/rest/src/ratelimit_client/remote_hashring.rs index d1c1702..b8771e5 100644 --- a/exes/rest/src/ratelimit_client/remote_hashring.rs +++ b/exes/rest/src/ratelimit_client/remote_hashring.rs @@ -1,7 +1,7 @@  use core::fmt::Debug; -use std::convert::TryFrom;  use opentelemetry::propagation::Injector;  use proto::nova::ratelimit::ratelimiter::ratelimiter_client::RatelimiterClient; +use std::convert::TryFrom;  use std::hash::Hash;  use std::ops::Deref;  use std::ops::DerefMut; @@ -47,10 +47,10 @@ impl<'a> Injector for MetadataMap<'a> {      }  } -  impl VNode { -    pub async fn new(address: String) -> Result<Self, tonic::transport::Error> { -        let client = RatelimiterClient::connect(format!("http://{}:8093", address.clone())).await?; +    pub async fn new(address: String, port: u16) -> Result<Self, tonic::transport::Error> { +        let client = +            RatelimiterClient::connect(format!("http://{}:{}", address.clone(), port)).await?;          Ok(VNode { client, address })      }  | 
