mirror of
				https://github.com/Telecominfraproject/wlan-lanforge-scripts.git
				synced 2025-10-30 18:27:53 +00:00 
			
		
		
		
	 72712ff548
			
		
	
	72712ff548
	
	
	
		
			
			These scripts will now be publicly available in a git repo for easier shared development and change tracking.
		
			
				
	
	
		
			258 lines
		
	
	
		
			8.5 KiB
		
	
	
	
		
			Perl
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			258 lines
		
	
	
		
			8.5 KiB
		
	
	
	
		
			Perl
		
	
	
		
			Executable File
		
	
	
	
	
| #!/usr/bin/perl -w
 | |
| # ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- #
 | |
| # This script looks for min-max-average bps for rx_rate in 
 | |
| # a station csv data file
 | |
| # ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- #
 | |
| package main;
 | |
| $| = 1; # unbuffer output
 | |
| use strict;
 | |
| use warnings;
 | |
| use diagnostics;
 | |
| use Carp;
 | |
| use Getopt::Long;
 | |
| use POSIX qw(locale_h);
 | |
| use locale;
 | |
| use Number::Format qw(format_number);
 | |
| 
 | |
| # ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- #
 | |
| our $TimeStamp       = 0;
 | |
| our $Name            = 1;
 | |
| our $Resource        = 3;
 | |
| our $Tx_Pkts         = 4;
 | |
| our $Tx_Packets      = 4;
 | |
| our $Rx_Pkts         = 5;
 | |
| our $Rx_Packets      = 5;
 | |
| our $Tx_Bytes        = 6;
 | |
| our $Rx_Bytes        = 7;
 | |
| our $Rx_Signal       = 25;
 | |
| our $Link_Speed      = 26;
 | |
| our $Rx_Link_Speed   = 27;
 | |
| 
 | |
| our $filename;
 | |
| our $start_time      = 0;
 | |
| our $finish_time     = time() * 1000;
 | |
| 
 | |
| our $usage = "$0 [-f|--filename      # name of staX csv file]
 | |
