1
0
mirror of git://erdgeist.org/opentracker synced 2025-01-26 22:56:26 +00:00

add support for more stats:

1. stats for added and removed torrents
2. stats for start and stopped events from peers

this should help to detect DoS attacks and is useful for
profiling
This commit is contained in:
denis 2007-12-14 22:01:14 +00:00
parent c2cbe1dc27
commit 65c3b24045
3 changed files with 52 additions and 0 deletions

View File

@ -251,6 +251,10 @@ static ssize_t http_handle_stats( const int64 client_socket, char *data, char *d
mode = TASK_STATS_TPB;
else if( !byte_diff(data,4,"herr"))
mode = TASK_STATS_HTTPERRORS;
else if( !byte_diff(data,9,"startstop"))
mode = TASK_STATS_STARTSTOP;
else if( !byte_diff(data,10,"toraddrem"))
mode = TASK_STATS_TORADDREM;
else
HTTPERROR_400_PARAM;
break;

View File

@ -24,6 +24,8 @@ typedef enum {
TASK_STATS_TPB = 0x0007,
TASK_STATS_HTTPERRORS = 0x0008,
TASK_STATS_TORRENTS = 0x0009,
TASK_STATS_STARTSTOP = 0x000a,
TASK_STATS_TORADDREM = 0x000b,
TASK_STATS_SLASH24S = 0x0100,

View File

@ -264,6 +264,48 @@ static size_t stats_peers_mrtg( char * reply ) {
);
}
static size_t stats_startstop_mrtg( char * reply )
{
size_t torrent_count = 0;
int bucket;
for( bucket=0; bucket<OT_BUCKET_COUNT; ++bucket )
{
ot_vector *torrents_list = mutex_bucket_lock( bucket );
torrent_count += torrents_list->size;
mutex_bucket_unlock( bucket );
}
return sprintf( reply, "%zd\n%zd\nopentracker handling %zd torrents\nopentracker",
(size_t)0,
(size_t)0,
torrent_count
);
}
static size_t stats_toraddrem_mrtg( char * reply )
{
size_t peer_count = 0, j;
int bucket;
for( bucket=0; bucket<OT_BUCKET_COUNT; ++bucket )
{
ot_vector *torrents_list = mutex_bucket_lock( bucket );
for( j=0; j<torrents_list->size; ++j )
{
ot_peerlist *peer_list = ( ((ot_torrent*)(torrents_list->data))[j] ).peer_list;
peer_count += peer_list->peer_count;
}
mutex_bucket_unlock( bucket );
}
return sprintf( reply, "%zd\n%zd\nopentracker handling %zd peers\nopentracker",
(size_t)0,
(size_t)0,
peer_count
);
}
static size_t stats_torrents_mrtg( char * reply )
{
size_t torrent_count = 0;
@ -305,6 +347,10 @@ size_t return_stats_for_tracker( char *reply, int mode, int format ) {
return stats_peers_mrtg( reply );
case TASK_STATS_TORRENTS:
return stats_torrents_mrtg( reply );
case TASK_STATS_TORADDREM:
return stats_toraddrem_mrtg( reply );
case TASK_STATS_STARTSTOP:
return stats_startstop_mrtg( reply );
case TASK_STATS_SLASH24S:
return stats_slash24s_txt( reply, 25, 16 );
case TASK_STATS_TOP5: