in reply to measuring IN/OUT traffic on your computer

I wrote something similar to this once. Here's the quick one-liner from my bash_history. I'm not sure if it measures the incoming or outgoing traffic on the eth0 device, because it was just a quick one-liner which I don't usually document or even save. It's using the linux proc interface instead of executing ifconfig.

ruby -we '@s = File.open("/proc/net/dev"); @pq = (); while sleep 20; @ +s.rewind; cq = @s.readlines.find{|l|l=~/^\s*eth0/}.scan(/[^\W:]+/)[9] +.to_i; ct = Time.now; @pq and printf "%.2f byte/sec\n", (cq-@pq)/Floa +t(ct-@pt); @pq, @pt = cq, ct; end;'

By the way, you could also get more detailed statistics by setting up iptables rules because there's a packet and byte counter for each rule.

Replies are listed 'Best First'.
Re^2: measuring IN/OUT traffic on your computer
by spx2 (Deacon) on Aug 31, 2007 at 08:35 UTC

    very nice and small

    but does it do graphs with the rates in them ? :P

      That's easy too. Firstly change the print statement so it would print the time (in epoch seconds) and the rate separated by spaces. Write that output to a file, and then graph that file with gnuplot.

      I actually have a perl program that draws a graph by calling gnuplot, here are a few parts of its code (I did it as a work so I don't want to publish all of it). The part not shown here opens a tempfile and writes into it the numbers in the simple format mentioned above. I also print some overall statistics to stdout. The following sub graphs the data then (it might need some adaptation for your purposes).

      use File::Temp (); sub showgraph { my($cmdfile, $cmdfilename); my $cmds = qq[set key off\nplot "] . quote($outname) . qq[" wi +th lines\n! echo "Press return to continue" ; read\n]; ($cmdfile, $cmdfilename) = File::Temp::tempfile undef, "UNLINK +", 1; $out or die "error creating temporary commands file"; print "Writing gnuplot command to temporary file $cmdfilename\ +n"; print $cmdfile $cmds or die "error writing command file: $!"; flush $cmdfile or die "error flushing comand file"; print "Launching gnuplot\n"; system "gnuplot", $cmdfilename; close $cmdfile; }

      Update 2008-01-29: see Plot a spiral with gnuplot.

        I like it.

        On Linux you can use the tools nload or ipfraf for this... But anyway - short and definitely a cool use of Perl.

        ___
        __