Deutschland United States United Kingdom
ContentLion - Open Source CMS

QA UserCounter

QA UserCounter

"Zählt die Besucher und die Anzahl der aufgerufenen Seiten. (100% Fertig)
Ist ein reines Daten- und Erfassungsplugin."

Repro: http://code.contentlion.de/Plugin+UserCounter/

Mein Feedback:
- Keine Text-Dateien in Plugins. Dafür gibt es die Beschreibung in der Gallerie
- die package.xml soll aktuell noch nicht von euch geändert werden
- Du hast gar keine Indizies in den Tabellen angelegt. Wenn eine Seite viele besuche hat wird die Analyse langsam
- Auch hier bitte ON DUPLICATE KEY anwenden, denn das SELECT wird durch neue Einträge immer langsamer werden und somit die ganze seite langsamer. Kannst du dir sparen durch ON DUPLICATE KEY
- PHPDocs Fehlen
- Analyse an Hand der IP ist nicht so toll. In Firmen-Netzwerken oder Schulen gibt es oft die gleiche IP, dann wird immer nur ein Visit gezählt. Genausogut kannst du am nächsten Tag eine neue IP bekommen und wirst mehrfach gezählt. Nimm als ID am besten die, die das Tracker-Plugin zurück liefert, die ist extra fürs Tracking gedacht.

Naja, Schulen sind ne Ausnahme...
Ich würde das ganze nur ungern als Session speichern wollen... :S
Außerdem muss ich das vor nem halbem Jahr geschriebene Plugin dann nochmal komplett ummuddeln...

Ist keine Session, die dauert nur 30 Minuten. Wird über nen Cookie gemacht. Evtl. kann ich das später noch um EverCookies erweitern, dann bekommt man das so schnell auch nicht raus.
auch Firmen-Netzwerke haben in der Regel die selbe IP. Das heißt, Tracking im B2B-Bereich wird schwieriger. Ist auch gar nicht so schwer, anstatt des auslesens der IP musst nur eine andere Zeile rein machen.

Ich würde ein Analythics Plugin machen ;) Dauert halt noch 2-3Tage bis ich anfange :D

Naja, das gibt es schon.^^
Aber mein Plugin soll ja lediglich die User und die aufgerufenen Seiten zählen, damit andere Plugins die auswerten können. Analytics ist so ne Sache, da bekommt Google wieder alle Daten gefüttert... :S

EDIT:
Mir ist noch was eingefallen.^^
Damit könnte man sogar nen Mini-Plugin schreiben, das DDOS-Angriffe verhindert / ablenkt. :rolleyes: ^^

So, habe soeben die Änderungen eingecheckt. ;)
Kannst nochmal testen. :P

Übrigens:
Dein Tracker-Plugin hat nen Bug, bei mir kommt jedes Mal ne andere ID raus. ^^

So spontan noch ein paar kleinigkeiten.
- An einer Stelle hast "@return MySqli[] pages " angegeben, gibts ja keine MySQLi-Objekte zurück (das sind die Datenbanken selbst) sondern stdClasses. kannst einfcah "@return array" drauß machen.
- Die Tracker-ID am besten auch escapen (sicher ist sicher, dürfte im Normalfall aber egal sein)
- Wenn der Template-Ordner leer ist, kannst ihn auch löschen
- Konstanten bitte mit Namespaces (events/load.php)

Werd mir das Tracker-Plugin beim Testen dann nochmal anschauen.

Mir ist noch was aufgefallen: :P
- Bei den PHPDoc-Kommentaren hat das "$"-Zeichen gefehlt^^
- habe die package.xml gelöscht.

So, du darfst (ach, wie großzügig ich wieder bin ^^ ) nochmal testen. :P

Der Tracker liefert bei mir die gleichen IDs zurück.

Aber: Du hast den Primary Key in der Tabelle falsch gesetzt, bekomme jedes Mal nen neuen Eintrag. Wenn du nach Datum gruppierst, solltest du bei date auch DATE als Spaltentyp nehmen, dann dürfte das Problem nicht mehr auftauchen.

