#!/usr/bin/perl -w # yChat - Copyright by Paul C. Bütow use CGI; $q = new CGI; require config; my $var = $q->param('var'); my $alias = $q->param('alias'); my $tmpid = $q->param('tmpid'); print $q->header(); &start_html("Statistiken"); print $q->div("yChat Statistiken"), $q->hr, $q->div( $q->a( { -href=>"stat.pl?var=ranking&alias=$alias&tmpid=$tmpid" }, "Rankings"), " | ", $q->a( { -href=>"stat.pl?var=del&alias=$alias&tmpid=$tmpid" }, "Loginstatistiken"), " | ", $q->a( { -href=>"stat.pl?var=stat&alias=$alias&tmpid=$tmpid" }, "DB-Statistik"), " | ", $q->a( { -href=>"stat.pl?var=code&alias=$alias&tmpid=$tmpid" }, "Programmcode"), " | ", ), $q->hr; # $q->a( { -href=>"stat.pl?var=var&alias=$alias&tmpid=$tmpid" }, "Umgebungsvariablen") if ($var eq "ranking") { opendir(COUNTS, "data/user/counts"); my @counts = readdir(COUNTS); closedir(COUNTS); print "
"; my $nr_start = $q->param('start'); my $nr_end = $q->param('end'); my %online; my $rank; my $nr; foreach(@counts) { if(-f "data/user/counts/$_" ) { if (s#.online##g) { open(TOTAL, "; close TOTAL; $online{sprintf("%.2f",($total / 3600))} = $_; } } } print "
", $q->b("Rankings:"), $q->br, ""; if (!$nr_start) { $nr_start = 1; } if (!$nr_end) { $nr_end = 20; } foreach $wert (reverse(sort { $a <=> $b } keys %online)) { $nr++; if ($online{$wert} eq $alias) { $rank = $nr; last if ($nr > $nr_end); } next if ($nr < $nr_start || $nr > $nr_end); print "\n"; } print "
#:
St.:
Name:
".$nr." ".$wert."h $online{$wert}
", $q->hr; $nr_start -= 20; $nr_end -= 20; print "Rankings von $nr_start bis $nr_end anzeigen ...
" if ($nr_start > 0); $nr_start += 40; $nr_end += 40; print "Rankings von $nr_start bis $nr_end anzeigen ...", $q->br, $q->br, $q->b("$alias, Du befindest Dich auf Rank $rank
"); } elsif ($var eq "del") { print "
", $q->b("Alte Benutzer löschen:"), $q->br, "Benutzer, die sich 1440 Stunden (60 Tage) nicht mehr in das System eingeloggt haben, werden gelöscht.", $q->br, $q->br; opendir(USER, "data/user/options"); my @user = readdir(USER); closedir(USER); @user = sort(@user); my $i = 0; my $j; my $k = 0; my $l = 0; my $full = $q->param('tmp'); foreach(@user) { if (-f "data/user/lastlogin/$_") { open(LOGIN,"; close LOGIN; $login = sprintf("%.2f",((time - $login) / 3600)); $j++; if (999 < $login && $login < 1440) { # 1440 = 60 Tage $k++; print $q->font( { -color=>"ffa500" }, $q->b( "$j($k) $_ Letztes Login vor: ".$login."h") ), $q->br, "\n" if ($full ne undef); } elsif ($login < 48) { $l++; print $q->font( { -color=>"ffffef" }, $q->b( "$j($l) $_ Letztes Login vor: ".$login."h") ), $q->br, "\n" if ($full ne undef); } elsif ($login < 1440) { print "$j $_ Letztes Login vor: ".$login."h", $q->br, "\n" if ($full ne undef); } else { $k++; &kill($_,$i++,$login); } } elsif (-f "data/user/options/$_") { &kill($_,$i++); } } print $q->hr if ($full ne undef); print "
", $q->div( $q->b( "$j Benutzer befinden sich in der Datenbank!", $q->br, $q->font( { -color=>"ffffef" }, "$l Benutzer haben sich innerhalb der letzten 48 Stunden eingeloggt!"), $q->br, $q->font( { -color=>"ffa500" }, "$k Benutzer haben sich über 1000 Stunden nicht mehr eingeloggt!"), $q->br, $q->font( { -color=>"ff0000" }, "$i Benutzer wurden gerade eben gelöscht!") ), $q->br, $q->br, "PS: Jeder registrierte Benutzername wird nur einmal gezählt!" ); print $q->br, $q->div( "(", $q->a( { -href=>"stat.pl?var=del&tmp=true&alias=$alias&tmpid=$tmpid"}, "Vollständige Ansicht"), ")" ) if ($full eq undef); } elsif ($var eq "var") { print "
", $q->b("Server Umgebungsvariablen:"), $q->br, $q->br; while(($key,$value) = each(%ENV)) { print "$key = $value\n", $q->br; } print "
"; } elsif ($var eq "stat") { print $q->div( $q->b("yChat-DB Statistik:") ), $q->br; $files = 0; $size = 0; $directorys = 1; &zaehle("data"); $size = sprintf("%.2f", ($size/1048576)); print $q->div( "Dateien insgesamt: $files", $q->br, "MB insgesamt: $size", $q->br, "Verzeichnisse insgesamt: $directorys"); } elsif ($var eq "code") { print $q->div( $q->b("yChat Programmcode-Statistik:") ), $q->br; my $zeilen; my $size; my $bytes; my $files; opendir(DIR,"."); my @dir = readdir(DIR); closedir(DIR); $dir = sort(@dir); foreach(@dir) { if (/.+[pl]$/ || /.+[pm]$/) { $bytes = (-s); $size += $bytes; open(PL, "<$_"); my @pl = ; close PL; local $nr = $#pl+1; $zeilen += $nr; $files++; print $q->div("Datei $files: $nr Zeilen, $bytes Bytes"), $q->br, "\n"; } } print $q->div( $q->b("Programmcode: $files Dateien, $zeilen Zeilen", $q->br, "Größe: $size Bytes") ); } print $q->end_html; sub zaehle { local ($dir,$data) = @_; $dir = "$dir/$data" if ($data ne undef); opendir(DATA,$dir); local @data = readdir(DATA); closedir(DATA); $files2 = 0; foreach(@data) { if (-f "$dir/$_") { $files++; $files2++; $size += (-s "$dir/$_"); } elsif (-d "$dir/$_" && $_ ne "." && $_ ne "..") { $directorys++; &zaehle($dir,$_); } } } sub kill { my ($rm,$nr,$login) = @_; $login = "XXXXXX" if ($login eq undef); print $q->font( { -color=>"ff0000" }, $q->b( "$j($nr) $rm Letztes Login vor: ".$login."h (wurde gelöscht)") ), $q->br, "\n"; print ""; print "options " if unlink("data/user/options/$rm"); print "profiles " if unlink("data/user/profiles/$rm"); print "gbooks " if unlink("data/user/gbooks/$rm"); print "counts " if unlink("data/user/counts/$rm"); print "counts.online " if unlink("data/user/counts/".$rm.".online"); print "lastlogin " if unlink("data/user/lastlogin/$rm"); print "memos" if unlink("data/user/memos/$rm"); print "", $q->hr, "\n"; &zeit; open(DEL, ">>data/kill"); print DEL "($day.$month.$year $hours:$min:$sec) $rm wurde automatisch gekillt [$alias]\n"; close DEL; }