# docmd.sh); all failed executions are
# put to the FAILURES file
rm -f FAILURES
+rm -rf logs
+mkdir logs
if [ -z "$SERVERS" ]; then
- SERVERS="das2.txt"
+ SERVERS="servers.txt"
fi
-HOSTS=`cat $SERVERS | awk '{print $2}'`
-for srv in $HOSTS; do
- ( for cmd in $@; do
- if ! ./docmd.sh $srv $cmd; then
+for srv in `grep -v '^#' $SERVERS`; do
+ (
+ if ! ./docmd $srv $1; then
echo $srv >> FAILURES
- echo $src FAILED
+ echo $srv FAILED
break
fi
- done ) &
+ ) &
done
wait
HOST=$1
CMD=$2
+ENV=env.default.sh
+
+if [ ! $SERVERS ]; then
+ SERVERS="servers.txt"
+fi
if [ -e $CMD.$HOST.sh ] ; then
SHSC=$CMD.$HOST.sh ;
SHSC=$CMD.default.sh ;
fi
-if ( cat $SHSC | ssh $HOST ) > .$HOST.$CMD.out 2> .$HOST.$CMD.err; then
+if [ ! -d logs ]; then mkdir logs; fi
+
+if ( cat $ENV $SHSC | ssh $HOST ) > logs/$HOST.$CMD.out 2> logs/$HOST.$CMD.err; then
echo $HOST $CMD OK
exit 0
else
echo $HOST $CMD FAIL
+ cat $SHSC
cat .$HOST.$CMD.out .$HOST.$CMD.err
exit 1
fi
#!/bin/bash
-
+# The script downloads logs in parallel,
+# feeds them into fifos; sort takes logs
+# from fifos, merges and gzips them;
+# the result is put into harvest/
+#
if [ ! $SERVERS ]; then
SERVERS="servers.txt"
fi
rm -rf harvest
mkdir harvest
+for s in `cat $SERVERS`; do
+ mkfifo harvest/$s.log
+done
+
for s in `cat $SERVERS`; do
(if ssh $s "cat ./swift/lout.gz" | gunzip | \
- perl -ne 's/(#\d+)/'$s' $1/ && print' \
- > harvest/$s.log ; then
+ ./logparse $s \
+ > harvest/$s.log-fifo ; then
echo $s harvest OK
else
echo $s harvest FAIL
fi) &
done
+# Ensure your version of sort is recent enough
+# batch-size is critical for performance
+LC_ALL=C sort -m -s --batch-size=64 harvest/*.log-fifo | gzip > harvest/swarm.log.gz &
wait
-echo 'harvested all; sorting'
-sort -m harvest/*.log | ./swlognm | gzip > harvest/swarm.log.gz
+rm harvest/*.log-fifo
echo DONE
--- /dev/null
+# This script sets up shared environment variables
+# at the servers
+export SEEDER=130.161.211.198
+export SEEDPORT=10001
+export RUNPORT=10002
--- /dev/null
+#!/usr/bin/perl -w
+
+$SERVER=shift;
+%HOSTS = ();
+%CHANN = ();
+$CHANN{"#0"} = "none";
+
+open(SRV,$ENV{"HOME"}."/.ssh/config") or die;
+while (<SRV>) {
+ $srvname=$1 if /Host (\S+)/;
+ $HOSTS{$1}=$srvname if /HostName (\S+)/;
+}
+close SRV;
+
+while (<>) {
+ /([\d\_]+) (#\d+) (\S+) (.*)/ or next;
+ my $time = $1;
+ my $channel = $2;
+ my $event = $3;
+ my $rest = $4;
+ if ($event eq "sent") {
+ $rest =~ /\d+b ([\d\.]+):/;
+ $ip = $1;
+ $CHANN{"$channel"} = $HOSTS{$ip};
+ }
+ my $host = $CHANN{"$channel"};
+ $host = "unknown" if not $host;
+ print "$time $SERVER $host$channel $event $rest\n";
+}
-touch .netem-on
+echo eth0 > .netem-on
sudo tc qdisc add dev eth0 root netem delay 400ms
-touch .netem-on
+echo eth0 > .netem-on
sudo tc qdisc add dev eth0 root netem delay 100ms loss 5.0%
-touch .netem-on
+echo eth0 > .netem-on
sudo tc qdisc add dev eth0 root netem delay 100ms 20ms 25%
#!/bin/bash
-
+# This script runs a leecher at some server;
+# env variables are set in env.default.sh
HASH=66b9644bb01eaad09269354df00172c8a924773b
-HEAD=83.96.143.114
sleep 1
-rm -f core
ulimit -c 1024000
cd swift || exit 1
+rm -f core
rm -f chunk
#valgrind --leak-check=yes \
-./exec/leecher $HASH chunk $HEAD:10001 0.0.0.0:10002 2>lerr | gzip > lout.gz || exit 2
+./exec/leecher $HASH chunk $SEEDER:$SEEDPORT 0.0.0.0:$RUNPORT 2>lerr | gzip > lout.gz || exit 2
wget -c http://video.ted.com/talks/podcast/ScottKim_2008P.mp4 || exit 1
fi
-./exec/seeder ScottKim_2008P.mp4 0.0.0.0:10001 2> lerr | gzip > lout.gz
+(./exec/seeder ScottKim_2008P.mp4 0.0.0.0:$SEEDPORT \
+ 2> lerr | gzip > lout.gz ) >/dev/null 2> /dev/null &
+
+exit
+++ /dev/null
-if [ -e .netem-on ]; then
- sudo tc qdisc del dev eth0 root
-fi