. * * * ************************************************************************ * * Bots/Stats.class.php * * RRD Stats module... * */ class {$_NAME} extends Bot { private $uplink; private $timer; public function load($uplink, $old = false) { $this->uplink = $uplink; if(!file_exists("db/network.rrd")) { $fname = "db/network.rrd"; $opts = array( "--step", "300", "--start", "0", "DS:users:GAUGE:600:0:U", "DS:channels:GAUGE:600:0:U", "DS:opers:GAUGE:600:0:U", "DS:servers:GAUGE:600:0:U", "RRA:AVERAGE:0.5:1:600", "RRA:AVERAGE:0.5:6:700", "RRA:AVERAGE:0.5:24:775", "RRA:AVERAGE:0.5:288:797", "RRA:MAX:0.5:1:600", "RRA:MAX:0.5:6:700", "RRA:MAX:0.5:24:775", "RRA:MAX:0.5:288:797" ); $ret = rrd_create($fname, $opts, count($opts)); if(!$ret) { $err = rrd_error(); echo "Create error: $err\n"; die(); } } if(!file_exists("db/network-away.rrd")) { $fname = "db/network-away.rrd"; $opts = array( "--step", "300", "--start", "0", "DS:useraway:GAUGE:600:0:U", "DS:userhere:GAUGE:600:0:U", "RRA:AVERAGE:0.5:1:600", "RRA:AVERAGE:0.5:6:700", "RRA:AVERAGE:0.5:24:775", "RRA:AVERAGE:0.5:288:797", "RRA:MAX:0.5:1:600", "RRA:MAX:0.5:6:700", "RRA:MAX:0.5:24:775", "RRA:MAX:0.5:288:797" ); $ret = rrd_create($fname, $opts, count($opts)); if(!$ret) { $err = rrd_error(); echo "Create error: $err\n"; die(); } } if(!file_exists("db/network-peruser.rrd")) { $fname = "db/network-peruser.rrd"; $opts = array( "--step", "300", "--start", "0", "DS:userperchan:GAUGE:600:0:U", "DS:chanperuser:GAUGE:600:0:U", "RRA:AVERAGE:0.5:1:600", "RRA:AVERAGE:0.5:6:700", "RRA:AVERAGE:0.5:24:775", "RRA:AVERAGE:0.5:288:797", "RRA:MAX:0.5:1:600", "RRA:MAX:0.5:6:700", "RRA:MAX:0.5:24:775", "RRA:MAX:0.5:288:797" ); $ret = rrd_create($fname, $opts, count($opts)); if(!$ret) { $err = rrd_error(); echo "Create error: $err\n"; die(); } } $this->timer = timer(5,array(&$this,"create_stats"),array()); } public function unload($rehash = false) { kill_timer($this->timer); } function create_stats() { $this->timer = timer(5*60,array(&$this,"create_stats"),array()); $stats = array( "opers" => 0, "total" => 0, "away" => 0, "here" => 0, "chansperuser" => 0, "usersperchan" => 0 ); foreach(P10_User::getAllUsers() as $user) { $stats['total']++; $stats['chansperuser'] += $user->getChannelCount(); if($user->isAway()) $stats['away']++; else $stats['here']++; if($user->getModes()->hasMode('o')) $stats['opers']++; } $stats['chansperuser'] = $stats['chansperuser'] / $stats['total']; $channels = P10_Channel::getChannelCount(); foreach(P10_Channel::getChannels() as $channel) { $stats['usersperchan'] += $channel->getUserCount(); } $stats['usersperchan'] = $stats['usersperchan'] / $channels; $servers = P10_Server::getServerCount(); rrd_update("db/network.rrd", time().":".$stats['total'].":".$channels.":".$stats['opers'].":".$servers); rrd_update("db/network-away.rrd", time().":".$stats['away'].":".$stats['here']); rrd_update("db/network-peruser.rrd", time().":".$stats['usersperchan'].":".$stats['chansperuser']); foreach(P10_Server::getServers() as $snum => $server) { $count = $server->getUserCount(); $fname="db/".$server->getName().".rrd"; if(!file_exists($fname)) { $opts = array( "--step", "300", "--start", "0", "DS:users:GAUGE:600:0:U", "RRA:AVERAGE:0.5:1:600", "RRA:AVERAGE:0.5:6:700", "RRA:AVERAGE:0.5:24:775", "RRA:AVERAGE:0.5:288:797", "RRA:MAX:0.5:1:600", "RRA:MAX:0.5:6:700", "RRA:MAX:0.5:24:775", "RRA:MAX:0.5:288:797" ); $ret = rrd_create($fname, $opts, count($opts)); } rrd_update($fname, time().":".$count); } } } ?>