summaryrefslogtreecommitdiff
path: root/exes/rest/src
diff options
context:
space:
mode:
Diffstat (limited to 'exes/rest/src')
-rw-r--r--exes/rest/src/config.rs2
-rw-r--r--exes/rest/src/lib.rs8
-rw-r--r--exes/rest/src/ratelimit_client/mod.rs20
-rw-r--r--exes/rest/src/ratelimit_client/remote_hashring.rs8
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 })
}