📄 status.xpl
字号:
<?xml version="1.0"?><!DOCTYPE methoddef SYSTEM "rpc-method.dtd"><methoddef><name>Status</name><version>1.0</version><signature>struct</signature><help>Returns a struct containing KEY VALUE ret_code => int (numeric return code) ret_val => string (message string) data_ref => { d => { relay_d1 => { source_ip => source ip address, source_mountp => source mountpoint, dest_mountp => destination mountpoint, packets_per_sec => packets relayed per second, bits_per_sec => bits relayed per second, total_packets => total packets relayed, bytes_sent => total bytes relayed, connected_clients => { 1 => { client_state => client state, user_agent => client UA, source_url => url client is connected to, bit_rate => client bit rate, packet_loss_perc => packet loss percent, time_connected => time connected, client_address => client address }, 2 => ... } } relay_d2 => ... }, r => { relay_r1 => { AverageBitrate => average bitrate, DuplicatePackets => duplicate packets, FECPacketsUsed => Forward Error Connection packets used, FECPacketsReceived => Forward Error Connection packets received, LatePackets => late packets, Name => BroadcastReceiver name, PacketCount => packet count, PacketsLostBeforeTransport => Packets Lost Before Transport, PacketsLostInTransport => Packets Lost In Transport, ResendsRequested => Resends Requested, connected_clients => { 1 => { Addr => client address, PlayerRequestedURL => Player Requested URL, ASMRuleBook => ASM Rule Book, Audiences => Audiences, StreamiMimeType => Mime Type of Stream i, StreamiAvgBitRate => Average BitRate of Stream i, User-Agent => client User Agent, IsRDT => flag: is RDT used?, IsUDP => flag: is UDP used?, PlayerStarttime => Player Start time, Port => client port}, 2 => ... } } relay_r2 => ... } }</help><code language="perl"><![CDATA[#!/usr/bin/perl################################################################################ Sub Name: Status# # Returns a struct containing## Returns a struct containing# KEY VALUE# ret_code => int (numeric return code)# ret_val => string (message string)# data_ref => { # d => {# relay_d1 => { # source_ip => source ip address,# source_mountp => source mountpoint,# dest_mountp => destination mountpoint,# packets_per_sec => packets relayed per second,# bits_per_sec => bits relayed per second,# total_packets => total packets relayed,# bytes_sent => total bytes relayed,# connected_clients => { # 1 => {# client_state => client state,# user_agent => client UA,# source_url => url client is connected to,# bit_rate => client bit rate,# packet_loss_perc => packet loss percent,# time_connected => time connected,# client_address => client address },# 2 => ...# }# }# relay_d2 => ...# },# r => {# relay_r1 => { # AverageBitrate => average bitrate,# DuplicatePackets => duplicate packets,# FECPacketsUsed => Forward Error Connection packets used,# FECPacketsReceived => Forward Error Connection packets received,# LatePackets => late packets,# Name => BroadcastReceiver name,# PacketCount => packet count,# PacketsLostBeforeTransport => Packets Lost Before Transport,# PacketsLostInTransport => Packets Lost In Transport,# ResendsRequested => Resends Requested,# connected_clients => { # 1 => {# Addr => client address,# PlayerRequestedURL => Player Requested URL,# ASMRuleBook => ASM Rule Book,# Audiences => Audiences,# StreamiMimeType => Mime Type of Stream i,# StreamiAvgBitRate => Average BitRate of Stream i,# User-Agent => client User Agent,# IsRDT => flag: is RDT used?,# IsUDP => flag: is UDP used?,# PlayerStarttime => Player Start time,# Port => client port},# 2 => ...# }# }# relay_r2 => ...# }# }###############################################################################sub Status { my ( $ret_code, $ret_val, $data_ref ); if ( %NodeLib::prog_by_relay > 0 ) { # there are active relays my $rel_ref = &Adaptation::relays_stats; # gets their statistics my $cli_ref = &Adaptation::clients_stats; my $name, $ref; my %relays; my $transport; my $relays_ref; my $clients_ref; foreach $transport ( keys %{$rel_ref} ) { if ( keys %{${$rel_ref}{$transport}} ) { $relays_ref = \%{${$rel_ref}{$transport}}; $clients_ref = \%{${$cli_ref}{$transport}}; foreach $name ( keys %NodeLib::prog_by_relay ) { # only for relays $relays{$transport}{$name} = $${relays_ref{$name}}; # created by this node my $prog = $NodeLib::prog_by_relay{$name}; my $surro = $NodeLib::surr_by_prog{$prog}; # $surro = my ( $no, $surro2 ) = split /rtsp:\//, $surro; # "rtsp://nodeip/mp"... my ( $non, $myip, $mount ) = split /\//, $surro2, 3; # the "3" limit is needed to properly match mount points $mount = "/$mount"; my $cli; my %cli_found; foreach $cli ( keys %$clients_ref) { if ( ${$${clients_ref{$cli}}}{source_url} =~ m/$mount/ ) { $cli_found{$cli} = $${clients_ref{$cli}}; } } $ref = \%cli_found; if ( keys %cli_found ) { ${$relays{$transport}{$name}}{connected_clients} = $ref; } else { delete ${$relays{$transport}{$name}}{connected_clients}; } } } } $ret_code = '200'; $ret_val = 'Relay data successfully sent'; $data_ref = \%relays; } else { $ret_code = '404'; $ret_val = 'No active relays found'; } return { ret_code => $ret_code, ret_val => $ret_val, data_ref => $data_ref }}__END__]]></code></methoddef>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -