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

SNMP编程

开发平台:

C/C++

  1. #!/usr/local/bin/perl # version 1.1, 27.06.97, philippe.simonet@swisstelecom.com
  2. $outFile = 'distrib.html';
  3. $mode = 'd';
  4. $title = 'Mrtg Trafic Distribution';
  5. $width = 300; $height = 160;
  6. $count = 8;
  7. $period = 'day';
  8. $refreshInt=120; $refreshSeconds = $refreshInt * 60; $theDate=localtime(time);
  9. ###########################################################
  10. # read config files  $i = 0; open(CFG, "mrtg.cfg") || die "Couldn't read mrtg.cfg"; while (<CFG>) { $_ =~ tr/A-Z/a-z/; if (/^maxbytes[(.*)]: (d*).*/i) { $maxbytes{$1} = $2;
  11. #print $maxbytes{$1};
  12. } if (/^pagetop[(.*)]: (.*)/i) { $pagetop{$1} = $2;
  13. #print $pagetop{$1}, "n";
  14. } } close (CFG);
  15. foreach $i ( keys %pagetop ) {
  16. next if ($maxbytes{$i} eq undef);
  17. next if ($pagetop{$i} eq undef);
  18. for ($j = 0; $j < $count; $j++ ) {
  19. $distr{$i}[$j][0] = 0;
  20. $distr{$i}[$j][1] = 0;
  21. $tot{$i} = 0;
  22. }
  23. open ( PIPE, "distrib -i $i.log -o $i.dist.$mode.gif -t $mode -w $width -h $height -r $maxbytes{$i} -d $count |" );
  24. while ( <PIPE> ) {
  25. if ( /(d*):(d*),(d*).*/ ) {
  26. $distr{$i}[$1][0] = $2;
  27. $distr{$i}[$1][1] = $3;
  28. }
  29. }
  30. for ($j = 0; $j < $count; $j++ ) {
  31. $tot{$i} += ($j+1) * ($distr{$i}[$j][0] + $distr{$i}[$j][1]);
  32. }
  33. close ( PIPE );
  34. }
  35. ###########################################################
  36. # open files open(OUT, ">$outFile") || die "Couldn't create $outFile";
  37. open(SCORE, ">distrib.txt") || die "Couldn't create distrib.txt";
  38. ###########################################################
  39. # print html head $expTime=&expistr; print OUT <<EOF; <HTML> <HEAD> <TITLE>$title</TITLE> </HEAD> <META HTTP-EQUIV="Expires" CONTENT="$expTime"> <META HTTP-EQUIV="Refresh" CONTENT=$refreshSeconds> <BODY bgcolor=#ffffff> <H1>$title ($theDate)</H1> 
  40. These graphs presents the trafic distribution information for last $period, based on data collected each 5 minutes by MRTG. </p>
  41. They are refreshed each $refreshInt minutes. (green = input traffic, blue = output).
  42. Darker is the color, bigger is the trafic. Bigger is the rectangle, bigger is the time when the traffic was effective.
  43. <H1>Top 10 interfaces for last $period</H1>
  44. <img src="distrib.gif">
  45. <H1>All trafic distribution for last $period</H1>
  46. Vertical scale: % of time/</P>
  47. Horizontal scale: % of Maxbyte</P>
  48. <table border="1" cellpadding="0" height="43">
  49.     <tr>
  50.         <th>maxbytes</th>
  51.         <th>pagetop</th>
  52.         <th>target</th>
  53.         <th>URL</th>
  54.     </tr>
  55. EOF foreach $i ( sort by_number (keys %pagetop) ) {
  56. next if ($maxbytes{$i} eq undef);
  57. next if ($pagetop{$i} eq undef);
  58. print SCORE "$i:";
  59. for ($j=0; $j < ($count-1); $j++) {
  60. print SCORE $distr{$i}[$j][0], "/", $distr{$i}[$j][1], ",";
  61. }
  62. print SCORE $distr{$i}[$count-1][0], "/", $distr{$i}[$count-1][1], "n";
  63. print OUT <<EOF; <TR>  <TD><CENTER>$maxbytes{$i}</CENTER></TD>  <TD><CENTER>$pagetop{$i} $pc $post</CENTER></TD>  <TD><CENTER>$i, score $tot{$i}</CENTER></TD>  <TD><A HREF="$i.html"><img src="$i.dist.$mode.gif"></A></TD>
  64. </TR> EOF } print OUT <<EOF; </TABLE> </BODY> </HTML> EOF close(OUT);
  65. close(SCORE);
  66. # computes top 10 lines distribution (-r 10)
  67. `distrib -i distrib.txt -o distrib.gif -t x -w 700 -h 300 -d $count -r 10`;
  68. exit (0); # expiration time & date ######################################## sub expistr {   my ($time) = time+$refreshInt*60+5;   my ($wday) = ('Sun','Mon','Tue','Wed','Thu','Fri','Sat')[(gmtime($time))[6]];   my ($month) = ('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep',                  'Oct','Nov','Dec')[(gmtime($time))[4]];   my ($mday,$year,$hour,$min,$sec) = (gmtime($time))[3,5,2,1,0];   if ($mday<10) {$mday = "0$mday"};   if ($hour<10) {$hour = "0$hour"};   if ($min<10) {$min = "0$min";}   if ($sec<10) {$sec = "0$sec";}   return "$wday, $mday $month ".($year+1900)." $hour:$min:$sec GMT"; } # for sorting ########################################
  69. sub by_number {
  70.         $tot{$b} <=> $tot{$a};
  71. }