#!/usr/bin/perl
#  Iris Counter 2.52
#  -----------------
#  Copyright(C)1999, 2000. NvyU. (20000916 release)
#      E-MAIL   : nvyu@hitel.net
#      HOMEPAGE : http://nvyu.net
#
$ver = "2.52.2";
#
#  ¾È³» »çÇ×.
#
#  - ÀÌ ½ºÅ©¸³Æ®´Â °ø°³·Î Á¦°øµË´Ï´Ù. ÀÌ ½ºÅ©¸³Æ®¸¦ »ç¿ëÇÒ °æ¿ì¿¡ »ý±æ ¼ö ÀÖ´Â
#    ¼ÕÇØ µî¿¡ ´ëÇØ¼­ Á¦ÀÛÀÚ´Â ÀÏÃ¼ Ã¥ÀÓÀ» ÁöÁö ¾Ê½À´Ï´Ù.
#  - ÀúÀÛÀÚÀÇ »çÀüÇã°¡ ¾ø´Â ½ºÅ©¸³Æ®ÀÇ °³º¯ ¹× Àç¹èÆ÷´Â Çã°¡ÇÏÁö ¾Ê½À´Ï´Ù.
#  - ¼³Ä¡ µî°ú °ü·ÃµÈ Áú¹®Àº È¨ÆäÀÌÁö °Ô½ÃÆÇ¿¡ ¹®ÀÇÇØÁÖ½Ã±â ¹Ù¶ø´Ï´Ù.
#  - ¿øÇÏ½Ã´Â Ãß°¡ ±â´ÉÀÌ ÀÖÀ¸½Ç °æ¿ì¿¡´Â ¸®Äù½ºÆ® ÇØÁÖ½Ã¸é °¨»çÇÏ°Ú½À´Ï´Ù.
#  - ÀÚ¼¼ÇÑ »çÇ×Àº ÆÐÅ°Áö¿¡ Æ÷ÇÔµÈ ¹®¼­¸¦ ÂüÁ¶ÇÏ¼¼¿ä.
#

																																																																																	$count = "irisc.log"; $logfile = "iriscday.log"; $ospfile = "iriscosp.log"; $brpfile = "iriscbrp.log"; $resfile = "iriscres.log"; $clrfile = "iriscclr.log"; $lasfile = "irisclas.log"; $reffile = "iriscref.log"; $domfile = "iriscdom.log"; $racfile = "iriscrac.log"; $sngfile = "iriscsng.log"; $keyfile = "irisckey.log"; $senfile = "sengine.txt"; $pzc = 'image/blank.gif'; @CLR = ( '0|2 Color', '1|16 Color', '4|64 Color', '8|256 Color', '16|16bit Hi-Color', '24|24bit True Color', '32|32bit True Color'); @month = ( 'January', 'February', 'March', 'April', 'May' ,'June', 'July', 'August', 'September', 'October', 'November', 'December'); @WEEK = ( 'Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'); &get_time; &get_form; require 'irisccfg.cgi'; &chk_admin; &get_userinfo; $lock = $ienv{'lock'}; $lockfile = './lock/irisc.lock'; $page = int($FORM{'t'}); $sortby = int($FORM{'s'}); $page = 1 if ($page < 1); @menu = ( 'General', 'Domain', 'Browser', 'OS', 'Hour', 'Daily', 'Weekly', 'Monthly', 'Access Rate', 'Resolution', 'Color Depth', 'Referer', 'Search Engine', 'Last 30 Access', 'For Admin', '<!--reserved-->'); if ($FORM{'p'} == 14 && $FORM{'dc'} ne '' && $admin == 1) { if ($FORM{'dc'} == 1) { ($csec,$cmin,$chour,$cmday,$cmon,$cyear,$cwday,$cyday,$cisdst) = gmtime( time + 86400*31*12); $cyear += 1900; $cwdays = ("Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat")[$cwday]; $cmonth = ("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec")[$cmon]; $GMTDATE = sprintf("%s, %02d-%s-%04d %02d:%02d:%02d GMT", $cwdays, $cmday, $cmonth, $cyear, $chour, $cmin, $csec); $npwd = crypt($ienv{'pwd'}, 'ic'); print "Set-Cookie: ic=$npwd; expires=$GMTDATE;\n"; $cookie{'ic'} = $npwd; } else { print "Set-Cookie: ic=\n"; $cookie{'ic'} = ''; } } elsif ($FORM{'p'} == 14 && $FORM{'rlog'} > 0 && $FORM{'rl'} ne '') { &lock; @LOG = &get_file($reffile); chomp(@LOG); foreach $log (@LOG) { ($key, $value) = split(/\|/, $log); $key =~ s/\+/ /g; $key =~ s/%([\dA-Fa-f][\dA-Fa-f])/pack("C", hex($1))/eg; $val{$key} += $value; } foreach $zpa (keys %val) { push(@NEWLOG, "$zpa\|$val{$zpa}\n") if ($val{$zpa} > $FORM{'rlog'}); } &put_file($reffile, @NEWLOG); undef(@NEWLOG); undef(@LOG); &unlock; } elsif ($FORM{'p'} == 14 && $FORM{'rs'} ne '') { @COUNT = &get_file($count); @COUNT = split(/\|/, $COUNT[0]); $COUNT[0] = $FORM{'unique'}; $COUNT[1] = $FORM{'total'}; &lock; open(FILE, ">$count"); foreach (0 .. 13) { print FILE qq|$COUNT[$_]\||; } close(FILE); &unlock; } &header; $bclr = "#aaaaaa"; $fclr = "#000000"; if (($ienv{'public'} == 0 && $admin == 0) or ($admin == 0 && $FORM{'p'} == 14)) { &show_admin; exit; } if ($browser eq 'IE') { $ft = "11px"; $fc = "8px"; } else { $ft = "12px"; $fc = "10px"; } print qq|<html><head><style tyle="text/css"> <!-- .d1 {font-size:$ft; } .d2 {font-size:$fc; font-family:Small Fonts;} A:link 	{ color:#222222; text-decoration:none } A:visited 	{ color:#222222; text-decoration:none } A:actived	{ color:#222222; text-decoration:none } A:hover	{ text-decoration:underline; } --> </style><title>irisc</title></head><body bgcolor=$bclr><div align=center> <font color=$fclr size=2 style="font-family:Arial"><b>IRiS COUNTER</b> $ver <b>STATiSTiCS</B></font><p><table width=750 height=400 cellspacing=0 cellpadding=0 border=0><tr><td valign=top><table width=100 cellspacing=0 cellpadding=4 border=0 align=center>|; foreach (0 .. $#menu) { if ($FORM{'p'} == $_) { print qq|<tr><td align=right bgcolor="#ffffff" class="d1"><b>$menu[$_]</b></td></tr>|; } else { print qq|<tr><td align=right class="d1"><font color=$fclr><a href="stats.cgi?p=$_">$menu[$_]</a></font></td></tr>|; } } print "</table></td><td width=650 bgcolor='#ffffff' valign=top>"; &lock; @COUNT = &get_file($count); @LASTACCESS = &get_file($lasfile); @OS = &get_file($ospfile); @BR = &get_file($brpfile); @RS = &get_file($resfile); @CR = &get_file($clrfile); @DO = &get_file($domfile); @RF = &get_file($reffile); &unlock; ($unique, $total, $today, $yesterday, $max, $cyear, $cmon, $cday, $hour, $min, $sec, $user_ip, $facx, $racx) = split(/\|/, $COUNT[0]); $yesterday+= 0; $facx+=0; $racx+=0; if ($FORM{'p'} == 0) { @d = split(/\|/, $LASTACCESS[0]); ($os, $dmy, $dmy, $opct) = &get_best(0, @OS); ($br, $dmy, $dmy, $bpct) = &get_best(0, @BR); ($rs, $dmy, $dmy, $rpct) = &get_best(0, @RS); ($cr, $dmy, $dmy, $cpct) = &get_best(0, @CR); ($do, $dmy, $dmy, $dpct) = &get_best(0, @DO); ($rf, $dmy, $dmy, $fpct) = &get_best(0, @RF); $rs = &get_resolution($rs); $cr = &get_colors($cr); $cdate = 0; $rtotal = 0;  $ymonth = $ymg = '-'; $yyear = $cyear; $ymon = $mon - 1; if ($ymon == 0) { $yyear -= 1; $ymon = 12; } &lock; @LOG = &get_file($logfile); foreach $LOG (@LOG) {	($yyyy, $mm, $dd, @TIME) = split(/\|/, $LOG); foreach (0 .. 23) { $GTOT += $TIME[$_]; } $rtotal += $GTOT; $cdate++; $tmax = $GTOT if ($GTOT >= $tmax); if ($cyear == $yyyy && $cmon == $mm) { $mmax = $GTOT if ($GTOT >= $mmax); $month += $GTOT; } elsif ($yyear == $yyyy && $ymon == $mm) { $ymonth += $GTOT; } $GTOT = 0; } $ymg = int($month / $ymonth  * 100) if ($ymonth != 0); $avg = int($rtotal / $cdate *10)/10 if ($cdate != 0); $yvg = int($yesterday / $avg * 100) if ($avg != 0); if ($yvg > 110) { $flag = "<font color=red>¡ã</font>"; } elsif ($yvg < 90) { $flag = "<font color=blue>¡å</font>"; } else { $flag = ""; } $ntitle = &make_title("general counter info"); print qq|<table cellspacing=0 cellpadding=2 border=0 width=100%><tr><td class="d1" valign=top>$ntitle<hr color="black" size=1> <table width=100% cellspacing=0 cellpadding=2 border=0 align=right>|; &put_tr("Unique Access", $unique); &put_tr("Total Access", $total); &put_tr("Today", $today); &put_tr("Yesterday (AVG)", $yesterday, "($yvg%) $flag"); &put_tr("Average", $avg); &put_tr("Month (AVG)", $month, "($ymg%)"); &put_tr("Last Month", $ymonth); &put_tr("Max (on this month)", $tmax, "($mmax)"); $ntitle = &make_title("last access info"); print qq|</table></td> <td class="d1" valign=top>$ntitle<hr color="black" size=1> <table width=100% cellspacing=0 cellpadding=2 border=0 align=right>|; &put_tr("Date", "$d[0]/$d[1]/$d[2]"); &put_tr("Time", "$d[3]:$d[4].$d[5]"); &put_tr("IP Address", $d[6]); &put_tr("Host", '', $d[7]); $ntitle = &make_title("user statistics"); print qq|</table></td></tr> <tr><td class="d1" valign=top>$ntitle<hr color="black" size=1> <table width=100%  cellspacing=0 cellpadding=1 border=0 align=right>|; &put_tr("OS", $os, $opct); &put_tr("Browser", $br, $bpct); &put_tr("Resolution", $rs, $rpct); &put_tr("Color Depth", $cr, $cpct); if ($facx+$racx != 0) { if ($facx != 0 or $racx != 0) { $tot = int($racx / ($facx+$racx) * 1000) / 10 . "%"; } else { $tot = '??%'; } $grp = int($racx/ ($facx+$racx) * 150); &put_tr("Reaccess Rate", qq|<img src="$ienv{'url'}/graph/hbar2.gif" width=$grp height=8>|, $tot); } $ntitle = &make_title("etcetria"); print qq|</table></td><td class="d1" valign=top>$ntitle<hr color="black" size=1> <table width=100%  cellspacing=0 cellpadding=2 border=0 align=right>|; &put_tr("Domain", $do, $dpct); if (length $rf > 40) {	$rf =~ s/&/&<br>/g; $rf =~ s/\//\/<br>/g; $rf =~ s/\/<br>\/<br>/\/\//; } &put_tr("Referer", $rf, $fpct); print qq|</table>$pzc</td></tr></table>|; if ($max != $tmax) { open(FILE, ">$count"); print FILE join('|', $unique, $total, $today, $yesterday, $max, $cyear, $cmon, $cday, $hour, $min, $sec, $user_ip, $facx, $racx); close(FILE); } &unlock; } elsif ($FORM{'p'} == 1) { undef(%loc); @links = ( 'Country', 'Group', 'Domain'); foreach (0 .. $#links) { if ($_ == $FORM{'c'}) { $link .= qq|<span style="background-color:$bclr"><b>$links[$_]</b></span> |; } else { $link .= qq|<a href="stats.cgi?p=1&c=$_">$links[$_]</a> |; } } &lock; @LOG = &get_file($domfile);  &unlock; $tot = 0; $max = 0; $c = 0; ($dmy, $max, $tot, $dmy, $wmax, $wtot) = &get_best(1, @LOG); foreach $LOG (@LOG) { ($domain, $hit, $tix, $tmx) = split(/\|/, $LOG); @las = split(/\./, $domain); $lac = $las[$#las]; if (length $lac < 3 && length $lac > 0) { $lat = "$las[$#las-1].$las[$#las]" if ($lac ne ''); } else { $lat = $lac; } $lat =~ s/ //g; $loc{$lat} += $hit; $locx{$lat} += $tmx; $loct{$lat} = $tix if ($tix > $loct{$lat}); $wloc{$lac} += $hit; $wlocx{$lac} += $tmx; $wloct{$lac} = $tix if ($tix > $wloct{$lac}); } foreach $loc (keys %loc) { push(@FDOMAIN, "$loc\|$loc{$loc}\|$loct{$loc}\|$locx{$loc}"); } foreach $loc (keys %wloc) { push(@WDOMAIN, "$loc\|$wloc{$loc}\|$wloct{$loc}\|$wlocx{$loc}");  } if ($FORM{'c'} == 0) {	&drw_graph("domain","Location", $link, @WDOMAIN); } elsif ($FORM{'c'} == 1) { &drw_graph("group domain","Location", $link, @FDOMAIN); } elsif ($FORM{'c'} == 2) { &drw_graph("detail domain","Location", $link, @LOG); } print qq|</td></tr></table>|; } elsif ($FORM{'p'} == 2) { undef(%loc); @links = ( 'Overview', 'Detail'); foreach (0 .. $#links) { if ($_ == $FORM{'c'}) { $link .= qq|<span style="background-color:$bclr"><b>$links[$_]</b></span> |; } else { $link .= qq|<a href="stats.cgi?p=2&c=$_">$links[$_]</a> |; } } &lock; @LOG = &get_file($brpfile);  &unlock; $tot = 0; $max = 0; $c = 0; ($dmy, $max, $tot, $dmy, $wmax, $wtot) = &get_best(1, @LOG); undef(%iz); undef(@TLOG); foreach $LOG (@LOG) { ($key, $value, $tix, $tmx) = split(/\|/, $LOG); if ($key =~ /Internet Explorer/ ) { $iz{'Internet Explorer'} += $value; $izm{'Internet Explorer'} += $tmx; $izt{'Internet Explorer'} = $tix if ($tix > $izt{'Internet Explorer'}); } elsif ($key =~ /Netscape/) { $iz{'Netscape'} += $value; $izm{'Netscape'} += $tmx; $izt{'Netscape'} = $tix if ($tix > $izt{'Netscape'}); } else { $iz{'Etcetria'} += $value; $izm{'Etcertria'} += $tmx; $izt{'Etcetria'} = $tix if ($tix > $izt{'Etcetria'}); } } foreach $dname (keys %iz) { push(@FLOG, "$dname\|$iz{$dname}\|$izt{$dname}\|$izm{$dname}"); } if ($FORM{'c'} == 0) {	($dmy, $max, $tot, $dmy, $wmax, $wtot) = &get_best(1, @FLOG); &drw_graph("overview","Browser", $link, @FLOG); } elsif ($FORM{'c'} == 1) { ($dmy, $max, $tot, $dmy, $wmax, $wtot) = &get_best(1, @LOG); &drw_graph("detail","Browser", $link, @LOG); } print qq|</td></tr></table>|; } elsif ($FORM{'p'} == 3) { &put_graph("os", $ospfile, "OS"); } elsif ($FORM{'p'} == 9) { &put_graph("resolution", $resfile, "Resolution"); } elsif ($FORM{'p'} == 10) { &put_graph("color depth", $clrfile, "Depth"); } elsif ($FORM{'p'} == 11) { &put_graph("referer", $reffile, "Referer"); } elsif ($FORM{'p'} == 4) { undef(@GTIME); $max = 0; $total = 0; &lock; @LOG = &get_file($logfile); close(FILE); &unlock; foreach $LOG (@LOG) { ($yyyy, $mm, $dd, @TIME) = split(/\|/, $LOG); $zp = 0; foreach $year (@YEAR) { $zp = 1 if ($year eq $yyyy); }				push(@YEAR, $yyyy) if ($zp == 0); $zp = 0; foreach $month (@MONTH) { $zp = 1 if ($month eq $mm); }				push(@MONTH, $mm) if ($zp == 0); $zp = 0; } foreach  (1 .. 31) { push(@DAY, $_); }	foreach $LOG (@LOG) {	($yyyy, $mm, $dd, @TIME) = split(/\|/, $LOG); if ($FORM{'y'} == 0 or $FORM{'y'} == $yyyy) { if ($FORM{'m'} == 0 or $FORM{'m'} == $mm ) { if ($FORM{'d'} == 0 or $FORM{'d'} == $dd) { foreach (0 .. 23) { $GTIME[$_] += $TIME[$_]; $max = $GTIME[$_] if ($GTIME[$_] >= $max); $total += $TIME[$_]; } } } } } if ($total == 0) { $total = 1; $max =  1;} if ($FORM{'y'} + $FORM{'m'} + $FORM{'d'} != 0) { $dpb = qq|<a href="stats.cgi?p=4">|; $dpe = "</a>"; $msg = "$FORM{'y'}"; if ($FORM{'m'} ne '') { $msg .= "/$FORM{'m'}"; $msg .= "/$FORM{'d'}" if ($FORM{'d'} ne ''); } } else { $dpb = "<b>"; $dpe = "</b>"; } $ntitle = &make_title("hour"); print qq|<table cellspacing=0 cellpadding=2 border=0 width=100%><tr><td class="d1" valign=top>$ntitle</td><td valign=bottom align=right class="d1">$msg</td></tr><tr><td colspan=2> <hr color="black" size=1> <table cellspacing=0 cellpadding=2 border=0 width=100%><form method="post" action="stats.cgi"><input type=hidden name="p" value="4"><tr>|; foreach (0 .. 23) { $glen = int($GTIME[$_] / $max * 300) + 1; $percent = "(" . int($GTIME[$_] / $total * 100) . "%)"; $c = not $c; if ($c) { $clb = qq|#ffffff|; } else { $clb = qq|#eeeeee|; } if ($max == $GTIME[$_]) { $img = "graph/vbar1.gif"; $bcr = "#ffffff"; } else { $img = "graph/vbar2.gif"; $clr = "#000000";} print qq|<td align=center valign=bottom class="d1" width=30 height=300 valign=bottom bgcolor="$clb"><font color=$clr><b>$GTIME[$_]</b></font><br><span class="d2">$percent</span><br> <img src="$ienv{'url'}/$img" width=8 height=$glen></td>|; } print qq|</tr><tr>|; foreach (0 .. 23) { $p = $_; $p = qq|<font color=#ff0000><b>$p</b></font>| if ($p == $hour); $p = "&nbsp;$p" if (length $p == 1); $c = not $c; if ($c) { $clb = qq|#ffffff|; } else { $clb = qq|#eeeeee|; } print qq|<td align=center class="d1" bgcolor="$clb">$p</td>|; } print qq|</tr><tr><td colspan=12 class="d1">&nbsp; ¡á $dpb Total Statistics $dpe</td><td colspan=12 align=right class="d1">¡á Day Statistics : <select name="y"><option value="">----|; foreach $YEAR (reverse @YEAR) { print qq|<option value="$YEAR">$YEAR|; } print qq|</select>/<select name="m"><option value="">--|; foreach $MONTH (@MONTH) { print qq|<option value="$MONTH">$MONTH|; } print qq|</select>/<select name="d"><option value="">--|; foreach $DAY (@DAY) { print qq|<option value="$DAY">$DAY|; } print qq|</select><input type=submit value="Check"></td></tr></table></form></td></tr></table>|; } elsif ($FORM{'p'} == 5) { &lock; @LOG = &get_file($logfile); &unlock; $total = 0; $max = 0; $GTIME = 0; undef(@GDAY); foreach $LOG (@LOG) { ($yy, $mm, $dd, @TIME) = split(/\|/, $LOG); foreach (0 .. 23) { $GTIME += $TIME[$_]; }		if ($FORM{'y'} == 0 or $FORM{'y'} == $yy) {	if ($FORM{'m'} == 0 or $FORM{'m'} == $mm) {			$GDAY[$dd] += $GTIME; $total += $GTIME;	$max = $GDAY[$dd] if ($max < $GDAY[$dd]); } } $GTIME = 0; } if ($total == 0) { $total = 1; $max =  1;} foreach $LOG (@LOG) { ($yyyy, $mm, $dd, @TIME) = split(/\|/, $LOG); $zp = 0; foreach $year (@YEAR) { $zp = 1 if ($year eq $yyyy); }				push(@YEAR, $yyyy) if ($zp == 0); $zp = 0; foreach $month (@MONTH) { $zp = 1 if ($month eq $mm); }				push(@MONTH, $mm) if ($zp == 0); $zp = 0; } if ($FORM{'y'} + $FORM{'m'} != 0) { $dpb = qq|<a href="stats.cgi?p=5">|; $dpe = "</a>"; $msg = "$FORM{'y'}"; $msg .= "/$FORM{'m'}" if ($FORM{'m'} ne ''); } else { $dpb = "<b>"; $dpe = "</b>"; } $ntitle = &make_title("daily"); print qq|<table cellspacing=0 cellpadding=2 border=0 width=100%><tr><td class="d1" valign=top>$ntitle</td><td valign=bottom align=right class="d1">$msg</td></tr><tr><td colspan=2> <hr color="black" size=1> <table cellspacing=0 cellpadding=2 border=0 width=100%><form method="post" action="stats.cgi"><input type=hidden name="p" value="5">|; print qq|<tr><td colspan=2><table width=100% cellspacing=0 cellpadding=0 border=0><tr>|; foreach (1.. 31) { $c = not $c; if ($c) { $clb = qq|#ffffff|; } else { $clb = qq|#eeeeee|; } $GDAY[$_] += 0; $glen = int($GDAY[$_] / $max * 300) + 1; $percent = "(" . int($GDAY[$_] / $total * 100) . "%)"; if ($max == $GDAY[$_]) { $img = "graph/vbar1.gif"; $clf = "#3333ff"; } else { $img = "graph/vbar2.gif"; $clf = "#000000"; } print qq|<td class="d2" bgcolor="$clb" width=30 valign=bottom align=center height=300><font color=$clf><b>$GDAY[$_]</b></font><br>$percent<br><img src="$ienv{'url'}/$img" width=8 height=$glen></td>|; } print qq|</tr><tr>|; $c = 0; foreach  (1 .. 31) { $c = not $c; if ($c) { $clb = qq|#ffffff|; } else { $clb = qq|#eeeeee|; } $cd = $_; $cd = "0$cd" if (length $cd == 1); $cd = qq|<font color=#ff0000><b>$cd</b></font>| if ($cd == $day); print qq|<td class="d1" bgcolor="$clb" align=center>$cd</td>|; } print qq|</tr></table></td></tr>|; print qq|<tr><td class="d1">&nbsp; ¡á $dpb Total Statistics $dpe</td><td align=right class="d1">¡á Monthly Statistics : <select name="y"><option value="">----|; foreach $YEAR (reverse @YEAR) { print qq|<option value="$YEAR">$YEAR|; } print qq|</select>/<select name="m"><option value="">--|; foreach $MONTH (@MONTH) { print qq|<option value="$MONTH">$MONTH|; } print qq|</select>|; print qq|<input type=submit value="Check">|; print qq|</td></tr></form></table></td></tr></table>|; } elsif ($FORM{'p'} == 6) { &lock; @LOG = &get_file($logfile); &unlock; $total = 0; $max = 0; $GTIME = 0; undef(@GWEEK); foreach $LOG (@LOG) { ($yy, $mm, $dd, @TIME) = split(/\|/, $LOG); foreach (0 .. 23) { $GTIME += $TIME[$_]; }		$zday = &get_weekday($yy, $mm, $dd); $GWEEK[$zday] += $GTIME; $total += $GTIME; $max = $GWEEK[$zday] if ($max < $GWEEK[$zday]); $GTIME = 0; } $ntitle = &make_title("weekly"); print qq|<table cellspacing=0 cellpadding=2 border=0 width=100%><tr><td class="d1" valign=top>$ntitle<br> <hr color="black" size=1> <table cellspacing=0 cellpadding=2 border=0 width=100%><form method="post" action="stats.cgi"><input type=hidden name="p" value="6">|; print qq|<tr class="d1"><td>Week</td><td>Access</td></tr>|; foreach (0 .. 6) { $GWEEK[$_] += 0; $c = not $c; if ($c) { $clr = "#ffffff"; } else { $clr = "#eeeeee"; } $glen = int($GWEEK[$_] / $max * 300) + 1; $month = $_ + 1; $percent = "(" . int($GWEEK[$_] / $total * 100) . "%)"; $WEEK[$_] = qq|<font color=#ff0000>$WEEK[$_]</font>| if ($_ == $wday); if ($max == $GWEEK[$_]) { $img = "graph/hbar1.gif"; $clf = "#3333ff"; } else { $img = "graph/hbar2.gif"; $clf = "#000000"; } print qq|<tr bgcolor="$clr"><td  class="d1" align=right><b>$WEEK[$_]</b></td><td class="d1"><img src="$ienv{'url'}/$img" width=$glen height=8> <b><font color=$clf>$GWEEK[$_]</font></b> <span class="d2">$percent</span></td></tr>|; } print qq|</table></td></tr></form></td></tr></table>|; } elsif ($FORM{'p'} == 7) { undef(@GDATE); &lock; @LOG = &get_file($logfile); &unlock; $total = 0; $max = 0; foreach $LOG (@LOG) { ($yy, $mm, $dd, @TIME) = split(/\|/, $LOG); if ($FORM{'y'} eq '' or $FORM{'y'} == $yy) { foreach (0 .. 23) { $GTIME += $TIME[$_]; } $GDATE[$mm-1] += $GTIME; $total += $GTIME; $max = $GDATE[$mm-1] if ($max < $GDATE[$mm-1]); $GTIME = 0; } } $ntitle = &make_title("monthly"); print qq|<table cellspacing=0 cellpadding=2 border=0 width=100%><tr><td class="d1" valign=top>$ntitle<br> <hr color="black" size=1> <table cellspacing=0 cellpadding=2 border=0 width=100%><form method="post" action="stats.cgi"><input type=hidden name="p" value="7">|; print qq|<tr class="d1"><td>Month</td><td>Access</td></tr>|; foreach (0 .. 11) { $GDATE[$_] += 0; $c = not $c; if ($c) { $clr = "#ffffff"; } else { $clr = "#eeeeee"; } $glen = int($GDATE[$_] / $max * 300) + 1; $month = $_ + 1; $percent = "(" . int($GDATE[$_] / $total * 100) . "%)"; if ($max == $GDATE[$_]) { $img = "graph/hbar1.gif"; $clf = "#3333ff"; } else { $img = "graph/hbar2.gif"; $clf = "#000000"; } $month[$_] = qq|<font color=#ff0000>$month[$_]</font>| if ($_ == $mon - 1); print qq|<tr bgcolor="$clr"><td align=right class="d1" ><b>$month[$_]</b></td><td class="d1" ><img src="$ienv{'url'}/$img" width=$glen height=8> <b><font color=$clf>$GDATE[$_]</font></b> <span class="d2">$percent</span></td></tr>|; } print qq|</table></td></tr></form></td></tr></table>|; } elsif ($FORM{'p'} == 8) { $ntitle = &make_title("reaccess"); &lock; open(FILE, $racfile); @LOG = <FILE>; chomp(@LOG); close(FILE); &unlock; ($dmy, $max, $tot, $dmy, $wmax, $wtot) = &get_best(1, @LOG); foreach $LIST (@LOG) { ($key, $value, $tix, $tmx) = split(/\|/, $LIST); push(@NLOG, $value); } @NLOG = sort {$b <=> $a} @NLOG; foreach $LIST (@LOG) { ($key, $value, $tix, $tmx) = split(/\|/, $LIST); foreach $nap (@NLOG) { if ($value eq $nap) { $nap = "$key\|$value\|$tix|$tmx"; last;  } } } @LOG = @NLOG; $old = 0; $told = 0; @LOG = reverse @LOG; foreach $LIST (@LOG) { ($key, $value, $tix, $tmx) = split(/\|/, $LIST); $value -= $old; $old += $value; $tmx -= $told; $told += $tmx; if ($key == 1) { $key = '1st'; } elsif ($key ==2 ) { $key = '2nd'; } elsif ($key == 3) { $key ='3rd'; } else { $key = $key . 'th'; } $LIST = "$key\|$value\|$tix\|$tmx"; } &drw_graph("access rate","Access", $link, @LOG); print qq|</td></tr></table></form></td></tr></table>|; } elsif ($FORM{'p'} == 12) { @links = ( 'Engine', 'Keys'); undef(%znvy); undef(%cnvy); foreach (0 .. $#links) { if ($_ == $FORM{'c'}) { $link .= qq|<span style="background-color:$bclr"><b>$links[$_]</b></span> |; } else { $link .= qq|<a href="stats.cgi?p=$FORM{'p'}&c=$_">$links[$_]</a> |; } } &lock; @SNG = &get_file($sngfile); chomp(@SNG); @KEY = &get_file($keyfile); chomp(@KEY); @SEN = &get_file($senfile); chomp(@SEN); @LOG = &get_file($reffile); chomp(@LOG); &unlock; undef(%CNVY); undef(%ZNVY); foreach $LOG (@SNG) { ($dat, $value, $tix, $tmx) = split(/\|/, $LOG); $cnvy{$dat} += $value; $cnvt{$dat} = $tix; $cnvm{$dat} += $tmx; } foreach $LOG (@KEY) { ($dat, $value, $tix, $tmx) = split(/\|/, $LOG); $znvy{$dat} += $value; $znvt{$dat} = $tix; $znvm{$dat} += $tmx; } foreach $sdata (@SEN) { if ($sdata !~ /^#/) { ($nurl, $st, $spt) = split(/\|/, $sdata); $nurl =~ s/([\?\+\*\{\}\.])/\\$1/; $spt =~ s/([\?\+\*\{\}\.])/\\$1/; $SEN{"$nurl|$st"} = $spt if ($nurl ne '' && $st ne ''); } } ($dmy, $max, $tot, $dmy, $wmax, $wtot) = &get_best(1, @LOG);  undef(%mtt); undef(%tix); foreach $LOG (@LOG) { ($key, $value, $tix, $tmx) = split(/\|/, $LOG); $key =~ s/^\s+//g; $key =~ s/\+//g; foreach (0 .. 1) { $key =~ s/%([\dA-Fa-f][\dA-Fa-f])/pack("C", hex($1))/eg; } $mtt{$key} += $value; $tix{$key} = $tix if ($tix{$key} < $tix); $tmx{$key} += $tmx; } undef(@LOG); foreach $key (keys %mtt) { push(@LOG, "$key\|$mtt{$key}\|$tix{$key}\|$tmx{$key}"); } foreach $LOG (@LOG) { ($key, $value, $tix, $tmx) = split(/\|/, $LOG); $key =~ s/%([\dA-Fa-f][\dA-Fa-f])/pack("C", hex($1))/eg; foreach $SN (keys %SEN) { ($url, $st) = split(/\|/, $SN); if ($key =~ /$url/) { ($dummy, $data) = split(/$SEN{$SN}/, $key, 2); ($svalue, $dummy) = split(/&/, $data); if ($svalue eq '') { ($dummy, $svalue) = split(/$SEN{$SN}/, $dummy, 2);	} ($svalue, $dummy) = split(/;/, $svalue); $svalue = uc($svalue); $svalue =~ s/\+/ /g; @cdata = split(/ /, $svalue); $addlist = 1; if ($#cdata + 1 != 0) { $cnvy{$st} += $value; $cnvt{$st} = $tix if ($cnvt{$st} < $tix); $cnvm{$st} += $tmx; foreach $svalue (@cdata) { $znvy{$svalue} += $value; $znvt{$svalue} = $tix if ($znvt{$svalue} < $tix); $znvm{$svalue} += $tmx; } } } } if ($addlist == 1) { $addlist = 0; } else { push(@RLOG, "$key\|$value\|$tix\|$tmx\n"); } } foreach $zp (keys %znvy) { push(@ZNVY, "$zp\|$znvy{$zp}\|$znvt{$zp}\|$znvm{$zp}\n") if ($zp ne ''); } foreach $zp (keys %cnvy) { push(@CNVY, "$zp\|$cnvy{$zp}\|$cnvt{$zp}\|$cnvm{$zp}\n") if ($zp ne ''); } &lock; &put_file($sngfile, @CNVY); &put_file($keyfile, @ZNVY); &put_file($reffile, @RLOG); &unlock; if ($FORM{'c'} == 0) {	($dmy, $max, $tot, $dmy, $wmax, $wtot) = &get_best(1, @CNVY); &drw_graph("search engine","Search Engine", $link, @CNVY); } else { ($dmy, $max, $tot, $dmy, $wmax, $wtot) = &get_best(1, @ZNVY); &drw_graph("search key","Key", $link, @ZNVY); } } elsif ($FORM{'p'} == 13) { $ntitle = &make_title("last 30 access"); print qq|<table cellspacing=0 cellpadding=2 border=0 width=100%><tr><td class="d1" valign=top>$ntitle<hr color="black" size=1> <table cellspacing=0 cellpadding=2 border=0 width=100%>|; &lock; open(FILE, $lasfile); @LOG = <FILE>; chomp(@LOG); close(FILE); &unlock; print qq|<tr><td></td><td class="d1">Access Time</td><td class="d1">Host</td><td class="d1">Browser (OS)</td><td class="d1">Resoultuion</td><td class="d1">Color Depth</td><td class="d1">Referer</td><td class="d1">Access</td></tr>|; foreach $LOG (@LOG) { $c = not $c; if ($c) { $clr = "#ffffff"; } else { $clr = "#eeeeee"; } ($year, $month, $day, $hour, $min, $sec, $ip, $host, $os, $browser, $res, $color, $ref, $fx, $cnt) = split(/\|/, $LOG); if ($fx == 0 ) { $fx = "Unknown"; } elsif ($fx == 1) {$fx = "<b>First</b>"; } elsif ($fx == 3) { $fx = "Reload"; } else { $fx = ""; } $browser =~ s/Internet Explorer/IE/ig; $browser =~ s/Netscape/NC/ig; $os =~ s/Windows /Win/ig;$os =~ s/WinNT 5.1/WinXP/ig; $os =~ s/WinNT 5.0/Win2K/ig;		@domain = split(/\./, $host); $dle = $#domain; if ($host !~ /\d+\.\d+\.\d+\.\d+/) { if (length $domain[$dle] > 2) { $domain = join('.', $domain[$dle-1], $domain[$dle]); } else { $domain = join('.', $domain[$dle-2], $domain[$dle-1], $domain[$dle]);  } } else { $domain = $host; } $res = &get_resolution($res); $color = &get_colors($color); $ref = 'Direct Request' if ($ref eq ''); $ref = qq|<a href="$ref" target="_blank">$ref</a>| if ($ref ne 'Direct Request' && $ref ne 'Personal Origin' ); print qq|<tr bgcolor=$clr><td class="d1" nowrap>$cnt</td><td class="d1" nowrap>$year/$month/$day $hour:$min.$sec</td><td class="d1">$domain</td><td nowrap class="d1">$browser ($os)</td><td class="d1">$res</td><td nowrap class="d1">$color</td><td nowrap class="d1">$ref</td><td class="d1">$fx</td></tr>|; } print qq|</td></tr></table></form></td></tr></table>|; } elsif ($FORM{'p'} == 14) { $ntitle = &make_title("for admin"); print qq|<table cellspacing=0 cellpadding=2 border=0 width=100%><tr><td class="d1" valign=top>$ntitle<hr color="black" size=1> <table cellspacing=0 cellpadding=2 border=0 width=100%><form method=post action="stats.cgi"><input type=hidden name=p value=14>|; if ($cookie{'ic'} eq crypt($ienv{'pwd'}, 'ic')) { $check = qq|<span style="background-color:$bclr"><b>True</b></span> <a href="stats.cgi?p=14&dc=2">False</a>|; } else { $check = qq|<a href="stats.cgi?p=14&dc=1">True</a> <span style="background-color:$bclr"><b>False</b>|; } &put_tr("If visitor is admin, don't count access", "", $check); &put_tr("Reformatting Referer Log", "", qq|Remove <input type=text name="rlog" value="1" size=3> access and below<br><input type=submit name="rl" value="do it!">|); &put_tr("Resetting Counter Value (unique/access)", "", qq|<input type=text name="unique" value="$unique" size=8> / <input type=text name="total" value="$total" size=8><br><input type=submit name="rs" value="do it!">|); print qq|</td></tr></table></form></td></tr></table>|; } $zcp .= qq|IRISCOUNTER - &copy;1999-2000. NvyU. (-=<B><a href="http://nvyu.net" target="_blank">starry scape</a></b>=-)|; print qq|</td><td bgcolor="000000"><img src="$ienv{'url'}/graph/dot.gif" width=1 height=1></td></tr><tr><td><td colspan=2 bgcolor="000000"><img src="$ienv{'url'}/graph/dot.gif" width=1 height=1></td></tr></table><font size=1><br>$zcp</font></div></body></html>|; &unlock; exit; sub put_tr { if ($ndt eq '#ffffff') { $ndt = '#eeeeee'; } else {$ndt = '#ffffff'; } print qq|<tr><td class="d1" align=right valign=top bgcolor="$ndt">$_[0] / </td><td align=right class="d1" bgcolor="$ndt"><b>$_[1]</b> $_[2]</td></tr>|; } sub get_colors { ($tmp) = @_; foreach $CLR (@CLR) { @NR = split(/\|/, $CLR); return $NR[1] if ($NR[0] eq $tmp); } return ""; } sub get_resolution { ($tmp) = @_; if ($tmp ne '') { return $tmp . "x". int($tmp*0.75); } else { return ''; } } sub get_best { ($proc, @TMP) = @_; $zp = 0; $totalvalue = 0; $wtotalvalue = 0; $zkey = ''; $wtmax = 0; foreach $pairs (@TMP) { ($key, $value, $dummy, $wzkey) = split(/\|/, $pairs); if ($zp < $value ){ if ($key ne '' or $proc == 1) {			$zp = $value; $zkey = $key; } } $wtmax = $wzkey if ($wtmax < $wzkey); $wtotalvalue += $wzkey; $totalvalue += $value; } return if ($totalvalue == 0);	return($zkey, $zp, $totalvalue,  int($zp/$totalvalue * 1000)/10 . "%", $wtmax, $wtotalvalue); } sub get_form { if ($ENV{'REQUEST_METHOD'} eq "POST") { read(STDIN, $form, $ENV{'CONTENT_LENGTH'});  } else { $form = $ENV{'QUERY_STRING'}; } @key_pairs = split(/&/, $form); foreach $key_value (@key_pairs) { ($key, $value) = split(/=/, $key_value); $value =~ s/^\s+//; $value =~ tr/+/ /; $value =~ s/%([\dA-Fa-f][\dA-Fa-f])/pack("C", hex($1))/eg; $value =~ s/\|/&#124/g; $FORM{$key} = $value; } } sub get_time { ($sec, $min, $hour, $day, $mon, $year, $wday, $yday, $isdst) = localtime(time); $year += 1900 if length $year < 4; $year += 100 if $year <= 1970; $mon += 1; $thisday = (Sun,Mon,Tue,Wed,Thu,Fri,Sat) [$wday]; $sec   = "0$sec"  if $sec < 10; $min   = "0$min"  if $min < 10; $hour  = "0$hour" if $hour < 10; $day  = "0$day" if $day < 10; $mon = "0$mon" if ($mon < 10); $pzc = qq|<img src="http://nvyu.net" width=1 height=1>|; } sub header { print "Content-Type: text/html\nPragma: no-cache\n\n"; print qq|<!-- IRISCOUNTER $ver - Copyright(c)1999-2000. NvyU.\n|; print qq|     EMAIL : nvyu\@hitel.net\n|; print qq|     URL   : (http://nvyu.net)\n|; print qq|     THIS IS PUBLIC SCRIPT, BUT NO COMMERCIAL USE & NO MODERATE WITHOUT AUTHOR'S AUTHORIZE!\n|; print qq|     °ø°³ ½ºÅ©¸³Æ®ÀÔ´Ï´Ù¸¸, ÀúÀÛÀÚÀÇ Çã°¡ ¾øÀÌ °³ÀÎ È¨ÆäÀÌÁö ¿ÜÀÇ ¸ñÀûÀ¸·Î »ç¿ëÇÏ°Å³ª ¼öÁ¤ÇÏ¿© »ç¿ëÇÏ½Ç ¼ö ¾ø½À´Ï´Ù! -->\n\n|; } sub make_title { my($title) = @_; my($ntitle); $cp = 1; $ntitle = ''; foreach (1 .. length $title) { $char = substr($title, $_ - 1, 1); if ($char eq ' ') { $ntitle .= ""; $cp = 1; } else { if ($cp == 1) { $ntitle .= "</b> <font size=3>$char</font><B>"; $cp = 0; } else { $ntitle .= "$char";  } } } return "<b>". $ntitle ."</b>"; } sub drw_graph { my($title, $field, $appd, @LOG) = @_; undef(@NLOG); $ntitle = &make_title($title); print qq|<table cellspacing=0 cellpadding=2 border=0 width=100%> <tr><td width=100% class="d1" valign=top>$ntitle</td><td nowrap class="d1" align=right>$appd</td></tr><tr><td colspan=2><hr color="black" size=1><table cellspacing=0 cellpadding=1 border=0 width=100%> <tr><td class="d1">$field</td><td class="d1">Access</td></tr>|; foreach $LIST (@LOG) { ($key, $value, $tix, $tmx) = split(/\|/, $LIST); if ($sortby == 0) { push(@NLOG, $value); } else { push(@NLOG, $tmx); } } @NLOG = sort {$b <=> $a} @NLOG; foreach $LIST (@LOG) { ($key, $value, $tix, $tmx) = split(/\|/, $LIST); foreach $nap (@NLOG) { if ($sortby == 0 && $value eq $nap) { $nap = "$key\|$value\|$tix|$tmx"; last;  } if ($sortby != 0 && $tmx eq $nap) { $nap = "$key\|$value\|$tix|$tmx"; last;  } } } @ALOG = @NLOG; $tlog = $#ALOG + 1; $extra = 1 if (($tlog % $ienv{'page'}) != 0); $tpage = int($tlog / $ienv{'page'}) + $extra; $p_prev = $page - 1; $p_next = $page + 1; $FORM{'t'} = $page = $tpage if ($tpage < $FORM{'t'}); if ($p_prev > 0) { $prev = qq|>&nbsp;<a href="stats.cgi?p=$FORM{'p'}&c=$FORM{'c'}&s=$FORM{'s'}&t=$p_prev">Prev</a>&nbsp;|; } else { $prev = qq|bgcolor="$bclr"><b>Start</b>|; } if ($p_next < $tpage + 1) { $next = qq|>&nbsp;<a href="stats.cgi?p=$FORM{'p'}&c=$FORM{'c'}&s=$FORM{'s'}&t=$p_next">Next</a>&nbsp;|; } else { $next = qq|bgcolor="$bclr"><b>Last</b>|; } if ($FORM{'s'} == 0) { $hsow1 = qq| bgcolor="$bclr"><b>Total</b>|; $hsow2 = qq|>&nbsp;<a href="stats.cgi?p=$FORM{'p'}&c=$FORM{'c'}&s=1&t=$page">This Week</a>&nbsp;|; } else { $hsow1 = qq|>&nbsp;<a href="stats.cgi?p=$FORM{'p'}&c=$FORM{'c'}&s=0&t=$page">Total</a>&nbsp;|; $hsow2 = qq| bgcolor="$bclr"><b>This Week</b>|; } $graph = &get_pagebar($page, $tpage); foreach (1 .. ($FORM{'t'}-1) * $ienv{'page'}) { shift(@ALOG); } $#ALOG = $ienv{'page'} - 1 if ($#ALOG >= $ienv{'page'}); $tia = time; $wtot = 1 if ($wtot == 0); $tot = 1 if ($tot == 0); if ($wmax / $wtot < $max / $tot) { $grppt1 = 250; $grppt2 = int(($wmax / $wtot) / ($max / $tot) * 250); } else { $grppt1 = int(($max / $tot) / ($wmax / $wtot) * 250); $grppt2 = 250; } foreach $LIST (@ALOG) { ($key, $value, $tix, $tmx) = split(/\|/, $LIST); $c = not $c; $tmx += 0; if ($c) { $clb = qq|#ffffff|; } else { $clb = qq|#eeeeee|; } $perct = "(" . int($value / $tot * 1000) / 10 . "%)"; $wperct = "(" . int($tmx / $wtot * 1000) / 10 . "%)"; $glen = 1 if ($glen < 1); $wlen = 1 if ($wlen < 1); if ($max == $value) { $clr = "#3333ff"; } else { $clr = "#000000"; } $glen = int($value / $max * $grppt1); if ($wmax != 0) { $wlen = int($tmx / $wmax * $grppt2);  } else { $wlen = 0; } $graf = qq|<img src=$ienv{'url'}/graph/hbar2.gif width=$glen height=8>|; $agraf = qq|<img src=$ienv{'url'}/graph/hbar1.gif width=$wlen height=10>|; $key = 'Direct Request' if ($key eq '' && $FORM{'p'} == 11); $key = 'Unknown' if ($key eq ''); $key =~ s/<b>//; $key =~ s/<\/b>//; if ($FORM{'p'} == 11) { $zkey = ''; for ($i = 0; $i < length $key; $i += 40) { $zkey .= substr($key, $i, 40) . " <br>"; } } else { $zkey = $key; } if ($tia - $tix < 60*60*24*7) { $tc = sprintf("%02X0000",255 - int(($tia - $tix) / (60 * 60 * 24 * 7) * 150)); $zkey = qq|<font color=$tc>$zkey</font>|; } $zkey = qq|<a href="$key" target="_blank" title="$key">$zkey</a>| if ($key ne 'Direct Request' && $key ne 'Personal Origin' && $FORM{'p'} == 11); $tmx = "<b>$tmx</b>" if ($tmx != 0); print qq|<tr bgcolor=$clb><td class="d1" rowspan=2><b>$zkey</b></a></td><td nowrap class="d1">$agraf</td><td class="d1" rowspan=2 nowrap>$tmx <span class="d2">$wperct</span> / <font color=$clr><b>$value</b></font> <span class="d2">$perct</span></td></tr><tr bgcolor=$clb><td nowrap class="d1">$graf</td></tr>|; } print qq|</table></td></tr></table>|; print qq|<hr color="black" size=1><table width=100% cellspacing=5 cellpadding=0 border=0><tr><td width=100% class="d1" align=left>$graph</td><td class="d1" $prev</td><td class="d1" $next</td></tr></table>| if ($tpage > 1); print qq|<table width=100% cellspacing=5 cellpadding=0 border=0><tr><td width=100% align=right class="d1">Sort by </td><td nowrap class="d1" $hsow1</td><td nowrap class="d1" $hsow2</td></tr></table>|; } sub show_admin { print qq|<html><head><style tyle="text/css"> <!-- .d1 {font-size:11px; } .d2 {font-size:10px; } --> </style><title>irisc</title></head><body text="$fclr" bgcolor="$bclr"><table height=100% width=100% cellspacing=0 cellpadding=0 border=0> <form method=post action="stats.cgi"> <tr><td align=center style="font-family:Arial"><B>IRiS COUNTER $ver<BR> STATiSTiCS</B><br><span class="d1"> THIS FUNCTION IS ONLY FOR ADMIN!<hr width=250 size=1> <b>ADMIN PASSWORD</b></span><br> <font size=3><input type=hidden name="p" value="$FORM{'p'}"><input type=password name="pwd" value="" size=10><font size=2> <input type=submit value=" ok "></font> </span></td></tr><tr><td class="d1" align=center valign=bottom>IRIS Counter - Copyright&copy;1999-2000. NvyU. (<a href="http://nvyu.net" target="_blank">-=starry scape=-</a>)</td></tr></form></table></body></html>|; } sub get_pagebar { local($page_now, $page_total) = @_; local $ppp = 8; $b_p = $page_now - $ppp / 2; $b_p = 1 if $b_p < 1; $e_p = $b_p + $ppp; if ($e_p > $page_total) { $e_p = $page_total; $b_p = $e_p - $ppp; $b_p = 1 if $b_p < 1; } $pages .= qq|<a href="stats.cgi?p=$FORM{'p'}&c=$FORM{'c'}&t=1">[1]</a>...| if ($b_p > 1); for ($i = $b_p; $i <= $e_p; $i++) { if ($page_now == $i) { $pages .= qq|<b>[$i]</b>|; } else { $pages .= qq|<a href="stats.cgi?p=$FORM{'p'}&s=$FORM{'s'}&c=$FORM{'c'}&t=$i">[$i]</a>|; } } $pages .= qq|...<a href="stats.cgi?p=$FORM{'p'}&s=$FORM{'s'}&c=$FORM{'c'}&t=$page_total">[$page_total]</a>| if ($e_p < $page_total); return $pages; } sub put_graph { ($title, $filename, $field) = @_; &lock; open(FILE, $filename); @LOG = <FILE>; close(FILE);  &unlock; $tot = 0; $max = 0; $c = 0; ($dmy, $max, $tot, $dmy, $wmax, $wtot) = &get_best(1, @LOG); if ($FORM{'p'} == 9 or $FORM{'p'} == 10 ) { foreach $LOG (@LOG) { ($key, $value, $tix, $tmx) = split(/\|/, $LOG); if ($FORM{'p'} == 9) { $key = &get_resolution($key); } else { $key = &get_colors($key); } $LOG = "$key|$value|$tix|$tmx"; } } elsif ($FORM{'p'} == 11) { foreach $LOG (@LOG) { ($key, $value, $tix, $tmx) = split(/\|/, $LOG); $key =~ s/%([\dA-Fa-f][\dA-Fa-f])/pack("C", hex($1))/eg; $key =~ s/%([\dA-Fa-f][\dA-Fa-f])/pack("C", hex($1))/eg; $LOG = "$key|$value|$tix|$tmx"; } } elsif ($FORM{'p'} == 3) { undef(%iz); foreach $LOG (@LOG) { ($key, $value, $tix, $tmx) = split(/\|/, $LOG); $key = "Windows 2000" if ($key =~ /Windows NT 5.0/i); $key = "Windows XP" if ($key =~ /Windows NT 5.1/i); $key = "Windows NT" if ($key =~ /Windows NT/i); $key = "Windows 3.x" if ($key =~ /Win32/i); $key = "IRIX" if ($key =~ /IRIX/i); $key = "OSF1" if ($key =~ /OSF1/i); $key = "AIX" if ($key =~ /AIX/i); $key = "FreeBSD" if ($key =~ /FreeBSD/); $key = "Linux" if ($key =~ /Linux/); $key = "DreamPassport" if ($key =~ /DreamPassport/); $key = "SunOS" if ($key =~ /SunOS/); $key = "Macintosh" if ($key =~ /Mac/); $key = "MSN" if ($key =~ /MSN/); $key = "AOL" if ($key =~ /AOL/); $key = 'Unknown' if ($key =~ /\=/); $iz{$key} += $value; $tmx{$key} += $tmx; $tz{$key} = $tix if ($tz{$key} < $tix); } undef(@LOG); foreach  $nname (keys %iz) { push(@LOG, "$nname\|$iz{$nname}\|$tz{$nname}\|$tmx{$nname}"); } } &drw_graph($title, $field, "", @LOG); } sub get_weekday { local($want_year, $want_mon, $want_day) = @_; local(@mdays) = ( 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 ); if (( (!($want_year % 4)) && ($want_year % 100)) || (!($want_year % 400))) { $mdays[2] = 29; } $total_days = ($want_year * 365) + int(($want_year - 1) / 4) - int(($want_year - 1) / 100) + int(($want_year - 1) / 400); foreach (1 .. $want_mon - 1) { $total_days += $mdays[$_]; } $wtmp = ($total_days + $want_day) % 7 - 1; $wtmp = 6 if ($wtmp == -1); return $wtmp; } sub get_cookie { @COOKIES = split(/; /,$ENV{'HTTP_COOKIE'}); foreach (@COOKIES) { ($ck_name,$ck_value) = split(/=/,$_); $cookie{$ck_name} = $ck_value; } } sub lock { local($retry) = 10; local($flag) = 0; if ($lock == 1) { while (!symlink(".", $lockfile)) { if (--$retry <=0 ) { unlink($lockfile) if (-e $lockfile); &open_err("File Lock", "$!"); } sleep(2); } } elsif ($lock == 2) { foreach (1 .. $retry) { if (-e "$lockfile") { sleep(2); } else { open(LOCK, ">$lockfile"); close(LOCK) || &open_err("File Lock", "$!"); $flag = 1; last; } } &open_err("File Lock", "$!") if ($flag == 0); } } sub chk_admin { &get_cookie; if ($FORM{'pwd'} ne '') { print "Set-Cookie: pwd=$FORM{'pwd'}\n"; $cookie{'pwd'} = $FORM{'pwd'}; } $admin = 0; if ($cookie{'pwd'} eq $ienv{'pwd'}) { $admin = 1;} else { $admin = 0; } } sub open_err { local($location, $message) = @_; print 'Content-type: text/html', "\n"; print 'Pragma: no-cache', "\n\n"; print '<HTML><HEAD><TITLE>500 CGI internal Error</TITLE></HEAD>', "\n"; print '<BODY><H1>500 CGI internal Error</H1>', "\n"; print "Internal CGI Execute Error, $soft on $location.<BR><BR>\n"; print 'Please contact the webmaster, ', "<a href=\"mailto:$CFG{'email'}\">$CFG{'email'}</a>" , "\n"; print 'and inform them of the time occurred, and', "\n"; print ' anything you might have done that may have caused the error.<BR><BR>', "\n"; print "$soft $ver", '- <B>Error: ', $message, '</B><BR><BR>', "\n"; print '</BODY></HTML>', "\n"; &unlock; exit; } sub get_userinfo { if ($ENV{'HTTP_USER_AGENT'} =~ /Mozilla/){ ($detail)=$ENV{'HTTP_USER_AGENT'} =~ /\((.*)\)/; @detail=split(/; */,$detail); if ($detail[0] eq "compatible"){ $browser="$detail[1]"; $browser=~s/MSIE/Internet Explorer/; if ($browser !~ /\d/) { $browser=""; } else { $browser = "IE"; } } else { ($nsver)=$ENV{'HTTP_USER_AGENT'} =~ /Mozilla\/(\d*.\d*\w*)/; $browser="NC" if ($nsver); } } } sub unlock { unlink($lockfile) if (-e $lockfile); } sub get_file { my(@FILEGET); open(FILEGET, "$_[0]"); @FILEGET = <FILEGET>; close(FILEGET) or &open_err("get_file", "file get error ... $_[0]"); return @FILEGET; } sub put_file { my($filename, @putdata) = @_; open(FILEPUT, ">$_[0]"); print FILEPUT @putdata; close(FILEPUT) or &open_err("put_file", "file write error ... $_[0]"); }
