#!/usr/bin/perl
use strict;
my @comstats = </proc/driver/domhub/card?/pair?/dom?/comstat>;
die "no comstats!\n" unless @comstats;

my %last;

use bigint;

my $interval = 5.0;
my $mbsum    = 0;
my $virgin   = 1;

while(1) {
    my $tot = 0;
    my $i   = 0;
    for(@comstats) {
	my $cs = `cat $_`;
	if($cs !~ /\/dev\/dhc(\d)w(\d)d(\w).*?RX:\s+(\d+)B.*?TX:\s+(\d+)B/s) {
	    die "Bad comstat: $cs.\n";
	}
	my $dom = "$1$2$3";
	my $nb = $4+$5;
	if(defined $last{$dom}) {
	    my $del = $nb-$last{$dom};
	    $del = 0 if $del < 0; # In case of comstat reset
	    $tot += $del;
	    my $throughput = $del/(1024.0*$interval);
	    printf("%35s",sprintf("%3s %10d B %7.1f kB/sec", $dom, $nb, $throughput));
	}
	$last{$dom} = $nb;
	print "\n" if !$virgin && ($i%2) ;
	$i++;
    }
    my $totkb = $tot/1024;
    my $delmb = ($totkb)/1024;
    $mbsum += $delmb;
    my $totthru = $delmb/$interval;
    printf("Total %5.2e MB (%2.2f MB/sec).\n", $mbsum, $totthru) unless $virgin;
    $virgin   = 0;
    sleep $interval;
}
