AWStats für Contenido

Gesperrt
zapalotta
Beiträge: 24
Registriert: Do 7. Okt 2004, 09:31
Kontaktdaten:

AWStats für Contenido

Beitrag von zapalotta »

Hallo Forum,

für die, die das interessiert, hier eine kurze Erklärung, wie man AWStats sinnvoll mit Contenido einsetzen kann.

Die Anleitung bezieht sich auf Debian Sarge, müsste aber entsprechend auf jedem anderen Betriebsystem umsetzbar sein.

Voraussetzungen:
- Contenido
- Perl als CGI
- PHP auf der Kommandozeile mit CURL-Unterstützung für URL-Alias
- Kommandozeilenzugriff

Die beiden letzen Punkte sind nicht zwingend notwendig...

AWStats installieren
AWStats von http://awstats.sourceforge.net/ herunterladen und gemäss Anleitung installieren.
Unter Debian reicht auch

Code: Alles auswählen

apt-get install awstats
.

Sinnvolle Einstellungen in der /etc/awstats.conf:

Code: Alles auswählen

LogFormat=1
...
SiteDomain="www.example.com"
...
DNSLookup=1
...
# Ich habe hiermit interne Seiteanaufrufe (über das Gateway zur DMZ)
# ausgeblendet
SkipHosts="172.16.10.1"   
...
# Nur Seiten meines Contenido Frontends (/cms) erfassen
OnlyFiles="REGEX[\/cms\/.(.*)$]"
...
# Wichtig ist, dass wir nicht nur /cms/front_content.php, sondern
# /cms/front_content.php?idcatart=123 erfassen, um die einzelnen Seiten
# unterscheiden zu können
URLWithQuery=1
...
# Slbiges für den Referrer
URLReferrerWithQuery=1
...
LoadPlugin="urlalias"
Alle weiteren Einstellungen sind kosmetischer Natur oder in der Voreinstellung sinnvoll, siehe auch awstats.conf.

Nun müsste ein Aufruf von

Code: Alles auswählen

/usr/lib/cgi-bin/awstats.pl -update -config=awstats.conf
Schonmal die ersten Statistiken aufbauen.
Ein Aufruf von http://www.example.com/cgi-bin/awstats.pl müsste die auch schon anzeigen. (Der Hostname kann natürlich ein anderer als der vom Frontend sein, siehe apache config).

Nun kann man awstats sinnvollerweise als cronjob laufen lassen, so dass z.B. einmal täglich die Statistik aktualisiert wird.
Hierfür legt man in /etc/cron.d eine Datei namens awstats mit dem folgenden Inhalt an:

Code: Alles auswählen

0 0 * * * root  /usr/lib/cgi-bin/awstats.pl -update -config=awstats.conf > /dev/null
Hiermit wird jeden Tag um 0:00 Uhr die Statistik aktualisiert.

Code: Alles auswählen

man 5 crontab 
zeigt, wie man andere Zeiten einstellt.

Seitentitel in awstats anzeigen
Um nun in awstats nicht nur front_content.php?idcatart=123, sondern den vollen Titel zu sehen, hilft das Folgende:

Der Parameter

Code: Alles auswählen

LoadPlugin="urlalias"
in der awstats.conf ermöglicht es awstats, eine Datei Namens urlalias.txt, die im selben Verzeichnis wie die Statistiken liegt (unter Debian standartmässig in /var/lib/awstats) zu verwenden, die die URL und - mit einem Tab getrennt - den Titel enthält, dafür zu verwenden.

Es gibt zwar in der Distribution von AWStats eine urlaliasbuilder.pl, die hat bei mir aber aus irgend einem Grund nicht funktioniert.
Daher habe ich etwas sehr einfaches in PHP gebaut:

Code: Alles auswählen

<?php

/******
 * urlalias.php
 *
 * Creation of an urlalias-file for awstats from an awstats logfile.
 * Schema: <webpath><tab><title>
 * Mostly usable for a contenido site.
 * The file content is written to stdout
 *
 * (c) Dirk Doerflinger, H2O GmbH proces water engineering
 *  <dirk.doerflinger@h2o-gmbh.com>
 *
 * Author:     Dirk Doerflinger
 * License:    http://www.opensource.org/licenses/bsd-license.php
 * Version:    1.0
 */

// ** EDIT THIS ***
// Where is the site running?
$site = "http://www.example.com";
// Where is the awstats file?
$input_file = "/var/lib/awstats/awstats032005.txt";
// How do we recognize our site, and our site only?
$recognizer = "/cms";
// *** END EDIT ***

$file = file( $input_file );
$started = FALSE;
$ended = FALSE;

$urllist = array();
foreach ( $file as $line ) {
  // catch the begining of the URIs
  if ( substr( $line, 0, 11 ) == "BEGIN_SIDER" )
    $started = TRUE;
  // catch the end of the URIs
  if ( substr( $line, 0, 9 ) == "END_SIDER" )
    $ended = TRUE;
  if( $started && !$ended) {
    // only our site...
    if ( substr( $line, 0, strlen( $recognizer ) ) == $recognizer ) {
      $arr = explode( ' ', $line );
      $urllist[] = $site.$arr[0];
    }
  }
}

foreach( $urllist as $url ) {
  $curl_handler = curl_init( $url );
  curl_setopt ($curl_handler, CURLOPT_HEADER, 0);
  curl_setopt ($curl_handler, CURLOPT_RETURNTRANSFER, 1);
  $html = curl_exec ($curl_handler);
  curl_close ($curl_handler);
  // get everything right of the <title> tag
  $con_a = split( "<title>", $html );
  // get everything left of the </title> tag aka our title
  $con_arr = split( "</title>", $con_a[1] );
  echo substr( $url, strlen( $site ) )."\t".trim( htmlentities( $con_arr[0] ) ) ."\n";
}
?>
Dieses Script wird mit den drei Parametern unter /*** EDIT THIS *** configuriert.
Es liest aus einer Statistikdatei die URLs, die AWStats gefunden hat, aus, holt sich von der jeweiligen Seite den Seitentitel und gibt Zeile für Zeile etwas wie

Code: Alles auswählen

/cms/front_content?idcatart=123   Seitentitel
aus, wobei zwischen 123 und Seitentitel ein Tabstop ist.
Sie wird aufgerufen mit

Code: Alles auswählen

/usr/bin/php urlalias.php > /var/lib/awstats/urlalias.txt
Ohne Kommandozeile kann man die urlalias.php natürlich auch im Browser aufrufen und entweder so verändern, das sie die Datei direkt speichert, oder die im Browser ausegegbene Seite einfach manuell passend ablegt.

Ich hoffe, ich habe nix vergessen, falls doch (oder auch sonst) wäre ich natürlich froh über Verbesserungsvorschläge...

Wie immer: ohne Garantie.

Viel Glück.
DD
emergence
Beiträge: 10653
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence »

ich definier das mal als erweiterung...
ich verschiebs ins entsprechende forum...
*** make your own tools (wishlist :: thx)
CyberDan
Beiträge: 204
Registriert: Mo 15. Dez 2003, 13:01
Wohnort: Saarland
Kontaktdaten:

Beitrag von CyberDan »

wenn die Statistik jetzt noch ins Backend eingebaut wäre, wär das ganze perfekt 8)
andrej
Beiträge: 333
Registriert: Mi 8. Okt 2003, 09:46
Kontaktdaten:

Beitrag von andrej »

Eine sehr interessante Lösung. Hat jemand an dieser Erweiterung weiter gearbeitet? Sprich jemand das ganze ins Backend eingebaut? Finde die Statistik von Contenido selbst, nicht sehr aussagekräftig.

Bei awstats hat man den Vorteil, das dieses kontinuirlich weiter entwickelt wird. So können sich die Programmierer von Contenido auf andere wichtige Sachen konzentrieren ;)
trixta
Beiträge: 165
Registriert: Di 26. Apr 2005, 12:53
Kontaktdaten:

Beitrag von trixta »

kann man auch mit den contenido eigenen pseudo-cronjobs ein update starten? wie würde das denn aussehen.
Gesperrt