--- /dev/null
+#!/bin/bash
+#
+# 2010 Razvan Deaconescu, razvan.deaconescu@cs.pub.ro
+#
+# The script
+# * parses multiple peer-connection upload/download speed log files
+#
+# Command line argument specifies log folder
+
+# use _DEBUG="off" to turn off debug printing
+_DEBUG="off"
+
+if test $# -ne 1; then
+ echo "usage: $0 log-folder" 1>&2
+ exit 1
+fi
+
+# Read the global configuration file
+# Check if the global configuration file exists
+if [ ! -e globalconfig ]; then
+ echo "Warning: The global config file globalconfig does not exist."
+else
+ source globalconfig
+fi
+
+# Read client mappings configuration file
+# Check if the client mappings configuration file exists
+if [ ! -e client_script_mappings ]; then
+ echo "Warning: The client mappings config file client_script_mappings does not exist."
+else
+ source client_script_mappings
+fi
+
+log_folder=$1
+
+all_down=$(tempfile)
+cat ${log_folder}/*.down > ${all_down}
+
+index=0
+while read line; do
+ date_array[$index]=$line
+ index=$(($index+1))
+done < <(cat ${all_down} | awk -F '[][]+' '{print $2;}' | sort -u)
+
+for index in $(seq 1 ${#date_array[@]}); do
+ echo -e "$index\t${date_array[$(($index-1))]}"
+done > date_index.cfg
+
+peer_array=( $(cat ${all_down} | awk -F '[],() []+' '
+{
+ for (i = 5; i < NF; i += 3) {
+ print $i;
+ j = i+1;
+ print $j;
+ }
+}
+' | sort -u) )
+
+for index in $(seq 1 ${#peer_array[@]}); do
+ echo -e "$index\t${peer_array[$(($index-1))]}"
+done > peer_index.cfg
+
+for date in ${date_array[@]}; do
+ grep "${date}" ${all_down} | awk -F '[],()\t []+' '
+BEGIN {
+ num_peers = 0;
+ while (1) {
+ if ((getline < "peer_index.cfg") == 0)
+ break;
+ num_peers++;
+ peer_index_array[$1] = $2;
+ peer_ip_array[$2] = $1;
+ }
+ close("peer_index.cfg");
+
+ for (i = 0; i < num_peers; num_peers++)
+ for (j = 0; i < num_peers; num_peers++)
+ matrix[i,j] = 0;
+}
+
+{
+ for (i = 5; i < NF; i += 3) {
+ j = i+1;
+ k = i+2
+ ip1 = $i;
+ ip2 = $j;
+ speed = $k;
+ index1 = peer_ip_array[ip1];
+ index2 = peer_ip_array[ip2]
+ matrix[index1,index2] = speed;
+ }
+}
+
+END {
+ for (i = 0; i < num_peers; num_peers++) {
+ for (j = 0; i < num_peers; num_peers++)
+ printf "%.2f ", matrix[i,j];
+ printf "\n";
+ }
+}'
+
+done