Моля, влезте или се регистрирайте.
Изгубен регистрационен е-мейл?

134,794 Общо мнения в 16,950 Теми от 2,961 Потребители
Последен член: dictio
Джумла! България  |  Компоненти, модули, шаблони  |  Модули  |  Ajax[is] Sp[eye] - модул за следене кой кво « назад напред »
Страници: [1]
Печат
Автор Тема: Ajax[is] Sp[eye] - модул за следене кой кво  (Прочетена 5857 пъти)
majo
DEUS EX MACHINA
Глобален модератор
Мега Гуру
*

Karma: +2185/-0
Offline Offline

Публикации: 1,918


Thunder and sparks in the Heart of the Dark ...

171097034 kalin_sivov
WWW
« : Януари 08, 2007, 15:46:36 »

Ето чалъм да се показва в реално време кой какво прави из сайта. Иде реч за нещо като
http://forum.joomla-bg.com/index.php?action=who само дето не го правя през мамбо/джумла, ами ползвам логовете на апаха. При мен си го подкарах даже с AJAX и през 10 секунди зарежда само последните няколко ентрита - приятно подредени и форматирани. Няма да обяснявам как да се вържи с ajax - имах преди един подобен постинг
http://forum.joomla-bg.com/index.php/topic,5872.0.html
и това е просто разширение на предната функционалност.

Има няколко подробности. Това е само за Linux базирани системи. Освен това, за да сработи, трябва да имате пълния физически път до лог файла на апаха.

Понеже логовете са супер тлъсти, не е възможно да се парсва целия текстов файл, затова ползвам една команда tail от bash, която би трябвало да я има във всяка линукс система. Тя улавя последните няколко реда от указан файл - точно това, което ни трябва. Може да има подобен вариант и за команда за под уин, ама не съм търсил.

Между другото, това си е напълно самостоятелен скрипт, така че, ако сте го настроили правилно, би трябвало да си го заредите бе проблеми директно в браузъра и да видите какво връща. Например http://mysite.com/myscripts/nekvo-ime.php
би трябвало да ви зареди скрипта и без да минавате през джумлата (трябва да си сейвнете долния скрипт във файл със съответното име и на съответното място де).

Скриптът, който трябва да се изпълнява периодично (ако искате; ако не искате можете да си го боднете като модул някъде и да ви се зарежда само веднъж и да показва последните няколко действия еднократно) е следният:


Активен

You're welcome to the metal age!
majo
DEUS EX MACHINA
Глобален модератор
Мега Гуру
*

Karma: +2185/-0
Offline Offline

Публикации: 1,918


Thunder and sparks in the Heart of the Dark ...

171097034 kalin_sivov
WWW
« Отговор #1 : Януари 08, 2007, 15:47:07 »

Код:
<?php 

//Вкарваме в последните 10 записа от лог файла в масив като един ред е един запис за една заявка

$last10entries explode("\n",`tail /пълен/път/до/логфайла/на/апаха/moiasait.access_log`); 

//Създаваме 2 масива за търсене с прости регулярни изрази и за замяна на дълги URLта с кратки и разбираеми
//текстове. Логиката е следната. Ако по-надолу в скрипта системата открие поискано URL от лога на апаха, 
//в което да кажем има com_comprofiler (то може да е секво; дълго, кратко, няма значение; важното е, 
//че щом се съдържа в целия стринг com_comprofiler потребителят е браузвал тоз ресурс), тя ще го замени с
//човешки разбираемто "Разглежда Общност" или "Браузва профилите на хората".
//Същото важи и за останалите двойки - патерн + замяна. Тука можете да си добавяте ваши или да триете 
//или редактирате тия.

