#!/usr/bin/perl

sub trim{
	my $str = shift;
	$str =~ s/^\s+//;
	$str =~ s/\s+$//;
	return $str;
}
sub println{
	my $str = shift;
	print $str ."\n";
}
sub usage{
	my $str = shift;
	println("usage: $0 <csv-file>");
	println("ERROR: $str") if($str=~/\S/);
	exit 1;
}
sub displayAverage{
	$avgdownload = $sumdownload / $entrynr;
	$avgupload = $sumupload / $entrynr;
	$avgping = $sumping / $entrynr;
	println("$lastdate\n================");
	println("- download: $avgdownload");
	println("- upload: $avgupload");
	println("- ping: $avgping");
	println("- lines: $entrynr");
	println("\n\n");
}

$csvfile = $ARGV[0];
usage() if($csvfile!~/\S/ or $csvfile=~/^\-\-?h/);
usage("csv file $csvfile does not exist!") if(! -f $csvfile);

$lastdate = "";
$sumdownload = 0;
$sumupload = 0;
$sumping = 0;
println("- go through csv file $csvfile ...");
open(F, "<$csvfile") or usage("cannot read $csvfile: $!");
while(<F>){
	chomp($_);
	$line = trim($_);
	next if($line!~/\S/);
# Date;Time;Ping;Download;Upload
# 2022-06-01;07:15:02;37.125 ms;18.77 Mbit/s;7.26 Mbit/s
	next if($line!~/^\d/);
	($date, $time, $ping, $download, $upload) = split(/\s*;\s*/, $line);
	$date = substr($date, 0, 7);
	if($date ne $lastdate){
		displayAverage() if($entrynr);
		$entrynr = 0;
		$sumdownload = 0;
		$sumupload = 0;
		$sumping = 0;
	}
	$lastdate = $date;
	$download =~ s/[^\d\.]//g;
	$upload =~ s/[^\d\.]//g;
	$ping =~ s/[^\d\.]//g;
	$sumdownload += $download;
	$sumupload += $upload;
	$sumping += $ping;
	$entrynr++;
}
close(F);
displayAverage() if($entrynr);

