Willkommen Gast. Bitte Einloggen oder Registrieren
 
Sprache wählen:
 
 
Statistik Version 20 online.

  ÜbersichtHilfeSuchenEinloggenRegistrieren  
 
Seitenindex umschalten Seiten: 1
Thema versenden Drucken
Daten reorganisieren (Gelesen: 13176 mal)
hr3
Global Moderator
*****
Offline


Es gibt nichts Gutes/
außer: Man tut es. E.Kästner

Beiträge: 1126
Germany
Geschlecht: male
Daten reorganisieren
23.02.11 um 21:07:55
 
Dieses Programm entfernt Daten vor und nach einem definierbaren Termin aus den Text-Dateien der Statistik. Die bestehenden Dateien werden nur gelesen und nicht verändert. Als Ausgabe werden jeweils Dateien mit der Endung -n für neu und _l für zu löschende Informationen erzeugt. Falls diese Dateien nicht automatisch angelegt werden können, kommt eine entsprechende Fehlermeldung. Dann bitte manuell anlegen und mit chmod=0666 versehen.

Vor der Verarbeitung würde ich für den zu reorganisierenden Zeitraum ein/detallierte Archiv(e) erstellen.

Die Verarbeitung kann beliebig oft wiederholt werden. Für den endgültigen Lauf, sollte der Wartungsmodus aktiviert werden.

Das Ergebnis der Verarbeitung wird protokolliert. Bitte prüfen und dann ggf. die Dateien umbennen (später ggf. sichern und/oder lösen). Nach Cache und Index neu erstellen sollte die Statistik nur noch die aktuellen Daten aufweisen. Sonst sofort wieder die Original-Dateien zur Verfügung stellen.

Auch die Pattern-Dateien beinhalten nur noch die erforderlichen Daten. Die Schlüssel sind unverändert. Damit können ggf. die Daten aus den _l-Dateien später wieder zugefügt werden.

Es gibt folgende Verarbeitung steuernde Variablen, die auch als URL-Parameter übergeben werden können.
vts = Timestamp, ab dem die Daten erhalten bleiben sollen. Voreingestellt ist 0000000000
bts = Timestamp, bis zu dem die Daten erhalten bleiben sollen. Voreingestellt ist 9999999999
path = Pfad von der Installationsbibliothek des Programms zu den Dateien. Voreingestellt ist 'log/' für eine Installation in stat/.

Code:
<?php
### letzte Änderung 24.02.11 09:25
### logdb- und pattern-Dateien reorganisieren
### http://www.php-web-statistik.de/cgi-bin/yabb/YaBB.pl?num=1298491675
### Timestamp umrechnen z.B. http://php.svenheidrich.de/timestamp.html

$vts=0000000000;
$bts=9999999999;
$path='log/';
if (isset($_REQUEST['vts'])) {$vts=$_REQUEST['vts'];}
if (isset($_REQUEST['bts'])) {$bts=$_REQUEST['bts'];}
if (isset($_REQUEST['path'])) {$path=$_REQUEST['path'];}
echo 'Timestamp: '.$vts.' - '.$bts.'<br>';

logdb($path.'logdb.dta');
logdb($path.'logdb_backup.dta');
pattern($br,$path.'pattern_browser.dta');
pattern($os,$path.'pattern_operating_system.dta');
pattern($rf,$path.'pattern_referer.dta');
pattern($rs,$path.'pattern_resolution.dta');
pattern($sn,$path.'pattern_site_name.dta');
echo '*end*<br>';


