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

SNMP编程

开发平台:

C/C++

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