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