Browse Source

Cleaned up stats return format. Also reflect APPI changes due to MT code in trackerlogic.{c,h}

dynamic-accesslists
erdgeist 17 years ago
parent
commit
a859ae78e5
  1. 126
      opentracker.c

126
opentracker.c

@ -230,7 +230,7 @@ static void httpresponse( const int64 s, char *data _DEBUG_HTTPERROR_PARAM( size
ot_peer peer; ot_peer peer;
ot_torrent *torrent; ot_torrent *torrent;
ot_hash *hash = NULL; ot_hash *hash = NULL;
int numwant, tmp, scanon, mode, scrape_count; int numwant, tmp, scanon, mode;
unsigned short port = htons(6881); unsigned short port = htons(6881);
time_t t; time_t t;
ssize_t len; ssize_t len;
@ -306,7 +306,7 @@ LOG_TO_STDERR( "sync: %d.%d.%d.%d\n", h->ip[0], h->ip[1], h->ip[2], h->ip[3] );
if( !byte_diff( data, 2, "sc" ) ) goto SCRAPE_WORKAROUND; if( !byte_diff( data, 2, "sc" ) ) goto SCRAPE_WORKAROUND;
if( byte_diff(data,5,"stats")) HTTPERROR_404; if( byte_diff(data,5,"stats")) HTTPERROR_404;
scanon = 1; scanon = 1;
mode = STATS_MRTG; mode = STATS_PEERS;
while( scanon ) { while( scanon ) {
switch( scan_urlencoded_query( &c, data = c, SCAN_SEARCHPATH_PARAM ) ) { switch( scan_urlencoded_query( &c, data = c, SCAN_SEARCHPATH_PARAM ) ) {
@ -319,8 +319,10 @@ LOG_TO_STDERR( "sync: %d.%d.%d.%d\n", h->ip[0], h->ip[1], h->ip[2], h->ip[3] );
continue; continue;
} }
if( scan_urlencoded_query( &c, data = c, SCAN_SEARCHPATH_VALUE ) != 4 ) HTTPERROR_400_PARAM; if( scan_urlencoded_query( &c, data = c, SCAN_SEARCHPATH_VALUE ) != 4 ) HTTPERROR_400_PARAM;
if( !byte_diff(data,4,"mrtg")) if( !byte_diff(data,4,"peer"))
mode = STATS_MRTG; mode = STATS_PEERS;
else if( !byte_diff(data,4,"conn"))
mode = STATS_CONNS;
else if( !byte_diff(data,4,"top5")) else if( !byte_diff(data,4,"top5"))
mode = STATS_TOP5; mode = STATS_TOP5;
else if( !byte_diff(data,4,"fscr")) else if( !byte_diff(data,4,"fscr"))
@ -333,68 +335,58 @@ LOG_TO_STDERR( "sync: %d.%d.%d.%d\n", h->ip[0], h->ip[1], h->ip[2], h->ip[3] );
mode = STATS_UDP; mode = STATS_UDP;
else if( !byte_diff(data,4,"s24s")) else if( !byte_diff(data,4,"s24s"))
mode = STATS_SLASH24S; mode = STATS_SLASH24S;
else if( !byte_diff(data,4,"s24S"))
mode = STATS_SLASH24S_OLD;
else else
HTTPERROR_400_PARAM; HTTPERROR_400_PARAM;
} }
} }
switch( mode) switch( mode)
{ {
case STATS_DMEM: case STATS_DMEM:
LOG_TO_STDERR( "stats: %d.%d.%d.%d - mode: dmem\n", h->ip[0], h->ip[1], h->ip[2], h->ip[3] ); if( !( reply_size = return_memstat_for_tracker( &reply ) ) ) HTTPERROR_500;
return sendmmapdata( s, reply, reply_size );
if( !( reply_size = return_memstat_for_tracker( &reply ) ) ) HTTPERROR_500; case STATS_CONNS:
return sendmmapdata( s, reply, reply_size ); t = time( NULL ) - ot_start_time;
reply_size = sprintf( static_outbuf + SUCCESS_HTTP_HEADER_LENGTH,
case STATS_UDP: "%llu\n%llu\n%i seconds (%i hours)\nopentracker - Pretuned by german engineers, currently handling %llu connections per second.",
t = time( NULL ) - ot_start_time; ot_overall_tcp_connections+ot_overall_udp_connections, ot_overall_tcp_successfulannounces+ot_overall_udp_successfulannounces, (int)t, (int)(t / 3600), (ot_overall_tcp_connections+ot_overall_udp_connections) / ( (unsigned int)t ? (unsigned int)t : 1 ) );
reply_size = sprintf( static_outbuf + SUCCESS_HTTP_HEADER_LENGTH, break;
"%llu\n%llu\n%i seconds (%i hours)\nopentracker udp4 stats.", case STATS_UDP:
ot_overall_udp_connections, ot_overall_udp_successfulannounces, (int)t, (int)(t / 3600) ); t = time( NULL ) - ot_start_time;
break; reply_size = sprintf( static_outbuf + SUCCESS_HTTP_HEADER_LENGTH,
"%llu\n%llu\n%i seconds (%i hours)\nopentracker udp4 stats.",
case STATS_TCP: ot_overall_udp_connections, ot_overall_udp_successfulannounces, (int)t, (int)(t / 3600) );
t = time( NULL ) - ot_start_time; break;
reply_size = sprintf( static_outbuf + SUCCESS_HTTP_HEADER_LENGTH,
"%llu\n%llu\n%i seconds (%i hours)\nopentracker tcp4 stats.",
ot_overall_tcp_connections, ot_overall_tcp_successfulannounces, (int)t, (int)(t / 3600) );
break;
default: case STATS_TCP:
case STATS_MRTG: t = time( NULL ) - ot_start_time;
/* Enough for http header + whole scrape string */ reply_size = sprintf( static_outbuf + SUCCESS_HTTP_HEADER_LENGTH,
if( !( reply_size = return_stats_for_tracker( SUCCESS_HTTP_HEADER_LENGTH + static_outbuf, mode ) ) ) HTTPERROR_500; "%llu\n%llu\n%i seconds (%i hours)\nopentracker tcp4 stats.",
break; ot_overall_tcp_connections, ot_overall_tcp_successfulannounces, (int)t, (int)(t / 3600) );
break;
case STATS_FULLSCRAPE: default:
t = time( NULL ) - ot_start_time; case STATS_PEERS:
reply_size = sprintf( static_outbuf + SUCCESS_HTTP_HEADER_LENGTH, /* Enough for http header + whole scrape string */
"%llu\n%llu\n%i seconds (%i hours)\nopentracker full scrape stats.", if( !( reply_size = return_stats_for_tracker( SUCCESS_HTTP_HEADER_LENGTH + static_outbuf, mode ) ) ) HTTPERROR_500;
ot_full_scrape_count * 1000, ot_full_scrape_size, (int)t, (int)(t / 3600) ); break;
break;
case STATS_SLASH24S: case STATS_FULLSCRAPE:
{ t = time( NULL ) - ot_start_time;
LOG_TO_STDERR( "stats: %d.%d.%d.%d - mode: s24s\n", h->ip[0], h->ip[1], h->ip[2], h->ip[3] ); reply_size = sprintf( static_outbuf + SUCCESS_HTTP_HEADER_LENGTH,
"%llu\n%llu\n%i seconds (%i hours)\nopentracker full scrape stats.",
ot_full_scrape_count * 1000, ot_full_scrape_size, (int)t, (int)(t / 3600) );
break;
case STATS_SLASH24S:
{
ot_dword diff; struct timeval tv1, tv2; gettimeofday( &tv1, NULL ); ot_dword diff; struct timeval tv1, tv2; gettimeofday( &tv1, NULL );
if( !( reply_size = return_stats_for_slash24s( SUCCESS_HTTP_HEADER_LENGTH + static_outbuf, 25, 16 ) ) ) HTTPERROR_500; if( !( reply_size = return_stats_for_slash24s( SUCCESS_HTTP_HEADER_LENGTH + static_outbuf, 25, 16 ) ) ) HTTPERROR_500;
gettimeofday( &tv2, NULL ); diff = ( tv2.tv_sec - tv1.tv_sec ) * 1000000 + tv2.tv_usec - tv1.tv_usec; gettimeofday( &tv2, NULL ); diff = ( tv2.tv_sec - tv1.tv_sec ) * 1000000 + tv2.tv_usec - tv1.tv_usec;
reply_size += sprintf( SUCCESS_HTTP_HEADER_LENGTH + static_outbuf + reply_size, "Time taken: %u\n", diff ); reply_size += sprintf( SUCCESS_HTTP_HEADER_LENGTH + static_outbuf + reply_size, "Time taken: %u\n", diff );
break; }
} break;
case STATS_SLASH24S_OLD:
{
LOG_TO_STDERR( "stats: %d.%d.%d.%d - mode: s24s old\n", h->ip[0], h->ip[1], h->ip[2], h->ip[3] );
ot_dword diff; struct timeval tv1, tv2; gettimeofday( &tv1, NULL );
if( !( reply_size = return_stats_for_slash24s_old( SUCCESS_HTTP_HEADER_LENGTH + static_outbuf, 25, 16 ) ) ) HTTPERROR_500;
gettimeofday( &tv2, NULL ); diff = ( tv2.tv_sec - tv1.tv_sec ) * 1000000 + tv2.tv_usec - tv1.tv_usec;
reply_size += sprintf( SUCCESS_HTTP_HEADER_LENGTH + static_outbuf + reply_size, "Time taken: %u\n", diff );
break;
}
} }
break; break;
@ -432,12 +424,12 @@ SCRAPE_WORKAROUND:
} }
scanon = 1; scanon = 1;
scrape_count = 0; numwant = 0;
while( scanon ) { while( scanon ) {
switch( scan_urlencoded_query( &c, data = c, SCAN_SEARCHPATH_PARAM ) ) { switch( scan_urlencoded_query( &c, data = c, SCAN_SEARCHPATH_PARAM ) ) {
case -2: scanon = 0; break; /* TERMINATOR */ case -2: scanon = 0; break; /* TERMINATOR */
case -1: case -1:
if( scrape_count ) if( numwant )
goto UTORRENT1600_WORKAROUND; goto UTORRENT1600_WORKAROUND;
HTTPERROR_400_PARAM; /* PARSE ERROR */ HTTPERROR_400_PARAM; /* PARSE ERROR */
default: scan_urlencoded_skipvalue( &c ); break; default: scan_urlencoded_skipvalue( &c ); break;
@ -453,8 +445,8 @@ SCRAPE_WORKAROUND:
#endif #endif
HTTPERROR_400_PARAM; HTTPERROR_400_PARAM;
} }
if( scrape_count < OT_MAXMULTISCRAPE_COUNT ) if( numwant < OT_MAXMULTISCRAPE_COUNT )
memmove( multiscrape_buf + scrape_count++, data, sizeof(ot_hash) ); memmove( multiscrape_buf + numwant++, data, sizeof(ot_hash) );
break; break;
} }
} }
@ -462,10 +454,10 @@ SCRAPE_WORKAROUND:
UTORRENT1600_WORKAROUND: UTORRENT1600_WORKAROUND:
/* No info_hash found? Inform user */ /* No info_hash found? Inform user */
if( !scrape_count ) HTTPERROR_400_PARAM; if( !numwant ) HTTPERROR_400_PARAM;
/* Enough for http header + whole scrape string */ /* Enough for http header + whole scrape string */
if( !( reply_size = return_tcp_scrape_for_torrent( multiscrape_buf, scrape_count, SUCCESS_HTTP_HEADER_LENGTH + static_outbuf ) ) ) HTTPERROR_500; if( !( reply_size = return_tcp_scrape_for_torrent( multiscrape_buf, numwant, SUCCESS_HTTP_HEADER_LENGTH + static_outbuf ) ) ) HTTPERROR_500;
ot_overall_tcp_successfulannounces++; ot_overall_tcp_successfulannounces++;
break; break;
@ -568,20 +560,10 @@ ANNOUNCE_WORKAROUND:
reply_size = remove_peer_from_torrent( hash, &peer, SUCCESS_HTTP_HEADER_LENGTH + static_outbuf, 1 ); reply_size = remove_peer_from_torrent( hash, &peer, SUCCESS_HTTP_HEADER_LENGTH + static_outbuf, 1 );
else { else {
torrent = add_peer_to_torrent( hash, &peer, 0 ); torrent = add_peer_to_torrent( hash, &peer, 0 );
if( !torrent || !( reply_size = return_peers_for_torrent( torrent, numwant, SUCCESS_HTTP_HEADER_LENGTH + static_outbuf, 1 ) ) ) HTTPERROR_500; if( !torrent || !( reply_size = return_peers_for_torrent( hash, numwant, SUCCESS_HTTP_HEADER_LENGTH + static_outbuf, 1 ) ) ) HTTPERROR_500;
} }
ot_overall_tcp_successfulannounces++; ot_overall_tcp_successfulannounces++;
break; break;
case 11:
if( *data == 'a' ) goto ANNOUNCE_WORKAROUND;
if( !byte_diff( data, 2, "sc" ) ) goto SCRAPE_WORKAROUND;
if( byte_diff( data, 11, "mrtg_scrape" ) ) HTTPERROR_404;
t = time( NULL ) - ot_start_time;
reply_size = sprintf( static_outbuf + SUCCESS_HTTP_HEADER_LENGTH,
"%llu\n%llu\n%i seconds (%i hours)\nopentracker - Pretuned by german engineers, currently handling %llu connections per second.",
ot_overall_tcp_connections+ot_overall_udp_connections, ot_overall_tcp_successfulannounces+ot_overall_udp_successfulannounces, (int)t, (int)(t / 3600), (ot_overall_tcp_connections+ot_overall_udp_connections) / ( (unsigned int)t ? (unsigned int)t : 1 ) );
break;
default: default:
if( ( *data == 'a' ) || ( *data == '?' ) ) goto ANNOUNCE_WORKAROUND; if( ( *data == 'a' ) || ( *data == '?' ) ) goto ANNOUNCE_WORKAROUND;
if( !byte_diff( data, 2, "sc" ) ) goto SCRAPE_WORKAROUND; if( !byte_diff( data, 2, "sc" ) ) goto SCRAPE_WORKAROUND;
@ -612,7 +594,7 @@ ANNOUNCE_WORKAROUND:
static void signal_handler( int s ) { static void signal_handler( int s ) {
if( s == SIGINT ) { if( s == SIGINT ) {
signal( SIGINT, SIG_IGN); signal( SIGINT, SIG_IGN);
deinit_logic(); trackerlogic_deinit();
exit( 0 ); exit( 0 );
} else if( s == SIGALRM ) { } else if( s == SIGALRM ) {
g_now = time(NULL); g_now = time(NULL);
@ -815,7 +797,7 @@ static void handle_udp4( int64 serversocket ) {
if( !torrent ) if( !torrent )
return; /* XXX maybe send error */ return; /* XXX maybe send error */
r = 8 + return_peers_for_torrent( torrent, numwant, static_outbuf + 8, 0 ); r = 8 + return_peers_for_torrent( hash, numwant, static_outbuf + 8, 0 );
} }
socket_send4( serversocket, static_outbuf, r, remoteip, remoteport ); socket_send4( serversocket, static_outbuf, r, remoteip, remoteport );
@ -991,7 +973,7 @@ int main( int argc, char **argv ) {
signal( SIGINT, signal_handler ); signal( SIGINT, signal_handler );
signal( SIGALRM, signal_handler ); signal( SIGALRM, signal_handler );
if( init_logic( serverdir ) == -1 ) if( trackerlogic_init( serverdir ) == -1 )
panic( "Logic not started" ); panic( "Logic not started" );
g_now = ot_start_time = time( NULL ); g_now = ot_start_time = time( NULL );

Loading…
Cancel
Save