Welcome! Log In Create A New Profile

Advanced

[nginx] Upstream: the $upstream_bytes_received variable.

Vladimir Homutov
August 10, 2016 09:48AM
details: http://hg.nginx.org/nginx/rev/c131f20c9562
branches:
changeset: 6654:c131f20c9562
user: Vladimir Homutov <vl@nginx.com>
date: Wed Aug 10 16:46:39 2016 +0300
description:
Upstream: the $upstream_bytes_received variable.

Unlike $upstream_response_length that only counts the body size,
the new variable also counts the size of response header and data
received after switching protocols when proxying WebSockets.

diffstat:

src/http/ngx_http_upstream.c | 22 +++++++++++++++++++++-
src/http/ngx_http_upstream.h | 1 +
2 files changed, 22 insertions(+), 1 deletions(-)

diffs (85 lines):

diff -r 7a6456398fc3 -r c131f20c9562 src/http/ngx_http_upstream.c
--- a/src/http/ngx_http_upstream.c Mon Aug 08 17:11:29 2016 +0300
+++ b/src/http/ngx_http_upstream.c Wed Aug 10 16:46:39 2016 +0300
@@ -391,6 +391,10 @@ static ngx_http_variable_t ngx_http_ups
ngx_http_upstream_response_length_variable, 0,
NGX_HTTP_VAR_NOCACHEABLE, 0 },

+ { ngx_string("upstream_bytes_received"), NULL,
+ ngx_http_upstream_response_length_variable, 1,
+ NGX_HTTP_VAR_NOCACHEABLE, 0 },
+
#if (NGX_HTTP_CACHE)

{ ngx_string("upstream_cache_status"), NULL,
@@ -2136,6 +2140,8 @@ ngx_http_upstream_process_header(ngx_htt
return;
}

+ u->state->bytes_received += n;
+
u->buffer.last += n;

#if 0
@@ -2642,6 +2648,7 @@ ngx_http_upstream_process_body_in_memory
return;
}

+ u->state->bytes_received += n;
u->state->response_length += n;

if (u->input_filter(u->input_filter_ctx, n) == NGX_ERROR) {
@@ -3215,6 +3222,10 @@ ngx_http_upstream_process_upgraded(ngx_h
do_write = 1;
b->last += n;

+ if (from_upstream) {
+ u->state->bytes_received += n;
+ }
+
continue;
}

@@ -3411,6 +3422,7 @@ ngx_http_upstream_process_non_buffered_r
}

if (n > 0) {
+ u->state->bytes_received += n;
u->state->response_length += n;

if (u->input_filter(u->input_filter_ctx, n) == NGX_ERROR) {
@@ -4095,6 +4107,8 @@ ngx_http_upstream_finalize_request(ngx_h
u->state->response_time = ngx_current_msec - u->state->response_time;

if (u->pipe && u->pipe->read_length) {
+ u->state->bytes_received += u->pipe->read_length
+ - u->pipe->preread_size;
u->state->response_length = u->pipe->read_length;
}
}
@@ -5242,7 +5256,13 @@ ngx_http_upstream_response_length_variab
state = r->upstream_states->elts;

for ( ;; ) {
- p = ngx_sprintf(p, "%O", state[i].response_length);
+
+ if (data == 1) {
+ p = ngx_sprintf(p, "%O", state[i].bytes_received);
+
+ } else {
+ p = ngx_sprintf(p, "%O", state[i].response_length);
+ }

if (++i == r->upstream_states->nelts) {
break;
diff -r 7a6456398fc3 -r c131f20c9562 src/http/ngx_http_upstream.h
--- a/src/http/ngx_http_upstream.h Mon Aug 08 17:11:29 2016 +0300
+++ b/src/http/ngx_http_upstream.h Wed Aug 10 16:46:39 2016 +0300
@@ -63,6 +63,7 @@ typedef struct {
ngx_msec_t connect_time;
ngx_msec_t header_time;
off_t response_length;
+ off_t bytes_received;

ngx_str_t *peer;
} ngx_http_upstream_state_t;

_______________________________________________
nginx-devel mailing list
nginx-devel@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-devel
Subject Author Views Posted

[nginx] Upstream: the $upstream_bytes_received variable.

Vladimir Homutov 970 August 10, 2016 09:48AM



Sorry, you do not have permission to post/reply in this forum.

Online Users

Guests: 191
Record Number of Users: 8 on April 13, 2023
Record Number of Guests: 421 on December 02, 2018
Powered by nginx      Powered by FreeBSD      PHP Powered      Powered by MariaDB      ipv6 ready