Статистика от кога да кога е бил онлайн потребителя

heytar

Registered
Здравейте,
трябва да направя статистика за това дадени потребители колко време са онлайн в сайта (администратори и модератори).
Като това ще се пази и и няма да се трие ден за ден.
Дали заради късния час или тилкоз ми е акъла не знам, но някак не мога да си го представя как да го покажа нагледно и дори как да записвам статистиката.

Засега ми се върти в главата нещо подобно:
https://docs.servicenow.com/bundle/geneva-performance-analytics-and-reporting/page/use/basic_reporting/image/BarChart.png
където Х ще са дните (месец/седмица/6 месеца...) а Y 24 часов диапазон.
И да оцветявам Y часовете на активност. Това ми се вижда ок за един потребител, но как ще стане да ги покажа всички заедно за да се види в кои часове няма активност?

Също така и самото записване в базата на тия часове на активност не се сщам как да стане.


Засега съм измислил това -ако засечем потребител че е онлине записвам нов запис:
[sql]Insert (user_id, time_on, is_activ) .. (1, 68798676, 1)[/sql]
и на всеки ХХ минути проверявам кои са онлине и евентуално вече тоя потребител с флаг is_activ = 1 не е онлайн, ъпдейтвам записа с времето сега ( time_off = time()/datetime ) и сменям на is_activ = 0
за следващо идване онлайн правим нов запис и тн.

Всякакви идеи и съвети ще са добре дошли.
 
Хубава идея си замислил но това няма ли да е тежък метод които ще товари сървъра.

Защо просто не ползваш сесията колко време е логнат :)

Код:
$_SESSION['loggedtime'] = new DateLoginTime(date('y-m-d h:m:s'));

$difftime= $_SESSION['loggedtime']->diff(new DateLoginTime(date('y-m-d h:m:s')));



Виж тук: http://php.net/manual/en/datetime.diff.php


Ето друг метод:

Код:
$_SESSION ['loggedtimer'] = time();
$timerLongLogged =( time () - $_SESSION ['loggedtimer']) /60;

Ако съм те разбрах правилно искаш аналитикс за логнати потребители.
 
Ок. Дай да оставим визуализацията за момента на страна и първо да се справим с проблема с това кой е онлайн.

Предлагам следното като решение

При създаване на сесията записваш timestamp в базата данни и в сесията
при рефреш или ако смяна на view-то първото което правиш е да
сравниш текущият timestamp с този в сесията и ако разликата е по-малка от 15 мин. (примерно) и повече от 5 мин. то ъпдейтваш записа в базата

ако е повече от 15мин създаваш нов

нека да видим как би трябвало да ни изглежда табличката

[sql]CREATE TABLE `online` (
`id` int(11) NOT NULL,
`name` varchar(64) NOT NULL,
`start_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`end_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8;[/sql]

така вече имаме някаква примерна таблица
нека да видим стъпка по стъпка какво трябва да става

1. Потребителя се логва
- Към сесията записваме timestamp
- Нов запис към базата данни

2. Потребителя цъка по сайта
- Проверяваме дали са минали повече от 5мин. от последният timestamp в сесията
ако не са минали не правим нищо

3. Потребителя продължава да си цъка по сайта но вече са минали 5 мин от timestamp-а в сесията
- записваме новият timestamp в сесията
- Ъпдейтваме "end_time" с новият timestamp

4. Потребителя пак се цъка някъде и виждаме че от timestamp-а в сесията са минали повече от 15 мин
- Връщаме се на първа точка и я изпълняваме

така в крайна сметка за всеки потребител ще правиш по 1 query в базата на всеки 5 мин за да не се натоварва излишно
и като резултат ще имаш база в която ще се вижда кой, кога и калко време е бил online (+- 5мин)
 
Опа, сесии няма как да позлваме.
Не става дума за типичен сайт.
Имаме скрипт който ни връща ид-та на потребителите онлайн всяка минута и според ид-то трябва да се действа.
 
heytar каза:
Опа, сесии няма как да позлваме.
Не става дума за типичен сайт.
Имаме скрипт който ни връща ид-та на потребителите онлайн всяка минута и според ид-то трябва да се действа.

логиката е същата
махаш сесията и питаш дб-то
има ли запис на този acc_id с време под 5/15 мин и деистваш

разбирасе базата ще се товари повечко
 
n641951363 каза:
heytar каза:
Опа, сесии няма как да позлваме.
Не става дума за типичен сайт.
Имаме скрипт който ни връща ид-та на потребителите онлайн всяка минута и според ид-то трябва да се действа.

логиката е същата
махаш сесията и питаш дб-то
има ли запис на този acc_id с време под 5/15 мин и деистваш

разбирасе базата ще се товари повечко
Записването е готово, остава визуализирането сега.
 
novakabg каза:
https://canvasjs.com/php-charts/
Може ли пример как ще стане това:
https://i.imgur.com/cKvDj9J.png
Y го разпъваме на 100% или инак казано 24 часа и да можем да оцветим само част от него в черно както е на снимката?
 
Какво ? Ти разбираш ли от графики или го правиш да изглежда хубаво :)
Това черното не разбрах за какво е ?
 
novakabg каза:
Какво ? Ти разбираш ли от графики или го правиш да изглежда хубаво :)
Това черното не разбрах за какво е ?
А ти четеш ли какво се търси!?
 
Разбрах просто логикатати няма смисъл грам :), правя такива charts от 3/4 години, работех за chair8media и там ми се налагаше да изгатвям статистики.
Попитах те какво искаш да ни обясниш със това,
Код:
Y го разпъваме на 100% или инак казано 24 часа
кое е това Y и как така го разпъваш за 24 часа!

Виж линка тук:
https://www.google.bg/search?biw=1920&bih=974&tbm=isch&sa=1&ei=CEXzWZLhGs3LwQLm2p2IAg&q=Reporting+on+Active+Directory+User+Logon+Activity&oq=Reporting+on+Active+Directory+User+Logon+Activity&gs_l=psy-ab.3...18800.18800.0.18941.1.1.0.0.0.0.94.94.1.1.0....0...1.1.64.psy-ab..0.0.0....0.eYAXuA5kM4w
 
novakabg каза:
Разбрах просто логикатати няма смисъл грам :), правя такива charts от 3/4 години, работех за chair8media и там ми се налагаше да изгатвям статистики.
Попитах те какво искаш да ни обясниш със това,
Код:
Y го разпъваме на 100% или инак казано 24 часа
кое е това Y и как така го разпъваш за 24 часа!

Виж линка тук:
https://www.google.bg/search?biw=1920&bih=974&tbm=isch&sa=1&ei=CEXzWZLhGs3LwQLm2p2IAg&q=Reporting+on+Active+Directory+User+Logon+Activity&oq=Reporting+on+Active+Directory+User+Logon+Activity&gs_l=psy-ab.3...18800.18800.0.18941.1.1.0.0.0.0.94.94.1.1.0....0...1.1.64.psy-ab..0.0.0....0.eYAXuA5kM4w
Искам да изведа каква част от деня е нямало активност. Отказах се да записвам всеки отделен потребител и статистиката е обща:
kA7D8BG.png

Съответно искам да мога да изведа за последния месец една проста графика за всеки ден да показва от колко до часа е имало активност
eJjKnzp.png

В червено е нямало активност, зелено съответно е имало.
Аз затова се сещам, ако има по-добър начин казвайте.
 
Revelation каза:
Ами разгледай чартовете. Има Stacked Column Charts (или нещо подобно) и го нагласи.
Ехе точно това търсех:
https://codepen.io/travishorn/pen/kkVKJG
Мерси!
 

Горе