сейчас распишу, мож кому-то згодиться
в нете надыбал простенький скриптик на пхп
с помощью которого можно получать базовую инфу о серваке
допилял его до состояния
Код: Выделить всё
if(!function_exists('getmicrotime'))
{
function getmicrotime()
{
list($usec, $sec) = explode(" ", microtime());
return ((float)$usec + (float)$sec);
}
}
function serverInfo($ip, $port)
{
$ip = gethostbyname($ip);
$timeStart = getmicrotime();
$fp = fsockopen('udp://'.$ip, $port);
stream_set_timeout($fp, 2);
if($fp)
{
fwrite($fp,"\xFF\xFF\xFF\xFFTSource Engine Query\0\r");
$temp = fread($fp, 4);
$status = socket_get_status($fp);
if($status['unread_bytes']>0)
{
$temp = fread($fp, $status['unread_bytes']);
$array = array();
$pos = 0;
while($pos !== false)
{
$pos2 = strpos($temp, "\0", $pos+1);
$array[] = substr($temp, $pos+1, $pos2-$pos)."\n";
$pos = $pos2;
}
if( strpos($array[0], $ip) !== 0)
{
$server['players'] = ord($array[5][0]);
# $server['maxplayers'] = ord($array[5][1]);
}
else
{
$server['players'] = ord($array[5][0]);
# $server['maxplayers'] = ord($array[5][1]);
}
}
else
$server['status'] = 'off';
}
return $server;
}
echo "213.169.74.201";
print_r(serverInfo("213.169.74.201", 27015));
echo "213.169.74.202";
print_r(serverInfo("213.169.74.202", 27015));
echo "213.169.74.203";
print_r(serverInfo("213.169.74.203", 27015));
echo "213.169.74.204";
print_r(serverInfo("213.169.74.204", 27015));
?>
создал базу
Код: Выделить всё
#!/bin/sh
rrdtool create /usr/steam/grafiki/players.rrd \
--step 60 \
--start N \
DS:cs201:GAUGE:120:U:U \
DS:cs202:GAUGE:120:U:U \
DS:cs203:GAUGE:120:U:U \
DS:cs204:GAUGE:120:U:U \
RRA:LAST:0.5:1:864 \
RRA:LAST:0.5:5:864 \
RRA:LAST:0.5:60:864 \
RRA:LAST:0.5:720:864 \
RRA:LAST:0.5:2880:864
потом поставил это дело в крон раз в минту
Код: Выделить всё
#!/bin/sh
cs201=`/usr/local/php5/bin/php players.php | grep -A 3 213.169.74.201 | grep player | awk '{print $3}'`
cs202=`/usr/local/php5/bin/php players.php | grep -A 3 213.169.74.202 | grep player | awk '{print $3}'`
cs203=`/usr/local/php5/bin/php players.php | grep -A 3 213.169.74.203 | grep player | awk '{print $3}'`
cs204=`/usr/local/php5/bin/php players.php | grep -A 3 213.169.74.204 | grep player | awk '{print $3}'`
echo $cs201
echo $cs202
echo $cs203
echo $cs204
DB=/usr/steam/grafiki/players.rrd
/usr/local/bin/rrdtool update $DB \
N:$cs201:$cs202:$cs203:$cs204
а сам график строиться так
Код: Выделить всё
#!/bin/sh
ip="$1"
name="$2"
img="$3.png"
DS="$3"
#ip="213.169.74.202"
#name="cs1.maxmedia.org.ua cs1.6 CLASSIC"
#img="cs_202.png"
#DS="cs202"
WWWPREFIX=/home/www/img.maxmedia.org.ua/graph
RRDPREFIX=/usr/steam/grafiki
################################################################
/usr/local/bin/rrdtool graph $WWWPREFIX/$img \
--width 471 --height 70 --imgformat PNG \
--imginfo "<IMG SRC="%s" WIDTH="%lu" HEIGHT="%lu" ALT=$ip $name>" \
--step 60 \
--interlaced \
--x-grid HOUR:24:HOUR:24:HOUR:1:0:%H \
--y-grid 4:1 \
--units-length 2 \
--slope-mode \
--start -1d \
--no-gridfit \
--end now \
--alt-autoscale \
--font-render-mode light \
--pango-markup \
--title "$ip $name" --rigid --color BACK#FFFFFF --color FRAME#FFFFFF \
--color SHADEA#fff --color SHADEB#fff \
--color FONT#735e4b --color ARROW#fff\
--vertical-label players \
DEF:cs=$RRDPREFIX/players.rrd:$DS:LAST \
VDEF:avg_cs=cs,AVERAGE \
AREA:cs#375082 \
CDEF:cs10=cs,0.90,* AREA:cs10#375082 \
CDEF:cs15=cs,0.85,* AREA:cs15#3e5686 \
CDEF:cs20=cs,0.80,* AREA:cs20#485e8d \
CDEF:cs25=cs,0.75,* AREA:cs25#526894 \
CDEF:cs30=cs,0.70,* AREA:cs30#60739c \
CDEF:cs35=cs,0.65,* AREA:cs35#6d80a4 \
CDEF:cs40=cs,0.60,* AREA:cs40#7c8dad \
CDEF:cs45=cs,0.55,* AREA:cs45#8b9ab6 \
CDEF:cs50=cs,0.50,* AREA:cs50#9ba7c0 \
CDEF:cs55=cs,0.45,* AREA:cs55#aab5ca \
CDEF:cs60=cs,0.40,* AREA:cs60#bac2d4 \
CDEF:cs65=cs,0.35,* AREA:cs65#b9c2d4 \
CDEF:cs70=cs,0.30,* AREA:cs70#c8d0dd \
CDEF:cs75=cs,0.25,* AREA:cs75#d6dce6 \
CDEF:cs80=cs,0.20,* AREA:cs80#e3e7ed \
GPRINT:avg_cs:"average online %2.lf" \
GPRINT:cs:"LAST:current online %2.lf"
может что-то не совсем рационально
а чуть не забыл графики строю таким скриптиком
Код: Выделить всё
#!/bin/sh
cd /usr/steam/grafiki;
/bin/sh ./get_players.sh
#########################
#risuem grafiki
/bin/sh ./make_graph.sh 213.169.74.201 "cs2.maxmedia.org.ua cs-sorce" cs201
/bin/sh ./make_graph.sh 213.169.74.202 "cs1.maxmedia.org.ua cs1.6 CLASSIC" cs202;
/bin/sh ./make_graph.sh 213.169.74.203 "cs3.maxmedia.org.ua cs1.6 JUMP server" cs203
/bin/sh ./make_graph.sh 213.169.74.204 "cs4.maxmedia.org.ua cs1.6 clan wars" cs204