Artur Lasota

Artur Lasota Programista php

Temat: Monitoring użytkowników

Chciałbym wdrożyć do części administracyjnej system monitoringu użytkowników.
Wyjaśnię na prostym przykładzie.
Użytkownik dodaje artykuł. Innym razem zmienia treść artykułu. Innym razem zmienia status artykułu. Zależy mi na zapisaniu ile razy użytkownik wykonywał daną czynność i jak długo zajęła mu dana czynność.

W systemie został zastosowany wzorzec mvc. Czyli należy wprowadzić monitoring w kontrolerach (niestety zastosowano tutaj zwykły plik podczepiony pod index - require controller.php) jak i w modelach. Wydaje się że można wprowadzić tutaj wzorzec singleton i w odpowiednich miejscach wykorzystywać jego instancję. Szukałem pomysłu w innych wzorcach jednak nie znalazłem sensownego rozwiązania.

Czy znacie może jakieś silniki które wprowadziły taką funkcjonalność??

Temat: Monitoring użytkowników

Wydaje mi się, że od takich rzeczy są logi w bazie danych.

konto usunięte

Temat: Monitoring użytkowników

Artur Lasota:
Czy znacie może jakieś silniki które wprowadziły taką funkcjonalność??

jak się skupisz w sobie to kilkoma trigerami to zrobisz na poziomie bazy danych bez konieczności modyfikowania aplikacji
Artur Lasota

Artur Lasota Programista php

Temat: Monitoring użytkowników

No tak tylko że za pomocą logów w bazie danych nie sprawdzisz np. jak długo użytkownik wykonywał daną czynność.

Temat: Monitoring użytkowników

Zakładam, że tablicę z logami przygotowujesz sam i zapisujesz do niej co Ci się podoba.
Jeśli masz jakąś informację w online to nie widzę problemu, żeby ją zapisać do bazy.
Artur Lasota

Artur Lasota Programista php

Temat: Monitoring użytkowników

Tylko tak naprawdę problem tutaj nie jest leży w tym gdzie zapisać logi (pliki, baza danych) tylko w jaki sensowny uniwersalny sposób to zrobić. Przykładem może być singleton. Czy może coś jeszcze innego. A może są jakieś gotowe ciekawe rozwiązania które już ten problem rozwiązały.

Zależy mi na tym aby było to w sensowny sposób zrobione.
Jacek R.

Jacek R. programista

Temat: Monitoring użytkowników

Zależy to od struktury Twojej aplikacji, ale sama idea nie jest skomplikowana. Stwórz sobie klasę, która trzyma dane w sesji. Dodaj tam funkcje:
- monitoruj(kto, co, kiedy), w której zapiszesz do sesji dane, np "Franek", "Edycja artykułu", "12:21 5.07.2012"
- zakonczMonitorowanie(co), w której sprawdzisz, czy dla danej akcji w bieżącej sesji rozpoczęto monitorowanie i jeśli tak, to policz różnice czasu i zapisz info do bazy

Nieważne, czy używasz klasy jako singletonu, czy statycznie, czy za każdym razem tworzysz nową instancję. Po prostu w miejscach, gdzie chcesz zacząć monitorować, musisz wpiąć monitoruj() i w odpowiednich innych miejscach zakonczMonitorowanie() z takimi samymi identyfikatorami "co".

Do tego warto dodać mechanizm czyszczenia niezakończonych akcji oraz radzenia sobie z duplikatami (np user odświeżył stronę edycji), ale to już wedle uznania. Jeżeli używasz jakiegoś sensownego frameworka, to nawet nie musisz tego ręcznie robić w każdej akcji - można na przykład wykorzystać w kontrolerach funkcje typu init(), które sprawdzają, jaka akcja jest wykonywana i odpowiednio będą rozpoczynać monitoring za Ciebie. Tak samo z kończeniem - w jakimś postDispatch() sprawdź, czy wykonywano edycję/zapis i zakończ monitorowanie. Całość rozbiegnie się tylko o to, by dobrze obsłużyć parametr "co", ale jeśli akcje nazywają się sensownie (np edytujArtykul i zapiszArtykul), to łatwo można to robić automatycznie.

Można też użyć tutaj wzorca obserwatora, który będą implementować Twoje kontrolery albo ewentualnie obiekty modelu. Opcji jest wiele, nie ma najlepszej, to nie jest nic specjalnie skomplikowanego.
Hubert Wesołowski

Hubert Wesołowski Człowiek od krycia
dachów podczas
deszczu (mokrej
roboty).

Temat: Monitoring użytkowników

Dawid Pierzchalski:
Wydaje mi się, że od takich rzeczy są logi w bazie danych.
tylko jesli aplikacja korzysta z wielu userow do bazy danych i proces zarzadzania uzytkownikami jest przeniesiony na warstwe bazodanowa. w praktyce 99.9% aplikacji korzysta z 1 uzytkownika bazodanowego (czasem 2). wtedy wszystkie akcje w logach DB widoczne beda jako wykonane przez tego jednego uzytkownika.
Przemysław R.:

jak się skupisz w sobie to kilkoma trigerami to zrobisz na poziomie bazy danych bez konieczności modyfikowania aplikacji
pomimo ze funkcjonalnosc jest silnie wydzielona, nie jestem pewien czy to dobry pomysl trzymac logike w 2 roznych miejscach.
poza tym triggery sa dosc problematyczne do zarzadzania kodem.

jesli masz dobrze oddzielone modele, moze warto przemyslec wpiecie sie gdzies pomiedzy modelem a warstwa posredniczaca w dostepie do danych i z automatu logowac wszystkie zmiany danych poza zdefiniowanymi wyjatkami, ew. tylko te zdefiniowane.
z wzorcow przyjrzalbym sie obserwatorowi i fabryce abstrakcyjnej - w koncu nie zawsze i nie w kazdej aplikacji bedziesz logowac w ten sam sposob (chocby w to samo miejsce, te same czynnosci). wydaje sie sensowne zeby logger mial w sobie wiedze jakie zdarzenia i gdzie ma logowac.

Następna dyskusja:

Monitoring pozycji




Wyślij zaproszenie do