Mercurial > hg > nginx
comparison src/http/ngx_http_variables.c @ 5010:829cc5872186
Variables $pipe, $request_length, $time_iso8601, and $time_local.
Log module counterparts are preserved for efficiency.
Based on patch by Kiril Kalchev.
author | Ruslan Ermilov <ru@nginx.com> |
---|---|
date | Mon, 21 Jan 2013 13:15:29 +0000 |
parents | 8b635cf36ccc |
children | 7fa7e60a7f66 |
comparison
equal
deleted
inserted
replaced
5009:fd8283273d55 | 5010:829cc5872186 |
---|---|
73 ngx_http_variable_value_t *v, uintptr_t data); | 73 ngx_http_variable_value_t *v, uintptr_t data); |
74 static ngx_int_t ngx_http_variable_bytes_sent(ngx_http_request_t *r, | 74 static ngx_int_t ngx_http_variable_bytes_sent(ngx_http_request_t *r, |
75 ngx_http_variable_value_t *v, uintptr_t data); | 75 ngx_http_variable_value_t *v, uintptr_t data); |
76 static ngx_int_t ngx_http_variable_body_bytes_sent(ngx_http_request_t *r, | 76 static ngx_int_t ngx_http_variable_body_bytes_sent(ngx_http_request_t *r, |
77 ngx_http_variable_value_t *v, uintptr_t data); | 77 ngx_http_variable_value_t *v, uintptr_t data); |
78 static ngx_int_t ngx_http_variable_pipe(ngx_http_request_t *r, | |
79 ngx_http_variable_value_t *v, uintptr_t data); | |
78 static ngx_int_t ngx_http_variable_request_completion(ngx_http_request_t *r, | 80 static ngx_int_t ngx_http_variable_request_completion(ngx_http_request_t *r, |
79 ngx_http_variable_value_t *v, uintptr_t data); | 81 ngx_http_variable_value_t *v, uintptr_t data); |
80 static ngx_int_t ngx_http_variable_request_body(ngx_http_request_t *r, | 82 static ngx_int_t ngx_http_variable_request_body(ngx_http_request_t *r, |
81 ngx_http_variable_value_t *v, uintptr_t data); | 83 ngx_http_variable_value_t *v, uintptr_t data); |
82 static ngx_int_t ngx_http_variable_request_body_file(ngx_http_request_t *r, | 84 static ngx_int_t ngx_http_variable_request_body_file(ngx_http_request_t *r, |
83 ngx_http_variable_value_t *v, uintptr_t data); | 85 ngx_http_variable_value_t *v, uintptr_t data); |
86 static ngx_int_t ngx_http_variable_request_length(ngx_http_request_t *r, | |
87 ngx_http_variable_value_t *v, uintptr_t data); | |
84 static ngx_int_t ngx_http_variable_request_time(ngx_http_request_t *r, | 88 static ngx_int_t ngx_http_variable_request_time(ngx_http_request_t *r, |
85 ngx_http_variable_value_t *v, uintptr_t data); | 89 ngx_http_variable_value_t *v, uintptr_t data); |
86 static ngx_int_t ngx_http_variable_status(ngx_http_request_t *r, | 90 static ngx_int_t ngx_http_variable_status(ngx_http_request_t *r, |
87 ngx_http_variable_value_t *v, uintptr_t data); | 91 ngx_http_variable_value_t *v, uintptr_t data); |
88 | 92 |
111 static ngx_int_t ngx_http_variable_hostname(ngx_http_request_t *r, | 115 static ngx_int_t ngx_http_variable_hostname(ngx_http_request_t *r, |
112 ngx_http_variable_value_t *v, uintptr_t data); | 116 ngx_http_variable_value_t *v, uintptr_t data); |
113 static ngx_int_t ngx_http_variable_pid(ngx_http_request_t *r, | 117 static ngx_int_t ngx_http_variable_pid(ngx_http_request_t *r, |
114 ngx_http_variable_value_t *v, uintptr_t data); | 118 ngx_http_variable_value_t *v, uintptr_t data); |
115 static ngx_int_t ngx_http_variable_msec(ngx_http_request_t *r, | 119 static ngx_int_t ngx_http_variable_msec(ngx_http_request_t *r, |
120 ngx_http_variable_value_t *v, uintptr_t data); | |
121 static ngx_int_t ngx_http_variable_time_iso8601(ngx_http_request_t *r, | |
122 ngx_http_variable_value_t *v, uintptr_t data); | |
123 static ngx_int_t ngx_http_variable_time_local(ngx_http_request_t *r, | |
116 ngx_http_variable_value_t *v, uintptr_t data); | 124 ngx_http_variable_value_t *v, uintptr_t data); |
117 | 125 |
118 /* | 126 /* |
119 * TODO: | 127 * TODO: |
120 * Apache CGI: AUTH_TYPE, PATH_INFO (null), PATH_TRANSLATED | 128 * Apache CGI: AUTH_TYPE, PATH_INFO (null), PATH_TRANSLATED |
229 0, 0, 0 }, | 237 0, 0, 0 }, |
230 | 238 |
231 { ngx_string("body_bytes_sent"), NULL, ngx_http_variable_body_bytes_sent, | 239 { ngx_string("body_bytes_sent"), NULL, ngx_http_variable_body_bytes_sent, |
232 0, 0, 0 }, | 240 0, 0, 0 }, |
233 | 241 |
242 { ngx_string("pipe"), NULL, ngx_http_variable_pipe, | |
243 0, 0, 0 }, | |
244 | |
234 { ngx_string("request_completion"), NULL, | 245 { ngx_string("request_completion"), NULL, |
235 ngx_http_variable_request_completion, | 246 ngx_http_variable_request_completion, |
236 0, 0, 0 }, | 247 0, 0, 0 }, |
237 | 248 |
238 { ngx_string("request_body"), NULL, | 249 { ngx_string("request_body"), NULL, |
240 0, 0, 0 }, | 251 0, 0, 0 }, |
241 | 252 |
242 { ngx_string("request_body_file"), NULL, | 253 { ngx_string("request_body_file"), NULL, |
243 ngx_http_variable_request_body_file, | 254 ngx_http_variable_request_body_file, |
244 0, 0, 0 }, | 255 0, 0, 0 }, |
256 | |
257 { ngx_string("request_length"), NULL, ngx_http_variable_request_length, | |
258 0, NGX_HTTP_VAR_NOCACHEABLE, 0 }, | |
245 | 259 |
246 { ngx_string("request_time"), NULL, ngx_http_variable_request_time, | 260 { ngx_string("request_time"), NULL, ngx_http_variable_request_time, |
247 0, NGX_HTTP_VAR_NOCACHEABLE, 0 }, | 261 0, NGX_HTTP_VAR_NOCACHEABLE, 0 }, |
248 | 262 |
249 { ngx_string("status"), NULL, | 263 { ngx_string("status"), NULL, |
293 | 307 |
294 { ngx_string("pid"), NULL, ngx_http_variable_pid, | 308 { ngx_string("pid"), NULL, ngx_http_variable_pid, |
295 0, 0, 0 }, | 309 0, 0, 0 }, |
296 | 310 |
297 { ngx_string("msec"), NULL, ngx_http_variable_msec, | 311 { ngx_string("msec"), NULL, ngx_http_variable_msec, |
312 0, NGX_HTTP_VAR_NOCACHEABLE, 0 }, | |
313 | |
314 { ngx_string("time_iso8601"), NULL, ngx_http_variable_time_iso8601, | |
315 0, NGX_HTTP_VAR_NOCACHEABLE, 0 }, | |
316 | |
317 { ngx_string("time_local"), NULL, ngx_http_variable_time_local, | |
298 0, NGX_HTTP_VAR_NOCACHEABLE, 0 }, | 318 0, NGX_HTTP_VAR_NOCACHEABLE, 0 }, |
299 | 319 |
300 #if (NGX_HAVE_TCP_INFO) | 320 #if (NGX_HAVE_TCP_INFO) |
301 { ngx_string("tcpinfo_rtt"), NULL, ngx_http_variable_tcpinfo, | 321 { ngx_string("tcpinfo_rtt"), NULL, ngx_http_variable_tcpinfo, |
302 0, NGX_HTTP_VAR_NOCACHEABLE, 0 }, | 322 0, NGX_HTTP_VAR_NOCACHEABLE, 0 }, |
1554 return NGX_OK; | 1574 return NGX_OK; |
1555 } | 1575 } |
1556 | 1576 |
1557 | 1577 |
1558 static ngx_int_t | 1578 static ngx_int_t |
1579 ngx_http_variable_pipe(ngx_http_request_t *r, | |
1580 ngx_http_variable_value_t *v, uintptr_t data) | |
1581 { | |
1582 v->data = (u_char *) (r->pipeline ? "p" : "."); | |
1583 v->len = 1; | |
1584 v->valid = 1; | |
1585 v->no_cacheable = 0; | |
1586 v->not_found = 0; | |
1587 | |
1588 return NGX_OK; | |
1589 } | |
1590 | |
1591 | |
1592 static ngx_int_t | |
1559 ngx_http_variable_status(ngx_http_request_t *r, | 1593 ngx_http_variable_status(ngx_http_request_t *r, |
1560 ngx_http_variable_value_t *v, uintptr_t data) | 1594 ngx_http_variable_value_t *v, uintptr_t data) |
1561 { | 1595 { |
1562 ngx_uint_t status; | 1596 ngx_uint_t status; |
1563 | 1597 |
1888 return NGX_OK; | 1922 return NGX_OK; |
1889 } | 1923 } |
1890 | 1924 |
1891 | 1925 |
1892 static ngx_int_t | 1926 static ngx_int_t |
1927 ngx_http_variable_request_length(ngx_http_request_t *r, | |
1928 ngx_http_variable_value_t *v, uintptr_t data) | |
1929 { | |
1930 u_char *p; | |
1931 | |
1932 p = ngx_pnalloc(r->pool, NGX_OFF_T_LEN); | |
1933 if (p == NULL) { | |
1934 return NGX_ERROR; | |
1935 } | |
1936 | |
1937 v->len = ngx_sprintf(p, "%O", r->request_length) - p; | |
1938 v->valid = 1; | |
1939 v->no_cacheable = 0; | |
1940 v->not_found = 0; | |
1941 v->data = p; | |
1942 | |
1943 return NGX_OK; | |
1944 } | |
1945 | |
1946 | |
1947 static ngx_int_t | |
1893 ngx_http_variable_request_time(ngx_http_request_t *r, | 1948 ngx_http_variable_request_time(ngx_http_request_t *r, |
1894 ngx_http_variable_value_t *v, uintptr_t data) | 1949 ngx_http_variable_value_t *v, uintptr_t data) |
1895 { | 1950 { |
1896 u_char *p; | 1951 u_char *p; |
1897 ngx_time_t *tp; | 1952 ngx_time_t *tp; |
2022 } | 2077 } |
2023 | 2078 |
2024 tp = ngx_timeofday(); | 2079 tp = ngx_timeofday(); |
2025 | 2080 |
2026 v->len = ngx_sprintf(p, "%T.%03M", tp->sec, tp->msec) - p; | 2081 v->len = ngx_sprintf(p, "%T.%03M", tp->sec, tp->msec) - p; |
2082 v->valid = 1; | |
2083 v->no_cacheable = 0; | |
2084 v->not_found = 0; | |
2085 v->data = p; | |
2086 | |
2087 return NGX_OK; | |
2088 } | |
2089 | |
2090 | |
2091 static ngx_int_t | |
2092 ngx_http_variable_time_iso8601(ngx_http_request_t *r, | |
2093 ngx_http_variable_value_t *v, uintptr_t data) | |
2094 { | |
2095 u_char *p; | |
2096 | |
2097 p = ngx_pnalloc(r->pool, ngx_cached_http_log_iso8601.len); | |
2098 if (p == NULL) { | |
2099 return NGX_ERROR; | |
2100 } | |
2101 | |
2102 ngx_memcpy(p, ngx_cached_http_log_iso8601.data, | |
2103 ngx_cached_http_log_iso8601.len); | |
2104 | |
2105 v->len = ngx_cached_http_log_iso8601.len; | |
2106 v->valid = 1; | |
2107 v->no_cacheable = 0; | |
2108 v->not_found = 0; | |
2109 v->data = p; | |
2110 | |
2111 return NGX_OK; | |
2112 } | |
2113 | |
2114 | |
2115 static ngx_int_t | |
2116 ngx_http_variable_time_local(ngx_http_request_t *r, | |
2117 ngx_http_variable_value_t *v, uintptr_t data) | |
2118 { | |
2119 u_char *p; | |
2120 | |
2121 p = ngx_pnalloc(r->pool, ngx_cached_http_log_time.len); | |
2122 if (p == NULL) { | |
2123 return NGX_ERROR; | |
2124 } | |
2125 | |
2126 ngx_memcpy(p, ngx_cached_http_log_time.data, ngx_cached_http_log_time.len); | |
2127 | |
2128 v->len = ngx_cached_http_log_time.len; | |
2027 v->valid = 1; | 2129 v->valid = 1; |
2028 v->no_cacheable = 0; | 2130 v->no_cacheable = 0; |
2029 v->not_found = 0; | 2131 v->not_found = 0; |
2030 v->data = p; | 2132 v->data = p; |
2031 | 2133 |