Upstream: implemented $upstream_bytes_sent.

This commit is contained in:
Ruslan Ermilov 2018-12-13 17:23:07 +03:00
parent 8e2949e56a
commit cb4dd56771
2 changed files with 16 additions and 0 deletions

View File

@ -409,6 +409,10 @@ static ngx_http_variable_t ngx_http_upstream_vars[] = {
ngx_http_upstream_response_length_variable, 1, ngx_http_upstream_response_length_variable, 1,
NGX_HTTP_VAR_NOCACHEABLE, 0 }, 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) #if (NGX_HTTP_CACHE)
{ ngx_string("upstream_cache_status"), NULL, { 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.sockaddr) {
if (u->peer.connection) {
u->state->bytes_sent = u->peer.connection->sent;
}
if (ft_type == NGX_HTTP_UPSTREAM_FT_HTTP_403 if (ft_type == NGX_HTTP_UPSTREAM_FT_HTTP_403
|| ft_type == NGX_HTTP_UPSTREAM_FT_HTTP_404) || 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->pipe->preread_size;
u->state->response_length = u->pipe->read_length; 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); u->finalize_request(r, rc);
@ -5502,6 +5514,9 @@ ngx_http_upstream_response_length_variable(ngx_http_request_t *r,
if (data == 1) { if (data == 1) {
p = ngx_sprintf(p, "%O", state[i].bytes_received); p = ngx_sprintf(p, "%O", state[i].bytes_received);
} else if (data == 2) {
p = ngx_sprintf(p, "%O", state[i].bytes_sent);
} else { } else {
p = ngx_sprintf(p, "%O", state[i].response_length); p = ngx_sprintf(p, "%O", state[i].response_length);
} }

View File

@ -64,6 +64,7 @@ typedef struct {
ngx_msec_t queue_time; ngx_msec_t queue_time;
off_t response_length; off_t response_length;
off_t bytes_received; off_t bytes_received;
off_t bytes_sent;
ngx_str_t *peer; ngx_str_t *peer;
} ngx_http_upstream_state_t; } ngx_http_upstream_state_t;