wiki:Old/Documentation/OTG/Measurement/DatabaseProcess

Perl Script to Dump Database

Here we provide a script to dump desirable information from the database.

The script did:

  • dump the sender-side table and receiver-side table from one or more OML databases
  • count how many records are in each table
  • put those number pairs in a file

The comparison of those two numbers could give an indication of the packet loss of OTG/OTR application

The program take database names as input arguments and save the result in "tempres" file. Basically,the script read database_name from command-line and process it one by one. First, the restuls are selected from database and put into two files "tx_table", "rx_table". If you want to omit the awk part, you can comment out them and just look into the two tables mentioned above.

#!/usr/bin/perl

# this script read one or more databases and extract how many packets are sent and received respectively.
#

use Mysql;

$hostname = 'idb1.orbit-lab.org';
$user     = 'orbit';
$database =  @ARGV;
$password = 'orbit';
$resultfile ='tempres';


$table1 = "tx_table";
$table2 = "rx_table";

$driver   = 'mysql';

my $noiselevel = 18;
my $now = localtime time;
open(res, ">>$resultfile")
                || die "Can't open result file: $!\n";
print res "$now test results are \n";
close res;

foreach(@ARGV)
{
   dumpDB($_,$table1,$table2);
   system("awk 'BEGIN {cnt=0} {cnt =cnt+1} END {printf(\"%d \", cnt) >> \"$resultfile\" }' $table2");
   system("awk 'BEGIN {cnt=0} {cnt =cnt+1} END {printf(\"%d \\n\", cnt) >> \"$resultfile\" }' $table1");
}

print "Done. check tempres file! \n";

#we need a subfunction to read 1 database 2 table and dump to two files
sub dumpDB
{
  my ($dbname,$f1, $f2) = @_;
  open (OUTFILE1, "> $f1")
         || die "Can't open file to save temporary TX data $!\n";
  open (OUTFILE2, "> $f2")
         || die "Can't open file to save temporary RX data $!\n";
 my $dbh = Mysql->connect($hostname, $dbname, $user, $password);
 my $sql_query1="SELECT sequence_no, pkt_seqno, pkt_size_sample_sum, tx_timestamp from sender_otg_senderport";
 my $sql_query2="SELECT sequence_no, pkt_seqno, rcvd_pkt_size_sample_sum, xmitrate, rx_timestamp from receiver_otr_receiverport";
  my $sth1 = $dbh->query($sql_query1);
  while(my @record1 = $sth1->FetchRow) {
      print OUTFILE1 "@record1 \n";
  }

  my $sth2 = $dbh->query($sql_query2);
  while(my @record2 = $sth2->FetchRow) {
    print OUTFILE2 "@record2 \n";
   }
  close OUTFILE1;
  close OUTFILE2;
}
                                    

Anoter example of post-processing database can be found in wiki:Tutorial/AnalyzeResults

Last modified 14 years ago Last modified on Aug 13, 2006, 4:06:44 PM
Note: See TracWiki for help on using the wiki.