boinc/tools/vote_monitor

100 lines
5.3 KiB
Bash
Executable File

#! /bin/sh
cd `dirname $0`
MOD_EMAIL_ADDRESS=`grep POST_REPORT_EMAILS ../html/project/project.inc | awk -F\" '{print $(NF-1);}'`
while true ; do
now=`date +%s`
msgfile=`mktemp -p /tmp setimods.XXXXXX` || exit 1
sec_from_hour=`expr $now % 3600`
dbhost=`grep db_host ../config.xml | tr '[\<\>]' '[ ]' | head -1 | awk '{print $2}'`
dbuser=`grep db_user ../config.xml | tr '[\<\>]' '[ ]' | head -1 | awk '{print $2}'`
dbname=`grep db_name ../config.xml | tr '[\<\>]' '[ ]' | head -1 | awk '{print $2}'`
MYSQL="mysql -D $dbname -h $dbhost -u $dbuser -N -B"
nmods=`$MYSQL --execute="select count(userid) from forum_preferences where special_user like '1%'"`
major=`expr $nmods / 2`
# send a report on ongoing elections.
if test $sec_from_hour -lt 300 ; then
voteids=`$MYSQL --execute="select id from banishment_vote where end_time>"$now`
if test -n "$voteids" ; then
echo Ongoing votes >> $msgfile
echo >> $msgfile
for voteid in $voteids; do
msgfile2=`mktemp -p /tmp setimods.XXXXXX` || exit 1
echo >> $msgfile
echo Vote: $voteid >> $msgfile
ayes=`$MYSQL --execute="select sum(yes) from banishment_votes where voteid=$voteid"`
nays=`$MYSQL --execute="select count(id)-sum(yes) from banishment_votes where voteid=$voteid"`
userid=`$MYSQL --execute="select userid from banishment_vote where id=$voteid"`
EMAIL=`$MYSQL --execute="select email_addr from user where id=$userid"`
$MYSQL --execute="select name,' - ',userid from user,banishment_vote where banishment_vote.id=$voteid and user.id=userid" >> $msgfile2
$MYSQL --execute="select 'Ayes: ',sum(yes),' Nays: ',count(id)-sum(yes) from banishment_votes where voteid=$voteid" >> $msgfile2
$MYSQL --execute="select name,' - ',userid from user,banishment_vote where banishment_vote.id=$voteid and user.id=userid" >> $msgfile
$MYSQL --execute="select 'Ayes: ',sum(yes),' Nays: ',count(id)-sum(yes) from banishment_votes where voteid=$voteid" >> $msgfile
if test $nays -ge $major ; then
echo Vote failed. >> $msgfile
mail -s "Vote failed. You have not been banished" $EMAIL < $msgfile2
$MYSQL --execute="update forum_preferences set banished_until=0 where userid=$userid"
$MYSQL --execute="update banishment_vote set end_time=start_time where id=$voteid"
elif `test $ayes -gt $major` ; then
echo Vote succeeded. >> $msgfile
mail -s "Vote succeeded. You have been banished" $EMAIL < $msgfile2
start_time=`$MYSQL --execute="select start_time from banishment_vote where id=$voteid"`
$MYSQL --execute="update forum_preferences set banished_until=$start_time +1209600 where userid= $userid"
$MYSQL --execute="update banishment_vote set end_time=start_time where id=$voteid"
else
$MYSQL --execute="select 'Ends in ',(end_time-$now)/3600,' hours' from banishment_vote where id=$voteid" >> $msgfile
fi
/bin/rm $msgfile2
done
mail -s "Ongoing Votes" $MOD_EMAIL_ADDRESS < $msgfile
fi
fi
/bin/rm $msgfile
# handle recently ended elections
msgfile=`mktemp -p /tmp setimods.XXXXXX` || exit 1
voteids=`$MYSQL --execute="select id from banishment_vote where end_time<"$now" and end_time+300>"$now`
if test -n "$voteids" ; then
echo Finished votes >> $msgfile
echo >> $msgfile
for voteid in $voteids; do
msgfile2=`mktemp -p /tmp setimods.XXXXXX` || exit 1
echo >> $msgfile
echo Vote: $voteid >> $msgfile
ayes=`$MYSQL --execute="select sum(yes) from banishment_votes where voteid=$voteid"`
nays=`$MYSQL --execute="select count(id)-sum(yes) from banishment_votes where voteid=$voteid"`
userid=`$MYSQL --execute="select userid from banishment_vote where id=$voteid"`
EMAIL=`$MYSQL --execute="select email_addr from user where id=$userid"`
$MYSQL --execute="select name,' - ',userid from user,banishment_vote where banishment_vote.id=$voteid and user.id=userid" >> $msgfile2
$MYSQL --execute="select 'Ayes: ',sum(yes),' Nays: ',count(id)-sum(yes) from banishment_votes where voteid=$voteid" >> $msgfile2
$MYSQL --execute="select name,' - ',userid from user,banishment_vote where banishment_vote.id=$voteid and user.id=userid" >> $msgfile
$MYSQL --execute="select 'Ayes: ',sum(yes),' Nays: ',count(id)-sum(yes) from banishment_votes where voteid=$voteid" >> $msgfile
nays=`expr $nays + 1`
if test $ayes -gt $nays ; then
echo Vote succeeded. >> $msgfile
mail -s "Vote succeeded. You have been banished" $EMAIL < $msgfile2
start_time=`$MYSQL --execute="select start_time from banishment_vote where id=$voteid"`
$MYSQL --execute="update forum_preferences set banished_until=$start_time +1209600 where userid= $userid"
$MYSQL --execute="update banishment_vote set end_time=start_time where id=$voteid"
else
echo Vote failed. >> $msgfile
mail -s "Vote failed. You have not been banished" $EMAIL < $msgfile2
$MYSQL --execute="update forum_preferences set banished_until=0 where userid=$userid"
$MYSQL --execute="update banishment_vote set end_time=start_time where id=$voteid"
fi
/bin/rm $msgfile2
done
mail -s "Completed Votes" $MOD_EMAIL_ADDRESS < $msgfile
fi
/bin/rm $msgfile
sleep 300
done
exit 0