11use crate :: {
22 lifecycle:: invocation:: processor:: Processor ,
33 lifecycle:: listener:: Listener ,
4- traces:: trace_processor:: { ServerlessTraceProcessor , TraceProcessor } ,
54} ;
65use hyper:: http:: request:: Parts ;
76use hyper:: {
@@ -11,9 +10,8 @@ use hyper::{
1110 Body , Client , Error , Request , Response , Server , Uri ,
1211} ;
1312use hyper_proxy:: { Intercept , Proxy , ProxyConnector } ;
14- use rand:: random;
1513use serde_json:: Value ;
16- use std:: { collections :: HashMap , net:: SocketAddr , sync:: Arc } ;
14+ use std:: { net:: SocketAddr , sync:: Arc } ;
1715use tokio:: { sync:: Mutex , task:: JoinHandle } ;
1816use tracing:: { debug, error} ;
1917
@@ -87,7 +85,7 @@ fn parse_env_addresses() -> Option<(SocketAddr, Uri)> {
8785 if let ( Some ( host) , Some ( port) ) = ( host, port) {
8886 if host == "localhost" {
8987 error ! ( "LWA: Cannot use localhost as host in AWS_LWA_PROXY_LAMBDA_RUNTIME_API, use 127.0.0.1 instead" ) ;
90- None
88+ return None ;
9189 }
9290 format ! ( "{host}:{port}" )
9391 . parse :: < SocketAddr > ( )
@@ -113,7 +111,6 @@ fn parse_env_addresses() -> Option<(SocketAddr, Uri)> {
113111 }
114112 } ,
115113 Err ( e) => {
116- error ! ( "LWA: Error parsing AWS_LWA_PROXY_LAMBDA_RUNTIME_API: {}" , e) ;
117114 None
118115 }
119116 } ;
@@ -148,8 +145,9 @@ async fn intercept_payload(
148145 let ( intercepted_parts, intercepted_body) = intercepted. into_parts ( ) ;
149146 debug ! ( "LWA: Intercepted request: {:?}" , intercepted_parts) ;
150147
148+ let waited_intercepted_body = intercepted_body. collect ( ) . await ?. to_bytes ( ) ;
151149 let forward_intercepted =
152- forward_request ( aws_runtime_addr, & intercepted_parts, intercepted_body ) . await ?;
150+ forward_request ( aws_runtime_addr, & intercepted_parts, waited_intercepted_body . clone ( ) . into ( ) ) . await ?;
153151
154152 // response after forwarding to AWS runtime API
155153 let response_to_intercepted_req = client. request ( forward_intercepted) . await ?;
@@ -190,7 +188,6 @@ async fn intercept_payload(
190188 {
191189 // intercepted response to runtime/invocation. The *request* contains the returned
192190 // values and headers from lambda handler
193- // let parsed_body = serde_json::from_slice::<Value>(&request_body_waited);
194191 // let _ = Listener::start_invocation_handler(
195192 // req,
196193 // processor,
@@ -201,6 +198,12 @@ async fn intercept_payload(
201198 // parsed_body,
202199 // )
203200 // .await;
201+ let _ = Listener :: end_invocation_handler (
202+ intercepted_parts. headers ,
203+ waited_intercepted_body. into ( ) ,
204+ Arc :: clone ( & processor) ,
205+ )
206+ . await ;
204207 // only parsing of the original request (handler -> runtime API) is needed so
205208 // the original response can be used
206209 Ok ( response_to_intercepted_req)
@@ -269,18 +272,18 @@ async fn forward_request(
269272// }
270273// }
271274
272- fn deserialize_json ( response : Result < Bytes , Error > ) -> Option < Value > {
273- match response {
274- Ok ( bytes) => serde_json:: from_slice ( bytes. as_ref ( ) ) . unwrap_or_else ( |e| {
275- error ! ( "Error deserializing response body: {}" , e) ;
276- None
277- } ) ,
278- Err ( e) => {
279- error ! ( "Error reading response body: {}" , e) ;
280- None
281- }
282- }
283- }
275+ // fn deserialize_json(response: Result<Bytes, Error>) -> Option<Value> {
276+ // match response {
277+ // Ok(bytes) => serde_json::from_slice(bytes.as_ref()).unwrap_or_else(|e| {
278+ // error!("Error deserializing response body: {}", e);
279+ // None
280+ // }),
281+ // Err(e) => {
282+ // error!("Error reading response body: {}", e);
283+ // None
284+ // }
285+ // }
286+ // }
284287
285288#[ cfg( test) ]
286289mod tests {
0 commit comments