comparison src/stream/ngx_stream_variables.c @ 6669:164a0824ce20

Stream: the $session_time variable. The variable keeps time spent on processing the stream session.
author Vladimir Homutov <vl@nginx.com>
date Fri, 26 Aug 2016 15:33:04 +0300
parents 5e2821c2de46
children c6372a40c2a7
comparison
equal deleted inserted replaced
6668:5e2821c2de46 6669:164a0824ce20
21 ngx_stream_variable_value_t *v, uintptr_t data); 21 ngx_stream_variable_value_t *v, uintptr_t data);
22 static ngx_int_t ngx_stream_variable_server_port(ngx_stream_session_t *s, 22 static ngx_int_t ngx_stream_variable_server_port(ngx_stream_session_t *s,
23 ngx_stream_variable_value_t *v, uintptr_t data); 23 ngx_stream_variable_value_t *v, uintptr_t data);
24 static ngx_int_t ngx_stream_variable_bytes(ngx_stream_session_t *s, 24 static ngx_int_t ngx_stream_variable_bytes(ngx_stream_session_t *s,
25 ngx_stream_variable_value_t *v, uintptr_t data); 25 ngx_stream_variable_value_t *v, uintptr_t data);
26 static ngx_int_t ngx_stream_variable_session_time(ngx_stream_session_t *s,
27 ngx_stream_variable_value_t *v, uintptr_t data);
26 static ngx_int_t ngx_stream_variable_connection(ngx_stream_session_t *s, 28 static ngx_int_t ngx_stream_variable_connection(ngx_stream_session_t *s,
27 ngx_stream_variable_value_t *v, uintptr_t data); 29 ngx_stream_variable_value_t *v, uintptr_t data);
28 30
29 static ngx_int_t ngx_stream_variable_nginx_version(ngx_stream_session_t *s, 31 static ngx_int_t ngx_stream_variable_nginx_version(ngx_stream_session_t *s,
30 ngx_stream_variable_value_t *v, uintptr_t data); 32 ngx_stream_variable_value_t *v, uintptr_t data);
60 { ngx_string("bytes_sent"), NULL, ngx_stream_variable_bytes, 62 { ngx_string("bytes_sent"), NULL, ngx_stream_variable_bytes,
61 0, 0, 0 }, 63 0, 0, 0 },
62 64
63 { ngx_string("bytes_received"), NULL, ngx_stream_variable_bytes, 65 { ngx_string("bytes_received"), NULL, ngx_stream_variable_bytes,
64 1, 0, 0 }, 66 1, 0, 0 },
67
68 { ngx_string("session_time"), NULL, ngx_stream_variable_session_time,
69 0, NGX_STREAM_VAR_NOCACHEABLE, 0 },
65 70
66 { ngx_string("connection"), NULL, 71 { ngx_string("connection"), NULL,
67 ngx_stream_variable_connection, 0, 0, 0 }, 72 ngx_stream_variable_connection, 0, 0, 0 },
68 73
69 { ngx_string("nginx_version"), NULL, ngx_stream_variable_nginx_version, 74 { ngx_string("nginx_version"), NULL, ngx_stream_variable_nginx_version,
479 484
480 } else { 485 } else {
481 v->len = ngx_sprintf(p, "%O", s->connection->sent) - p; 486 v->len = ngx_sprintf(p, "%O", s->connection->sent) - p;
482 } 487 }
483 488
489 v->valid = 1;
490 v->no_cacheable = 0;
491 v->not_found = 0;
492 v->data = p;
493
494 return NGX_OK;
495 }
496
497
498 static ngx_int_t
499 ngx_stream_variable_session_time(ngx_stream_session_t *s,
500 ngx_stream_variable_value_t *v, uintptr_t data)
501 {
502 u_char *p;
503 ngx_time_t *tp;
504 ngx_msec_int_t ms;
505
506 p = ngx_pnalloc(s->connection->pool, NGX_TIME_T_LEN + 4);
507 if (p == NULL) {
508 return NGX_ERROR;
509 }
510
511 tp = ngx_timeofday();
512
513 ms = (ngx_msec_int_t)
514 ((tp->sec - s->start_sec) * 1000 + (tp->msec - s->start_msec));
515 ms = ngx_max(ms, 0);
516
517 v->len = ngx_sprintf(p, "%T.%03M", (time_t) ms / 1000, ms % 1000) - p;
484 v->valid = 1; 518 v->valid = 1;
485 v->no_cacheable = 0; 519 v->no_cacheable = 0;
486 v->not_found = 0; 520 v->not_found = 0;
487 v->data = p; 521 v->data = p;
488 522