#!/bin/bash #Copyright (c) 2008 Emin Gabrielyan, Switzernet user=sona domain=youroute.net hosts="us1,ch1,fr1,fr2,fr3,fr4" topsamp=20 topdelay=30 loop=72 upload=2 delay=20 noerror=1 csv2eps=./b7.pl.txt convert=/usr/local/bin/convert localdir=/root/folders/080212-portasip-ser-cpu passfile=/root/files/070930-unappel-ftplogin.txt #convert=convert #localdir=. #passfile=ftplogin.txt cd $localdir csv=cpu/`date +%y%m%d.%H%M%S`-ser-cpu.csv echo time,$hosts | tee $csv eps=`dirname $csv`/`basename $csv .csv`.eps gif=`dirname $csv`/`basename $csv .csv`.gif ftp_cmd="set ftp:passive-mode no; cd htdocs/public/080210-ser-cpu; put $gif; bye" ftp_usr="unappel,`cat $passfile`" ftp_dst=www.unappel.ch i=0 while [ $i -lt $loop ] do ( for h in `perl -e '@h=split /,/,"'$hosts'"; print "@h"'` do perl -e '{if(rand()<='$noerror'){exit 0}{exit 1}}' if [ $? -ne 0 ] then h="$h-error" fi login="$user@$h.$domain" ssh -q $login "top -b -d$topsamp -s$topdelay inf | grep ' \(ser\|COMMAND\)$'" | perl -e '$h="'$h'"; while(<>) { s/^\s+//; @cols=split/\s+/; if(/ COMMAND$/) { for($i=0;$i<@cols;$i++) { if($cols[$i] eq "WCPU") { $wcpu_col=$i; $n++; break; } } } elsif(/ ser$/) { if(defined($wcpu_col)) { $_=$cols[$wcpu_col]; s/%//; $sum+=$_; } } } if(defined($sum) && defined($n)) { printf "%s %s\n",$h,$sum/$n; } ' & done ) | perl -e ' while(<>) { @a=split/\s+/; $wcpu{$a[0]}+=$a[1]; } print time(); foreach $h (split/,/,"'$hosts'") { printf ",%s",$wcpu{$h}; } print "\n"; ' | tee -a $csv i=`expr $i + 1` if [ `expr $i % $upload` -eq 0 ] then $csv2eps $csv $eps if [ -f $eps ] then $convert $eps $gif lftp -e "$ftp_cmd" -u $ftp_usr $ftp_dst 2>&1 else echo "File $eps was not created" fi fi sleep $delay done $csv2eps $csv $eps if [ -f $eps ] then $convert $eps $gif lftp -e "$ftp_cmd" -u $ftp_usr $ftp_dst 2>&1 if [ $? -eq 0 ] then rm $csv rm $eps rm $gif fi else echo "File $eps was not created" fi