function logdb($file) {
 global $vts,$bts,$br,$os,$rf,$rs,$sn;
 $r=0;
 $l=0;
 $n=0;
 $handle=fopen($file     ,'r');
 if (!$handle) {echo1($file);}
 $handle_n=fopen($file.'_n','w');
 if (!$handle_n) {echo1($file.'_n');}
 $handle_l=fopen($file.'_l','w');
 if (!$handle_l) {echo1($file.'_l');}

 while (!feof($handle)) {
  $buffer=fgets($handle,6000);
  $a=explode('|',$buffer);
  $r++;
  if (($buffer!='')&&(count($a)==9)&&($a[0]>=$vts)&&($a[0]<=$bts)) {
   $br[$a[2]]=true;
   $os[$a[3]]=true;
   $sn[$a[4]]=true;
   $rf[$a[5]]=true;
   $rs[$a[6]]=true;
   fwrite($handle_n,$buffer);$n++;} else {fwrite($handle_l,$buffer);$l++;}}

 fclose($handle);
 fclose($handle_n);
 fclose($handle_l);
 echo2($file,$r,$n,$l);}


function pattern($x,$file) {
 ksort($x);
 $r=0;
 $l=0;
 $n=0;
 $Y=false;
 $handle=fopen($file     ,'r');
 if (!$handle) {echo1($file);}
 $handle_n=fopen($file.'_n','w');
 if (!$handle_n) {echo1($file.'_n');}
 $handle_l=fopen($file.'_l','w');
 if (!$handle_l) {echo1($file.'_l');}

 while (!feof($handle)) {
  $buffer=fgets($handle,6000);
  $a=explode('|',$buffer);
  $r++;
  if ((count($a)==2)&&(isset($x[(int)$a[1]]))) {fwrite($handle_n,$buffer);$n++;$y=false;} else {fwrite($handle_l,$buffer);$l++;$y=@$a[1];}}

 if ($y) {fwrite($handle_n,"\n|".$y+1);}
 fclose($handle);
 fclose($handle_n);
 fclose($handle_l);
 echo2($file,$r,$n,$l);}


function echo1($file) {echo 'Datei '.$file.' nicht gefunden'; exit;}
function echo2($file,$r,$n,$l) {echo 'Datei '.$file.' read:'.$r.' write_n:'.$n.' write_l:'.$l.'<br>';}
?> 


Ich habe dieses Programm in meiner Umgebung mit 4.4.00 getestet und stelle es ohne Gewähr mit der Bitte um Feedback zur Verfügung.
Zum Seitenanfang
« Zuletzt geändert: 23.06.11 um 11:51:42 von hr3 »  
 
IP gespeichert
 
hr3
Global Moderator
*****
Offline


Es gibt nichts Gutes/
außer: Man tut es. E.Kästner

Beiträge: 1126
Germany
Geschlecht: male
Re: Daten reorganisieren
Antwort #1 - 25.02.11 um 21:27:19
 
Eine vergleichbare Lösung für SQL. Die Daten werden dabei direkt aus den Tabellen entfernt, keine Selektion. Deswegen vorher für eine ausreichende Sicherung Sorge tragen.

Auch hier kann mit timestamp < oder > und einem beiliebigen Termin gearbeitet werden.

Zitat:
DELETE FROM stat_main WHERE timestamp <1000000000

DELETE stat_browser
FROM stat_browser
LEFT JOIN stat_main ON ( stat_browser.id = stat_main.browser )
WHERE stat_browser.id >1 AND stat_main.browser IS NULL

DELETE stat_operating_system
FROM stat_operating_system
LEFT JOIN stat_main ON ( stat_operating_system.id = stat_main.operating_system )
WHERE stat_operating_system.id >1 AND stat_main.operating_system IS NULL

DELETE stat_referrer
FROM stat_referrer
LEFT JOIN stat_main ON ( stat_referrer.id = stat_main.referrer )
WHERE stat_referrer.id >1 AND stat_main.referrer IS NULL

DELETE stat_resolution
FROM stat_resolution
LEFT JOIN stat_main ON ( stat_resolution.id = stat_main.resolution )
WHERE stat_resolution.id >1 AND stat_main.resolution IS NULL

DELETE stat_site_name
FROM stat_site_name
LEFT JOIN stat_main ON ( stat_site_name.id = stat_main.site_name )
WHERE stat_site_name.id >1 AND stat_main.site_name IS NULL
Zum Seitenanfang
 
 
IP gespeichert
 
Seitenindex umschalten Seiten: 1
Thema versenden Drucken