mirror of https://github.com/BOINC/boinc.git
108 lines
3.9 KiB
Bash
Executable File
108 lines
3.9 KiB
Bash
Executable File
#! /bin/sh
|
|
|
|
DECAY_TIME=30*86400
|
|
RUN_INCREMENT=86400
|
|
MAX_NRESULTS=10000
|
|
FILE_DELETE_READY=1
|
|
FILE_DELETE_DONE=2
|
|
FILE_DELETE_ERROR=3
|
|
|
|
dbhost=`grep db_host ../config.xml | tr '[\<\>]' '[ ]' | head -1 | awk '{print $2}'`
|
|
replica_dbhost=`grep replica_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}'`
|
|
|
|
if test ! -z "${replica_dbhost}" ; then
|
|
slave_gap=`mysql -E -h ${replica_dbhost} --execute="show slave status" | grep Seconds_Behind_Master | awk '{print $2}'`
|
|
fi
|
|
|
|
if test -z "${replica_dbhost}" || test "$slave_gap" = "NULL" || test $slave_gap -gt $RUN_INCREMENT ; then
|
|
replica_dbhost=${dbhost}
|
|
fi
|
|
|
|
MYSQL="mysql -D $dbname -h $dbhost -u $dbuser -N -B"
|
|
MYSQL_R="mysql -D $dbname -h $replica_dbhost -u $dbuser -N -B"
|
|
|
|
function median_host_query() {
|
|
$MYSQL --execute="
|
|
create temporary table medians (id int auto_increment primary key)
|
|
select $1 from host
|
|
where rpc_time>unix_timestamp(now())-($DECAY_TIME)
|
|
and credit_per_cpu_sec>0
|
|
order by $1;
|
|
create temporary table ids
|
|
select round(avg(id)-0.5) as id from medians;
|
|
insert into ids select round(avg(id)+0.5) from medians;
|
|
select avg($1) from medians where id in (
|
|
select id from ids
|
|
);
|
|
drop table medians;
|
|
drop table ids;"
|
|
}
|
|
|
|
function get_recent_credited_results() {
|
|
$MYSQL_R --execute="
|
|
set session transaction isolation level read uncommitted;
|
|
create temporary table recent_results
|
|
select
|
|
granted_credit,
|
|
cpu_time,
|
|
hostid,
|
|
p_fpops,
|
|
p_iops
|
|
from host,result where
|
|
file_delete_state in ($FILE_DELETE_READY,$FILE_DELETE_DONE) and
|
|
granted_credit>0 and
|
|
received_time>unix_timestamp(now())-$DECAY_TIME and
|
|
unix_timestamp(result.mod_time)>unix_timestamp(now())-$RUN_INCREMENT and
|
|
host.rpc_time>unix_timestamp(now())-$DECAY_TIME and
|
|
appid=$1 and
|
|
result.hostid=host.id
|
|
limit $MAX_NRESULTS;
|
|
create temporary table merged_results
|
|
select sum(granted_credit)/sum(cpu_time) as granted_rate,
|
|
hostid,
|
|
(p_fpops+p_iops)*5.787037037037e-13 as bench_rate
|
|
from recent_results
|
|
group by hostid;
|
|
create temporary table medians (id int auto_increment primary key)
|
|
select (bench_rate+1e-10)/(granted_rate+1e-10) as mult
|
|
from merged_results
|
|
order by mult;
|
|
create temporary table ids
|
|
select round(avg(id)-0.5) as id from medians;
|
|
insert into ids select round(avg(id)+0.5) from medians;
|
|
select avg(mult) from medians where id in (
|
|
select id from ids
|
|
);
|
|
drop table ids;
|
|
drop table medians;
|
|
drop table merged_results;
|
|
drop table recent_results;"
|
|
}
|
|
|
|
|
|
appids=`$MYSQL --execute="select id from app where deprecated=0 and beta=0"`
|
|
|
|
for appid in $appids ; do
|
|
ratio=`get_recent_credited_results $appid`
|
|
|
|
nrows=`$MYSQL --execute="select count(id) from credit_multiplier where appid=$appid"`
|
|
if [ $nrows = 0 ] ; then
|
|
$MYSQL --execute="insert into credit_multiplier values (0,$appid,unix_timestamp(now())-86400,1.0)"
|
|
fi
|
|
|
|
last_value=`$MYSQL --execute="select multiplier from credit_multiplier where appid=$appid and (unix_timestamp(now())-time)=(select min(unix_timestamp(now())-time) from credit_multiplier where appid=$appid)"`
|
|
echo -n "appid=${appid} last_value=${last_value}"
|
|
last_time=`$MYSQL --execute="select unix_timestamp(now())-time from credit_multiplier where appid=$appid and (unix_timestamp(now())-time)=(select min(unix_timestamp(now())-time) from credit_multiplier where appid=$appid)"`
|
|
echo -n " desired_value=${ratio}"
|
|
|
|
value=`$MYSQL --execute="select ($last_value*(($DECAY_TIME)-$last_time)+$ratio*$last_time)/($DECAY_TIME)"`
|
|
echo -n " new_value=${value}"
|
|
echo
|
|
|
|
$MYSQL --execute="insert into credit_multiplier values (0,$appid,unix_timestamp(now()),$value);"
|
|
done
|
|
|
|
exit 0
|