+unset command_not_found_handle
[nethome.git] / bin / traf
1 #! /usr/bin/perl
2 # $Id$
3
4 use strict;
5 use warnings;
6
7 my($IFDEV,$SECS)=@ARGV;
8
9 $SECS||=8;
10 my $IGNORE=qr/^(?:lo|sit|pan|tun|tap|wmaster|sixxs|virbr)\d*$/;
11
12 $|=1;
13 # $if->{"rx"=>,"tx"=>}
14 my %last;
15 my $last_if="";
16 my $dot;
17 for (;;) {
18         local *F;
19         open F,"/proc/net/dev" or die;
20         my $dev=do { local $/; <F> or die; };
21         close F or die;
22         $dev=~s/^Inter-.*\n face .*\n// or die $dev;
23         my $smth;
24         while ($dev=~s/^\s*(\S+?):\s*(\d+)(?:\s+\d+){7}\s+(\d+)\s.*\n//) {
25                 my($if,$rx,$tx)=($1,$2,$3);
26                 next if $IFDEV && $if ne $IFDEV;
27                 next if !$IFDEV && $if=~/^$IGNORE$/o;
28                 $last{$if}||={};
29                 my $last=$last{$if};
30                 if (defined $last->{"rx"}) {
31                         if ($dot) {
32                                 print "\n";
33                                 $dot=0;
34                         }
35                         if ($last_if ne $if) {
36                                 $last_if=$if;
37                                 print "$if:\n";
38                         }
39                         # FIXME - done?
40                         # 1798512 37387
41                         # 2147483648      32058
42                         # 1800104 35797
43                         sub fmt($$)
44                         {
45                                 my($now,$last)=@_;
46                                 if ($now>=$last) {
47                                         return $now-$last;
48                                 } else {
49                                         return "=$now";
50                                 }
51                         }
52                         print fmt($rx,$last->{"rx"})."\t".fmt($tx,$last->{"tx"})."\n";
53                 }
54                 $last->{"rx"}=$rx;
55                 $last->{"tx"}=$tx;
56                 $smth++;
57         }
58         die $dev if $dev;
59         if (!$smth) {
60                 print ".";
61                 $dot++;
62                 $last_if="";
63         }
64         sleep $SECS;
65 }