#!/usr/bin/perl # Unix Pfad zum internen Server-Datum : $dateCmd = '/bin/date'; # Unix Pfad zum HitMat Directory : $hitmatDir = "/httpdocs/hitmat"; # Unix Pfad zum Backup Directory : $bakDir = '/httpdocs/bak'; # URL Pfad zum HitMat Directory : $hitmatUrl = 'http://www.wernerlau.com/httpdocs/hitmat'; # URL Pfad zum Programm 'hitmat.cgi' : $scriptUrl = 'http://www.wernerlau.info/cgi-bin/hitmat.cgi'; # Ziel-URL beim Verlassen des Managers : $exitUrl = 'http://www.wernerlau.com/'; # Anzeige Anzahl Ziffern (je 16 Pixel lang !! Bsp: 6=96 Pixel / 7=112 Pixel etc.) : $anzahl ='7'; # ggf. EXCLUDE einer Domain deren Hits die nicht gezählt werden : $xTail = '.xxx.com'; # An einem neuen Tag wird zwischen Mitternacht bis $trigHour beim ersten 'Hit' : # 1) Tagesdaten aus 'hit1.log' in das Monatsdaten-File übernommen # 2) 'hit1.log' unter 'hit2.log' gespeichert (als update) # 3) Am Monats-Ersten das entsprechende 'hitX.dat' Monatsdaten-File vom Vorjahr neu initialisiert (geleert) # 4) natürlich der Hit im neuen hit1.log gespeichert. ;-)) # Value für $trigHour von 1 bis 23 $trigHour = 06; $headTitle = "HIToMATIC 2.2"; $bodyTag = qq||; $bodyTitle = qq|HIToMATIC by Astro|; # Tabellen-Rand ? (0 = Kein Rand) : $border = 1; # Max.Länge der Seitenbezeichungen bei der Screenanzeige (nur Jahres und Monats Statistik!! ) $ml = "20"; # Hintergrundfarben für Zeilen $hzc1="e0e0e0"; $hzc2="f8f8ff"; # Zeichenfarbe für Monat + Tag $hzc3="000000"; # Zeichenfarbe für Gruppe + Seite $hzc4="000000"; # ggf. verwendetesTrennzeichen bei Seitenbezeichnungen (nur für Statistik-Tabellen-Anzeige) $filter ="_"; # ggf. Zusatz ab wann Daten erfasst werden $zusatz1 ="-"; # ggf. Zusatz zum Header bei 'ewiger' Statistik $zusatz2 ="seit EINRICHTUNG der jeweiligen Counter"; # Wenn kein tägliches Backup des Monatsdaten-Files stattfinden soll, $bakFlag auf 'N' setzen, # andernfalls die Werte im folgenden IF-Loop anpassen : $bakFlag = 'Y'; if ($bakFlag eq 'Y') { $bakTime = 1; # Tage zwischen den Backups $bakMax = 400; # Anzahl der Files (wieviel Backups erhalten werden) chop ($jDate = `$dateCmd +"%j"`); $HITBAK = "$bakDir/hit$jDate.bak"; } # ENDE der Parameter Anpassungen # Der folgende Rest muss nicht geändert werden ! ################################## chop ($dayStamp = `$dateCmd +"%e"`); $dayStamp =~ s/\s*//g; chop ($hourStamp = `$dateCmd +"%H"`); chop ($timeStamp = `$dateCmd +"%a %D %H%M%Z"`); chop ($hzStamp = `$dateCmd +"erstellt am %d.%m.%Y %H:%M (%Z)"`); chop ($dateStamp = `$dateCmd +"%Y%m%d"`); $yearStamp = substr ($dateStamp,0,4); $monthStamp = substr ($dateStamp,4,2); $month = $monthStamp +0; $HITCFG = "$hitmatDir/hit.cfg"; $HITCNT = "$hitmatDir/hit.cnt"; $HITDAT = "$hitmatDir/hit$month.dat"; $HITFLK = "$hitmatDir/hit.flk"; $HITLOG1 = "$hitmatDir/hit1.log"; $HITLOG2 = "$hitmatDir/hit2.log"; $HITMON = "$hitmatDir/hit"; $HITXBM = "$hitmatDir/hit.xbm"; $SINCEXBM = "since.xbm"; ############################# # Read GET oder POST Input und SETUP if ($ENV{'QUERY_STRING'} eq 'manager' || $ENV{'REQUEST_METHOD'} eq 'POST') { require "./hitman.pl"; require "./hitxbm.pl"; $HITPWD = "$hitmatDir/hitmat.pwd"; &hitman; exit; } elsif ($ENV{'QUERY_STRING'} =~ /(\S+?)(\+(\S))?=(\S+?)(&.*|$)/) { $pagecode =$1; $group =$3; $command =$4; if ($group) { $pagecode = "$group\+$pagecode"; } } else { &endIt; } open (LOCK,">$HITFLK") || &endIt; if (!flock (LOCK,2)) { &endIt; } # Täglicher Backup innerhalb $triHour : if ($hourStamp < $trigHour) { require "./hitcfg.pl"; &checkCfg; } # Addiere einen HIT zum Hauptzähler open (CNT,"+<$HITCNT") || &endIt; flock (CNT,2); seek (CNT,0,0); @inFile = ; $recNbr = 0; $foundFlag = 'N'; while (($recNbr <= $#inFile) && ($foundFlag eq 'N')) { ($count,$code,$eol) = split(/\|/,$inFile[$recNbr]); if ($code eq $pagecode) { $count++; $inFile[$recNbr] = join ("\|",$count,$pagecode,"\n"); $foundFlag = 'Y'; } $recNbr++; } if ($foundFlag eq 'N') # new page { $count =1; $addLine = join ("\|",$count,$pagecode,"\n"); push @inFile, $addLine; } @outFile = sort {($b =~ /(\d+)/)[0] <=> ($a =~ /(\d+)/)[0]} @inFile; seek (CNT,0,0); print (CNT @outFile); truncate (CNT,tell(CNT)); close (CNT); # Erstelle GIF-Image je nach Kommando : if ($command eq "PAGE") { $hzcount = $count; } elsif ($command eq "GROUP") { open (CNT,"<$HITCNT") || &endIt; flock (CNT,1); seek (CNT,0,0); @inFile = ; close (CNT); $groupTtl = 0; foreach $inLine (@inFile) { if ($inLine =~ /^\d+\|$group\+/) { ($count,$code,$eol,) = split(/\|/,$inLine); $groupTtl += $count; $hzcount = $groupTtl; } } } elsif ($command eq "SITE") { open (CNT,"<$HITCNT") || &endIt; flock (CNT,1); seek (CNT,0,0); @inFile = ; close (CNT); $siteTtl = 0; foreach $inLine (@inFile) { ($count,$code,$eol,) = split(/\|/,$inLine); $siteTtl += $count; $hzcount = $siteTtl; } } elsif ($command eq "NONE") { } # Aufzeichnen des HIT im Log : $hitLine = join ("\|",$timeStamp,$pagecode,$command,$banNbr,$ENV{'REMOTE_HOST'},$ENV{'HTTP_USER_AGENT'}); if ($ENV{'HTTP_REFERER'} !~ /$myTail/i) { $hitLine .= "\|$ENV{'HTTP_REFERER'}"; } if (open (LOG,">>$HITLOG1")) { flock (LOG,2); seek (LOG,0,2); print (LOG "$hitLine\n"); close (LOG); } close (LOCK); require "./count.pl"; exit; # Ende Hauptprogramm ################ # Exit bei Error sub endIt { exit; }