]> git.kaiwu.me - nginx.git/commitdiff
Upstream: implemented $upstream_bytes_sent.
authorRuslan Ermilov <ru@nginx.com>
Thu, 13 Dec 2018 14:23:07 +0000 (17:23 +0300)
committerRuslan Ermilov <ru@nginx.com>
Thu, 13 Dec 2018 14:23:07 +0000 (17:23 +0300)
src/http/ngx_http_upstream.c
src/http/ngx_http_upstream.h

index 3fa86c8f969c8edc2c91c7e204452f595bdc511c..9071055714008c6178e68be20bfa0d49480921f8 100644 (file)
@@ -409,6 +409,10 @@ static ngx_http_variable_t  ngx_http_upstream_vars[] = {
       ngx_http_upstream_response_length_variable, 1,
       NGX_HTTP_VAR_NOCACHEABLE, 0 },
 
+    { ngx_string("upstream_bytes_sent"), NULL,
+      ngx_http_upstream_response_length_variable, 2,
+      NGX_HTTP_VAR_NOCACHEABLE, 0 },
+
 #if (NGX_HTTP_CACHE)
 
     { ngx_string("upstream_cache_status"), NULL,
@@ -4136,6 +4140,10 @@ ngx_http_upstream_next(ngx_http_request_t *r, ngx_http_upstream_t *u,
 
     if (u->peer.sockaddr) {
 
+        if (u->peer.connection) {
+            u->state->bytes_sent = u->peer.connection->sent;
+        }
+
         if (ft_type == NGX_HTTP_UPSTREAM_FT_HTTP_403
             || ft_type == NGX_HTTP_UPSTREAM_FT_HTTP_404)
         {
@@ -4319,6 +4327,10 @@ ngx_http_upstream_finalize_request(ngx_http_request_t *r,
                                         - u->pipe->preread_size;
             u->state->response_length = u->pipe->read_length;
         }
+
+        if (u->peer.connection) {
+            u->state->bytes_sent = u->peer.connection->sent;
+        }
     }
 
     u->finalize_request(r, rc);
@@ -5502,6 +5514,9 @@ ngx_http_upstream_response_length_variable(ngx_http_request_t *r,
         if (data == 1) {
             p = ngx_sprintf(p, "%O", state[i].bytes_received);
 
+        } else if (data == 2) {
+            p = ngx_sprintf(p, "%O", state[i].bytes_sent);
+
         } else {
             p = ngx_sprintf(p, "%O", state[i].response_length);
         }
index af84e24be8e569900467fca849f296e8024e1ac1..6079d7236cbf62291797f17791d59b6a15506fc6 100644 (file)
@@ -64,6 +64,7 @@ typedef struct {
     ngx_msec_t                       queue_time;
     off_t                            response_length;
     off_t                            bytes_received;
+    off_t                            bytes_sent;
 
     ngx_str_t                       *peer;
 } ngx_http_upstream_state_t;