Neues Admin-Tool: BCStats (Arbeitsname)

Hier landen ältere Beiträge aus dem Forum "Module & Templates" sowie den dazugehörigen Unterforen. Ruhig auch mal reinschauen.
Benutzeravatar
shadowcat
Administrator
Beiträge: 3952
Registriert: Di 5. Feb 2013, 10:36
Kontaktdaten:

Neues Admin-Tool: BCStats (Arbeitsname)

Beitrag von shadowcat » Mi 1. Apr 2015, 15:45

Weil Piwik oversized ist und WBStats mir persönlich nicht reicht, versuche ich mich an einem eigenen Besucherstatistik-Modul. :mrgreen:

Ziel des ganzen ist, sich irgendwo zwischen WBStats und Piwik zu positionieren.

https://github.com/webbird/bcstats_for_BlackCatCMS

Einbindung im Frontend

Die Einbindung erfolgt wahlweise über ein Droplet oder durch Aufnahme eine Codeschnipsels im Template oder Seitenkopf/-fuß. Hierbei kann bestimmt werden, ob im Frontend eine kleine Statistik ausgegeben werden soll oder nicht. (Parameter 'stats') Außerdem gibt es zwei Darstellungsvarianten, nämlich vertikal oder horizontal (siehe Screenshots weiter unten).

Derzeitiger Droplet-Code (kann sich noch ändern):

Code: Alles auswählen

[[cat_counter?stats=1&display=horizontal]]
Codeschnipsel, z.B. in die index.tpl des Frontend-Templates einbauen:

Code: Alles auswählen

<?php
    require CAT_PATH.'/modules/BCStats/inc/Tracker.php';
    CAT_Helper_Page::addCSS(CAT_URL.'/modules/BCStats/css/frontend.css');
    echo BCStats_Tracker::track(true,'horizontal');
?>
Der erste Parameter bestimmt, daß im Frontend eine Statistik ausgegeben werden soll, der zweite, ob horizontal oder vertikal. Ist der erste Parameter false hat der zweite keine Auswirkungen. Mit der Funktion addCSS() wird die frontend.css aus dem BCStats-Verzeichnis geladen, um den Counter zu formatieren; in BlackCat 1.2 sorgt der Core dafür, daß das CSS in den Header geladen wird. Alternativ könnte man die Zeile auch vor den Templateinhalt setzen. Oder in die headers.inc.php des Templates. Oder man macht ein @import() im CSS des Templates. Oder man macht komplett eigenes CSS für den Counter. Viele Möglichkeiten. :mrgreen:

Um einen "stillen" Counter einzubauen, folgenden Code verwenden:

Code: Alles auswählen

<?php
    require CAT_PATH.'/modules/BCStats/inc/Tracker.php';
    BCStats_Tracker::track();
?>
Erfassung von Daten bzw. was nicht erfaßt wird

Da es in vielen Ländern - auch in Deutschland - nicht so ganz legal ist, die IP zu speichern (das ist umstritten, lassen wir es an dieser Stelle bitte einfach dabei), verwendet das Modul eine Session als Reload-Sperre. Der Weg des Besuchers - also welche Seiten er aufgerufen hat - wird ebenfalls nicht verfolgt. Das heißt, nur der erste Zugriff wird registriert, mitsamt der aufgerufenen Seite, und das war's.

Da die IP-Adresse nicht gespeichert wird, wird mit Hilfe von GeoLite2 versucht, Land, Provinz und Stadt zu ermitteln, bevor der Zugriff protokolliert wird. Informationen zum Browser werden erst später aus den Protokolldaten extrahiert, beim Zugriff selbst wird nur der User Agent String ausgelesen und gespeichert. Anmerkung: Derzeit tendiere ich dazu, nur das Land zu ermitteln und zu speichern, siehe unten.

Wichtige Info dazu: Alle diese Informationen können vom Benutzer verfälscht werden, sind also nicht zuverlässig. Das Problem haben aber alle einschlägigen Tools.

