Skip to content

Commit 2806090

Browse files
authored
Merge pull request #2473 from garikAsplund/log-random-port
added local_addr() to listeners to display random port numbers
2 parents efac5cf + 02c1d18 commit 2806090

File tree

1 file changed

+33
-35
lines changed

1 file changed

+33
-35
lines changed

crates/trigger-http/src/lib.rs

Lines changed: 33 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -169,27 +169,17 @@ impl TriggerExecutor for HttpTrigger {
169169
let listen_addr = config.address;
170170
let tls = config.into_tls_config();
171171

172-
// Print startup messages
173-
let scheme = if tls.is_some() { "https" } else { "http" };
174-
let base_url = format!("{}://{:?}", scheme, listen_addr);
175-
terminal::step!("\nServing", "{}", base_url);
176-
log::info!("Serving {}", base_url);
177-
178-
println!("Available Routes:");
179-
for (route, component_id) in self.router.routes() {
180-
println!(" {}: {}{}", component_id, base_url, route);
181-
if let Some(component) = self.engine.app().get_component(component_id) {
182-
if let Some(description) = component.get_metadata(APP_DESCRIPTION_KEY)? {
183-
println!(" {}", description);
184-
}
185-
}
186-
}
172+
let listener = TcpListener::bind(listen_addr)
173+
.await
174+
.with_context(|| format!("Unable to listen on {}", listen_addr))?;
187175

176+
let self_ = Arc::new(self);
188177
if let Some(tls) = tls {
189-
self.serve_tls(listen_addr, tls).await?
178+
self_.serve_tls(listener, tls).await?
190179
} else {
191-
self.serve(listen_addr).await?
180+
self_.serve(listener).await?
192181
};
182+
193183
Ok(())
194184
}
195185

@@ -365,7 +355,7 @@ impl HttpTrigger {
365355
}
366356

367357
fn serve_connection<S: AsyncRead + AsyncWrite + Unpin + Send + 'static>(
368-
self_: Arc<Self>,
358+
self: Arc<Self>,
369359
stream: S,
370360
addr: SocketAddr,
371361
) {
@@ -374,7 +364,7 @@ impl HttpTrigger {
374364
.keep_alive(true)
375365
.serve_connection(
376366
TokioIo::new(stream),
377-
service_fn(move |request| self_.clone().instrumented_service_fn(addr, request)),
367+
service_fn(move |request| self.clone().instrumented_service_fn(addr, request)),
378368
)
379369
.await
380370
{
@@ -407,36 +397,44 @@ impl HttpTrigger {
407397
.await
408398
}
409399

410-
async fn serve(self, listen_addr: SocketAddr) -> Result<()> {
411-
let self_ = Arc::new(self);
412-
413-
let listener = TcpListener::bind(listen_addr)
414-
.await
415-
.with_context(|| format!("Unable to listen on {}", listen_addr))?;
416-
400+
async fn serve(self: Arc<Self>, listener: TcpListener) -> Result<()> {
401+
self.print_startup_msgs("http", &listener)?;
417402
loop {
418403
let (stream, addr) = listener.accept().await?;
419-
Self::serve_connection(self_.clone(), stream, addr);
404+
Self::serve_connection(self.clone(), stream, addr);
420405
}
421406
}
422407

423-
async fn serve_tls(self, listen_addr: SocketAddr, tls: TlsConfig) -> Result<()> {
424-
let self_ = Arc::new(self);
425-
426-
let listener = TcpListener::bind(listen_addr)
427-
.await
428-
.with_context(|| format!("Unable to listen on {}", listen_addr))?;
429-
408+
async fn serve_tls(self: Arc<Self>, listener: TcpListener, tls: TlsConfig) -> Result<()> {
430409
let acceptor = tls.server_config()?;
410+
self.print_startup_msgs("https", &listener)?;
431411

432412
loop {
433413
let (stream, addr) = listener.accept().await?;
434414
match acceptor.accept(stream).await {
435-
Ok(stream) => Self::serve_connection(self_.clone(), stream, addr),
415+
Ok(stream) => self.clone().serve_connection(stream, addr),
436416
Err(err) => tracing::error!(?err, "Failed to start TLS session"),
437417
}
438418
}
439419
}
420+
421+
fn print_startup_msgs(&self, scheme: &str, listener: &TcpListener) -> Result<()> {
422+
let local_addr = listener.local_addr()?;
423+
let base_url = format!("{scheme}://{local_addr:?}");
424+
terminal::step!("\nServing", "{}", base_url);
425+
log::info!("Serving {}", base_url);
426+
427+
println!("Available Routes:");
428+
for (route, component_id) in self.router.routes() {
429+
println!(" {}: {}{}", component_id, base_url, route);
430+
if let Some(component) = self.engine.app().get_component(component_id) {
431+
if let Some(description) = component.get_metadata(APP_DESCRIPTION_KEY)? {
432+
println!(" {}", description);
433+
}
434+
}
435+
}
436+
Ok(())
437+
}
440438
}
441439

442440
fn parse_listen_addr(addr: &str) -> anyhow::Result<SocketAddr> {

0 commit comments

Comments
 (0)