mirror of
https://github.com/nginx/nginx.git
synced 2024-12-18 21:23:36 -06:00
Upstream: revised upstream response time variables.
Variables now do not depend on presence of the HTTP status code in response. If the corresponding event occurred, variables contain time between request creation and the event, and "-" otherwise. Previously, intermediate value of the $upstream_response_time variable held unix timestamp.
This commit is contained in:
parent
0f669b23a8
commit
c241467318
@ -1505,8 +1505,8 @@ ngx_http_upstream_connect(ngx_http_request_t *r, ngx_http_upstream_t *u)
|
||||
|
||||
r->connection->log->action = "connecting to upstream";
|
||||
|
||||
if (u->state && u->state->response_time) {
|
||||
u->state->response_time = ngx_current_msec - u->state->response_time;
|
||||
if (u->state && u->state->response_time == (ngx_msec_t) -1) {
|
||||
u->state->response_time = ngx_current_msec - u->start_time;
|
||||
}
|
||||
|
||||
u->state = ngx_array_push(r->upstream_states);
|
||||
@ -1518,7 +1518,9 @@ ngx_http_upstream_connect(ngx_http_request_t *r, ngx_http_upstream_t *u)
|
||||
|
||||
ngx_memzero(u->state, sizeof(ngx_http_upstream_state_t));
|
||||
|
||||
u->state->response_time = ngx_current_msec;
|
||||
u->start_time = ngx_current_msec;
|
||||
|
||||
u->state->response_time = (ngx_msec_t) -1;
|
||||
u->state->connect_time = (ngx_msec_t) -1;
|
||||
u->state->header_time = (ngx_msec_t) -1;
|
||||
|
||||
@ -2002,7 +2004,7 @@ ngx_http_upstream_send_request(ngx_http_request_t *r, ngx_http_upstream_t *u,
|
||||
"http upstream send request");
|
||||
|
||||
if (u->state->connect_time == (ngx_msec_t) -1) {
|
||||
u->state->connect_time = ngx_current_msec - u->state->response_time;
|
||||
u->state->connect_time = ngx_current_msec - u->start_time;
|
||||
}
|
||||
|
||||
if (!u->request_sent && ngx_http_upstream_test_connect(c) != NGX_OK) {
|
||||
@ -2413,7 +2415,7 @@ ngx_http_upstream_process_header(ngx_http_request_t *r, ngx_http_upstream_t *u)
|
||||
|
||||
/* rc == NGX_OK */
|
||||
|
||||
u->state->header_time = ngx_current_msec - u->state->response_time;
|
||||
u->state->header_time = ngx_current_msec - u->start_time;
|
||||
|
||||
if (u->headers_in.status_n >= NGX_HTTP_SPECIAL_RESPONSE) {
|
||||
|
||||
@ -4309,8 +4311,8 @@ ngx_http_upstream_finalize_request(ngx_http_request_t *r,
|
||||
u->resolved->ctx = NULL;
|
||||
}
|
||||
|
||||
if (u->state && u->state->response_time) {
|
||||
u->state->response_time = ngx_current_msec - u->state->response_time;
|
||||
if (u->state && u->state->response_time == (ngx_msec_t) -1) {
|
||||
u->state->response_time = ngx_current_msec - u->start_time;
|
||||
|
||||
if (u->pipe && u->pipe->read_length) {
|
||||
u->state->bytes_received += u->pipe->read_length
|
||||
@ -5419,18 +5421,18 @@ ngx_http_upstream_response_time_variable(ngx_http_request_t *r,
|
||||
state = r->upstream_states->elts;
|
||||
|
||||
for ( ;; ) {
|
||||
if (state[i].status) {
|
||||
|
||||
if (data == 1 && state[i].header_time != (ngx_msec_t) -1) {
|
||||
ms = state[i].header_time;
|
||||
if (data == 1) {
|
||||
ms = state[i].header_time;
|
||||
|
||||
} else if (data == 2 && state[i].connect_time != (ngx_msec_t) -1) {
|
||||
ms = state[i].connect_time;
|
||||
} else if (data == 2) {
|
||||
ms = state[i].connect_time;
|
||||
|
||||
} else {
|
||||
ms = state[i].response_time;
|
||||
}
|
||||
} else {
|
||||
ms = state[i].response_time;
|
||||
}
|
||||
|
||||
if (ms != -1) {
|
||||
ms = ngx_max(ms, 0);
|
||||
p = ngx_sprintf(p, "%T.%03M", (time_t) ms / 1000, ms % 1000);
|
||||
|
||||
|
@ -365,6 +365,8 @@ struct ngx_http_upstream_s {
|
||||
ngx_int_t (*rewrite_cookie)(ngx_http_request_t *r,
|
||||
ngx_table_elt_t *h);
|
||||
|
||||
ngx_msec_t start_time;
|
||||
|
||||
ngx_http_upstream_state_t *state;
|
||||
|
||||
ngx_str_t method;
|
||||
|
@ -690,7 +690,7 @@ ngx_stream_proxy_connect(ngx_stream_session_t *s)
|
||||
u->proxy_protocol = pscf->proxy_protocol;
|
||||
|
||||
if (u->state) {
|
||||
u->state->response_time = ngx_current_msec - u->state->response_time;
|
||||
u->state->response_time = ngx_current_msec - u->start_time;
|
||||
}
|
||||
|
||||
u->state = ngx_array_push(s->upstream_states);
|
||||
@ -701,9 +701,11 @@ ngx_stream_proxy_connect(ngx_stream_session_t *s)
|
||||
|
||||
ngx_memzero(u->state, sizeof(ngx_stream_upstream_state_t));
|
||||
|
||||
u->start_time = ngx_current_msec;
|
||||
|
||||
u->state->connect_time = (ngx_msec_t) -1;
|
||||
u->state->first_byte_time = (ngx_msec_t) -1;
|
||||
u->state->response_time = ngx_current_msec;
|
||||
u->state->response_time = (ngx_msec_t) -1;
|
||||
|
||||
rc = ngx_event_connect_peer(&u->peer);
|
||||
|
||||
@ -817,7 +819,7 @@ ngx_stream_proxy_init_upstream(ngx_stream_session_t *s)
|
||||
}
|
||||
}
|
||||
|
||||
u->state->connect_time = ngx_current_msec - u->state->response_time;
|
||||
u->state->connect_time = ngx_current_msec - u->start_time;
|
||||
|
||||
if (u->peer.notify) {
|
||||
u->peer.notify(&u->peer, u->peer.data,
|
||||
@ -1622,7 +1624,7 @@ ngx_stream_proxy_process(ngx_stream_session_t *s, ngx_uint_t from_upstream,
|
||||
if (from_upstream) {
|
||||
if (u->state->first_byte_time == (ngx_msec_t) -1) {
|
||||
u->state->first_byte_time = ngx_current_msec
|
||||
- u->state->response_time;
|
||||
- u->start_time;
|
||||
}
|
||||
}
|
||||
|
||||
@ -1857,7 +1859,9 @@ ngx_stream_proxy_finalize(ngx_stream_session_t *s, ngx_uint_t rc)
|
||||
pc = u->peer.connection;
|
||||
|
||||
if (u->state) {
|
||||
u->state->response_time = ngx_current_msec - u->state->response_time;
|
||||
if (u->state->response_time == (ngx_msec_t) -1) {
|
||||
u->state->response_time = ngx_current_msec - u->start_time;
|
||||
}
|
||||
|
||||
if (pc) {
|
||||
u->state->bytes_received = u->received;
|
||||
|
@ -267,24 +267,22 @@ ngx_stream_upstream_response_time_variable(ngx_stream_session_t *s,
|
||||
for ( ;; ) {
|
||||
|
||||
if (data == 1) {
|
||||
if (state[i].first_byte_time == (ngx_msec_t) -1) {
|
||||
*p++ = '-';
|
||||
goto next;
|
||||
}
|
||||
|
||||
ms = state[i].first_byte_time;
|
||||
|
||||
} else if (data == 2 && state[i].connect_time != (ngx_msec_t) -1) {
|
||||
} else if (data == 2) {
|
||||
ms = state[i].connect_time;
|
||||
|
||||
} else {
|
||||
ms = state[i].response_time;
|
||||
}
|
||||
|
||||
ms = ngx_max(ms, 0);
|
||||
p = ngx_sprintf(p, "%T.%03M", (time_t) ms / 1000, ms % 1000);
|
||||
if (ms != -1) {
|
||||
ms = ngx_max(ms, 0);
|
||||
p = ngx_sprintf(p, "%T.%03M", (time_t) ms / 1000, ms % 1000);
|
||||
|
||||
next:
|
||||
} else {
|
||||
*p++ = '-';
|
||||
}
|
||||
|
||||
if (++i == s->upstream_states->nelts) {
|
||||
break;
|
||||
|
@ -130,6 +130,7 @@ typedef struct {
|
||||
time_t start_sec;
|
||||
ngx_uint_t requests;
|
||||
ngx_uint_t responses;
|
||||
ngx_msec_t start_time;
|
||||
|
||||
ngx_str_t ssl_name;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user