get-active2.pl
上传用户:shbosideng
上传日期:2013-05-04
资源大小:1555k
文件大小:7k
源码类别:

SNMP编程

开发平台:

C/C++

  1. #!/usr/bin/perl
  2. #
  3. # Author: Russ Wright, Lawrence Berkeley National Laboratory December 1997
  4. # Local modifications by Wee-Meng Lee  HP Singapore (colour/lynx)
  5. #    and Mark Mushkin  HP Santa Clara  (avg/max/min that suit our needs)
  6. #  Last Update on  Oct 14, 1997
  7. #
  8. # This will look at the $trafficDir directory for MRTG generated HTML
  9. # files, parse them and generate a listing of the most active interfaces
  10. # in a file called "active.htlm" in the same directory
  11. #
  12. # modify this if you wish as long as the above credit is not removed
  13. #
  14. # The only weird thing I do is to skip tunnel interfaces (see code below)
  15. #
  16. # TWO VARIABLES YOU MUST CHANGE
  17. #
  18. $trafficDir="/usr/local/httpd/htdocs";
  19. #
  20. # I put it in a file and include it because I use it in other scripts
  21. # if you don't - comment this out and uncomment the above line
  22. #require "trafficdir.include";
  23. # CHANGE THIS to your organization name
  24. $orgName="HP Singapore - IT Site Infrastructure";
  25. $outFile = "$trafficDir/active.html";
  26. # The following may be changed and I admit that it isn't perfect how I decide
  27. # to highlight stuff.
  28. #
  29. #values over this will be displayed in the specified color
  30. #  these are for the MAX values
  31. $maxAMBER = 70;
  32. $maxRED = 90;
  33. # these are for the Average and Current values
  34. $AMBER = 30;
  35. $RED = 60;
  36. #Defining the colors
  37. $REDcolor="#ff0000";
  38. $AMBERcolor="#ffff00";
  39. $GREENcolor="#00ff00";
  40. # Refresh interval (minutes) for HTML doc
  41. $refreshInt=10;
  42. #
  43. $refreshSeconds=60*$refreshInt;
  44. #
  45. # Max % to look at (if the Max is lower then we do not include in the list)
  46. #$maxThresh = 5;
  47. $maxThresh = 0;
  48. $theDate=`date +"%m/%d/%y %H:%M"`;
  49. open(LS, "ls $trafficDir/*.[0-9]*.html|") || die "Couldn't list directory";
  50. while (<LS>) {
  51.         chop;
  52.         $theFile = $_;
  53.         open(IN, "$theFile") || die "Couldn't open $theFilen";
  54.         $i=0;
  55.         while (<IN>) {
  56.                 if (/Traffic Analysis for .*[0-9]<BR>(.*)</H1> <TABLE>/) {
  57.                         if ($1 =~ /tunnel/i) {
  58. # skip tunnels
  59.                                 last;
  60.                         }
  61.                         $desc{$theFile} = $1;
  62.                 }
  63.                 if (/(([0-9.]*%))/) {
  64.                         $theList{$theFile}[$i++] = $1;
  65.                 }
  66.         }
  67.         close(IN);
  68. }
  69. close(LS);
  70. #
  71. #
  72. # the array contains all the percentages: the following 6 for
  73. #               daily, weekly, monthly, yearly
  74. #
  75. # 0 Max In
  76. # 1 Avg In
  77. # 2 Cur In
  78. # 3 Max Out
  79. # 4 Avg Out
  80. # 5 Cur Out
  81. #
  82. #
  83. open(OUT, ">$outFile") || die "Couldn't create $outFile";
  84. &PrintHead;
  85. foreach $key (keys %theList) {
  86. # get sum of both max in and out
  87. #        $sumInOut = $theList{$key}[0] + $theList{$key}[4]; # use for max
  88.          $sumInOut = $theList{$key}[1] + $theList{$key}[4]; # use for avg
  89.         if ( ($sumInOut > $maxThresh) ||
  90.             ($curIn > $highlightThresh) ||
  91.             ($curOut > $highlightThresh) ||
  92.             ($avgIn > $highlightThresh) ||
  93.             ($avgOut > $highlightThresh) ) {
  94.                 $printList{$key} = $sumInOut;
  95.         }
  96. }
  97. foreach $key (sort by_percent (keys %printList)) {
  98.         $theRouter = $key;
  99.         $theRouter =~ s/.*///;
  100.         $theRouter =~ s/.html//;
  101.         $theFile = $key;
  102.         $theFile =~ s/.*traffic///;
  103.         $maxIn= $theList{$key}[0];
  104.         $avgIn= $theList{$key}[1];
  105.         $curIn= $theList{$key}[2];
  106.         $maxOut= $theList{$key}[3];
  107.         $avgOut= $theList{$key}[4];
  108.         $curOut= $theList{$key}[5];
  109.         printf(OUT "<TR>");
  110.         if ($maxIn > $maxRED) {
  111.                 printf(OUT "<TD BGCOLOR=$REDcolor><CENTER>$maxIn</CENTER></TD>");
  112.         } elsif ($maxIn > $maxAMBER) {
  113.                 printf(OUT "<TD BGCOLOR=$AMBERcolor><CENTER>$maxIn</CENTER></TD>");
  114.         } else {
  115.                 printf(OUT "<TD BGCOLOR=$GREENcolor><CENTER>$maxIn</CENTER></TD>");
  116.         }
  117.         printf(OUT "    ");
  118.         if ($maxOut > $maxRED) {
  119.                 printf(OUT "<TD BGCOLOR=$REDcolor><CENTER>$maxOut</CENTER></TD>");
  120.         } elsif ($maxOut > $maxAMBER) {
  121.                 printf(OUT "<TD BGCOLOR=$AMBERcolor><CENTER>$maxOut</CENTER></TD>");
  122.         } else {
  123.                 printf(OUT "<TD BGCOLOR=$GREENcolor><CENTER>$maxOut</CENTER></TD>");
  124.         }
  125.         printf(OUT "    ");
  126.         if ($avgIn > $RED) {
  127.                 printf(OUT "<TD BGCOLOR=$REDcolor><CENTER>$avgIn</CENTER></TD>");
  128.         } elsif ($avgIn > $AMBER) {
  129.                 printf(OUT "<TD BGCOLOR=$AMBERcolor><CENTER>$avgIn</CENTER></TD>");
  130.         } else {
  131.                 printf(OUT "<TD BGCOLOR=$GREENcolor><CENTER>$avgIn</CENTER></TD>");
  132.         }
  133.         printf(OUT "    ");
  134.         if ($avgOut > $RED) {
  135.                 printf(OUT "<TD BGCOLOR=$REDcolor><CENTER>$avgOut</CENTER></TD>");
  136.         } elsif ($avgOut > $AMBER) {
  137.                 printf(OUT "<TD BGCOLOR=$AMBERcolor><CENTER>$avgOut</CENTER></TD>");
  138.         } else {
  139.                 printf(OUT "<TD BGCOLOR=$GREENcolor><CENTER>$avgOut</CENTER></TD>");
  140.         }
  141.         printf(OUT "    ");
  142.         if ($curIn > $RED) {
  143.                 printf(OUT "<TD BGCOLOR=$REDcolor><CENTER>$curIn</CENTER></TD>");
  144.         } elsif ($curIn > $AMBER) {
  145.                 printf(OUT "<TD BGCOLOR=$AMBERcolor><CENTER>$curIn</CENTER></TD>");
  146.         } else {
  147.                 printf(OUT "<TD BGCOLOR=$GREENcolor><CENTER>$curIn</CENTER></TD>");
  148.         }
  149.         printf(OUT "    ");
  150.         if ($curOut > $RED) {
  151.                 printf(OUT "<TD BGCOLOR=$REDcolor><CENTER>$curOut</CENTER></TD>");
  152.         } elsif ($curOut > $AMBER) {
  153.                 printf(OUT "<TD BGCOLOR=$AMBERcolor><CENTER>$curOut</CENTER></TD>");
  154.         } else {
  155.                 printf(OUT "<TD BGCOLOR=$GREENcolor><CENTER>$curOut</CENTER></TD>");
  156.         }
  157.         printf(OUT "    ");
  158.         printf(OUT "<TD><A HREF=${theRouter}.html>$theRouter</A></TD></TR><p>n");
  159. }
  160. &PrintTail;
  161. close(OUT);
  162. sub by_percent {
  163.         $printList{$b} <=> $printList{$a};
  164. }
  165. sub PrintTail
  166. {
  167. print OUT <<EOF;
  168. </TABLE>
  169. </BODY>
  170. </HTML>
  171. EOF
  172. }
  173. sub PrintHead
  174. {
  175. $expTime=&expistr;
  176. print OUT <<EOF;
  177. <HTML>
  178. <HEAD>
  179. <TITLE>$orgName Most Active Interface</TITLE>
  180. </HEAD>
  181. <META HTTP-EQUIV="Expires" CONTENT="$expTime">
  182. <META HTTP-EQUIV="Refresh" CONTENT=$refreshSeconds>
  183. <BODY bgcolor=#ffffff>
  184. <H1>Most Active Interfaces as of $theDate</H1>
  185. <P> The following are sorted by the sum of the daily average input
  186. and daily average output (In Avg% + Out Avg%) interface octets. 
  187. This table is updated every $refreshInt minutes and will automatically 
  188. be updated if you are using Netscape.<P>
  189. <B>Value ranges: </B><P>
  190. MAX Values are: <FONT COLOR="#ff0000">RED if > $maxRED </font>, and 
  191. <B>YELLOW if > $maxAMBER </font></B><P>
  192. <P>
  193. Average & Current Values are: <FONT COLOR="#ff0000">RED if > $RED </font>, and <B>YELLOW if > $AMBER </font></B><P>
  194. <P>
  195. <TABLE WIDTH="750" BORDER="1" CELLSPACING="2" CELLPADDING="0" HEIGHT="43">
  196. <TR>
  197. <TH >In Max %</TH>
  198. <TH >Out Max %</TH>
  199. <TH >In Avg %</TH>
  200. <TH >Out Avg %</TH>
  201. <TH >In Current %</TH>
  202. <TH >Out Current %</TH>
  203. <TH >Interface</TH></TR>
  204. <P>
  205. EOF
  206. }
  207. sub expistr {
  208.   my ($time) = time+$refreshInt*60+5;
  209.   my ($wday) = ('Sun','Mon','Tue','Wed','Thu','Fri','Sat')[(gmtime($time))[6]];
  210.   my ($month) = ('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep',
  211.                  'Oct','Nov','Dec')[(gmtime($time))[4]];
  212.   my ($mday,$year,$hour,$min,$sec) = (gmtime($time))[3,5,2,1,0];
  213.   if ($mday<10) {$mday = "0$mday"};
  214.   if ($hour<10) {$hour = "0$hour"};
  215.   if ($min<10) {$min = "0$min";}
  216.   if ($sec<10) {$sec = "0$sec";}
  217.   return "$wday, $mday $month ".($year+1900)." $hour:$min:$sec GMT";
  218. }