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