Aus dem User Agent lassen sich bei der Auswertung des Protokolls auch Suchmaschinen, Spider etc. identifizieren, auch dies aber wiederum nicht wirklich zuverlässig. Vor allem Spambots oder andere Schädlinge werden sich in der Regel nicht als solche zu erkennen geben. Seriöse Suchmaschinen lassen sich aber gewöhnlich auch als solche erkennen. (Wobei sich natürlich ein Spambot auch wieder als seriöse Suchmaschine tarnen kann...)

Derzeit gibt es zwei Varianten der Frontend-Ausgabe: Vertikal und horizontal. Die Darstellung ist erst mal nur ganz rudimentär, über die Templates und das CSS kann man sich das später ohnehin so anpassen, wie man es mag.
2015-04-01 16_41_36-BlackCat CMS - Willkommen.png
Horizontal
2015-04-01 16_41_36-BlackCat CMS - Willkommen.png (34.47 KiB) 1881 mal betrachtet
2015-04-01 16_48_38-BlackCat CMS - Willkommen.png
Vertikal
2015-04-01 16_48_38-BlackCat CMS - Willkommen.png (26.66 KiB) 1879 mal betrachtet
Admin Tool

Beim Aufruf des Admin-Tools oder wahlweise auch per Cronjob wird das Protokoll ausgewertet und für die Erstellung von Statistiken aufbereitet. Welche Ansichten es genau geben wird, weiß ich noch nicht; für Vorschläge bin ich da offen, soweit die erfaßten Daten das hergeben. Ein paar erste Beispiele weiter unten. Da die Darstellung auf Widgets basieren wird, ist es später möglich, eigene Erweiterungen zu bauen bzw. die Ansichten so zu ändern, wie man es haben möchte.

Bibliotheken

Bisher kommen folgende Bibliotheken zum Einsatz:

GeoLite2 - zum Ermitteln der Herkunft des Besuchers (Land) aus der IP-Adresse
Browscap - zum Auslesen von Informationen aus dem UserAgent
Kartograph (JS) - zur Darstellung der Verteilung der Besucherzahlen auf eine Weltkarte
ChartJS - zur Darstellung von Charts
jQuery UI - Accordion Plugin zur Darstellung der Details (z.B. Browser ist Firefox, Gesamtzahl steht auf dem Panel, per Accordion kann man dann das Panel öffnen und die Verteilung auf die FF-Versionen ansehen)

Für ChartJS plane ich ein eigenes Modul (und einen Helper), da es sicherlich auch außerhalb dieses Statistik-Moduls interessant ist. Die anderen werden vermutlich mit dem Statistikmodul geliefert. Wer sowas dann für eigene Module benutzen will, muß sie halt selbst mitliefern oder CDN benutzen.
My software never has bugs, it just develops random features.
BC1: PHP 5.5.11 (cli), mySQL 5.6.16 with 'strict' enabled, Apache 2.4.9
BC2: PHP 7.2.7, mariaDB 10.2.13, no Apache

Benutzeravatar
shadowcat
Administrator
Beiträge: 3952
Registriert: Di 5. Feb 2013, 10:36
Kontaktdaten:

Erfaßte Daten

Beitrag von shadowcat » Do 2. Apr 2015, 10:55

Hier mal ein paar Details zu den erfaßten Daten und was damit geht bzw. nicht geht.

Browser

Erfaßt werden: Jahr (des Zugriffs), Name, Version, Hersteller, Datum der letzten Sichtung, Anzahl Sichtungen

Was damit z.B. möglich ist
  • Verteilung der Zugriffe nach Browser (mit oder ohne Berücksichtigung der Version)
  • Verteilung der Zugriffe pro Browser und Version (Beispiel: Browser ist Firefox, Version 36 hat einen Anteil von X%, Version 37 von Y% usw.)
Was damit z.B. NICHT möglich ist
  • Entwicklung über das Jahr gesehen (da die Anzahl ja nur für das gesamte Jahr gespeichert wird)
  • Darstellung pro Monat, Tag oder gar Uhrzeit
Device

Erfaßt werden: Jahr (des Zugriffs), Typ (z.B. "Desktop"), Betriebssystem, Mobiles Device ja/nein, Datum der letzten Sichtung, Anzahl Sichtungen

