⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 node_status.pl

📁 OpenCDN内容分发系统
💻 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 + -