mirror of
https://github.com/Telecominfraproject/wlan-lanforge-scripts.git
synced 2025-10-28 17:32:35 +00:00
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";
|
|
##
|
|
##
|
|
##
|