|             [-s|--start_time        # timestamp milliseconds point to begin]
 | |
|             [-e|--finish_time       # timestamp milliseconds point to finish]
 | |
| 
 | |
| Example:
 | |
| $0 -f ./sta100_1.1.5_1429826436.csv # collect all entries
 | |
| 
 | |
| $0 -s 1429820000 -e 1429828000 -f ./sta100_1.1.5_1429826436.csv
 | |
| 
 | |
| We can use expanded unix datestamps as well:
 | |
| $0 -s \`date -d \"2014/11/25 10:00:00\" \"+%s000\"\` \\
 | |
|    -e \`date -d \"2014/11/25 11:00:00\" \"+%s000\"\` \\
 | |
|    -f ./sta100_1.1.5_1429826436.csv
 | |
| ";
 | |
| 
 | |
| sub do_err_exit {
 | |
|   my $msg = shift;
 | |
|   print $msg."\n";
 | |
|   exit(1);
 | |
| }
 | |
| 
 | |
| # ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- #
 | |
| # takes a reference to a string
 | |
| sub printRow {
 | |
|    my $rs_line  = shift;
 | |
|    #print "LINE: $$rs_line\n";
 | |
|    my @hunks   = split(',', $$rs_line);
 | |
|    my $msg     = 
 | |
| "TimeStamp       : $hunks[$::TimeStamp]
 | |
| Name            : $hunks[$::Name]
 | |
| Resource        : $hunks[$::Resource]
 | |
| Tx_Pkts         : $hunks[$::Tx_Pkts]
 | |
| Rx_Pkts         : $hunks[$::Rx_Pkts]
 | |
| Tx_Bytes        : $hunks[$::Tx_Bytes]
 | |
| Rx_Bytes        : $hunks[$::Rx_Bytes]
 | |
| Rx_Signal       : $hunks[$::Rx_Signal]
 | |
| Link_Speed      : $hunks[$::Link_Speed]
 | |
| Rx_Link_Speed   : $hunks[$::Rx_Link_Speed]\n\n";
 | |
| 
 | |
|    print $msg;
 | |
| }
 | |
| # ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- #
 | |
| # takes a reference to an array
 | |
|  sub printRowAt {
 | |
|    my $ra_rows    = shift;
 | |
|    my $index      = shift;
 | |
|    my $row        = $ra_rows->[$index];
 | |
|    printRow( \$row );
 | |
| }
 | |
| # ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- #
 | |
| 
 | |
| # ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- #
 | |
| #     M A I N                                                       #
 | |
| # ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- #
 | |
| GetOptions (
 | |
|    'filename|f=s'         => \$::filename,
 | |
|    'start_time|s=i'       => \$::start_time,
 | |
|    'finish_time|e=i'      => \$::finish_time
 | |
| ) || do_err_exit("$usage");
 | |
| 
 | |
| if ( ! defined $::filename || $::filename eq "" ) {
 | |
|    do_err_exit($::usage);
 | |
| }
 | |
| if ( ! -f $::filename ) {
 | |
|    do_err_exit("file not found");
 | |
| }
 | |
| open (my $input_fh, "<", $::filename) || do_err_exit($!);
 | |
| my @lines = <$input_fh>;
 | |
| close($input_fh);
 | |
| 
 | |
| #my $first_line = $lines[0];
 | |
| #printRow( \$first_line );
 | |
| #printRowAt( \@lines, 0 );
 | |
| 
 | |
| our $Orig   = 0;
 | |
| our $Min    = 1;
 | |
| our $Max    = 2;
 | |
| our $Tot    = 3;
 | |
| our $Total  = 3;
 | |
| our $Ave    = 4;
 | |
| our $Avg    = 4;
 | |
| our $Delta  = 5;
 | |
| our $Dt     = 5;
 | |
| 
 | |
| my @begin_rx_bytes;
 | |
| my @begin_rx_packets;
 | |
| my @begin_rx_signal;
 | |
| my $begin_time = 0;
 | |
| 
 | |
| my @cur_rx_bytes;
 | |
| my @cur_rx_packets;
 | |
| my @cur_rx_signal;
 | |
| 
 | |
| my @prev_rx_bytes;
 | |
| my @prev_rx_packets;
 | |
| my @prev_rx_signal;
 | |
| 
 | |
| # first entry
 | |
| #my @hunks = split(',', $lines[ 1 ]);
 | |
| my $counted = 0;
 | |
| for( my $i = 2 ; $i < $#lines ; $i++ ) {
 | |
|    my @hunks = split(',', $lines[$i]);
 | |
| 
 | |
|    #print "start time: $::start_time\nfinish time: $::finish_time\ntime stamp : $hunks[$::TimeStamp]\n";
 | |
|    next if ($hunks[ $::TimeStamp ] < $::start_time );
 | |
|    last if ($hunks[ $::TimeStamp ] > $::finish_time );
 | |
| 
 | |
|    if ($counted == 0) {
 | |
|       $begin_time                  = $hunks[$::TimeStamp];
 | |
|       $begin_rx_bytes[   $::Orig ] = $hunks[$::Rx_Bytes];
 | |
|       $begin_rx_bytes[    $::Min ] = $hunks[$::Rx_Bytes];
 | |
|       $begin_rx_bytes[    $::Max ] = $hunks[$::Rx_Bytes];
 | |
|       $begin_rx_bytes[    $::Tot ] = $hunks[$::Rx_Bytes];
 | |
|       $begin_rx_bytes[    $::Ave ] = $hunks[$::Rx_Bytes];
 | |
|       $begin_rx_bytes[  $::Delta ] = 0;
 | |
| 
 | |
|       $begin_rx_packets[ $::Orig ] = $hunks[$::Rx_Packets];
 | |
|       $begin_rx_packets[  $::Min ] = $hunks[$::Rx_Packets];
 | |
|       $begin_rx_packets[  $::Max ] = $hunks[$::Rx_Packets];
 | |
|       $begin_rx_packets[  $::Tot ] = $hunks[$::Rx_Packets];
 | |
|       $begin_rx_packets[$::Delta ] = 0;
 | |
| 
 | |
|       $begin_rx_signal[ $::Orig ] = $hunks[$::Rx_Signal];
 | |
|       $begin_rx_signal[  $::Min ] = $hunks[$::Rx_Signal];
 | |
|       $begin_rx_signal[  $::Max ] = $hunks[$::Rx_Signal];
 | |
|       $begin_rx_signal[  $::Tot ] = $hunks[$::Rx_Signal];
 | |
|       $begin_rx_signal[$::Delta ] = 0;
 | |
|       @cur_rx_bytes     = @begin_rx_bytes;
 | |
|       @cur_rx_packets   = @begin_rx_packets;
 | |
|       @cur_rx_signal    = @begin_rx_signal;
 | |
|    }
 | |
|    @prev_rx_bytes       = @cur_rx_bytes;
 | |
|    @prev_rx_packets     = @cur_rx_packets;
 | |
|    @prev_rx_signal      = @cur_rx_signal;
 | |
| 
 | |
|    #printRowAt( \@lines, $i );
 | |
| 
 | |
|    $cur_rx_bytes[ $::Orig ] = $hunks[ $::Rx_Bytes ];
 | |
|    my $diff_rx = $hunks[ $::Rx_Bytes ] - $prev_rx_bytes[ $::Orig ];
 | |
|    $cur_rx_bytes[ $::Delta ] = $diff_rx;
 | |
| 
 | |
|    if ($hunks[$::Rx_Bytes]==0) {
 | |
|       print "TimeStamp $hunks[$::TimeStamp] zero bytes\n";
 | |
|       $cur_rx_bytes[ $::Min ] = 0;
 | |
|    }
 | |
|    elsif (($diff_rx < $prev_rx_bytes[ $::Delta ]) && ($diff_rx < $prev_rx_bytes[ $::Min ])) {
 | |
|       if ($diff_rx == 0) {
 | |
|          print "TimeStamp $hunks[$::TimeStamp] zero bytes diff\n";
 | |
|          $cur_rx_bytes[ $::Min ] = $prev_rx_bytes[ $::Delta ];
 | |
|       } else {
 | |
|          $cur_rx_bytes[ $::Min ] = $diff_rx;
 | |
|       }
 | |
|    }
 | |
|    if (($diff_rx > $prev_rx_bytes[ $::Delta ]) && ($diff_rx > $prev_rx_bytes[ $::Max ])) {
 | |
|       $cur_rx_bytes[ $::Max ] = $diff_rx;
 | |
|    }
 | |
|    $cur_rx_bytes[    $::Tot ] = $hunks[ $::Rx_Bytes ] - $begin_rx_bytes[ $::Orig];
 | |
| 
 | |
|    
 | |
| 
 | |
|    $cur_rx_packets[ $::Orig ] = $hunks[ $::Rx_Packets ];
 | |
|    $diff_rx = $hunks[ $::Rx_Packets ] - $prev_rx_packets[ $::Orig ];
 | |
|    $cur_rx_packets[ $::Delta ] = $diff_rx;
 | |
| 
 | |
|    if ($hunks[$::Rx_Packets]==0) {
 | |
|       print "TimeStamp $hunks[$::TimeStamp] zero packets\n";
 | |
|       $cur_rx_packets[ $::Min ] = 0;
 | |
|    }
 | |
|    elsif (($diff_rx < $prev_rx_packets[ $::Delta ]) && ($diff_rx < $prev_rx_packets[ $::Min ])) {
 | |
|       if ($diff_rx == 0) {
 | |
|          print "TimeStamp $hunks[$::TimeStamp] zero packets diff\n";
 | |
|          $cur_rx_packets[ $::Min ] = $prev_rx_packets[ $::Delta ];
 | |
|       } else {
 | |
|          $cur_rx_packets[ $::Min ] = $diff_rx;
 | |
|       }
 | |
|    }
 | |
|    if (($diff_rx > $prev_rx_packets[ $::Delta ]) && ($diff_rx > $prev_rx_packets[ $::Max ])) {
 | |
|       $cur_rx_packets[ $::Max ] = $diff_rx;
 | |
|    }
 | |
|    $cur_rx_packets[  $::Tot ] = $hunks[ $::Rx_Packets ] - $begin_rx_packets[ $::Orig ];
 | |
| 
 | |
| 
 | |
|    $cur_rx_signal[ $::Orig ]  = $hunks[ $::Rx_Signal ];
 | |
|    $cur_rx_signal[  $::Min ]  = $hunks[ $::Rx_Signal ] if ( $hunks[ $::Rx_Signal ] < $prev_rx_signal[ $::Min ]);
 | |
|    $cur_rx_signal[  $::Max ]  = $hunks[ $::Rx_Signal ] if ( $hunks[ $::Rx_Signal ] > $prev_rx_signal[ $::Max ]);
 | |
|    $cur_rx_signal[  $::Tot ]  = $prev_rx_signal[ $::Tot ] + $hunks[ $::Rx_Signal ];
 | |
| 
 | |
|    $counted++;
 | |
| }
 | |
| my $seconds = ($finish_time - $begin_time + 1000) / 1000;
 | |
| 
 | |
| if ($seconds <= 0 || $counted <= 0) {
 | |
|    do_err_exit("No records in range");
 | |
| }
 | |
| $cur_rx_bytes[ $Ave ]   =  $cur_rx_bytes[ $::Tot ]   / $counted;
 | |
| $cur_rx_packets[ $Ave ] =  $cur_rx_packets[ $::Tot ] / $counted;
 | |
| $cur_rx_signal[ $Ave ]  =  $cur_rx_signal[ $::Tot ]  / $counted;
 | |
| 
 | |
| printf "Rx Bytes:   Min_Bps: %15s  Max_Bps: %15s  Ave_Bps: %15s  Total: %15s\n",
 | |
|       format_number($cur_rx_bytes[ $::Min ]),
 | |
|       format_number($cur_rx_bytes[ $::Max ]),
 | |
|       format_number($cur_rx_bytes[ $Ave ]),
 | |
|       format_number($cur_rx_bytes[ $::Tot ]);
 | |
| 
 | |
| printf "Rx bits/sec Min_bps: %15s  Max_bps: %15s  Ave_bps: %15s\n",
 | |
|       format_number($cur_rx_bytes[ $::Min ] * 8),
 | |
|       format_number($cur_rx_bytes[ $::Max ] * 8),
 | |
|       format_number($cur_rx_bytes[ $Ave ]   * 8);
 | |
| 
 | |
| printf "Rx Packets: Min_Pps: %15s  Max_Pps: %15s  Ave_Pps: %15s  Total: %15s\n",
 | |
|       format_number($cur_rx_packets[ $::Min ]),
 | |
|       format_number($cur_rx_packets[ $::Max ]),
 | |
|       format_number($cur_rx_packets[ $Ave ]),
 | |
|       format_number($cur_rx_packets[ $::Tot ]);
 | |
| 
 | |
| printf "Rx Signal:  Min_dB:  %15s  Max_dB: %16s  Ave_dB:  %15s\n",
 | |
|       format_number($cur_rx_signal[ $::Min ]),
 | |
|       format_number($cur_rx_signal[ $::Max ]),
 | |
|       format_number($cur_rx_signal[  $Ave ]);
 | |
| print format_number($counted)." samples in ".format_number($seconds)." seconds\n";
 | |
| ##
 | |
| ##
 | |
| ##
 |