| 24 |   | Type 'help;' or '\h' for help. Type '\c' to clear the buffer. | 
          
          
            | 25 |   |  | 
          
          
            | 26 |   | mysql> use   <DB NAME>; | 
          
          
            | 27 |   |  | 
          
          
            | 28 |   | }}} | 
          
          
            | 29 |   |  | 
          
          
            | 30 |   | Standard MySQL queries can then be made to manipulate your data.  A brief tutorial on how to use MySQL can be found [http://dev.mysql.com/doc/refman/4.1/en/index.html here]. | 
          
          
            | 31 |   |  | 
          
          
            | 32 |   | The database name is your experiment ID and is displayed by the nodehandler in the first few lines of your experiment run.  It will look something like this: | 
          
          
            | 33 |   | {{{ | 
          
          
            | 34 |   |  INFO init: Experiment ID: sb5_2006_01_17_11_45_23 | 
          
          
            | 35 |   | }}} | 
          
          
            | 36 |   |  | 
          
          
            | 37 |   | [[BR]] | 
          
          
            | 38 |   | == 2. Using Perl scripts == | 
          
          
            | 39 |   |  | 
          
          
            | 40 |   | You can use the following sample Perl script to retrieve the content of a particular table from your experiment database: | 
          
          
            | 41 |   | {{{ | 
          
          
            | 42 |   | #! /usr/bin/perl | 
          
          
            | 43 |   | # | 
          
          
            | 44 |   | # Script: getdata.pl | 
          
          
            | 45 |   | # A simple script that gets all the rows from a single table in the database. | 
          
          
            | 46 |   | # | 
          
          
            | 47 |   | # ./getdata.pl <db_name> <table_name> <outputfile> | 
          
          
            | 48 |   | # | 
          
          
            | 49 |   | # Example: ./getdata.pl zmac1_2005_04_28_00_46_10  sender_otg_senderport  out.txt | 
          
          
            | 50 |   | # | 
          
          
            | 51 |   | # To use this script replace the XXXX in DBUSER and DBPASS | 
          
          
            | 52 |   | # with correct username and password for idb1. | 
          
          
            | 53 |   | # | 
          
          
            | 54 |   | # | 
          
          
            | 55 |   | use DBI(); | 
          
          
            | 56 |   |  | 
          
          
            | 57 |   | $DBHOST = "idb1"; | 
          
          
            | 58 |   | $DBNAME = $ARGV[0]; | 
          
          
            | 59 |   | $DBUSER = "XXXX"; | 
          
          
            | 60 |   | $DBPASS = "XXXX"; | 
          
          
            | 61 |   | $QUERY = "select * from $ARGV[1]"; | 
          
          
            | 62 |   | $OUTFILE = $ARGV[2]; | 
          
          
            | 63 |   |  | 
          
          
            | 64 |   | $dsn = "DBI:mysql:database=$DBNAME;host=$DBHOST"; | 
          
          
            | 65 |   |  | 
          
          
            | 66 |   | #Connect to the DB | 
          
          
            | 67 |   | $dbh = DBI->connect($dsn, $DBUSER, $DBPASS, {'RaiseError' => 1}); | 
          
          
            | 68 |   |  | 
          
          
            | 69 |   | # Prepare and execute query | 
          
          
            | 70 |   | my $qry = $dbh->prepare($QUERY); | 
          
          
            | 71 |   | $qry->execute(); | 
          
          
            | 72 |   |  | 
          
          
            | 73 |   | open(out, ">$OUTFILE"); | 
          
          
            | 74 |   |  | 
          
          
            | 75 |   | #Print the column names | 
          
          
            | 76 |   | print out "@{$qry->{'NAME'}} \n"; | 
          
          
            | 77 |   |  | 
          
          
            | 78 |   | #Print the data | 
          
          
            | 79 |   | while (my @ref = $qry->fetchrow()) { | 
          
          
            | 80 |   |         print out "@ref \n"; | 
          
          
            | 81 |   | } | 
          
          
            | 82 |   |  | 
          
          
            | 83 |   | $qry->finish(); | 
          
          
            | 84 |   | # Disconnect from the database. | 
          
          
            | 85 |   | $dbh->disconnect(); | 
          
          
            | 86 |   | }}} | 
          
          
            | 87 |   |  | 
          
          
            | 88 |   | A more specific Perl script for OTG/OTR application can be found [wiki:Old/Documentation/OTG/Measurement/DatabaseProcess here] | 
          
          
            | 89 |   |  | 
          
          
            | 90 |   | [[BR]] | 
          
          
            | 91 |   | == 3. Using Microsoft Excel == | 
          
          
            | 92 |   |  | 
          
          
            | 93 |   | Microsoft Excel can be used to analyze an experiment as shown below. | 
          
          
            | 94 |   |  | 
          
          
            | 95 |   | [[Image(Excelexample.PNG)]] | 
          
          
            | 96 |   |  | 
          
          
            | 97 |   | The user could import MySQL database to Microsoft Excel and use chart and other tools to analyze the measurements. | 
          
          
            | 98 |   |  | 
          
          
            | 99 |   | [[BR]] | 
          
          
            | 100 |   | == 4. Using Matlab == | 
          
          
            | 101 |   |  | 
          
          
            | 102 |   | Matlab is another tool can be used.  It should be noted that this assumes you have [http://www.die.net/doc/linux/man/man1/mysqldump.1.html exported] the database off of ORBIT and imported to your own MySQL server. | 
          
          
            | 103 |   | {{{ | 
          
          
            | 104 |   | function nsf(dbServer, dbUser, dbPW, database); | 
          
          
            | 105 |   | % Part where we retrieve data from the database; | 
          
          
            | 106 |   | mysql('open',dbServer, dbUser, dbPW); | 
          
          
            | 107 |   | mysql('use', database); | 
          
          
            | 108 |   | output = struct('time',[],'thr_all',[],'node',[]); | 
          
          
            | 109 |   | [output.time, output.thr_all, output.node] = mysql('select timestamp, throughput, node_id from group2'); | 
          
          
            | 110 |   | [thru1_4, time1_4, thru3_1, time3_1] = sort_mysql(output); | 
          
          
            | 111 |   | % Finally, the plotting part | 
          
          
            | 112 |   | subplot(2,1,1); | 
          
          
            | 113 |   | plot(time1_4, thru1_4, '-*'); | 
          
          
            | 114 |   | title('Throughput On Obstructed Link'); | 
          
          
            | 115 |   | xlabel('Time (sec)'); ylabel('Throuhput (bps)'); grid on; | 
          
          
            | 116 |   | subplot(2,1,2); | 
          
          
            | 117 |   | plot(time3_1, thru3_1, '-*'); | 
          
          
            | 118 |   | title('Throughput On Monitor Node'); xlabel('Time (sec)'); | 
          
          
            | 119 |   | ylabel('Throuhput (bps)'); grid on; | 
          
          
            | 120 |   | }}} | 
          
          
            | 121 |   |  | 
          
          
            | 122 |   | And the resulting graph is show below: | 
          
          
            | 123 |   |  | 
          
          
            | 124 |   | [[Image(Matlabexample.PNG)]] | 
          
          
            |   | 18 | === Matlab Example === |