Add the source files for the swift library.
[swifty.git] / src / libswift / mfold / dohrv
1 #!/bin/bash
2 #   The script downloads logs in parallel,
3 #   feeds them into fifos; sort takes logs
4 #   from fifos, merges and gzips them;
5 #   the result is put into harvest/
6 #
7 if [ ! $SERVERS ]; then
8     export SERVERS="servers.txt"
9 fi
10
11 . env.default.sh
12
13 if [ ! $TMPDIR ]; then
14     TMPDIR=/tmp
15 fi
16
17 if [ ! $MAXHARVEST ]; then
18     MAXHARVEST=100
19 fi
20
21 mv harvest .hrv-old
22 rm -rf .hrv-old &
23 mkdir harvest
24
25 i=0
26 j=1
27 for sstr in `grep -v '#' $SERVERS`; do
28     s=${sstr%:*}
29     mkfifo harvest/$s-$j.fifo
30     # yas, yes, yes
31     (
32         if ssh $s \
33             "if [ -e ~/.dohrv_copying ]; then exit 1; \
34             else touch ~/.dohrv_copying; fi" ; then
35             scp ~/.ssh/config $s:.ssh/config > /dev/null 
36             scp $SERVERS $s:swift/mfold/servers.txt > /dev/null
37             ssh $s "rm -f ~/.dohrv_copying"
38         fi
39     ) &
40     let i++
41     if [ $i == $MAXHARVEST ]; then
42         wait
43         i=0
44         mkfifo harvest/swpart$j.fifo
45         let j++
46     fi
47 done
48 if [[ $i>0 ]]; then
49     wait
50     mkfifo harvest/swpart$j.fifo
51 fi
52
53 echo 'Done making fifos and copying configs.'
54
55 i=0
56 j=1
57 for sstr in `grep -v '#' $SERVERS`; do
58     s=${sstr%:*}
59     (
60         if ssh $s \
61             "cd swift/  && \
62         rm -rf $s-harvest && mkdir $s-harvest && \
63         ( zcat $s-lout.gz | ./mfold/logparse $s | gzip )" \
64             | gunzip > harvest/$s-$j.fifo ; then
65
66             ssh $s "cd swift/; tar cz $s-harvest" | tar xz
67             mv $s-harvest/* harvest/
68             rmdir $s-harvest
69             echo $s harvest OK
70             
71         else
72             echo $s harvest FAIL
73         fi
74     ) &
75     let i++
76     if [ $i == $MAXHARVEST ]; then
77         # Ensure your version of sort is recent enough
78         # batch-size is critical for performance
79         LC_ALL=C sort -m -s -T $TMPDIR --batch-size=64 --compress-program=gzip \
80             harvest/*-$j.fifo | gzip > harvest/swpart$j.log.gz &
81         wait
82         i=0
83         let j++
84     fi
85 done  
86 if [[ $i>0 ]]; then
87     LC_ALL=C sort -m -s -T $TMPDIR --batch-size=64 --compress-program=gzip \
88         harvest/*-$j.fifo | gzip > harvest/swpart$j.log.gz &
89     wait
90     let j++
91 fi
92
93 echo 'Done sorting of swarm parts.'
94
95 if [[ $j>2 ]]; then
96     for (( i=1; i<j; i++ )); do
97         (zcat harvest/swpart$i.log.gz > harvest/swpart$i.fifo) &
98     done
99     LC_ALL=C sort -m -s -T $TMPDIR --batch-size=64 --compress-program=gzip \
100         harvest/swpart*.fifo | gzip > harvest/swarm.log.gz &
101     wait
102 else
103     mv harvest/swpart1.log.gz harvest/swarm.log.gz
104 fi
105
106 echo 'Done sorting of whole swarm.'
107
108 rm harvest/*.fifo
109 rm harvest/swpart*.log.gz
110 ./loggraphs
111 ./logreport > harvest/index.html
112 #./logdistr
113
114 cp report.css harvest
115 # scp -rq harvest mfold.libswift.org:/storage/mfold-granary/`date +%d%b_%H:%M`_`whoami` &
116
117 echo DONE