Hier gelten die gleichen Möglichkeiten und Einschränkungen wie bei den Browsern. Der Anteil mobiler Devices an den Gesamtzugriffszahlen ist sicherlich interessant, wenn man vor der Frage steht, ob man seine Seite Responsive gestalten will.

Besucher

Erfaßt werden: Datum und Anzahl (reiner Counter)

Was damit z.B. möglich ist
  • Anzahl Besucher heute, gestern, bestimmter Tag, bestimmter Zeitraum
Was damit z.B. NICHT möglich ist
  • Besucher nach Tageszeit
Braucht das jemand?


Noch komplett offen
  • Erfassung von Stadt, Provinz / Bundesland und Land
  • Erfassung der Browsersprache
Auch diese würden nur pro Jahr gespeichert werden, nicht pro Monat, Tag oder gar Uhrzeit.


Datenmengen

Das ist der Hauptgrund, warum ich die Zahlen maximal pro Jahr speichern würde. Nehmen wir einmal an, es gäbe insgesamt 30 verschiedene Browser (also Firefox, Chrome, Internet Explorer, ...), und für jeden käme pro Quartal ein Update heraus. Das wären dann schon 30 x 4 = 120 Einträge. Klingt erst mal wenig. Das Jahr hat 12 Monate, bei Erfassung pro Monat sind das also schon 120 x 12 = 1440 Einträge. Heruntergebrochen auf Kalenderwochen 120 x 52 = 6240. Auf Kalendertage 120 x 365 = 43800. Will man zusätzlich die Tageszeit erfassen sind das nochmal 120 x 24 = 2880 Einträge. Und wir wissen alle, daß es mehr Browsertypen gibt und bei einigen die Updates sehr viel öfter kommen, bei anderen dagegen seltener...

Das gleiche gilt für die anderen Datentypen, also z.B. die Devices (wie viele Linux-Varianten gibt es wohl?) oder die Länder (Anzahl Länder + Anzahl Provinzen pro Land + Anzahl Städte...).

Ich denke, die geplante Detailtiefe ist ein brauchbarer Kompromiß zwischen Informationsbedürfnis (so sind die Browsersprachen und Herkunftsländer durchaus interessant, wenn man darüber nachdenkt, ob man seine Seite mehrsprachig aufsetzt) und Datenmenge. Ich persönlich sehe z.B. keinen besonderen Vorteil darin, die Tageszeit zu erfassen, es sei denn, man ist für die Planung von Offlinezeiten zuständig. Ich denke, in den Größenordnungen, in denen wir uns hier bewegen, sind diese Informationen überflüssig - wir richten uns in der Regel an überwiegend deutschsprachiges Publikum, das wiederum zumeist im mitteleuropäischen Zeitzonenraum beheimatet sein dürfte. ;)

Added in 7 minutes 37 seconds:
Reduzierung von Datenmengen (auch zugunsten der Performance)

Zunächst mal ist es so, daß der erste Zugriff eines Besuchers innerhalb einer (einstellbaren) Reloadsperre (Default 1 Stunde) protokolliert wird. Schon bei der Protokollierung muß die IP-Adresse ausgewertet werden (Ermittlung von Land, Stadt und Provinz), was definitiv Zeit kostet. Aus diesem Grund würde ich das GeoIP-Dings abschaltbar machen. Zudem würde ich nur das Land (also z.B. "USA", "Großbritannien") erfassen, nicht jedoch Stadt und Provinz.

Spätenstens beim Aufruf des Admin Tools müssen die Logdaten aufbereitet werden. Hat man lange nicht geschaut und viele Besucher, wird das definitiv Probleme machen. (Server Timeouts.) Möchte dann auch noch hübsche Grafiken, verursacht auch das wieder Last. Daher wird es zum einen eine Schnittstelle für das Aufbereiten der Logs per Cronjob (direkt auf dem Server oder von außen) brauchen, zum anderen Mechanismen im Admin Tool selbst, um unschöne Timeouts (weiße Seite etc.) zu vermeiden. Das wird richtig hübsch aufwendig. :shock:
My software never has bugs, it just develops random features.
BC1: PHP 5.5.11 (cli), mySQL 5.6.16 with 'strict' enabled, Apache 2.4.9
BC2: PHP 7.2.7, mariaDB 10.2.13, no Apache

