summaryrefslogtreecommitdiff
path: root/ot_stats.c
diff options
context:
space:
mode:
Diffstat (limited to 'ot_stats.c')
-rw-r--r--ot_stats.c34
1 files changed, 22 insertions, 12 deletions
diff --git a/ot_stats.c b/ot_stats.c
index 31d53e8..30a599c 100644
--- a/ot_stats.c
+++ b/ot_stats.c
@@ -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
540void stats_issue_event( ot_status_event event, PROTO_FLAG proto, uint32_t event_data ) { 542void 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: