home *** CD-ROM | disk | FTP | other *** search
/ PC Online 1998 November / PCO_1198.ISO / filesbbs / os2 / os2www.arj / OS2WWW.ZIP / SYS406.R8 / PERL-BIN / BROWSERS.PL next >
Encoding:
Text File  |  1996-05-10  |  6.0 KB  |  142 lines

  1. # -------------------------------------------------------------------------
  2. # This module presents an example PowerWeb Server++ WebScript.
  3. #
  4. # It is deliberately written as a module, not a package, to demonstrate
  5. # how you would write a WebPerl Script while developing and debugging it.
  6. # When development is complete, you would convert it into a package
  7. # with a subroutine, as demonstrated by the "sample.pm" package.
  8. #
  9. # BROWSERS - Analyzes the user agent log by browser and OS
  10. #
  11. # ACKNOWLEDGEMENT:
  12. #   Original Author: Jon Udell, Byte Magazine
  13. #
  14. # COPYRIGHT:
  15. #   CompuSource (Pty) Ltd
  16. #   Licensed Materials - Property of CompuSource (Pty) Ltd
  17. #   (C) Copyright CompuSource (Pty) Ltd 1994-1996.
  18. #   All Rights Reserved
  19. #   Use, duplication, or disclosure restricted by international
  20. #   copyright law.
  21. #
  22. # -------------------------------------------------------------------------
  23.  
  24. use WebPerl;
  25.  
  26. my ($Mozilla, $Mosaic, $Microsoft, $Lynx, $WebExplorer, $NetCruiser) = (0, 0, 0, 0, 0, 0);
  27. my ($Windows, $Macintosh, $UnixGUI, $UnixText, $OS2) = (0, 0, 0, 0, 0);
  28. my ($links, $hits) = (0, 0);
  29. my ($date, $time, $tz, $ip, $browser);
  30. my ($first_date, $last_date);
  31. my %BrowserList;
  32. my ($parcel) = WebPerl::GetParcel();
  33. my ($logfile) = WebPerl::ReadText($parcel, "Config:/ServerRoot");
  34.  
  35. WebPerl::Print '<html><head><title>Browser Stats</title></head>';
  36. WebPerl::Print '<body background=/icons/textures/paper.jpg>';
  37.  
  38. $logfile = $logfile . '/logs/http.ag1';
  39.  
  40. if (!open (HITS, $logfile)) {
  41.     WebPerl::Print "
  42. <h3>Error:</h3>The log file $logfile was not found.<p>
  43. You either do not have
  44. <a href=/!admin/servers/http/audit>User-Agent logging</a> enabled,
  45. or you have not <a href=/admin/svrlog.htm>rotated</a> your log file.<p>";
  46. }
  47. else {
  48.     while (<HITS>)
  49.         {
  50.         chop;
  51.  
  52.         if (/Mozilla/ && !/MSIE/) # watch out for "cloaked" MSIE!
  53.             {$Mozilla++;}
  54.         elsif (/Mosaic/)
  55.             {$Mosaic++;}
  56.         elsif (/Microsoft/ || /MSIE/)
  57.             {$Microsoft++;}
  58.         elsif (/Lynx/)
  59.             {$Lynx++;}
  60.         elsif (/WebExplorer/)
  61.             {$WebExplorer++;}
  62.         elsif (/NetCruiser/)
  63.             {$NetCruiser++;}
  64.  
  65.         if (/Windows|Microsoft|Win32|Quarterdeck|Chameleon|AIR_Mosaic|SPRY_Mosaic|Win16|WinNT|WindowsNT|Win95/)
  66.             {$Windows++;}
  67.         elsif (/Macintosh/)
  68.             {$Macintosh++;}
  69.         elsif (/X11|X Window/)
  70.             {$UnixGUI++;}
  71.         elsif (/Lynx/)
  72.             {$UnixText++;}
  73.         elsif (/WebExplorer/)
  74.             {$OS2++;}
  75.  
  76.         if (/\[(.*?):(.*)\s(.*)\]\s(.*)\s:\s(.*)/) {
  77.             ($date, $time, $tz, $ip, $browser) = ($1, $2, $3, $4, $5);
  78.             $BrowserList{$browser}++;
  79.  
  80.             if (!$first_date) {
  81.                 $first_date = $date;
  82.             }
  83.         }
  84.         $links++;
  85.         }
  86.  
  87. close(HITS);
  88.  
  89. $last_date = $date;
  90.  
  91. $hits = 0;
  92. foreach $browser (sort keys %BrowserList)
  93.     {
  94.     $hits += $BrowserList{$browser};
  95.     }
  96.  
  97. WebPerl::Print "<h3>Browser Stats from $first_date to $last_date</h3>";
  98.  
  99. WebPerl::Print '<table border cellpadding=4>';
  100. WebPerl::Print '<caption><b>Browser summary</b></caption>';
  101. WebPerl::Print '<tr><th><b>Browser</b></th><th><b>Hits</b></th><th><b>%</b></th></tr>';
  102. WebPerl::Print sprintf ('<tr align=right><td align=left>Netscape</td><td align=right>%d</td><td><b><b>%.0f</b></td></tr>',    $Mozilla,        100*$Mozilla/$hits);
  103. WebPerl::Print sprintf ('<tr align=right><td align=left>Mosaic</td><td align=right>%d</td><td><b>%.0f</b></td></tr>',            $Mosaic,            100*$Mosaic/$hits);
  104. WebPerl::Print sprintf ('<tr align=right><td align=left>Microsoft</td><td align=right>%d</td><td><b>%.0f</b></td></tr>',        $Microsoft,        100*$Microsoft/$hits);
  105. WebPerl::Print sprintf ('<tr align=right><td align=left>Lynx</td><td align=right>%d</td><td><b>%.0f</b></td></tr>',                $Lynx,            100*$Lynx/$hits);
  106. WebPerl::Print sprintf ('<tr align=right><td align=left>WebExplorer</td><td align=right>%d</td><td><b>%.0f</b></td></tr>',    $WebExplorer,    100*$WebExplorer/$hits);
  107. WebPerl::Print sprintf ('<tr align=right><td align=left>NetCruiser</td><td align=right>%d</td><td><b>%.0f</b></td></tr>',        $NetCruiser,    100*$NetCruiser/$hits);
  108. WebPerl::Print sprintf ('<tr align=right><td align=left>Accounted for</td><td align=right>%d</td><td><b>%.0f</b></td></tr>',
  109.     $Mozilla+$Mosaic+$Microsoft+$Lynx+$WebExplorer+$NetCruiser,
  110.     100*($Mozilla+$Mosaic+$Microsoft+$Lynx+$WebExplorer+$NetCruiser)/$hits);
  111. WebPerl::Print sprintf ('<tr align=right><td align=left><b>Total</b></td><td align=right><b>%d</b></td><td><b>100</b></td></tr>',                $hits);
  112. WebPerl::Print '</table>';
  113.  
  114. WebPerl::Print '<p><table border cellpadding=4>';
  115. WebPerl::Print '<caption><b>Platform summary</b></caption>';
  116. WebPerl::Print '<tr><th><b>Platform</b></th><th><b>Hits</b></th><th><b>%</b></th></tr>';
  117. WebPerl::Print sprintf ('<tr align=right><td align=left>Windows</td><td align=right>%d</td><td><b>%.0f</b></td></tr>',    $Windows,    100*$Windows/$hits);
  118. WebPerl::Print sprintf ('<tr align=right><td align=left>UnixGUI</td><td align=right>%d</td><td><b>%.0f</b></td></tr>',    $UnixGUI,    100*$UnixGUI/$hits);
  119. WebPerl::Print sprintf ('<tr align=right><td align=left>UnixText</td><td align=right>%d</td><td><b>%.0f</b></td></tr>',    $UnixText,    100*$UnixText/$hits);
  120. WebPerl::Print sprintf ('<tr align=right><td align=left>Macintosh</td><td align=right>%d</td><td><b>%.0f</b></td></tr>',    $Macintosh,    100*$Macintosh/$hits);
  121. WebPerl::Print sprintf ('<tr align=right><td align=left>OS/2</td><td align=right>%d</td><td><b>%.0f</b></td></tr>',        $OS2,            100*$OS2/$hits);
  122. WebPerl::Print sprintf ('<tr align=right><td align=left>Accounted for</td><td align=right>%d</td><td><b>%.0f</b></td></tr>',
  123.     $Windows+$Macintosh+$UnixGUI+$UnixText+$OS2,
  124.     ($Windows+$Macintosh+$UnixGUI+$UnixText+$OS2)/$hits);
  125. WebPerl::Print sprintf ('<tr align=right><td align=left><b>Total</b></td><td align=right><b>%d</b></td><td><b>100</b></td></tr>',                        $hits);
  126. WebPerl::Print '</table>';
  127.  
  128. WebPerl::Print '<p><table border cellpadding=4>';
  129. WebPerl::Print '<caption><b>Browser Details</b></caption>';
  130. WebPerl::Print '<tr><th><b>Browser</b></th><th><b>Hits</b></th></tr>';
  131. foreach $browser (sort keys %BrowserList)
  132.     {
  133. WebPerl::Print "<tr align=right><td align=left>$browser</td><td>$BrowserList{$browser}</td></tr>";
  134.     }
  135. WebPerl::Print '</table>';
  136. }
  137.  
  138. WebPerl::Print '</body></html>';
  139.  
  140. 0;
  141.  
  142.