#!/usr/bin/env escript -mode(compile). %% Assume that Path is something like %% /sys/devices/pci0000:00/0000:00:01.0/0000:0a:00.0/net/eth0/statistics/tx_bytes %% and that we're reading bytes. main([IntervalStr, Path]) -> Interval = list_to_integer(IntervalStr), timer:send_interval(Interval, tick), timer:send_interval(1000, sec), {ok, FH} = file:open(Path, [read, raw]), loop(FH, read_value(FH), 1000 / Interval). read_value(FH) -> file:position(FH, 0), {ok, Bs} = file:read(FH, 1024), {Int, _} = string:to_integer(Bs), Int. mbits(Num, Hz) -> (Num * 8 * Hz) / (1024*1024). loop(FH, LastRead, Hz) -> loop(FH, LastRead, Hz, 0, 0). loop(FH, LastRead, Hz, MaxBurst, Sum) -> receive tick -> NewRead = read_value(FH), Diff = NewRead - LastRead, %io:format("~.1f ", [mbits(Diff, Hz)]), loop(FH, NewRead, Hz, if Diff > MaxBurst -> Diff; true -> MaxBurst end, Sum + Diff); sec -> Max = mbits(MaxBurst, Hz), Avg = mbits(Sum, 1), io:format("Max ~.1f Mbit/s Avg ~.1f Mbit/s Ratio ~.1f @ ~p\n", [Max, Avg, Max / Avg, time()]), loop(FH, LastRead, Hz) end.