Unschöne Namen, mit Verbesserungsvorgschläge:
- cl_plugin_user_counter => cl_plugin_usercounter (namespaces)
- cl_plugin_user_counter_pages => cl_plugin_usercounter_pages (namespaces)
- show_pages => shown_pages oder noch besser impressions
- first_date => timestamp_first_visit
- reload => requests

Dann hast du mein Feedback von oben noch gar nicht komplett umgesetzt.
Hier nochmal Stichpunkte, Details stehen ja oben

- Indizies
- ON DUPLICATE KEY

Nee, lag net am Timestamp, sondern daran, dass in der einen Zeile noch mit der IP gearbeitet wurde. :D

@Date:
Dadurch ich später auch die Besucher der letzten Stunde etc. auswerten möchte, kann ich da kein Date nehmen. ;)
Funktioniert aber jetzt trotzdem alles! :D

Indiezes sind doch vorhanden? ?(

@ON DUPLICATE KEY:
Geht ja nicht, da ich nen Timestamp nehme. :P

Den Rest hab ich behoben. ;)

Ne, Indizies sind noch nicht drin (nur Primary Keys). Mach mal noch nen Index auf date und einen auf first_date. Und bei der pages einen auf Page/Date

@ON DUPLICATE KEY: Wieso nicht? du musst beim ON DUPLICATE KEY nicht alle Spalten befüllen.

Zum Date: Möchtest du denn für jede Sekunde einen Eintrag haben?

Ne, Indizies sind noch nicht drin (nur Primary Keys). Mach mal noch nen Index auf date und einen auf first_date. Und bei der pages einen auf Page/Date

@ON DUPLICATE KEY: Wieso nicht? du musst beim ON DUPLICATE KEY nicht alle Spalten befüllen.

Zum Date: Möchtest du denn für jede Sekunde einen Eintrag haben?


Ach so, ok.^^

@Duplicate Key:
Naja, weil der Wert kommt ja dann nie "doppelt" vor, oder?

@Date:
Nein, aber für jede Minute. ;)

Wenn er nicht doppelt vorkommen kann, wieso machst du dann einmal ein INSERT und einmal ein Update?

Will mir halt da das Select sparen, weil die Tabelle bei gutem Traffic richtig groß wird und die ganze Seite ausbremsen wird. Ist eigentlich ein klarer Fall für ON DUPLICATE KEY die Stelle. Da kannst den Wert auch um einen erhöhen.

Und wenn du auf Minuten gehst, passen die Selects auch noch nicht ;-)

Wieso denn? :D
Bei Update wird immer `date` = NOW() ausgeführt. ^^

@ON DUPLICATE KEY:
Naja, ich schau halt, ob das Datum stimmt und Update oder trage die Daten neu ein.
Wie würdest du denn den Query mit ON DUPLICATE KEY machen? :)
(Bsp. pls, hab keine Idee^^)

INSERT INTO {'dbprefix'}plugin_usercounter
SET tracker_id = '".$tracker_id."',
`date` = NOW(),
impressions = 1,
timestamp_first_visit = NOW()
ON DUPLICATE KEY UPDATE UPDATE `date` = NOW(),
impressions = impressions + 1.

Das mit dem date verstehe ich noch nicht so recht. Kannst du mal erklären, was du genau damit bezwecken willst? Am besten mit Beispielen, damit es auch ein Dummie wie ich versteht ;-)

Naja, ich will anhand des Timestamps z.B. die Seiten ausgeben, die in der letzten Stunde besucht wurden. ^^

PHP-Quelltext

1
$pages DataBase::Current()->ReadRows("SELECT bla bla FROM `contentlion_plugin:_pages` WHERE DATE(`date`) = DATE(NOW) AND `date` < INTERVAL(NOW(), 1 Hour) ORDER BY `impressions`");


Außerdem kann man damit ermitteln, wie viele Seiten ein Besucher der letzten Stunde durchschnittlich angeschaut hat.^^ (Ist mir gerade so aufgefallen :D )

Aber dafür ist ja der timestamp_first_visit, machst ja immer wieder neue Einträge scheinbar.

Naja, jeden Tag soll ja nen neuer Eintrag erscheinen... :S

Habs doch mal in nen "date" umgewandelt, das mit dem Timestamp hatte wirklich keinen Sinn... ^^

Ähnliche Themen