Benutzeravatar
shadowcat
Administrator
Beiträge: 3952
Registriert: Di 5. Feb 2013, 10:36
Kontaktdaten:

Re: Neues Admin-Tool: BCStats (Arbeitsname)

Beitrag von shadowcat » Do 2. Apr 2015, 16:40

So, mal eine erste kleine Statistik. Chart mit Chart.js. Das ist dann sogar nett animiert, sieht man im Screenshot natürlich nicht. :mrgreen: Na das ist doch jetzt schon ganz hübsch. :D
2015-04-02 16_29_58-BlackCat CMS » Administration - ADMINTOOLS.png
Browser gruppiert nach Anzahl, Verwendung von jQuery Accordion
2015-04-02 16_29_58-BlackCat CMS » Administration - ADMINTOOLS.png (17.17 KiB) 1864 mal betrachtet
2015-04-02 16_30_10-BlackCat CMS » Administration - ADMINTOOLS.png
Bei Mouseover wird ein Tooltip angezeigt
2015-04-02 16_30_10-BlackCat CMS » Administration - ADMINTOOLS.png (18.05 KiB) 1864 mal betrachtet
2015-04-02 16_30_21-BlackCat CMS » Administration - ADMINTOOLS.png
Detailansicht bei einem Browser
2015-04-02 16_30_21-BlackCat CMS » Administration - ADMINTOOLS.png (18.75 KiB) 1864 mal betrachtet
Added in 1 hour 8 minutes 28 seconds:
Doch... hat was... :mrgreen:
Dateianhänge
2015-04-02 17_40_00-BlackCat CMS » Administration - ADMINTOOLS.png
2015-04-02 17_40_00-BlackCat CMS » Administration - ADMINTOOLS.png (23.74 KiB) 1862 mal betrachtet
My software never has bugs, it just develops random features.
BC1: PHP 5.5.11 (cli), mySQL 5.6.16 with 'strict' enabled, Apache 2.4.9
BC2: PHP 7.2.7, mariaDB 10.2.13, no Apache

Benutzeravatar
Morpheus
Beiträge: 895
Registriert: Do 8. Aug 2013, 10:49
Kontaktdaten:

Re: Neues Admin-Tool: BCStats (Arbeitsname)

Beitrag von Morpheus » Fr 3. Apr 2015, 17:52

Na Du gibst ja Gas.

Sieht nett aus!
Keiner ist unnütz, er kann immer noch als schlechtes Beispiel dienen!

Benutzeravatar
shadowcat
Administrator
Beiträge: 3952
Registriert: Di 5. Feb 2013, 10:36
Kontaktdaten:

Re: Neues Admin-Tool: BCStats (Arbeitsname)

Beitrag von shadowcat » Di 7. Apr 2015, 10:11

Ist gar nicht mal so schwer, der Hauptaufwand bisher bestand in der Suche nach geeigneten Werkzeugen. Auf PHP-Seite gibt es da nicht so viel, daher hab ich mich für die Erzeugung der Charts letztendlich für ChartJS entschieden. Ich will dafür dann auch noch einen Helper basteln, damit man das dann auch in Modulen möglichst einheitlich und einfach benutzen kann. War ja schon mal angefragt worden, wenn auch nicht wirklich konkret. Außerdem hab ich ein bißchen bei Piwik abgeschaut, die haben ja auch nicht alles selbst gebaut, sondern verwenden externe Projekte, wie z.B. das GeoLite2.
My software never has bugs, it just develops random features.
BC1: PHP 5.5.11 (cli), mySQL 5.6.16 with 'strict' enabled, Apache 2.4.9
BC2: PHP 7.2.7, mariaDB 10.2.13, no Apache

Benutzeravatar
creativecat
Beiträge: 791
Registriert: Mi 6. Feb 2013, 12:41
Kontaktdaten:

Re: Neues Admin-Tool: BCStats (Arbeitsname)

Beitrag von creativecat » Di 7. Apr 2015, 11:17

Muss jetzt auch mal ein Lob loswerden! Danke Bianka! Ich konnte es zwar bisher noch nicht testen (und werde bis Juli auch wenig testen können), aber der erste Eindruck hier im Forum schaut schon gut aus :-)
Also nochmal: DANKE! :-)

