#!/usr/bin/perl

#generuje system web
$WWWFILE = "/var/www/system.html";

# ==========================================================
# hlavicka

open OF, ">$WWWFILE";
open IF, "/etc/pinger/html_head.template";
while (<IF>) {
    print OF $_;
}


# ==========================================================
# uptime a pocet spojeni

print OF `uptime`."<br>";
print OF `cat /proc/net/ip_conntrack | wc -l; `."/ ".`cat /proc/sys/net/ipv4/ip_conntrack_max`." spojeni <br>";

# ==========================================================
# pingy na cleny

print OF "<hr>\n";
print OF "<h3>Pinger status</h3>\n";

open IF, "/var/www/state/pinger.txt";
<IF>;
while (<IF>) {
    $line=$_;
    my (undef, $ip, $info, $vals,$vals2) = split ("==",$line);
    my ($id, $face, $descr) = split("::", $info);
    my ($pl, $dup, $min, $avg, $max) = split ("::", $vals);
    $pingdata{"$face:$id"} = join ("::",($face,$id,$ip,$descr,$pl,$dup,$min,$avg,$max));
    ($pl, $dup, $min, $avg, $max) = split ("::", $vals2);
    $pingdata2{"$face:$id"} = join ("::",($face,$id,$ip,$descr,$pl,$dup,$min,$avg,$max));
    $faces{"$face"} = 1;
}    
close IF;

sub plcol {
    my ($tpl) = @_;
    my $color = "black";
    if ($tpl < 5) {
	$color = "green";
    } elsif ($tpl <10) {
	$color = "orange";
	if ($prob == 0) {$prob = 1};
    } elsif ($tpl < 100) {
	$color = "red";
	$prob = 2;
    } elsif ($tpl == 100) {
	$color = "grey";
	$prob = 3;
    }
    my $retval = "<font color=\"$color\">$tpl</font>";
    return $retval;
}

sub mincol {
    my ($tpl) = @_;
    my $color = "black";
    if ($tpl eq "U") {
	$color = "grey";
	$prob = 3;
    } elsif ($tpl < 10) {
	$color = "green";
    } elsif ($tpl <20) {
	$color = "orange";
	if ($prob == 0) {$prob = 1};
    } else {
	$color = "red";
	$prob = 2;
    }
    my $retval = "<font color=\"$color\">$tpl</font>";
    return $retval;
}

sub avgcol {
    my ($tpl) = @_;
    my $color = "black";
    if ($tpl eq "U") {
	$color = "grey";
	$prob = 3;
    } elsif ($tpl < 50) {
	$color = "green";
    } elsif ($tpl <100) {
	$color = "orange";
	if ($prob == 0) {$prob = 1};
    } else {
	$color = "red";
	$prob = 2;
    }
    my $retval = "<font color=\"$color\">$tpl</font>";
    return $retval;
}

sub maxcol {
    my ($tpl) = @_;
    my $color = "black";
    if ($tpl eq "U") {
	$color = "grey";
	$prob = 3;
    } elsif ($tpl < 100) {
	$color = "green";
    } elsif ($tpl <200) {
	$color = "orange";
	if ($prob == 0) {$prob = 1};
    } else {
	$color = "red";
	$prob = 2;
    }
    my $retval = "<font color=\"$color\">$tpl</font>";
    return $retval;
}

while (my ($mface,undef) = each (%faces)) {
    print OF "<h4>$mface</h4>\n";
    print OF "<table>\n";
    print OF "<tr><th colspan=3>info</th><th colspan=5>Posledni test</th><th colspan=5>Souhrn (5 mereni)</th></tr>";
    print OF "<tr><th>id</th><th>IP</th><th>nick</th><th>PL</th><th>dup</th><th>min</th><th>avg</th><th>max</th><th>PL</th><th>dup</th><th>min</th><th>avg</th><th>max</th></tr>\n";
    foreach(%pingdata) {
	$prob = 0;
    	my ($face,$id,$ip,$descr,$pl,$dup,$min,$avg,$max) = split ("::", $_);
    	my ($face2,$id2,$ip2,$descr2,$pl2,$dup2,$min2,$avg2,$max2) = split ("::", $pingdata2{"$face:$id"});
	$pl = plcol($pl);
	$pl2 = plcol ($pl2);
	$avg = avgcol ($avg);
	$avg2 = avgcol ($avg2);
	$min = mincol ($min);
	$min2 = mincol ($min2);
	$max = maxcol ($max);
	$max2 = maxcol ($max2);
	if ($prob == 0) {
	    $color = "lime";
        } elsif ($prob == 1) {
    	    $color = "yellow";
	} elsif ($prob == 2) {
	    $color = "red";
	} elsif ($prob == 3) {
	    $color = "grey";
	} 
	if ($face eq $mface) {
	    print OF "<tr>";
	    print OF "<td>$id</td><td bgcolor=\"$color\">$ip</td><td width='150'> $descr </td><td>".$pl."</td><td> $dup</td><td>".$min." </td><td>".$avg." </td><td>".$max." </td>\n";
	    print OF "<td>".$pl2."</td><td> $dup2</td><td>".$min2." </td><td>".$avg2." </td><td>".$max2." </td>\n";
	    print OF "</tr>\n";
	}
    }
    print OF "</table>\n";
}
    
# ==========================================================
# patka

open IF, "/etc/pinger/html_tail.template";
while (<IF>) {
    print OF $_;
}
close OF;