$patterns[0] = '/.*extcalendar.*/';
$replacements[0] = 'Разглежда календара';
$patterns[1] = '/.*chat.*/';
$replacements[1] = 'Браузва чата';
$patterns[2] = '/.*content.*/';
$replacements[2] = 'Чете публикация';
$patterns[3] = '/.*com_rwcards.*/';
$replacements[3] = 'Браузва картички';
$patterns[4] = '/.*com_comprofiler.*/';
$replacements[4] = 'Браузва общност';
$patterns[5] = '/.*com_torrentitalia_tracker.*/';
$replacements[5] = 'Разглежда торенти или прави анонс';
$patterns[6] = '/.*com_content.*/';
$replacements[6] = 'Чете публикация';
$patterns[7] = '/.*templates.*/';
$replacements[7] = 'Зарежда темплейт';
$patterns[8] = '/.*cache.*/';
$replacements[8] = 'Чете от кеш или зарежда RSS емисия';
$patterns[9] = '/.*com_rss.*/';
$replacements[9] = 'Зарежда RSS емисия';
$patterns[10] = '/.*images.*/';
$replacements[10] = 'Зарежда картинка';
$patterns[11] = '/.*com_virtuemart.*/';
$replacements[11] = 'Браузва магазина';
$patterns[12] = '/.*viewforum.*/';
$replacements[12] = 'Браузва форума';
$patterns[13] = '/.*includes.*/';
$replacements[13] = 'Зарежда системни файлове от includes';
$patterns[14] = '/.*modules.*/';
$replacements[14] = 'Зарежда модул';
$patterns[15] = '/.*shop.*/';
$replacements[15] = 'Браузва магазина';
$patterns[16] = '/.*shop.*/';
$replacements[16] = 'Разглежда последно качени';
$patterns[17] = '/.*restamp.*/';
$replacements[17] = 'Браузва картичките';
$patterns[18] = '/.*com_remository.*/';
$replacements[18] = 'Браузва файловия център';
$patterns[19] = '/.*com_zoom.*/';
$replacements[19] = 'Браузва галерията';

//Започваме обхождането на $last10entries масива, който сме взели от апаха.

foreach ($last10entries as $row) {

//Създаваме нов масив в който вече 1 ред е разбит на отделни записи 
//(IP, поискан ресурс, статус, браузър и т.н., и т.н.)

$last10separated explode(" ",$row);

//Правим си една конкретна проверка за поискан ресурс. Ако там няма пълно URL (с index.php и т.н.), 
//ами само /, това значи, че е поискана началната страница. Това го правим тука, а не с регулярен израз
//по-горе. Защо? Защото имаме да търсим само една наклонена черта, и ако я търсим с рег. израз,
//ще прецакаме нещата.

if ($last10separated[6] == '/') {
$last10separated[6] = "Зарежда началната страница на сайта";
}

//Следващата проверка е много важна - с нея казваме на пхп да НЕ връща определени записи от определени места.
//Това може да е нашия собствен IP адрес, или домейн, от който се включваме.

if 
($last10separated[0] != "moiadomein.com") && 
($last10separated[0] != "192.168.0.102") && 
($last10separated[0] != "192.168.0.110")


{

//Тука връщаме резултата. Забележете, че можете да си го форматирате, както си искате. В момента връща
//например: 
//34.23.3.2 - Гледа мач
//ама можете да си сложите, каквото си инфо искате. Ако искате да видите с какво инфо разполагате,
//откоментирайте следващите 3 реда за да видите съдържанието на масива $last10separated:
//echo "<pre>";
//print_r($last10separated);
//echo "</pre>";
//Ако ви трябва някаква друга информация, можете да си я заредите със съответния [ключ] - например
//$last10separated[4] или $last10separated[6] и т.н. 

//Тоя малък if с който започва следващия блок е сложен, за да не се връщат записи, 
//които нямат IP адреси.

if ( $last10separated[0] ) {
echo $last10separated[0];
echo " - ";
echo preg_replace($patterns$replacements$last10separated[6]);
echo "<br />";
}

}
}
?>
Активен

You're welcome to the metal age!
majo
DEUS EX MACHINA
Глобален модератор
Мега Гуру
*

Karma: +2185/-0
Offline Offline

Публикации: 1,918


Thunder and sparks in the Heart of the Dark ...

171097034 kalin_sivov
WWW
« Отговор #2 : Януари 08, 2007, 15:50:58 »

Което ми напомня, че имам 1 молба към админите тука:

Може ли да вдигнете малко размера на коментарите в [ code ] ... [ /code ], че почти съвсем никак не могат да се четат? Оранжевкото е екстра, ама големината е малко малка. Всъщност, като се замисля, всичкия код е ситнеж и ако някой иска да го прегледа, трябва да си го пейства някъде другаде, а си е досадно. Поне с 1 px да вдигнете малко сичкото font-size в  [ code ] ... [ /code ], а? Много ли искам? Ангелче
Активен

You're welcome to the metal age!
Страници: [1]
Печат
Джумла! България  |  Компоненти, модули, шаблони  |  Модули  |  Ajax[is] Sp[eye] - модул за следене кой кво « назад напред »
Отиди на: