2011-06-27 21:23:51 +00:00
< ? php
2017-01-13 01:20:43 +03:00
/**
2018-06-23 21:50:13 +03:00
* TorrentPier – Bull - powered BitTorrent tracker engine
2017-01-13 01:20:43 +03:00
*
2023-12-12 22:14:01 +07:00
* @ copyright Copyright ( c ) 2005 - 2024 TorrentPier ( https :// torrentpier . com )
2018-06-23 21:50:13 +03:00
* @ link https :// github . com / torrentpier / torrentpier for the canonical source repository
* @ license https :// github . com / torrentpier / torrentpier / blob / master / LICENSE MIT License
2017-01-13 01:20:43 +03:00
*/
2011-06-27 21:23:51 +00:00
2014-09-25 15:07:35 +04:00
define ( 'BB_ROOT' , './../../' );
2023-07-18 00:48:50 +07:00
define ( 'IN_ADMIN' , true );
2023-06-10 15:55:53 +07:00
2017-06-11 18:56:28 +03:00
require BB_ROOT . 'common.php' ;
2011-06-27 21:23:51 +00:00
2014-08-11 16:07:37 +04:00
$user -> session_start ();
2017-01-13 01:20:43 +03:00
if ( ! IS_ADMIN ) {
bb_die ( $lang [ 'NOT_AUTHORISED' ]);
}
2014-08-11 16:07:37 +04:00
2017-06-11 16:09:27 +03:00
$peers_in_last_minutes = [ 30 , 15 , 5 , 1 ];
2011-06-27 21:23:51 +00:00
$peers_in_last_sec_limit = 300 ;
2017-05-05 01:00:38 +03:00
$announce_interval = ( int ) $bb_cfg [ 'announce_interval' ];
2023-09-04 01:01:01 +07:00
$stat = [];
2011-06-27 21:23:51 +00:00
define ( 'TMP_TRACKER_TABLE' , 'tmp_tracker' );
2017-06-11 18:56:28 +03:00
DB () -> query ( '
CREATE TEMPORARY TABLE ' . TMP_TRACKER_TABLE . " (
2011-06-27 21:23:51 +00:00
`topic_id` mediumint ( 8 ) unsigned NOT NULL default '0' ,
`user_id` mediumint ( 9 ) NOT NULL default '0' ,
2023-11-08 11:06:36 +04:00
`ip` char ( 42 ) binary default '0' ,
`ipv6` char ( 42 ) binary default '0' ,
`peer_id` char ( 20 ) binary default '0' ,
2011-06-27 21:23:51 +00:00
`seeder` tinyint ( 1 ) NOT NULL default '0' ,
`speed_up` mediumint ( 8 ) unsigned NOT NULL default '0' ,
`speed_down` mediumint ( 8 ) unsigned NOT NULL default '0' ,
`update_time` int ( 11 ) NOT NULL default '0'
)
SELECT
2023-11-08 11:06:36 +04:00
topic_id , user_id , ip , ipv6 , peer_id , seeder , speed_up , speed_down , update_time
2017-06-11 18:56:28 +03:00
FROM " . BB_BT_TRACKER . '
' );
2011-06-27 21:23:51 +00:00
// Peers within announce interval
2017-06-11 18:56:28 +03:00
$stat += DB () -> fetch_row ( 'SELECT COUNT(*) AS p_within_ann FROM ' . TMP_TRACKER_TABLE . ' WHERE update_time >= ' . ( TIMENOW - $announce_interval ));
2011-06-27 21:23:51 +00:00
// All peers, "max_peer_time"
2017-06-11 18:56:28 +03:00
$stat += DB () -> fetch_row ( 'SELECT COUNT(*) AS p_all, SUM(speed_up) as speed_up, SUM(speed_down) as speed_down, UNIX_TIMESTAMP() - MIN(update_time) AS max_peer_time, UNIX_TIMESTAMP() - MAX(update_time) AS last_peer_time FROM ' . TMP_TRACKER_TABLE );
2011-06-27 21:23:51 +00:00
// Active users
2017-06-11 18:56:28 +03:00
$stat += DB () -> fetch_row ( 'SELECT COUNT(DISTINCT user_id) AS u_bt_active FROM ' . TMP_TRACKER_TABLE );
2011-06-27 21:23:51 +00:00
// All bt-users
2017-06-11 18:56:28 +03:00
$stat += DB () -> fetch_row ( 'SELECT COUNT(*) AS u_bt_all FROM ' . BB_BT_USERS );
2011-06-27 21:23:51 +00:00
// All bb-users
2024-06-22 11:39:33 +07:00
$stat += DB () -> fetch_row ( 'SELECT COUNT(*) AS u_bb_all FROM ' . BB_USERS . ' WHERE user_id != ' . BOT_UID );
2011-06-27 21:23:51 +00:00
// Active torrents
2017-06-11 18:56:28 +03:00
$stat += DB () -> fetch_row ( 'SELECT COUNT(DISTINCT topic_id) AS tor_active FROM ' . TMP_TRACKER_TABLE );
2011-06-27 21:23:51 +00:00
// With seeder
2017-06-11 18:56:28 +03:00
$stat += DB () -> fetch_row ( 'SELECT COUNT(DISTINCT topic_id) AS tor_with_seeder FROM ' . TMP_TRACKER_TABLE . ' WHERE seeder = 1' );
2011-06-27 21:23:51 +00:00
// All torrents
2017-06-11 18:56:28 +03:00
$stat += DB () -> fetch_row ( 'SELECT COUNT(*) AS tor_all, SUM(size) AS torrents_size FROM ' . BB_BT_TORRENTS );
2011-06-27 21:23:51 +00:00
// Last xx minutes
2023-09-04 01:01:01 +07:00
$peers_in_last_min = [];
2017-01-13 01:20:43 +03:00
foreach ( $peers_in_last_minutes as $t ) {
2017-06-11 18:56:28 +03:00
$row = DB () -> fetch_row ( '
SELECT COUNT ( * ) AS peers FROM ' . TMP_TRACKER_TABLE . ' WHERE update_time >= ' . (TIMENOW - 60 * $t) . '
' );
2017-01-13 01:20:43 +03:00
$peers_in_last_min [ $t ] = ( int ) $row [ 'peers' ];
2011-06-27 21:23:51 +00:00
}
// Last xx seconds
2023-09-04 01:01:01 +07:00
$peers_in_last_sec = [];
2024-06-22 11:39:33 +07:00
$rowset = DB () -> fetch_rowset ( 'SELECT COUNT(*) AS peers FROM ' . TMP_TRACKER_TABLE . ' ORDER BY update_time DESC LIMIT ' . $peers_in_last_sec_limit );
2017-01-13 01:20:43 +03:00
foreach ( $rowset as $cnt => $row ) {
$peers_in_last_sec [] = sprintf ( '%3s' , $row [ 'peers' ]) . (( $cnt && ! ( ++ $cnt % 15 )) ? " \n " : '' );
2011-06-27 21:23:51 +00:00
}
2023-11-08 11:39:17 +04:00
// Detailed statistics for peer clients
2023-11-08 16:25:56 +04:00
2023-11-08 11:39:17 +04:00
$client_list = '' ;
2023-11-08 17:01:04 +04:00
$clients_percentage = [];
2023-11-08 16:25:56 +04:00
$numwant = ! empty ( $_GET [ 'client_numwant' ]) ? ( int ) $_GET [ 'client_numwant' ] : 100 ;
$client_full = ! empty ( $_GET [ 'client_length' ]) ? ( int ) $_GET [ 'client_length' ] : false ;
2023-11-09 18:55:46 +04:00
if ( $client_full || ! $stats_cache = CACHE ( 'tr_cache' ) -> get ( 'tracker_clients_stats' )) {
2023-11-08 16:25:56 +04:00
2023-11-09 18:55:46 +04:00
$rowset = DB () -> fetch_rowset ( 'SELECT peer_id AS client FROM ' . TMP_TRACKER_TABLE );
2023-11-08 16:25:56 +04:00
2023-11-09 18:55:46 +04:00
if ( ! empty ( $rowset )) {
2023-11-08 16:25:56 +04:00
2023-11-09 18:55:46 +04:00
$client_count = 0 ;
foreach ( $rowset as $cnt => $row ) {
$clientString = $client_full ? substr ( $row [ 'client' ], 0 , $client_full ) : substr ( $row [ 'client' ], 0 , 3 );
if ( ! isset ( $clients [ $clientString ])) {
$clients [ $clientString ] = 1 ;
2024-01-30 22:18:05 +07:00
} else {
2023-11-09 18:55:46 +04:00
$clients [ $clientString ] ++ ;
}
$client_count ++ ;
2023-11-08 11:39:17 +04:00
}
2023-11-09 18:55:46 +04:00
2023-11-09 20:38:03 +04:00
arsort ( $clients , SORT_NUMERIC );
2023-11-09 18:55:46 +04:00
foreach ( $clients as $client => $count ) {
$percentage = number_format (( $count / $client_count ) * 100 , 2 );
$clients_percentage [ $client ] = " [ $count ] => $percentage % " ;
2023-11-08 11:39:17 +04:00
}
2023-11-08 11:06:36 +04:00
2023-11-09 18:55:46 +04:00
if ( ! $client_full ) {
CACHE ( 'tr_cache' ) -> set ( 'tracker_clients_stats' , $clients_percentage , 3600 );
}
2023-11-08 16:25:56 +04:00
}
2023-11-09 18:55:46 +04:00
} else {
$clients_percentage = $stats_cache ;
}
2023-11-08 11:32:57 +04:00
2023-11-09 22:06:31 +04:00
$n = 1 ;
2023-11-09 18:55:46 +04:00
foreach ( array_slice ( $clients_percentage , 0 , $numwant ) as $client => $value ) {
2023-11-12 22:06:05 +04:00
$client_list .= ( $client_full ) ? ( " $client => $value <br> " ) : " $n . " . get_user_torrent_client ( $client ) . " $value <br> " ;
2023-11-09 22:06:31 +04:00
$n ++ ;
2023-11-08 11:39:17 +04:00
}
2023-11-08 11:06:36 +04:00
2017-01-13 01:20:43 +03:00
function commify_callback ( $matches )
2011-06-27 21:23:51 +00:00
{
2023-05-29 01:18:13 +07:00
return commify ( $matches [ 0 ]);
2011-06-27 21:23:51 +00:00
}
2017-01-13 01:20:43 +03:00
function commify_ob ( $contents )
2011-06-27 21:23:51 +00:00
{
2017-01-13 01:20:43 +03:00
return preg_replace_callback ( " # \ b \ d+ \ b# " , 'commify_callback' , $contents );
2011-06-27 21:23:51 +00:00
}
2017-01-13 01:20:43 +03:00
2011-06-27 21:23:51 +00:00
ob_start ( 'commify_ob' );
echo '<html><body><head></head>' ;
2017-06-11 16:09:27 +03:00
echo '<br /><br /><table border="1" cellspacing="0" cellpadding="6" align="center"><col width="40%"><col width="60%">' ;
2011-06-27 21:23:51 +00:00
echo " \n <tr><td align=center> users: bb-all / bt-all / bt-active </td><td align=center> $stat[u_bb_all] / $stat[u_bt_all] / <b> $stat[u_bt_active] </b> </td></tr> \n " ;
echo " \n
< tr >< td align = center > torrents : all / active / with seeder </ td >
< td align = center >
$stat [ tor_all ] / < b > $stat [ tor_active ] </ b > / $stat [ tor_with_seeder ]
& nbsp ;
2017-01-13 01:20:43 +03:00
[ " . humn_size( $stat['torrents_size'] ) . " ]
2011-06-27 21:23:51 +00:00
</ td ></ tr >
\n " ;
echo " \n
< tr >< td align = center > peers : all ( $stat [ max_peer_time ] s ) / in ann interval ( $announce_interval s ) </ td >
< td align = center >
$stat [ p_all ] / < b > $stat [ p_within_ann ] </ b >
& nbsp ;
2017-06-11 18:56:28 +03:00
[ up : " . humn_size( $stat['speed_up'] ) . '/s,
down : ' . humn_size($stat[' speed_down ' ]) . " /s ]
2011-06-27 21:23:51 +00:00
</ td ></ tr >
\n " ;
2017-05-05 00:57:55 +03:00
echo " \n <tr><td align=center> peers: in last " . implode ( ' / ' , $peers_in_last_minutes ) . " min</td> \n " ;
echo " \n <td align=center> " . implode ( ' / ' , $peers_in_last_min ) . " </td></tr> \n " ;
2017-06-11 18:56:28 +03:00
echo " \n <tr><td align=center> peers in last $peers_in_last_sec_limit sec <br /> [ per second, DESC order --> ] <br /> last peer: $stat[last_peer_time] seconds ago <br /> " . date ( 'j M H:i:s [T O]' ) . " </td> \n " ;
2017-05-05 00:57:55 +03:00
echo '<td align=center style="font-size: 13px; font-family: \'Courier New\',Courier,monospace;"><pre> ' . implode ( ' ' , $peers_in_last_sec ) . " </pre></td></tr> \n " ;
2023-11-08 11:06:36 +04:00
echo " \n
< tr >< td align = center > clients : </ td >
< td align = center >
2023-11-08 16:25:56 +04:00
2023-11-08 11:39:17 +04:00
$client_list
2023-11-08 16:25:56 +04:00
< br >
2023-11-08 11:06:36 +04:00
\n " ;
2023-11-08 16:25:56 +04:00
echo ( count ( $clients_percentage ) > $numwant ) ? ( '<a href="' . 'tracker.php?client_numwant=' . ( $numwant + 100 ) . '">' . 'Show more' . '</a><br>' ) : '' ;
2024-01-30 22:18:05 +07:00
echo $client_full ? '<br><b>Get more length and numbers via modifying the parameters in the url<b>' : ( ! empty ( $client_list ) ? '<a href="tracker.php?client_length=6&client_numwant=10">Peer_ids with more length (version debugging)</a>' : '' );
2023-11-08 16:25:56 +04:00
echo '</td></tr>' ;
2011-06-27 21:23:51 +00:00
echo '</table>' ;
2023-11-09 18:55:46 +04:00
echo ! $client_full ? '<p style = "text-align:right;">Simple stats for clients are being cached for one hour.</p>' : '' ;
2011-06-27 21:23:51 +00:00
echo '<div align="center"><pre>' ;
2023-12-14 18:57:58 +07:00
echo 'gen time: <b>' . sprintf ( '%.4f' , array_sum ( explode ( ' ' , microtime ())) - TIMESTART ) . " </b> sec \n " ;
2011-06-27 21:23:51 +00:00
echo '</pre></div>' ;
echo '</body></html>' ;
2017-06-11 18:56:28 +03:00
DB () -> query ( 'DROP TEMPORARY TABLE ' . TMP_TRACKER_TABLE );
2011-06-27 21:23:51 +00:00
2023-05-29 12:13:20 +07:00
exit ();