Hi, I'd like to test this patch - but it won't apply because 'graphs.pl' contains *tabs* for identation and your patch only *spaces*. And: there's a line break in line 398: ... 'outgoing firewall warning' => 'Not selecting source ip or mac ignores them', ... This should be *one* line. Could you please correct this? I downloaded https://patchwork.ipfire.org/patch/4367/raw/ but - no chance... Thanks in advance, Matthias On 24.05.2021 06:31, nateos2g wrote: > For proper display of network measurements, Bps (bytes) should be > converted to bps (bits). Bytes are for data/storage (RAM, HDD, SSD, > etc.), bits are for network bandwidth or throughput (NICs, switches, > routers, WiFi adapters, etc.). > > Networks transfer data as single bits at a time. It’s both more accurate > and more intuitive to measure network speed in bits per second that a > network connection is transmitting, not the amount of data units, or > bytes, it transmits. Notice all network devices are marketed, measure > and diplay in bits per second. > > I simply used RRD CDEF to multiply by 8. > > NOTE: Found: "ERROR: rpn expressions without DEF or CDEF variables are > not supported". > Specifically in updateqosgraph, CDEF does not like a number as a > variable name. ie. "204" from $classline[1]. > > Requires update of the language cache files: > perl -e "require '/var/ipfire/lang.pl'; &Lang::BuildCacheLang" > or: update-lang-cache > > Found one other asking for this: > https://community.ipfire.org/t/ipfire-bandwidth-usage/1203 > > Signed-off-by: Nate Oaks > --- >  config/cfgroot/graphs.pl | 202 +++++++++++++++++++++------------------ >  langs/en/cgi-bin/en.pl   |  13 +-- >  2 files changed, 117 insertions(+), 98 deletions(-) > > diff --git a/config/cfgroot/graphs.pl b/config/cfgroot/graphs.pl > index 441d4c483a46..c83ae67bbfc1 100644 > --- a/config/cfgroot/graphs.pl > +++ b/config/cfgroot/graphs.pl > @@ -545,28 +545,30 @@ sub updateifgraph { >          "-1".$period, >          "-r", >          "-t ".$Lang::tr{'traffic on'}." ".$interface." > ".$Lang::tr{'graph per'}." ".$Lang::tr{$period."-graph"}, > -        "-v ".$Lang::tr{'bytes per second'}, > +        "-v ".$Lang::tr{'bits per second'}, >          "--color=SHADEA".$color{"color19"}, >          "--color=SHADEB".$color{"color19"}, >          "--color=BACK".$color{"color21"}, > "DEF:incoming=".$mainsettings{'RRDLOG'}."/collectd/localhost/interface/if_octets-".$interface.".rrd:rx:AVERAGE", > "DEF:outgoing=".$mainsettings{'RRDLOG'}."/collectd/localhost/interface/if_octets-".$interface.".rrd:tx:AVERAGE", > -        "CDEF:outgoingn=outgoing,-1,*", > +        "CDEF:outgoingb=outgoing,8,*", > +        "CDEF:outgoingn=outgoingb,-1,*", > +        "CDEF:incomingb=incoming,8,*", >          "COMMENT:".sprintf("%-20s",$Lang::tr{'caption'}), >          "COMMENT:".sprintf("%15s",$Lang::tr{'maximal'}), >          "COMMENT:".sprintf("%15s",$Lang::tr{'average'}), >          "COMMENT:".sprintf("%15s",$Lang::tr{'minimal'}), >          "COMMENT:".sprintf("%15s",$Lang::tr{'current'})."\\j", > - > "AREA:incoming".$color{"color12"}."A0:".sprintf("%-20s",$Lang::tr{'incoming > traffic in bytes per second'}), > -        "GPRINT:incoming:MAX:%8.1lf %sBps", > -        "GPRINT:incoming:AVERAGE:%8.1lf %sBps", > -        "GPRINT:incoming:MIN:%8.1lf %sBps", > -        "GPRINT:incoming:LAST:%8.1lf %sBps\\j", > - > "AREA:outgoingn".$color{"color13"}."A0:".sprintf("%-20s",$Lang::tr{'outgoing > traffic in bytes per second'}), > -        "GPRINT:outgoing:MAX:%8.1lf %sBps", > -        "GPRINT:outgoing:AVERAGE:%8.1lf %sBps", > -        "GPRINT:outgoing:MIN:%8.1lf %sBps", > -        "GPRINT:outgoing:LAST:%8.1lf %sBps\\j", > + > "AREA:incomingb".$color{"color12"}."A0:".sprintf("%-20s",$Lang::tr{'incoming > traffic in bits per second'}), > +        "GPRINT:incomingb:MAX:%8.1lf %sbps", > +        "GPRINT:incomingb:AVERAGE:%8.1lf %sbps", > +        "GPRINT:incomingb:MIN:%8.1lf %sbps", > +        "GPRINT:incomingb:LAST:%8.1lf %sbps\\j", > + > "AREA:outgoingn".$color{"color13"}."A0:".sprintf("%-20s",$Lang::tr{'outgoing > traffic in bits per second'}), > +        "GPRINT:outgoingb:MAX:%8.1lf %sbps", > +        "GPRINT:outgoingb:AVERAGE:%8.1lf %sbps", > +        "GPRINT:outgoingb:MIN:%8.1lf %sbps", > +        "GPRINT:outgoingb:LAST:%8.1lf %sbps\\j", >          ); >          $ERROR = RRDs::error; >          return "Error in RRD::graph for ".$interface.": ".$ERROR."\n" > if $ERROR; > @@ -582,28 +584,30 @@ sub updatevpngraph { >          "-1".$period, >          "-r", >          "-t ".$Lang::tr{'traffic on'}." ".$interface." > ".$Lang::tr{'graph per'}." ".$Lang::tr{$period."-graph"}, > -        "-v ".$Lang::tr{'bytes per second'}, > +        "-v ".$Lang::tr{'bits per second'}, >          "--color=SHADEA".$color{"color19"}, >          "--color=SHADEB".$color{"color19"}, >          "--color=BACK".$color{"color21"}, > "DEF:incoming=".$mainsettings{'RRDLOG'}."/collectd/localhost/openvpn-$interface/if_octets_derive.rrd:rx:AVERAGE", > "DEF:outgoing=".$mainsettings{'RRDLOG'}."/collectd/localhost/openvpn-$interface/if_octets_derive.rrd:tx:AVERAGE", > -        "CDEF:outgoingn=outgoing,-1,*", > +        "CDEF:outgoingb=outgoing,8,*", > +        "CDEF:outgoingn=outgoingb,-1,*", > +        "CDEF:incomingb=incoming,8,*", >          "COMMENT:".sprintf("%-20s",$Lang::tr{'caption'}), >          "COMMENT:".sprintf("%15s",$Lang::tr{'maximal'}), >          "COMMENT:".sprintf("%15s",$Lang::tr{'average'}), >          "COMMENT:".sprintf("%15s",$Lang::tr{'minimal'}), >          "COMMENT:".sprintf("%15s",$Lang::tr{'current'})."\\j", > -        "AREA:incoming#00dd00:".sprintf("%-20s",$Lang::tr{'incoming > traffic in bytes per second'}), > -        "GPRINT:incoming:MAX:%8.1lf %sBps", > -        "GPRINT:incoming:AVERAGE:%8.1lf %sBps", > -        "GPRINT:incoming:MIN:%8.1lf %sBps", > -        "GPRINT:incoming:LAST:%8.1lf %sBps\\j", > - "AREA:outgoingn#dd0000:".sprintf("%-20s",$Lang::tr{'outgoing traffic > in bytes per second'}), > -        "GPRINT:outgoing:MAX:%8.1lf %sBps", > -        "GPRINT:outgoing:AVERAGE:%8.1lf %sBps", > -        "GPRINT:outgoing:MIN:%8.1lf %sBps", > -        "GPRINT:outgoing:LAST:%8.1lf %sBps\\j", > + "AREA:incomingb#00dd00:".sprintf("%-20s",$Lang::tr{'incoming traffic > in bits per second'}), > +        "GPRINT:incomingb:MAX:%8.1lf %sbps", > +        "GPRINT:incomingb:AVERAGE:%8.1lf %sbps", > +        "GPRINT:incomingb:MIN:%8.1lf %sbps", > +        "GPRINT:incomingb:LAST:%8.1lf %sbps\\j", > + "AREA:outgoingn#dd0000:".sprintf("%-20s",$Lang::tr{'outgoing traffic > in bits per second'}), > +        "GPRINT:outgoingb:MAX:%8.1lf %sbps", > +        "GPRINT:outgoingb:AVERAGE:%8.1lf %sbps", > +        "GPRINT:outgoingb:MIN:%8.1lf %sbps", > +        "GPRINT:outgoingb:LAST:%8.1lf %sbps\\j", >          ); >          $ERROR = RRDs::error; >          return "Error in RRD::graph for ".$interface.": ".$ERROR."\n" > if $ERROR; > @@ -619,7 +623,7 @@ sub updatevpnn2ngraph { >          "-1".$period, >          "-r", >          "-t ".$Lang::tr{'traffic on'}." ".$interface." > ".$Lang::tr{'graph per'}." ".$Lang::tr{$period."-graph"}, > -        "-v ".$Lang::tr{'bytes per second'}, > +        "-v ".$Lang::tr{'bits per second'}, >          "--color=SHADEA".$color{"color19"}, >          "--color=SHADEB".$color{"color19"}, >          "--color=BACK".$color{"color21"}, > @@ -629,44 +633,50 @@ sub updatevpnn2ngraph { > "DEF:overhead_out=".$mainsettings{'RRDLOG'}."/collectd/localhost/openvpn-$interface/if_octets_derive-overhead.rrd:tx:AVERAGE", > "DEF:compression_in=".$mainsettings{'RRDLOG'}."/collectd/localhost/openvpn-$interface/compression_derive-data_in.rrd:uncompressed:AVERAGE", > "DEF:compression_out=".$mainsettings{'RRDLOG'}."/collectd/localhost/openvpn-$interface/compression_derive-data_out.rrd:uncompressed:AVERAGE", > -        "CDEF:outgoingn=outgoing,-1,*", > -        "CDEF:overhead_outn=overhead_out,-1,*", > -        "CDEF:compression_outn=compression_out,-1,*", > +        "CDEF:outgoingb=outgoing,8,*", > +        "CDEF:outgoingn=outgoingb,-1,*", > +        "CDEF:incomingb=incoming,8,*", > +        "CDEF:overhead_outb=overhead_out,8,*", > +        "CDEF:overhead_outn=overhead_outb,-1,*", > +        "CDEF:overhead_inb=overhead_in,8,*", > +        "CDEF:compression_outb=compression_out,8,*", > +        "CDEF:compression_outn=compression_outb,-1,*", > +        "CDEF:compression_inb=compression_in,8,*", >          "COMMENT:".sprintf("%-20s",$Lang::tr{'caption'}), >          "COMMENT:".sprintf("%15s",$Lang::tr{'maximal'}), >          "COMMENT:".sprintf("%15s",$Lang::tr{'average'}), >          "COMMENT:".sprintf("%15s",$Lang::tr{'minimal'}), >          "COMMENT:".sprintf("%15s",$Lang::tr{'current'})."\\j", > -        "AREA:incoming#00dd00:".sprintf("%-23s",$Lang::tr{'incoming > traffic in bytes per second'}), > -        "GPRINT:incoming:MAX:%8.1lf %sBps", > -        "GPRINT:incoming:AVERAGE:%8.1lf %sBps", > -        "GPRINT:incoming:MIN:%8.1lf %sBps", > -        "GPRINT:incoming:LAST:%8.1lf %sBps\\j", > - "STACK:overhead_in#116B11:".sprintf("%-23s",$Lang::tr{'incoming > overhead in bytes per second'}), > -        "GPRINT:overhead_in:MAX:%8.1lf %sBps", > -        "GPRINT:overhead_in:AVERAGE:%8.1lf %sBps", > -        "GPRINT:overhead_in:MIN:%8.1lf %sBps", > -        "GPRINT:overhead_in:LAST:%8.1lf %sBps\\j", > - "LINE1:compression_in#ff00ff:".sprintf("%-23s",$Lang::tr{'incoming > compression in bytes per second'}), > -        "GPRINT:compression_in:MAX:%8.1lf %sBps", > -        "GPRINT:compression_in:AVERAGE:%8.1lf %sBps", > -        "GPRINT:compression_in:MIN:%8.1lf %sBps", > -        "GPRINT:compression_in:LAST:%8.1lf %sBps\\j", > - "AREA:outgoingn#dd0000:".sprintf("%-23s",$Lang::tr{'outgoing traffic > in bytes per second'}), > -        "GPRINT:outgoing:MAX:%8.1lf %sBps", > -        "GPRINT:outgoing:AVERAGE:%8.1lf %sBps", > -        "GPRINT:outgoing:MIN:%8.1lf %sBps", > -        "GPRINT:outgoing:LAST:%8.1lf %sBps\\j", > - "STACK:overhead_outn#870C0C:".sprintf("%-23s",$Lang::tr{'outgoing > overhead in bytes per second'}), > -        "GPRINT:overhead_out:MAX:%8.1lf %sBps", > -        "GPRINT:overhead_out:AVERAGE:%8.1lf %sBps", > -        "GPRINT:overhead_out:MIN:%8.1lf %sBps", > -        "GPRINT:overhead_out:LAST:%8.1lf %sBps\\j", > - "LINE1:compression_outn#000000:".sprintf("%-23s",$Lang::tr{'outgoing > compression in bytes per second'}), > -        "GPRINT:compression_out:MAX:%8.1lf %sBps", > -        "GPRINT:compression_out:AVERAGE:%8.1lf %sBps", > -        "GPRINT:compression_out:MIN:%8.1lf %sBps", > -        "GPRINT:compression_out:LAST:%8.1lf %sBps\\j", > + "AREA:incomingb#00dd00:".sprintf("%-23s",$Lang::tr{'incoming traffic > in bits per second'}), > +        "GPRINT:incomingb:MAX:%8.1lf %sbps", > +        "GPRINT:incomingb:AVERAGE:%8.1lf %sbps", > +        "GPRINT:incomingb:MIN:%8.1lf %sbps", > +        "GPRINT:incomingb:LAST:%8.1lf %sbps\\j", > + "STACK:overhead_inb#116B11:".sprintf("%-23s",$Lang::tr{'incoming > overhead in bits per second'}), > +        "GPRINT:overhead_inb:MAX:%8.1lf %sbps", > +        "GPRINT:overhead_inb:AVERAGE:%8.1lf %sbps", > +        "GPRINT:overhead_inb:MIN:%8.1lf %sbps", > +        "GPRINT:overhead_inb:bLAST:%8.1lf %sbps\\j", > + "LINE1:compression_inb#ff00ff:".sprintf("%-23s",$Lang::tr{'incoming > compression in bits per second'}), > +        "GPRINT:compression_inb:MAX:%8.1lf %sbps", > +        "GPRINT:compression_inb:AVERAGE:%8.1lf %sbps", > +        "GPRINT:compression_inb:MIN:%8.1lf %sbps", > +        "GPRINT:compression_inb:LAST:%8.1lf %sbps\\j", > + "AREA:outgoingn#dd0000:".sprintf("%-23s",$Lang::tr{'outgoing traffic > in bits per second'}), > +        "GPRINT:outgoingb:MAX:%8.1lf %sbps", > +        "GPRINT:outgoingb:AVERAGE:%8.1lf %sbps", > +        "GPRINT:outgoingb:MIN:%8.1lf %sbps", > +        "GPRINT:outgoingb:LAST:%8.1lf %sbps\\j", > + "STACK:overhead_outn#870C0C:".sprintf("%-23s",$Lang::tr{'outgoing > overhead in bits per second'}), > +        "GPRINT:overhead_outb:MAX:%8.1lf %sbps", > +        "GPRINT:overhead_outb:AVERAGE:%8.1lf %sbps", > +        "GPRINT:overhead_outb:MIN:%8.1lf %sbps", > +        "GPRINT:overhead_outb:LAST:%8.1lf %sbps\\j", > + "LINE1:compression_outn#000000:".sprintf("%-23s",$Lang::tr{'outgoing > compression in bits per second'}), > +        "GPRINT:compression_outb:MAX:%8.1lf %sbps", > +        "GPRINT:compression_outb:AVERAGE:%8.1lf %sbps", > +        "GPRINT:compression_outb:MIN:%8.1lf %sbps", > +        "GPRINT:compression_outb:LAST:%8.1lf %sbps\\j", >          ); >          $ERROR = RRDs::error; >          return "Error in RRD::graph for ".$interface.": ".$ERROR."\n" > if $ERROR; > @@ -683,7 +693,7 @@ sub updatefwhitsgraph { >          "-1".$period, >          "-r", >          "-t ".$Lang::tr{'firewall hits per'}." > ".$Lang::tr{$period."-graph"}, > -        "-v ".$Lang::tr{'bytes per second'}, > +        "-v ".$Lang::tr{'bits per second'}, >          "--color=SHADEA".$color{"color19"}, >          "--color=SHADEB".$color{"color19"}, >          "--color=BACK".$color{"color21"}, > @@ -692,36 +702,41 @@ sub updatefwhitsgraph { > "DEF:forward=".$mainsettings{'RRDLOG'}."/collectd/localhost/iptables-filter-POLICYFWD/ipt_bytes-DROP_FORWARD.rrd:value:AVERAGE", > "DEF:newnotsyn=".$mainsettings{'RRDLOG'}."/collectd/localhost/iptables-filter-NEWNOTSYN/ipt_bytes-DROP_NEWNOTSYN.rrd:value:AVERAGE", > "DEF:portscan=".$mainsettings{'RRDLOG'}."/collectd/localhost/iptables-filter-PSCAN/ipt_bytes-DROP_PScan.rrd:value:AVERAGE", > +        "CDEF:outputb=output,8,*", > +        "CDEF:inputb=input,8,*", > +        "CDEF:forwardb=forward,8,*", > +        "CDEF:newnotsynb=newnotsyn,8,*", > +        "CDEF:portscanb=portscan,8,*", >          "COMMENT:".sprintf("%-26s",$Lang::tr{'caption'}), >          "COMMENT:".sprintf("%15s",$Lang::tr{'maximal'}), >          "COMMENT:".sprintf("%15s",$Lang::tr{'average'}), >          "COMMENT:".sprintf("%14s",$Lang::tr{'minimal'}), >          "COMMENT:".sprintf("%15s",$Lang::tr{'current'})."\\j", > - > "AREA:output".$color{"color25"}."A0:".sprintf("%-25s",$Lang::tr{'firewallhits'}." > (OUTPUT)"), > -        "GPRINT:output:MAX:%8.1lf %sBps", > -        "GPRINT:output:AVERAGE:%8.1lf %sBps", > -        "GPRINT:output:MIN:%8.1lf %sBps", > -        "GPRINT:output:LAST:%8.1lf %sBps\\j", > - > "STACK:forward".$color{"color23"}."A0:".sprintf("%-25s",$Lang::tr{'firewallhits'}." > (FORWARD)"), > -        "GPRINT:forward:MAX:%8.1lf %sBps", > -        "GPRINT:forward:AVERAGE:%8.1lf %sBps", > -        "GPRINT:forward:MIN:%8.1lf %sBps", > -        "GPRINT:forward:LAST:%8.1lf %sBps\\j", > - > "STACK:input".$color{"color24"}."A0:".sprintf("%-25s",$Lang::tr{'firewallhits'}." > (INPUT)"), > -        "GPRINT:input:MAX:%8.1lf %sBps", > -        "GPRINT:input:AVERAGE:%8.1lf %sBps", > -        "GPRINT:input:MIN:%8.1lf %sBps", > -        "GPRINT:input:LAST:%8.1lf %sBps\\j", > - "STACK:newnotsyn".$color{"color14"}."A0:".sprintf("%-25s","NewNotSYN"), > -        "GPRINT:newnotsyn:MAX:%8.1lf %sBps", > -        "GPRINT:newnotsyn:AVERAGE:%8.1lf %sBps", > -        "GPRINT:newnotsyn:MIN:%8.1lf %sBps", > -        "GPRINT:newnotsyn:LAST:%8.1lf %sBps\\j", > - > "STACK:portscan".$color{"color16"}."A0:".sprintf("%-25s",$Lang::tr{'portscans'}), > -        "GPRINT:portscan:MAX:%8.1lf %sBps", > -        "GPRINT:portscan:AVERAGE:%8.1lf %sBps", > -        "GPRINT:portscan:MIN:%8.1lf %sBps", > -        "GPRINT:portscan:LAST:%8.1lf %sBps\\j", > + > "AREA:outputb".$color{"color25"}."A0:".sprintf("%-25s",$Lang::tr{'firewallhits'}." > (OUTPUT)"), > +        "GPRINT:outputb:MAX:%8.1lf %sbps", > +        "GPRINT:outputb:AVERAGE:%8.1lf %sbps", > +        "GPRINT:outputb:MIN:%8.1lf %sbps", > +        "GPRINT:outputb:LAST:%8.1lf %sbps\\j", > + > "STACK:forwardb".$color{"color23"}."A0:".sprintf("%-25s",$Lang::tr{'firewallhits'}." > (FORWARD)"), > +        "GPRINT:forwardb:MAX:%8.1lf %sbps", > +        "GPRINT:forwardb:AVERAGE:%8.1lf %sbps", > +        "GPRINT:forwardb:MIN:%8.1lf %sbps", > +        "GPRINT:forwardb:LAST:%8.1lf %sbps\\j", > + > "STACK:inputb".$color{"color24"}."A0:".sprintf("%-25s",$Lang::tr{'firewallhits'}." > (INPUT)"), > +        "GPRINT:inputb:MAX:%8.1lf %sbps", > +        "GPRINT:inputb:AVERAGE:%8.1lf %sbps", > +        "GPRINT:inputb:MIN:%8.1lf %sbps", > +        "GPRINT:inputb:LAST:%8.1lf %sbps\\j", > + "STACK:newnotsynb".$color{"color14"}."A0:".sprintf("%-25s","NewNotSYN"), > +        "GPRINT:newnotsynb:MAX:%8.1lf %sbps", > +        "GPRINT:newnotsynb:AVERAGE:%8.1lf %sbps", > +        "GPRINT:newnotsynb:MIN:%8.1lf %sbps", > +        "GPRINT:newnotsynb:LAST:%8.1lf %sbps\\j", > + > "STACK:portscanb".$color{"color16"}."A0:".sprintf("%-25s",$Lang::tr{'portscans'}), > +        "GPRINT:portscanb:MAX:%8.1lf %sbps", > +        "GPRINT:portscanb:AVERAGE:%8.1lf %sbps", > +        "GPRINT:portscanb:MIN:%8.1lf %sbps", > +        "GPRINT:portscanb:LAST:%8.1lf %sbps\\j", >          ); >          $ERROR = RRDs::error; >          return "Error in RRD::graph for firewallhits: ".$ERROR."\n" if > $ERROR; > @@ -1012,7 +1027,7 @@ sub updateqosgraph { >          "-1".$period, >          "-r", >          "-t ".$Lang::tr{'Utilization on'}." (".$qossettings{'DEV'}.") > ".$Lang::tr{'graph per'}." ".$Lang::tr{$period."-graph"}, > -        "-v ".$Lang::tr{'bytes per second'}, > +        "-v ".$Lang::tr{'bits per second'}, >          "--color=SHADEA".$color{"color19"}, >          "--color=SHADEB".$color{"color19"}, >          "--color=BACK".$color{"color21"}, > @@ -1039,21 +1054,24 @@ sub updateqosgraph { >              } > >              if ( $classline[0] eq $qossettings{'DEV'} ){ > -                push(@command, > "DEF:$classline[1]=$mainsettings{'RRDLOG'}/class_$qossettings{'CLASSPRFX'}-$classline[1]_$qossettings{'DEV'}.rrd:bytes:AVERAGE"); > +                # Found: ERROR: rpn expressions without DEF or CDEF > variables are not supported > +                # CDEF does not like a number as a variable name. ie. > "204" from $classline[1] > +                push(@command, > "DEF:$classline[1]bit=$mainsettings{'RRDLOG'}/class_$qossettings{'CLASSPRFX'}-$classline[1]_$qossettings{'DEV'}.rrd:bytes:AVERAGE"); > +                push(@command, "CDEF:$classline[8]=$classline[1]bit,8,*"); > >                  # get color to be used for this graph >                  my $graphColor = $colorMap{$colorKey}; > >                  if ($count eq "1") { > -                    push(@command, > "AREA:$classline[1]$graphColor:$Lang::tr{'Class'} $classline[1] > -".sprintf("%15s",$classline[8])); > +                    push(@command, > "AREA:$classline[8]$graphColor:$Lang::tr{'Class'} $classline[1] > -".sprintf("%15s",$classline[8])); >                  } else { > -                    push(@command, > "STACK:$classline[1]$graphColor:$Lang::tr{'Class'} $classline[1] > -".sprintf("%15s",$classline[8])); > +                    push(@command, > "STACK:$classline[8]$graphColor:$Lang::tr{'Class'} $classline[1] > -".sprintf("%15s",$classline[8])); >                  } > > -                push(@command, "GPRINT:$classline[1]:MAX:%8.1lf %sBps" > -                        , "GPRINT:$classline[1]:AVERAGE:%8.1lf %sBps" > -                        , "GPRINT:$classline[1]:MIN:%8.1lf %sBps" > -                        , "GPRINT:$classline[1]:LAST:%8.1lf %sBps\\j"); > +                push(@command, "GPRINT:$classline[8]:MAX:%8.1lf %sbps" > +                        , "GPRINT:$classline[8]:AVERAGE:%8.1lf %sbps" > +                        , "GPRINT:$classline[8]:MIN:%8.1lf %sbps" > +                        , "GPRINT:$classline[8]:LAST:%8.1lf %sbps\\j"); >                  $count++; >              } >          } > diff --git a/langs/en/cgi-bin/en.pl b/langs/en/cgi-bin/en.pl > index dc1fd8d67b30..b0097074beb0 100644 > --- a/langs/en/cgi-bin/en.pl > +++ b/langs/en/cgi-bin/en.pl > @@ -515,6 +515,7 @@ >  'broken pipe' => 'Broken pipe', >  'buffered memory' => 'Buffered Memory', >  'buffers' => 'buffers', > +'bits per second' => 'Bits per Second', >  'bytes per second' => 'Bytes per Second', >  'bytes received' => 'Bytes Received', >  'bytes sent' => 'Bytes Sent', > @@ -1431,10 +1432,10 @@ >  'inactive' => 'inactive', >  'include logfiles' => 'Include logfiles', >  'incoming' => 'incoming', > -'incoming compression in bytes per second' => 'Incoming Compression', > +'incoming compression in bits per second' => 'Incoming Compression', >  'incoming firewall access' => 'Incoming Firewall Access', > -'incoming overhead in bytes per second' => 'Incoming Overhead', > -'incoming traffic in bytes per second' => 'Incoming Traffic', > +'incoming overhead in bits per second' => 'Incoming Overhead', > +'incoming traffic in bits per second' => 'Incoming Traffic', >  'incorrect password' => 'Incorrect password', >  'info' => 'Info', >  'init string' => 'Init:', > @@ -1907,7 +1908,7 @@ >  'our donors' => 'Our donors', >  'out' => 'Out', >  'outgoing' => 'outgoing', > -'outgoing compression in bytes per second' => 'Outgoing compression', > +'outgoing compression in bits per second' => 'Outgoing compression', >  'outgoing firewall' => 'Outgoing Firewall', >  'outgoing firewall access' => 'Outgoing Firewall Access', >  'outgoing firewall add ip group' => 'Add IP Address Group', > @@ -1930,8 +1931,8 @@ >  'outgoing firewall reset' => 'Reset all', >  'outgoing firewall view group' => 'View group', >  'outgoing firewall warning' => 'Not selecting source ip or mac ignores > them', > -'outgoing overhead in bytes per second' => 'Outgoing Overhead', > -'outgoing traffic in bytes per second' => 'Outgoing Traffic', > +'outgoing overhead in bits per second' => 'Outgoing Overhead', > +'outgoing traffic in bits per second' => 'Outgoing Traffic', >  'override mtu' => 'Override default MTU', >  'ovpn' => 'OpenVPN', >  'ovpn add conf' => 'Additional configuration', >