📄 mrtg
字号:
if(($main::OS != 'UNIX') || ($signal != 127)) { my $exitval = $? >> 8; warn "\nPROBLEM: rateup died from Signal $signal\n". " with Exit Value $exitval when doing router '$router'\n". " code was $value, retcode was $!.". " If this happens all the time,\n". " you should probably investigate the cause. :-)\n\n"; } } if( $$cfg{'writeexpires'} =~ /^y/i ) { my($fil,$exp); while( $fil = shift(@metas) ) { $exp = &expistr(shift(@metas)); open(META, ">$fil.meta"); print META "Expires: $exp\n"; close(META); } } if ($$rcfg{'options'}{'dorelpercent'}{$router}) { (\%maxin, \%maxout, \%maxpercent, \%avin, \%avout, \%avpercent, \%cuin, \%cuout, \%cupercent); } else { (\%maxin, \%maxout, \%avin, \%avout, \%cuin, \%cuout); }}#format 10*$kilo to 10 kB/ssub fmi { my($number, $maxbytes, $router, @foo) = @_; my($rcfg,$LOC)=@foo; my(@short,$mul); if ($$rcfg{'kmg'}{$router}) { my($i); if ($$rcfg{'options'}{'bits'}{$router} == 1) { @short = (); foreach $i (split(/,/, $$rcfg{'kmg'}{$router})) { if ($$rcfg{'options'}{'perminute'}{$router}) { $short[$#short+1] = "$i".&$LOC("b/min"); } elsif ($$rcfg{'options'}{'perhour'}{$router}) { $short[$#short+1] = "$i".&$LOC("b/h"); } else { $short[$#short+1] = "$i".&$LOC("b/s"); } } $mul= 8; } else { @short = (); foreach $i (split(/,/, $$rcfg{'kmg'}{$router})) { if ($$rcfg{'options'}{'perminute'}{$router}) { $short[$#short+1] = "$i".&$LOC ("B/min"); } elsif ($$rcfg{'options'}{'perhour'}{$router}) { $short[$#short+1] = "$i".&$LOC("B/h"); } else { $short[$#short+1] = "$i".&$LOC("B/s"); } } $mul= 1; } if (exists($$rcfg{'shortlegend'}{$router})) { @short = (); foreach $i (split(/,/, $$rcfg{'kmg'}{$router})) { $short[$#short+1] = "$i"."$$rcfg{'shortlegend'}{$router}"; } } } else { if ($$rcfg{'options'}{'bits'}{$router} == 1) { if ($$rcfg{'options'}{'perminute'}{$router}) { @short = (&$LOC("b/min"),&$LOC("kb/min"),&$LOC("Mb/min"),&$LOC("Gb/min")); } elsif ($$rcfg{'options'}{'perhour'}{$router}) { @short = (&$LOC("b/h"),&$LOC("kb/h"),&$LOC("Mb/h"),&$LOC("Gb/h")); } else { @short = (&$LOC("b/s"),&$LOC("kb/s"),&$LOC("Mb/s"),&$LOC("Gb/s")); } $mul= 8; } else { if ($$rcfg{'options'}{'perminute'}{$router}) { @short = (&$LOC("B/min"),&$LOC("kB/min"),&$LOC("MB/min"),&$LOC("GB/min")); } elsif ($$rcfg{'options'}{'perhour'}{$router}) { @short = (&$LOC("B/h"),&$LOC("kB/h"),&$LOC("MB/h"),&$LOC("GB/h")); } else { @short = (&$LOC("B/s"),&$LOC("kB/s"),&$LOC("MB/s"),&$LOC("GB/s")); } $mul= 1; } if ($$rcfg{'shortlegend'}{$router}) { @short = ("$$rcfg{'shortlegend'}{$router}", "k$$rcfg{'shortlegend'}{$router}", "M$$rcfg{'shortlegend'}{$router}", "G$$rcfg{'shortlegend'}{$router}"); } } my $digits=length("".$number*$mul); my $divm=0;## while ($digits-$divm*3 > 4) { $divm++; }# my $divnum = $number*$mul/10**($divm*3); my $divnum=$number*$mul;# while ($divnum/$$rcfg{'kilo'}{$router} >= 10*$$rcfg{'kilo'}{$router} && $divnum<$#short) { while ($divnum >= 10*$$rcfg{'kilo'}{$router} && $divm<$#short) { $divm++; $divnum /= $$rcfg{'kilo'}{$router}; } my $perc; if ($number == 0 || $maxbytes == 0) { $perc = 0; } else { $perc = 100/$maxbytes*$number; } if ($$rcfg{'options'}{'integer'}{$router} == 1) { if ($$rcfg{'options'}{'nopercent'}{$router}) { return sprintf("%0.f ",$number*$mul); } else { return sprintf("%0.f (%2.1f%%)",$number*$mul,$perc); } } else { if ($$rcfg{'options'}{'nopercent'}{$router}) { return sprintf("%1.1f %s",$divnum,$short[$divm]); # Added: FvW } else { return sprintf("%1.1f %s (%2.1f%%)",$divnum,$short[$divm],$perc); } return sprintf("%1.1f %s (%2.1f%%)",$divnum,$short[$divm],$perc); }}sub datestr { my ($time) = shift(@_) || return 0; my ($wday) = ('Sunday','Monday','Tuesday','Wednesday', 'Thursday','Friday','Saturday')[(localtime($time))[6]]; my ($month) = ('January','February' ,'March' ,'April' , 'May' , 'June' , 'July' , 'August' , 'September' , 'October' , 'November' , 'December' )[(localtime($time))[4]]; my ($mday,$year,$hour,$min) = (localtime($time))[3,5,2,1]; if ($min<10) {$min = "0$min";} return "$wday, $mday $month ".($year+1900)." at $hour:$min";}sub expistr { my ($time) = time+$_[0]*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";}sub writehtml { my($router, $cfg, $rcfg, $maxin, $maxout, $maxpercent, $avin, $avout, $avpercent, $cuin, $cuout, $cupercent, $uptime, $name, $LOC) = @_; my($VERSION,$Today,$peri); my($persec); if ($$rcfg{'options'}{'bits'}{$router} == 1) { $persec = &$LOC("Bits"); } else { $persec = &$LOC("Bytes"); }# Work out the Colour legend my($leg1, $leg2, $leg3, $leg4, $leg5); if ($$rcfg{'legend1'}{$router}) { $leg1 = $$rcfg{'legend1'}{$router}; } else { $leg1 = &$LOC("Incoming Traffic in $persec per Second"); } if ($$rcfg{'legend2'}{$router}) { $leg2 = $$rcfg{'legend2'}{$router}; } else { $leg2 = &$LOC("Outgoing Traffic in $persec per Second"); } if ($$rcfg{'legend3'}{$router}) { $leg3 = $$rcfg{'legend3'}{$router}; } else { $leg3 = &$LOC("Maximal 5 Minute Incoming Traffic"); } if ($$rcfg{'legend4'}{$router}) { $leg4 = $$rcfg{'legend4'}{$router}; } else { $leg4 = &$LOC("Maximal 5 Minute Outgoing Traffic"); } if ($$rcfg{'legend5'}{$router}) { $leg5 = $$rcfg{'legend5'}{$router}; } else { $leg5 = "(($leg1)/($leg2))*100"; }# Translate the color names$$rcfg{'col1'}{$router}=&$LOC($$rcfg{'col1'}{$router});$$rcfg{'col2'}{$router}=&$LOC($$rcfg{'col2'}{$router});$$rcfg{'col3'}{$router}=&$LOC($$rcfg{'col3'}{$router});$$rcfg{'col4'}{$router}=&$LOC($$rcfg{'col4'}{$router});$$rcfg{'col5'}{$router}=&$LOC($$rcfg{'col5'}{$router}); $Today=&$LOC(datestr(time)); $VERSION = "2.8.12"; open (HTML,">$$cfg{'workdir'}${main::SL}$$rcfg{'directory'}{$router}$router.html") || warn ("\nCan not write $router.html"); print HTML '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">' . "\n"; print HTML "<HTML>\n"; my $interval =$$cfg{'interval'} ? $$cfg{'interval'} : 5; my $expiration = &expistr($interval); my $refresh = $$cfg{'refresh'} ? $$cfg{'refresh'} : 300; my $namestring = &$LOC("the device"); print HTML <<"TEXT"; <HEAD><TITLE>$$rcfg{'title'}{$router}</TITLE><META HTTP-EQUIV="Refresh" CONTENT="$refresh"><META HTTP-EQUIV="Pragma" CONTENT="no-cache"><META HTTP-EQUIV="Expires" CONTENT="$expiration">TEXT print HTML '<META HTTP-EQUIV="Content-Type" CONTENT="text/html; '.&$LOC('charset=iso-8859-1')."\">\n"; foreach $peri (qw(d w m y)) { print HTML <<"TEXT";<!-- maxin $peri $$maxin{$peri}{$router} --><!-- maxout $peri $$maxout{$peri}{$router} -->TEXTif ($$rcfg{'options'}{'dorelpercent'}{$router}) { print HTML <<"TEXT";<!-- maxpercent $peri $$maxpercent{$peri}{$router} -->TEXT} print HTML <<"TEXT";<!-- avin $peri $$avin{$peri}{$router} --><!-- avout $peri $$avout{$peri}{$router} -->TEXTif ($$rcfg{'options'}{'dorelpercent'}{$router}) { print HTML <<"TEXT";<!-- avpercent $peri $$avpercent{$peri}{$router} -->TEXT} print HTML <<"TEXT";<!-- cuin $peri $$cuin{$peri}{$router} --><!-- cuout $peri $$cuout{$peri}{$router} -->TEXTif ($$rcfg{'options'}{'dorelpercent'}{$router}) { print HTML <<"TEXT";<!-- cupercent $peri $$cupercent{$peri}{$router} -->TEXT} } if ($name ne '') {$namestring = "<B>'$name'</B>"}; # allow for \n in addhead $$rcfg{addhead}{$router} =~ s/\\n/\n/g;print HTML <<"TEXT"; $$rcfg{'addhead'}{$router}</HEAD><BODY $$rcfg{'backgc'}{$router}>$$rcfg{'pagetop'}{$router}<BR><HR>TEXTprint HTML &$LOC("The statistics were last updated <B>$Today $$rcfg{'timezone'}{$router}</B>");if ($uptime && ! $$rcfg{options}{noinfo}{$router}) {print HTML",<BR>".&$LOC("at which time $namestring had been up for <B>$uptime</B>.").""; } my %sample= ('d' => "`Daily' Graph (".$interval.' Minute', 'w' => "`Weekly' Graph (30 Minute", 'm' => "`Monthly' Graph (2 Hour", 'y' => "`Yearly' Graph (1 Day"); my %full = ('d' => 'day', 'w' => 'week', 'm' => 'month', 'y' => 'year'); my $InCo; if (exists $$rcfg{'legendi'}{$router}) { if ($$rcfg{'legendi'}{$router} ne "") { $InCo="<FONT COLOR=\"$$rcfg{'rgb1'}{$router}\">". "$$rcfg{'legendi'}{$router}</FONT>" } } else { $InCo="<FONT COLOR=\"$$rcfg{'rgb1'}{$router}\">". &$LOC(" In:</FONT>") } my $OutCo; if (exists $$rcfg{'legendo'}{$router}) { if ($$rcfg{'legendo'}{$router} ne "") { $OutCo="<FONT COLOR=\"$$rcfg{'rgb2'}{$router}\">". "$$rcfg{'legendo'}{$router}</FONT>" } } else { $OutCo="<FONT COLOR=\"$$rcfg{'rgb2'}{$router}\">". &$LOC(" Out:</FONT>") } my $PercentCo; if (exists $$rcfg{'legend5'}{$router}) { if ($$rcfg{'legend5'}{$router} ne "") { $PercentCo="<FONT COLOR=\"$$rcfg{'rgb5'}{$router}\">". "$$rcfg{'legend5'}{$router}</FONT>" } } else { $PercentCo="<FONT COLOR=\"$$rcfg{'rgb5'}{$router}\">". &$LOC(" Percentage</FONT>") } foreach $peri (qw(d w m y)){ next if $$rcfg{'suppress'}{$router} =~/$peri/; my $gifw; if ($$rcfg{'options'}{'dorelpercent'}{$router}) { $gifw=sprintf("%.0f",($$rcfg{'xsize'}{$router}*$$rcfg{'xscale'}{$router}+ +100+30) *$$rcfg{'xzoom'}{$router}); } else { $gifw=sprintf("%.0f",($$rcfg{'xsize'}{$router}*$$rcfg{'xscale'}{$router} +100) *$$rcfg{'xzoom'}{$router}); } my $gifh=sprintf("%.0f",($$rcfg{'ysize'}{$router}*$$rcfg{'yscale'}{$router}+35) *$$rcfg{'yzoom'}{$router}); print HTML "<HR>".&$LOC("<B>$sample{$peri}").&$LOC(" Average)</B><BR>")."<IMG VSPACE=10 WIDTH=$gifw HEIGHT=$gifh ALIGN=TOP SRC=\"$router-$full{$peri}.gif\" ALT=\"$full{$peri}\"> <TABLE CELLPADDING=0 CELLSPACING=0>"; my(@foo)=($rcfg,$LOC); print HTML "<TR> ".&$LOC("<TD ALIGN=right><SMALL>Max $InCo</SMALL></TD>")." <TD ALIGN=right><SMALL>".&fmi($$maxin{$peri}{$router}, $$rcfg{'maxbytes1'}{$router}, $router, @foo)." </SMALL></TD> <TD WIDTH=5></TD> ".&$LOC("<TD ALIGN=right><SMALL>Average $InCo</SMALL></TD>")." <TD ALIGN=right><SMALL>".&fmi($$avin{$peri}{$router}, $$rcfg{'maxbytes1'}{$router}, $router, @foo)." </SMALL></TD> <TD WIDTH=5></TD> ".&$LOC("<TD ALIGN=right><SMALL>Current $InCo</SMALL></TD>")." <TD ALIGN=right><SMALL>".&fmi($$cuin{$peri}{$router}, $$rcfg{'maxbytes1'}{$router}, $router, @foo)." </SMALL></TD> </TR>" if $InCo;print HTML " <TR> ".&$LOC("<TD ALIGN=right><SMALL>Max $OutCo</SMALL></TD>")." <TD ALIGN=right><SMALL>".&fmi($$maxout{$peri}{$router}, $$rcfg{'maxbytes2'}{$router}, $router, @foo)." </SMALL></TD> <TD WIDTH=5></TD> ".&$LOC("<TD ALIGN=right><SMALL>Average $OutCo</SMALL></TD>")." <TD ALIGN=right><SMALL>".&fmi($$avout{$peri}{$router}, $$rcfg{'maxbytes2'}{$router}, $router, @foo)." </SMALL></TD> <TD WIDTH=5></TD> ".&$LOC("<TD ALIGN=right><SMALL>Current $OutCo</SMALL></TD>")." <TD ALIGN=right><SMALL>".&fmi($$cuout{$peri}{$router}, $$rcfg{'maxbytes2'}{$router}, $router, @foo)." </SMALL></TD> </TR> " if $OutCo;print HTML " <TR> ".&$LOC("<TD ALIGN=right><SMALL>Max $PercentCo</SMALL></TD>")." <TD ALIGN=right><SMALL>".sprintf("%0.1f %%",$$maxpercent{$peri}{$router})." </SMALL></TD> <TD WIDTH=5></TD> ".&$LOC("<TD ALIGN=right><SMALL>Average $PercentCo</SMALL></TD>")." <TD ALIGN=right><SMALL>".sprintf("%0.1f %%",$$avpercent{$peri}{$router})." </SMALL></TD> <TD WIDTH=5></TD> ".&$LOC("<TD ALIGN=right><SMALL>Current $PercentCo</SMALL></TD>")." <TD ALIGN=right><SMALL>".sprintf("%0.1f %%",$$cupercent{$peri}{$router})." </SMALL></TD> </TR> " if ($$rcfg{'options'}{'dorelpercent'}{$router} && $PercentCo); print HTML "</TABLE>\n"; } print HTML " <HR><BR> <TABLE WIDTH=500 BORDER=0 CELLPADDING=4 CELLSPACING=0>"; print HTML " <TR><TD ALIGN=RIGHT><FONT SIZE=-1 COLOR=\"$$rcfg{'rgb1'}{$router}\"> <B>$$rcfg{'col1'}{$router} ###</B></FONT></TD> <TD><FONT SIZE=-1>$leg1</FONT></TD></TR> " if $InCo; print HTML " <TR><TD ALIGN=RIGHT><FONT SIZE=-1 COLOR=\"$$rcfg{'rgb2'}{$router}\"> <B>$$rcfg{'col2'}{$router} ###</B></FONT></TD> <TD><FONT SIZE=-1>$leg2</FONT></TD></TR> " if $OutCo; if ($$rcfg{'withpeak'}{$router}) { print HTML " <TR><TD ALIGN=RIGHT><FONT SIZE=-1 COLOR=\"$$rcfg{'rgb3'}{$router}\"> <B>$$rcfg{'col3'}{$router}###</B></FONT></TD> <TD><FONT SIZE=-1>$leg3</FONT></TD></TR> " if $InCo; print HTML " <TR><TD ALIGN=RIGHT><FONT SIZE=-1 COLOR=\"$$rcfg{'rgb4'}{$router}\"> <B>$$rcfg{'col4'}{$router}###</B></FONT></TD> <TD><FONT SIZE=-1>$leg4</FONT></TD></TR> "if $OutCo; } if ($$rcfg{'options'}{'dorelpercent'}{$router}) { print HTML " <TR><TD ALIGN=RIGHT><FONT SIZE=-1 COLOR=\"$$rcfg{'rgb5'}{$router}\"> <B>$$rcfg{'col5'}{$router}###</B></FONT></TD> <TD><FONT SIZE=-1>$leg5</FONT></TD></TR> "; }# warn ("\nINFO: \$router = $router\n\# $$rcfg{'col1'}{$router}, $$rcfg{'rgb1'}{$router},\n\# $$rcfg{'col2'}{$router}, $$rcfg{'rgb2'}{$router},\n\
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -