Скрипт статистики

sjGray

Новичок
Скрипт статистики

Подскажите мне какой то скрипт для статистики на сайте и где его искать! Мне нужно, что бы там была статистика за весь период и за заданным диапазоном!
 

Alexandre

PHPПенсионер
avstats самая точная статистика - это статистика сервера
 

WP

^_^
cnstats просто хрень, я сам искал что-то продвинутое, а потом свое решил написать, т.к. у всего есть недочеты.
 

Лысый

Новичок
Автор оригинала: WP
cnstats просто хрень, я сам искал что-то продвинутое, а потом свое решил написать, т.к. у всего есть недочеты.
какова основная идея алоритма самописной статистики? в чём преимущества?
 

whirlwind

TDD infected, paranoid
>какова основная идея алоритма самописной статистики

PHP:
$stdin = fopen("php://stdin","r");
while ( !feof($stdin) ){
	$line = fgets($stdin);
	if ( !$line ) continue;
	try {
		$visit = MetaData::createObject("Reference.VisitLog");
		$visit->createViaLogEntry($line,$config);

	}catch(Exception $e){
//		trigger_error($e->__toString());
	}
}
>в чём преимущества?

Рилтайм воздействие на модель
PHP:
	function createViaLogEntry($line,Array $config=null){
		if ( $config !== null ) $this->setConfig($config);
		try {
			$parser = new RecordParser($line);
			$converter = new ApacheLogEntry2HashConverter();
			$hash = $converter->getHash($parser->entries);
			if ( !$this->isNew() ) $this->make();
			if ($this->isRefererIgnore($hash["referer"]["source"])) return true;
			if ($this->isRequestIgnore($hash["request"]["source"])) return true;
			$this->setSafe("advert",$this->getAdvertId($hash["request"]));
			$this->set("timepos",$hash["time"]);
			if ( isset($hash["referer"]) && isset($hash["referer"]["host"]) ){
				$this->set("domain",$hash["referer"]["host"]);
				$this->set("referer",$hash["referer"]["source"]);
			}
			$this->set("request",$hash["request"]["source"]);
			$this->set("useragent",$hash["user_agent"]);
			$this->set("ip",$hash["ip"]);
			$this->set("uniqhash",md5($hash["ip"].$hash["user_agent"],true));
			$this->save();
		}catch(Exception $e){
			trigger_error($e->__toString());
			return false;
		}
		return true;
	}
 

whirlwind

TDD infected, paranoid
Полный код чего, запихивания в модель? Так от модели зависит. Главное вот

PHP:
$stdin = fopen("php://stdin","r"); 
while ( !feof($stdin) ){ 
    $line = fgets($stdin); 
    if ( !$line ) continue; 
    // здесь парсим лог-запись
}
 

Лысый

Новичок
т.е. я верно поянл, что сервер пишет логи не в файло а в какой нить pipe, а вот этот код отуда его налету читает? верно?

а какими командами или настройками сервера связать вывод логов сервера и stdin этого скрипта?
 

Лысый

Новичок
ок
спасибо
разбирусь

и ещё вопрос чисто на опыт работы под большими нагрузками

что с результами разбора лога делать

1) писать в БД, чтоб потом периодически обрабатывать и очищать БД
2) логировать в файло, а потом его анализировать
3) раз уж это демон stdin слушает, то в его памяти и копить данные, а периодически записывать куда либо итог?
 

whirlwind

TDD infected, paranoid
Даже при небольшой посещаемости если записывать распарсенные поля в базу, в целях получения срезов в реальном времени, база пухнет на глазах и все начинает тормозить. Я бы посоветовал хранить детальный лог за последние к примеру 30 дней, а все что старше - регулярно получать аналитические срезы сгруппированные например по суткам и складывать в архивные таблички.
 

Лысый

Новичок
ок
понял
я впринципе и не надеялся что база долго выдержит, но раз уж сама статистика реального времени, то и сами данные хотелось бы в релаьном времени пользовать, иначе какой смысл? значит за сутки попробую в БД хранить
а потом сливать в архив сухой остаток

спасибо огромное за идею реального времени
 
Сверху