Benutzeravatar
shadowcat
Administrator
Beiträge: 3952
Registriert: Di 5. Feb 2013, 10:36
Kontaktdaten:

Re: Neues Admin-Tool: BCStats (Arbeitsname)

Beitrag von shadowcat » Di 7. Apr 2015, 13:23

Bisher gibt's auch noch nichts zu testen. :mrgreen: Das ist alles hochgradig experimentell. Wenn ich mich jetzt endgültig für die Libs entschieden habe, muß ich den ganzen Kram auseinander dröseln (ist derzeit alles im Modul) und Helper schreiben etc. Dann müssen wir intern überlegen, ob wir das ChartJS in den Core aufnehmen wollen oder als optionales Modul liefern. Momentan experimentiere ich noch mit einer Farben-JS-Klasse, die mir passend abgestufte Farben liefern soll, und mit dem Kartographie-JS, das auch in Piwik enthalten ist, um die Zugriffe auf die Länder aufzudröseln. Das ist etwas schlecht dokumentiert und ich muß mich erst noch mit SVGs auseinander setzen. :shock:

Added in 55 seconds:
Achja, und da das Widgets sind, muß ich dann noch den Widget-Helper so ausbauen, daß man den von Modulen aus verwenden kann. Ist bisher nicht vorgesehen.

Added in 40 minutes 15 seconds:
Die Browser jetzt auch mit Icon. :mrgreen: Klappt aber noch nicht mit allen, weil ich erst die Namen mit Offsets versehen muß. (Ist ein Sprite.)

Die Weltkarte ist noch nicht so richtig auf ihrem Panel, und die Markierung für Deutschland ist noch gefaket (weiter war ich noch nicht).
Dateianhänge
2015-04-07 14_21_37-BlackCat CMS » Administration - ADMINTOOLS.png
2015-04-07 14_21_37-BlackCat CMS » Administration - ADMINTOOLS.png (79.88 KiB) 1837 mal betrachtet
My software never has bugs, it just develops random features.
BC1: PHP 5.5.11 (cli), mySQL 5.6.16 with 'strict' enabled, Apache 2.4.9
BC2: PHP 7.2.7, mariaDB 10.2.13, no Apache

Benutzeravatar
shadowcat
Administrator
Beiträge: 3952
Registriert: Di 5. Feb 2013, 10:36
Kontaktdaten:

Re: Neues Admin-Tool: BCStats (Arbeitsname)

Beitrag von shadowcat » Di 7. Apr 2015, 17:07

Dateianhänge
2015-04-07 18_01_48-BlackCat CMS » Administration - ADMINTOOLS.png
2015-04-07 18_01_48-BlackCat CMS » Administration - ADMINTOOLS.png (42.18 KiB) 1824 mal betrachtet
My software never has bugs, it just develops random features.
BC1: PHP 5.5.11 (cli), mySQL 5.6.16 with 'strict' enabled, Apache 2.4.9
BC2: PHP 7.2.7, mariaDB 10.2.13, no Apache

Benutzeravatar
Morpheus
Beiträge: 895
Registriert: Do 8. Aug 2013, 10:49
Kontaktdaten:

Re: Neues Admin-Tool: BCStats (Arbeitsname)

Beitrag von Morpheus » Mi 8. Apr 2015, 10:01

Na dann kann ich ja mein Piwik demnächst an den Nagel hängen ;)
Keiner ist unnütz, er kann immer noch als schlechtes Beispiel dienen!

Benutzeravatar
shadowcat
Administrator
Beiträge: 3952
Registriert: Di 5. Feb 2013, 10:36
Kontaktdaten:

Re: Neues Admin-Tool: BCStats (Arbeitsname)

Beitrag von shadowcat » Mi 8. Apr 2015, 11:53

Wenn Du mit den Einschränkungen leben kannst... ;)
My software never has bugs, it just develops random features.
BC1: PHP 5.5.11 (cli), mySQL 5.6.16 with 'strict' enabled, Apache 2.4.9
BC2: PHP 7.2.7, mariaDB 10.2.13, no Apache

Antworten