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

SNMP编程

开发平台:

C/C++

  1. #!/usr/local/bin/perl
  2. # mrtgindex.cgi v 1.1
  3. # (c) 1997, Mick Ghazey mick@lowdown.com
  4. # Thanks to Dave Rand, Peter W. Osel and Tobias Oetiker.
  5. # Why CGI?
  6. # Mrtgindx.cgi has features that only CGI can provide. 
  7. # Runtime index:
  8. # The index page is built every time the page is requested.
  9. # Changes to config files are visible on the next update.
  10. # Clickable graphs:
  11. # Each graph is a clickable hyperlink to more information.
  12. # Automatic updates:
  13. # The index page automatically updates every 5 minutes.
  14. # Modify $interval to adjust this period.
  15. # Timely updates:
  16. # Mrtgindx.cgi predicts when to update based on when the
  17. # current graphs were completed.
  18. # Updates occurs shortly after the graphs are completed
  19. # regardless of when the page was initially requested.
  20. # Modify $guardband to adjust this period.
  21. # If the guardband is too small you run the risk of attempting
  22. # an update while a graph is under construction. 
  23. # Predictable graph order:
  24. # Graphs appear in the same order as Titles in the config files.
  25. # If there are multiple config files graphs from the first config
  26. # file appear before those from the second, etc.
  27. # Customizable graph order:
  28. # If you want your index ordered differently than your
  29. # config files you can use a dummy config file. Mrtgindex.cgi is
  30. # only interested in "Title" statements. You could, for example,
  31. # have different dummy config files for different arangements
  32. # of graphs.
  33. # Web based graph order selection:
  34. # Click Top, Up, Down, or Bot to change the position of a graph.
  35. # Multiple config files:
  36. # Mrtgindex.cgi supports multiple config files. Some users
  37. # run mrtg with more than one config file. The reason may be
  38. # because certain events are run on a different schedules, 
  39. # 5 and 10 minute intervals for example.
  40. # Or perhaps multiple instances of mrtg are run
  41. # to assure completion within a 5 minute interval.
  42. # Ping-probes have longer run times than measuring traffic
  43. # on local routers, for example. However, CPU load is similar.
  44. # Modify the @config_files array below to suit your environment.
  45. # Runs fast:
  46. # Mrtgindx.cgi is fast because it doesn't create graph files or
  47. # maintain log files. In addition, web based graph order changes
  48. # benefit from browser cacheing of graphs.
  49. # Index.cgi:
  50. # You might want to rename this file "index.cgi". Then it
  51. # will load automatically when when the directory is browsed -
  52. # much as index.html loads automatically. You might have to
  53. # modify "DirectoryIndex" in srm.conf if you're using Apache
  54. # to allow CGI programs to be index files.
  55. # CGI.pm required:
  56. # Mrtgindex.cgi requires CGI.pm by Lincoln Stein
  57. # http://www-genome.wi.mit.edu/ftp/pub/software/WWW/cgi_docs.html
  58. #-------------------------------------------------------
  59. # Modify this statement to match your configuration
  60. @config_files = ('mrtg.cfg'); # Single config file
  61. #@config_files = ('mrtg.cfg', 'mrtg-ping.cfg'); # Two config files
  62. #@config_files = ('mrtg.cfg', 'yahoo.ping', 'netscape.ping', 'msn..ping', 
  63.                    'att.ping'); # anal retentive
  64. #-------------------------------------------------------
  65. require 'stat.pl';
  66. use CGI ':all';
  67. use CGI::Carp qw(fatalsToBrowser);
  68. #use diagnostics;
  69. $gifdone = 0; # Scan for newest graph and save info for later
  70. while(@config_files > 0){
  71.     open(In, $cfg = shift @config_files) ||
  72. die "Can't open $cfg. Check @config_files array.n";
  73.     while(<In>){
  74. next unless /^Title[(.*)]:s*(.+)$/; # Look for a title keyword
  75. $router = lc $1;
  76. Stat("$router-day.png");
  77. @$router = ($st_mtime, $2); # Save the mod date and title
  78. push @routers, $router; # Remember the router name so we can find above info
  79. $gifdone = $st_mtime if $st_mtime > $gifdone; # Find the newest file
  80.     }
  81.     close In;
  82. }
  83. # Time the next update to occur a little while after the next interval completes
  84. $interval = 300; # 5 min update interval
  85. $guardband = 15; # updates occur this many seconds after predicted gif completion
  86. $refresh = $interval + $guardband + $gifdone - time; # predict how long until next update
  87. $refresh = $interval if $refresh <= $guardband;
  88. $expires = gmtime (time + $interval * 2 + $guardband);
  89. print header, start_html(-TITLE=>'Daily Stats', -BGCOLOR=>'#e6e6e6'),
  90.     "n",
  91.     "<meta http-equiv="expires" content="$expires GMT">n",
  92.     "<meta http-equiv="refresh" content=$refresh>n",
  93.     table({-width=>"100%"}, TR(
  94. #-------------------------------------------------------
  95.     # Uncomment the following line if you have Count.cgi installed.
  96.     td({-align=>left, width=>"25%"}, img({-src=>"/cgi-bin/Count.cgi?display=clock"})),
  97. #-------------------------------------------------------
  98.     td("Click graph for more info")));
  99. @router_order = (0..$#routers);
  100. @router_order = split /:/, param('ord') if defined param('ord');
  101. $selfurl = url;
  102. $selfurl =~ s/?.*//; # Remove arguments
  103. for $index (0..$#routers){
  104.     @spliced = @router_order;
  105.     $router_num = splice @spliced, $index, 1; # Router removed
  106.     $router = $routers[$router_num];
  107.     $time = localtime $$router[0]; # $st_mtime saved in above loop
  108.     ($time) = $time =~ /(d+:d+:d+)/; # Just the time
  109.     print hr, "n";
  110.     print a({-name=>$index});
  111.     # Print re-ordering links top, bot, up, dn
  112.     $mv_dn = $mv_up = "";
  113.     $" = ':';
  114.     if($index > 0){
  115. @top = ($router_num, @spliced);
  116. @up = @spliced;
  117. $indxup = $index - 1;
  118. splice @up, $indxup, 0, $router_num;
  119. $mv_up = sprintf "%s %s ", a({-href=>"$selfurl?ord=@top#0"}, "Top"), # move to top
  120. a({-href=>"$selfurl?ord=@up#$indxup"}, "Up"); # move up
  121.     }
  122.     if($index < $#routers){
  123. @bot = (@spliced, $router_num);
  124. @down = @spliced;
  125. $indxdn = $index + 1;
  126. splice @down, $indxdn, 0, $router_num;
  127. $indxbot = @routers - 3;
  128. while($indxbot < 0){$indxbot += 1}
  129. $mv_dn = sprintf "%s %s ", a({-href=>"$selfurl?ord=@down#$indxdn"}, "Down"), # move down
  130. a({-href=>"$selfurl?ord=@bot#$indxbot"}, "Bot"); # move to bottom
  131.     }
  132.     undef $";
  133.     print table({-width=>"100%"}, 
  134. TR(td({-align=>"left",-width=>"20%"}, "$mv_up $mv_dn"),
  135.    td({-align=>"left"}, b($$router[1]), " $time")));
  136.     print a({-href=>"$router.html"}, img{-src=>"$router-day.png"});
  137. }
  138. print "n",hr,"Direct questions and feedback to Mick Ghazey: ",
  139.     a({-href=>"mailto:mick@lowdown.com"}, "mick@lowdown.com"),
  140.     end_html;