📄 node_status.pl
字号:
#!/usr/bin/perl -w## node_status.pl## The oCDN package is released under the terms of the Perl Artistic Licence# (see http://www.perl.com/pub/a/language/misc/Artistic.html) by their# Copyright Holders, hosted at the University of Roma "La Sapienza",# at http://labtel.ing.uniroma1.it/~ocdn#use CGI;use RPC::XML;use RPC::XML::Client;#use Sys::Hostname;my $q = new CGI;my $req = $q->param('req');my $ip = $q->param('addr');my $port = $q->param('port');my $relay = $q->param('name');my $transp = $q->param('transp');my $cli = RPC::XML::Client->new("http://$ip:$port");print $q->header(-expires=>'-10y');print $q->start_html(-title=>"Node's $ip:$port Relays Status Page");if ($req eq "stats") { print $q->h2("<a href=\"node_status.pl?req=relays&addr=$ip\&port=$port\">Click here for active relays statistics</a>"); print $q->h2("<a href=\"xmlrpc_status.pl?req=node&addr=$ip\&port=$port\">Click here for XML-RPC statistics</a>");}if ($req eq "relays") { my $risp = $cli -> send_request('Status'); if ( keys %{$risp} ) { if ( ${$$risp{ret_code}} == '200') { if ( keys %{${$$risp{data_ref}}{d}} ) { print $q->h2("<hr>Active Darwin relays data on $ip:$port<hr>"); print "<table border=1 cellspacing=2 cellpadding=4 nowrap rowspan=1>\n"; print $q->Tr($q->td(['<b>Relay Name (click it for clients statistics)', '<b>Source IP', '<b>Source mountpoint', '<b>Total packets relayed', '<b>Packets per second', '<b>Total bytes relayed','<b>Bits per second','<b>Destination mountpoint', ])), "\n"; foreach $name ( sort keys %{${$$risp{data_ref}}{d}}) { if ( keys %{${$$risp{data_ref}}{d}{$name}} ) { print $q->Tr($q->td(["<b><a href=\"node_status.pl?req=clients\&name=$name\&addr=$ip\&port=$port\&transp=d\">$name</a>", ${${$$risp{data_ref}}{d}{$name}{source_ip}}, ${${$$risp{data_ref}}{d}{$name}{source_mountp}}, ${${$$risp{data_ref}}{d}{$name}{total_packets}}, ${${$$risp{data_ref}}{d}{$name}{packets_per_sec}}, ${${$$risp{data_ref}}{d}{$name}{bytes_sent}}, ${${$$risp{data_ref}}{d}{$name}{bits_per_sec}}, ${${$$risp{data_ref}}{d}{$name}{dest_mountp}} ])), "\n"; } } print "</table><BR>\n"; } if ( keys %{${$$risp{data_ref}}{r}} ) { print $q->h2("<hr>Active Helix relays data on $ip:$port<hr>"); print "<table border=1 cellspacing=2 cellpadding=4 nowrap rowspan=1>\n"; print $q->Tr($q->td(['<b>Relay Name (click it for clients statistics)', '<b>AverageBitrate', '<b>DuplicatePackets', '<b>FECPacketsReceived', '<b>FECPacketsUsed', '<b>LatePackets','<b>PacketCount','<b>PacketsLostBeforeTransport','<b>PacketsLostInTransport','<b>ResendsRequested', ])), "\n"; foreach $name ( sort keys %{${$$risp{data_ref}}{r}}) { if ( keys %{${$$risp{data_ref}}{r}{$name}} ) { print $q->Tr($q->td(["<b><a href=\"node_status.pl?req=clients\&name=$name\&addr=$ip\&port=$port\&transp=r\">$name</a>", ${${$$risp{data_ref}}{r}{$name}{AverageBitrate}}, ${${$$risp{data_ref}}{r}{$name}{DuplicatePackets}}, ${${$$risp{data_ref}}{r}{$name}{FECPacketsReceived}}, ${${$$risp{data_ref}}{r}{$name}{FECPacketsUsed}}, ${${$$risp{data_ref}}{r}{$name}{LatePackets}}, ${${$$risp{data_ref}}{r}{$name}{PacketCount}}, ${${$$risp{data_ref}}{r}{$name}{PacketsLostBeforeTransport}}, ${${$$risp{data_ref}}{r}{$name}{PacketsLostInTransport}}, ${${$$risp{data_ref}}{r}{$name}{ResendsRequested}} ])), "\n"; } } print "</table><BR>\n"; } } else { print "No Relays Data"; } } }if ($req eq "clients") { my $risp = $cli -> send_request('Status'); if ( keys %{$risp} ) { if ( ${$$risp{ret_code}} == '200' ) { print $q->h2("<hr>Clients connected on relay '$relay'<hr>"); print "<table border=1 cellspacing=1 cellpadding=1 nowrap rowspan=1 <tr height=10>\n"; if ( ($transp eq 'd') && ( keys %{${$$risp{data_ref}}{d}{$relay}{connected_clients}} ) ) { print $q->Tr($q->td(['<b>Client Number','<b>User Agent', '<b>Client Address', '<b>Client State', '<b>Bit rate', '<b>Packet Loss Percent', '<b>Time connected', '<b>Source URL' ])), "\n"; foreach $cli ( sort keys %{${$$risp{data_ref}}{d}{$relay}{connected_clients}}) { my $perc_loss = ${${${$$risp{data_ref}}{d}{$relay}{connected_clients}}{$cli}{packet_loss_perc}}; $perc_loss = ($perc_loss * 100); my $time = ${${${$$risp{data_ref}}{d}{$relay}{connected_clients}}{$cli}{time_connected}}; $time = int ( $time/1000 ); my $hours = int ($time/3600); my $min = ( int ($time/60) ) - ($hours * 3600); my $sec = $time - ( $min * 60 ); print $q->Tr($q->td([ "<b> $cli", " ${${${$$risp{data_ref}}{d}{$relay}{connected_clients}}{$cli}{user_agent}}", " ${${${$$risp{data_ref}}{d}{$relay}{connected_clients}}{$cli}{client_address}}", " ${${${$$risp{data_ref}}{d}{$relay}{connected_clients}}{$cli}{client_state}}", " ${${${$$risp{data_ref}}{d}{$relay}{connected_clients}}{$cli}{bit_rate}} bit/sec", " $perc_loss %" , "$hours h $min \' $sec \'\'" , ${${${$$risp{data_ref}}{d}{$relay}{connected_clients}}{$cli}{source_url}} ])), "\n"; # '" damn syntax highlight } } if ( ($transp eq 'r') && ( keys %{${$$risp{data_ref}}{r}{$relay}{connected_clients}} ) ) { print $q->Tr($q->td(['<b>Client Number','<b>Addr','<b>User-Agent', '<b>PlayerStarttime', '<b>Stream0AvgBitRate', '<b>Stream1AvgBitRate', '<b>Stream0MimeType', '<b>Stream1MimeType', '<b>Audiences', '<b>ASMRuleBook', '<b>IsUDP', '<b>IsRDT', '<b>Port', '<b>PlayerRequestedURL' ])), "\n"; my $relay_ip = 0.0.0.0; my $mount_point = ""; if ($relay =~ /(\d+\.\d+\.\d+\.\d+)\/(.*)/ ) { $relay_ip = $1; $mount_point = $2; } foreach $cli ( sort keys %{${$$risp{data_ref}}{r}{$relay}{connected_clients}}) { print $q->Tr($q->td([ "<b> $cli", " ${${${$$risp{data_ref}}{r}{$relay}{connected_clients}}{$cli}{Addr}}", " ${${${$$risp{data_ref}}{r}{$relay}{connected_clients}}{$cli}{User-Agent}}", " ${${${$$risp{data_ref}}{r}{$relay}{connected_clients}}{$cli}{PlayerStarttime}}", " ${${${$$risp{data_ref}}{r}{$relay}{connected_clients}}{$cli}{Stream0AvgBitRate}}", " ${${${$$risp{data_ref}}{r}{$relay}{connected_clients}}{$cli}{Stream1AvgBitRate}}", " ${${${$$risp{data_ref}}{r}{$relay}{connected_clients}}{$cli}{Stream0MimeType}}", " ${${${$$risp{data_ref}}{r}{$relay}{connected_clients}}{$cli}{Stream1MimeType}}", " ${${${$$risp{data_ref}}{r}{$relay}{connected_clients}}{$cli}{Audiences}}", " ${${${$$risp{data_ref}}{r}{$relay}{connected_clients}}{$cli}{ASMRuleBook}}", " ${${${$$risp{data_ref}}{r}{$relay}{connected_clients}}{$cli}{IsUDP}}", " ${${${$$risp{data_ref}}{r}{$relay}{connected_clients}}{$cli}{IsRDT}}", " ${${${$$risp{data_ref}}{r}{$relay}{connected_clients}}{$cli}{Port}}", " ${${${$$risp{data_ref}}{r}{$relay}{connected_clients}}{$cli}{PlayerRequestedURL}}" ])), "\n"; } } print "</tr> </table><BR><hr>\n"; } else { print "No Clients Data"; } }}print $q->end_html;exit;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -