From a109b027e17036ed9c0f361e91afaa86ae26a489 Mon Sep 17 00:00:00 2001 From: Ara Sadoyan Date: Mon, 3 Mar 2025 18:22:41 +0100 Subject: [PATCH] Cleanup --- src/web/proxyhttp.rs | 34 ++++++++++++++++++++++++++++++++-- 1 file changed, 32 insertions(+), 2 deletions(-) diff --git a/src/web/proxyhttp.rs b/src/web/proxyhttp.rs index c5dd3fd..fc245e5 100644 --- a/src/web/proxyhttp.rs +++ b/src/web/proxyhttp.rs @@ -14,6 +14,7 @@ use pingora_proxy::{ProxyHttp, Session}; use std::sync::atomic::{AtomicUsize, Ordering}; use std::sync::Arc; use tokio::sync::RwLock; +use tokio::time::Instant; pub struct LB { pub upstreams: Arc, AtomicUsize)>>>, @@ -92,8 +93,7 @@ impl GetHost for LB { async fn get_host(&self, peer: &str) -> Option<(String, u16)> { let map_read = self.upstreams.read().await; let x = if let Some(entry) = map_read.get(peer) { - let (servers, index) = entry.value(); // No clone here - + let (servers, index) = entry.value(); if servers.is_empty() { return None; } @@ -113,7 +113,36 @@ impl ProxyHttp for LB { type CTX = (); fn new_ctx(&self) -> Self::CTX {} async fn upstream_peer(&self, session: &mut Session, _ctx: &mut Self::CTX) -> Result> { + let before = Instant::now(); let host_name = session.req_header().headers.get("host"); + // let fyu = session.req_header().uri.path(); + // info!("{:?} ==> {} ==> {:?}", host_name, fyu, session.request_summary()); + match host_name { + Some(host) => { + let h = host.to_str().unwrap().split(':').collect::>(); + let ddr = self.get_host(h[0]); + match ddr.await { + Some((host, port)) => { + let peer = Box::new(HttpPeer::new((host, port), false, "".to_string())); + info!("{:?}, Time => {:.2?}", session.request_summary(), before.elapsed()); + Ok(peer) + } + None => { + warn!("Returning default list => {:?}", ("127.0.0.1", 3000)); + let peer = Box::new(HttpPeer::new(("127.0.0.1", 3000), false, "".to_string())); + info!("{:?}, Time => {:.2?}", session.request_summary(), before.elapsed()); + Ok(peer) + } + } + } + None => { + warn!("Returning default list => {:?}", ("127.0.0.1", 3000)); + let peer = Box::new(HttpPeer::new(("127.0.0.1", 3000), false, "".to_string())); + info!("{:?}, Time => {:.2?}", session.request_summary(), before.elapsed()); + Ok(peer) + } + } + /* let ddr = self.get_host(host_name.unwrap().to_str().unwrap()); match ddr.await { Some((host, port)) => { @@ -126,6 +155,7 @@ impl ProxyHttp for LB { Ok(peer) } } + */ } async fn request_filter(&self, _session: &mut Session, _ctx: &mut Self::CTX) -> pingora_core::Result where