diff options
Diffstat (limited to 'ot_stats.c')
-rw-r--r-- | ot_stats.c | 34 |
1 files changed, 22 insertions, 12 deletions
@@ -12,10 +12,12 @@ | |||
12 | #include <stdio.h> | 12 | #include <stdio.h> |
13 | #include <string.h> | 13 | #include <string.h> |
14 | #include <pthread.h> | 14 | #include <pthread.h> |
15 | #include <unistd.h> | ||
15 | 16 | ||
16 | /* Libowfat */ | 17 | /* Libowfat */ |
17 | #include "byte.h" | 18 | #include "byte.h" |
18 | #include "io.h" | 19 | #include "io.h" |
20 | #include "ip6.h" | ||
19 | 21 | ||
20 | /* Opentracker */ | 22 | /* Opentracker */ |
21 | #include "trackerlogic.h" | 23 | #include "trackerlogic.h" |
@@ -132,8 +134,8 @@ static void stats_get_highscore_networks( stats_network_node *node, int depth, u | |||
132 | while( (j<network_count) && (node->counters[i]>scores[j] ) ) ++j; | 134 | while( (j<network_count) && (node->counters[i]>scores[j] ) ) ++j; |
133 | --j; | 135 | --j; |
134 | 136 | ||
135 | memmove( scores, scores + 1, j * sizeof( *scores ) ); | 137 | memcpy( scores, scores + 1, j * sizeof( *scores ) ); |
136 | memmove( networks, networks + 1, j * sizeof( *networks ) ); | 138 | memcpy( networks, networks + 1, j * sizeof( *networks ) ); |
137 | scores[ j ] = node->counters[ i ]; | 139 | scores[ j ] = node->counters[ i ]; |
138 | networks[ j ] = node_value | ( i << ( 32 - depth * STATS_NETWORK_NODE_BITWIDTH ) ); | 140 | networks[ j ] = node_value | ( i << ( 32 - depth * STATS_NETWORK_NODE_BITWIDTH ) ); |
139 | } | 141 | } |
@@ -176,13 +178,13 @@ size_t stats_top10_txt( char * reply ) { | |||
176 | ot_peerlist *peer_list = ( ((ot_torrent*)(torrents_list->data))[j] ).peer_list; | 178 | ot_peerlist *peer_list = ( ((ot_torrent*)(torrents_list->data))[j] ).peer_list; |
177 | int idx = 9; while( (idx >= 0) && ( peer_list->peer_count > top10c[idx].val ) ) --idx; | 179 | int idx = 9; while( (idx >= 0) && ( peer_list->peer_count > top10c[idx].val ) ) --idx; |
178 | if ( idx++ != 9 ) { | 180 | if ( idx++ != 9 ) { |
179 | memmove( top10c + idx + 1, top10c + idx, ( 9 - idx ) * sizeof( ot_record ) ); | 181 | memcpy( top10c + idx + 1, top10c + idx, ( 9 - idx ) * sizeof( ot_record ) ); |
180 | top10c[idx].val = peer_list->peer_count; | 182 | top10c[idx].val = peer_list->peer_count; |
181 | top10c[idx].torrent = (ot_torrent*)(torrents_list->data) + j; | 183 | top10c[idx].torrent = (ot_torrent*)(torrents_list->data) + j; |
182 | } | 184 | } |
183 | idx = 9; while( (idx >= 0) && ( peer_list->seed_count > top10s[idx].val ) ) --idx; | 185 | idx = 9; while( (idx >= 0) && ( peer_list->seed_count > top10s[idx].val ) ) --idx; |
184 | if ( idx++ != 9 ) { | 186 | if ( idx++ != 9 ) { |
185 | memmove( top10s + idx + 1, top10s + idx, ( 9 - idx ) * sizeof( ot_record ) ); | 187 | memcpy( top10s + idx + 1, top10s + idx, ( 9 - idx ) * sizeof( ot_record ) ); |
186 | top10s[idx].val = peer_list->seed_count; | 188 | top10s[idx].val = peer_list->seed_count; |
187 | top10s[idx].torrent = (ot_torrent*)(torrents_list->data) + j; | 189 | top10s[idx].torrent = (ot_torrent*)(torrents_list->data) + j; |
188 | } | 190 | } |
@@ -269,7 +271,7 @@ static size_t stats_slash24s_txt( char * reply, size_t amount, uint32_t thresh ) | |||
269 | while( ( insert_pos >= 0 ) && ( count[j] > slash24s[ 2 * insert_pos ] ) ) | 271 | while( ( insert_pos >= 0 ) && ( count[j] > slash24s[ 2 * insert_pos ] ) ) |
270 | --insert_pos; | 272 | --insert_pos; |
271 | ++insert_pos; | 273 | ++insert_pos; |
272 | memmove( slash24s + 2 * ( insert_pos + 1 ), slash24s + 2 * ( insert_pos ), 2 * sizeof( uint32_t ) * ( amount - insert_pos - 1 ) ); | 274 | memcpy( slash24s + 2 * ( insert_pos + 1 ), slash24s + 2 * ( insert_pos ), 2 * sizeof( uint32_t ) * ( amount - insert_pos - 1 ) ); |
273 | slash24s[ 2 * insert_pos ] = count[j]; | 275 | slash24s[ 2 * insert_pos ] = count[j]; |
274 | slash24s[ 2 * insert_pos + 1 ] = ( i << NUM_TOPBITS ) + j; | 276 | slash24s[ 2 * insert_pos + 1 ] = ( i << NUM_TOPBITS ) + j; |
275 | if( slash24s[ 2 * amount - 2 ] > thresh ) | 277 | if( slash24s[ 2 * amount - 2 ] > thresh ) |
@@ -537,7 +539,7 @@ static void stats_make( int *iovec_entries, struct iovec **iovector, ot_tasktype | |||
537 | iovec_fixlast( iovec_entries, iovector, r ); | 539 | iovec_fixlast( iovec_entries, iovector, r ); |
538 | } | 540 | } |
539 | 541 | ||
540 | void stats_issue_event( ot_status_event event, PROTO_FLAG proto, uint32_t event_data ) { | 542 | void stats_issue_event( ot_status_event event, PROTO_FLAG proto, uintptr_t event_data ) { |
541 | switch( event ) { | 543 | switch( event ) { |
542 | case EVENT_ACCEPT: | 544 | case EVENT_ACCEPT: |
543 | if( proto == FLAG_TCP ) ot_overall_tcp_connections++; else ot_overall_udp_connections++; | 545 | if( proto == FLAG_TCP ) ot_overall_tcp_connections++; else ot_overall_udp_connections++; |
@@ -559,16 +561,24 @@ void stats_issue_event( ot_status_event event, PROTO_FLAG proto, uint32_t event_ | |||
559 | break; | 561 | break; |
560 | case EVENT_FULLSCRAPE_REQUEST: | 562 | case EVENT_FULLSCRAPE_REQUEST: |
561 | { | 563 | { |
562 | uint8_t ip[4]; *(uint32_t*)ip = (uint32_t)proto; /* ugly hack to transfer ip to stats */ | 564 | ot_ip6 *ip = (ot_ip6*)event_data; /* ugly hack to transfer ip to stats */ |
563 | LOG_TO_STDERR( "[%08d] scrp: %d.%d.%d.%d - FULL SCRAPE\n", (unsigned int)(g_now_seconds - ot_start_time)/60, ip[0], ip[1], ip[2], ip[3] ); | 565 | char _debug[512]; |
564 | ot_full_scrape_request_count++; | 566 | int off = snprintf( _debug, sizeof(_debug), "[%08d] scrp: ", (unsigned int)(g_now_seconds - ot_start_time)/60 ); |
567 | off += fmt_ip6( _debug+off, *ip ); | ||
568 | off += snprintf( _debug, sizeof(_debug)-off, " - FULL SCRAPE\n" ); | ||
569 | write( 2, _debug, off ); | ||
570 | ot_full_scrape_request_count++; | ||
565 | } | 571 | } |
566 | break; | 572 | break; |
567 | case EVENT_FULLSCRAPE_REQUEST_GZIP: | 573 | case EVENT_FULLSCRAPE_REQUEST_GZIP: |
568 | { | 574 | { |
569 | uint8_t ip[4]; *(uint32_t*)ip = (uint32_t)proto; /* ugly hack to transfer ip to stats */ | 575 | ot_ip6 *ip = (ot_ip6*)event_data; /* ugly hack to transfer ip to stats */ |
570 | LOG_TO_STDERR( "[%08d] scrp: %d.%d.%d.%d - FULL SCRAPE GZIP\n", (unsigned int)(g_now_seconds - ot_start_time)/60, ip[0], ip[1], ip[2], ip[3] ); | 576 | char _debug[512]; |
571 | ot_full_scrape_request_count++; | 577 | int off = snprintf( _debug, sizeof(_debug), "[%08d] scrp: ", (unsigned int)(g_now_seconds - ot_start_time)/60 ); |
578 | off += fmt_ip6(_debug+off, *ip ); | ||
579 | off += snprintf( _debug, sizeof(_debug)-off, " - FULL SCRAPE\n" ); | ||
580 | write( 2, _debug, off ); | ||
581 | ot_full_scrape_request_count++; | ||
572 | } | 582 | } |
573 | break; | 583 | break; |
574 | case EVENT_FAILED: | 584 | case EVENT_FAILED: |