slew/lib/rate.rc

31 lines
619 B
Bash

#!/bin/rc
priv=./data/rate
fn echo_ret {
if ([ $1 -eq 256 ]) {
echo 'killed by signal `'$2''''
} else echo 'exited with code `'$1''''
}
fn rate_run {
[ -d $priv ] || install -d -o root -g adm -m 0750 $priv
if ([ -f $priv/delay ]) sleep `{cat $priv/delay}
date +%s > $priv/date
}
fn rate_finish {
cur=`{date +%s}
prev=`{cat $priv/date}
dif=`{expr $cur - $prev || true}
if ([ $dif -ge $1 -o $2 -eq 0 -o $2 -eq 256 ]) {
rm -f $priv/delay
} else if ([ -f $priv/delay ]) {
if (delay=`{cat $priv/delay}; [ $delay -lt $1 ]) {
expr $delay '*' 2 > $priv/delay || true
}
} else echo 1 > $priv/delay
}