diff options
Diffstat (limited to 'ot_http.c')
-rw-r--r-- | ot_http.c | 24 |
1 files changed, 22 insertions, 2 deletions
@@ -214,6 +214,12 @@ static ssize_t http_handle_sync( const int64 client_socket, char *data ) { | |||
214 | static ssize_t http_handle_stats( const int64 client_socket, char *data, char *d, size_t l ) { | 214 | static ssize_t http_handle_stats( const int64 client_socket, char *data, char *d, size_t l ) { |
215 | char *c = data; | 215 | char *c = data; |
216 | int mode = TASK_STATS_PEERS, scanon = 1, format = 0; | 216 | int mode = TASK_STATS_PEERS, scanon = 1, format = 0; |
217 | #ifdef WANT_RESTRICT_STATS | ||
218 | struct http_data *h = io_getcookie( client_socket ); | ||
219 | |||
220 | if( !accesslist_isblessed( h->ip, OT_PERMISSION_MAY_STAT ) ) | ||
221 | HTTPERROR_403_IP; | ||
222 | #endif | ||
217 | 223 | ||
218 | while( scanon ) { | 224 | while( scanon ) { |
219 | switch( scan_urlencoded_query( &c, data = c, SCAN_SEARCHPATH_PARAM ) ) { | 225 | switch( scan_urlencoded_query( &c, data = c, SCAN_SEARCHPATH_PARAM ) ) { |
@@ -230,8 +236,8 @@ static ssize_t http_handle_stats( const int64 client_socket, char *data, char *d | |||
230 | mode = TASK_STATS_PEERS; | 236 | mode = TASK_STATS_PEERS; |
231 | else if( !byte_diff(data,4,"conn")) | 237 | else if( !byte_diff(data,4,"conn")) |
232 | mode = TASK_STATS_CONNS; | 238 | mode = TASK_STATS_CONNS; |
233 | else if( !byte_diff(data,4,"top5")) | 239 | else if( !byte_diff(data,4,"top10")) |
234 | mode = TASK_STATS_TOP5; | 240 | mode = TASK_STATS_TOP10; |
235 | else if( !byte_diff(data,4,"scrp")) | 241 | else if( !byte_diff(data,4,"scrp")) |
236 | mode = TASK_STATS_SCRAPE; | 242 | mode = TASK_STATS_SCRAPE; |
237 | else if( !byte_diff(data,4,"torr")) | 243 | else if( !byte_diff(data,4,"torr")) |
@@ -256,6 +262,10 @@ static ssize_t http_handle_stats( const int64 client_socket, char *data, char *d | |||
256 | mode = TASK_STATS_VERSION; | 262 | mode = TASK_STATS_VERSION; |
257 | else if( !byte_diff(data,4,"busy")) | 263 | else if( !byte_diff(data,4,"busy")) |
258 | mode = TASK_STATS_BUSY_NETWORKS; | 264 | mode = TASK_STATS_BUSY_NETWORKS; |
265 | else if( !byte_diff(data,4,"dmem")) | ||
266 | mode = TASK_STATS_MEMORY; | ||
267 | else if( !byte_diff(data,4,"vdeb")) | ||
268 | mode = TASK_STATS_VECTOR_DEBUG; | ||
259 | else | 269 | else |
260 | HTTPERROR_400_PARAM; | 270 | HTTPERROR_400_PARAM; |
261 | break; | 271 | break; |
@@ -304,7 +314,17 @@ static ssize_t http_handle_stats( const int64 client_socket, char *data, char *d | |||
304 | #endif | 314 | #endif |
305 | 315 | ||
306 | /* default format for now */ | 316 | /* default format for now */ |
317 | if( ( mode & TASK_CLASS_MASK ) == TASK_STATS ) { | ||
318 | tai6464 t; | ||
319 | /* Complex stats also include expensive memory debugging tools */ | ||
320 | taia_uint( &t, 0 ); io_timeout( client_socket, t ); | ||
321 | stats_deliver( client_socket, mode ); | ||
322 | return -2; | ||
323 | } | ||
324 | |||
325 | /* Simple stats can be answerred immediately */ | ||
307 | if( !( l = return_stats_for_tracker( static_outbuf + SUCCESS_HTTP_HEADER_LENGTH, mode, 0 ) ) ) HTTPERROR_500; | 326 | if( !( l = return_stats_for_tracker( static_outbuf + SUCCESS_HTTP_HEADER_LENGTH, mode, 0 ) ) ) HTTPERROR_500; |
327 | |||
308 | return l; | 328 | return l; |
309 | } | 329 | } |
310 | 330 | ||