@@ -58,12 +58,15 @@ func (c *Client) Get(
5858 "peer" , peer .String (),
5959 )
6060 requestTime := time .Now ()
61- status , err := c .doRequest (ctx , logger , req , resp , peer )
61+ n , status , err := c .doRequest (ctx , logger , req , resp , peer )
6262 if err != nil {
6363 logger .Warnw ("requesting data from peer failed" , "error" , err )
6464 }
6565 c .metrics .observeRequest (ctx , req .Name (), status , time .Since (requestTime ))
66- logger .Debugw ("requested data" , "status" , status , "duration" , time .Since (requestTime ))
66+ logger .Debugw ("requested data" ,
67+ "status" , status , "duration" ,
68+ time .Since (requestTime ), "total bytes received" , n ,
69+ )
6770 return err
6871}
6972
@@ -75,13 +78,13 @@ func (c *Client) doRequest(
7578 req request ,
7679 resp response ,
7780 peer peer.ID ,
78- ) (status , error ) {
81+ ) (int64 , status , error ) {
7982 streamOpenCtx , cancel := context .WithTimeout (ctx , c .params .ReadTimeout )
8083 defer cancel ()
8184
8285 stream , err := c .host .NewStream (streamOpenCtx , peer , ProtocolID (c .params .NetworkID (), req .Name ()))
8386 if err != nil {
84- return statusOpenStreamErr , fmt .Errorf ("open stream: %w" , err )
87+ return 0 , statusOpenStreamErr , fmt .Errorf ("open stream: %w" , err )
8588 }
8689 defer func () {
8790 utils .CloseAndLog (log , "shrex/client stream" , stream )
@@ -91,7 +94,7 @@ func (c *Client) doRequest(
9194
9295 _ , err = req .WriteTo (stream )
9396 if err != nil {
94- return statusSendReqErr , fmt .Errorf ("writing request: %w" , err )
97+ return 0 , statusSendReqErr , fmt .Errorf ("writing request: %w" , err )
9598 }
9699
97100 err = stream .CloseWrite ()
@@ -100,26 +103,30 @@ func (c *Client) doRequest(
100103 }
101104
102105 var statusResp shrexpb.Response
103- _ , err = serde .Read (stream , & statusResp )
106+ statusLength , err : = serde .Read (stream , & statusResp )
104107 if err != nil {
105- return statusReadStatusErr , fmt .Errorf ("unexpected error during reading the status from stream: %w" , err )
108+ return int64 (statusLength ),
109+ statusReadStatusErr ,
110+ fmt .Errorf ("unexpected error during reading the status from stream: %w" , err )
106111 }
107112
108113 switch statusResp .Status {
109114 case shrexpb .Status_OK :
110115 case shrexpb .Status_NOT_FOUND :
111- return statusNotFound , ErrNotFound
116+ return int64 ( statusLength ), statusNotFound , ErrNotFound
112117 case shrexpb .Status_INTERNAL :
113- return statusInternalErr , ErrInternalServer
118+ return int64 ( statusLength ), statusInternalErr , ErrInternalServer
114119 default :
115- return statusReadRespErr , ErrInvalidResponse
120+ return int64 ( statusLength ), statusReadRespErr , ErrInvalidResponse
116121 }
117122
118- _ , err = resp .ReadFrom (stream )
123+ dataLength , err := resp .ReadFrom (stream )
124+ st := statusSuccess
119125 if err != nil {
120- return statusReadRespErr , fmt .Errorf ("%w: %w" , ErrInvalidResponse , err )
126+ err = fmt .Errorf ("%w: %w" , ErrInvalidResponse , err )
127+ st = statusReadRespErr
121128 }
122- return statusSuccess , nil
129+ return int64 ( statusLength ) + dataLength , st , err
123130}
124131
125132func (c * Client ) setStreamDeadlines (ctx context.Context , logger * zap.SugaredLogger , stream network.Stream ) {
0 commit comments