#$dataroot = "/mit/raeburn/batch2/data";
#$dataroot = "/var/https/htdocs/nightly";
$dataroot = "/mit/raeburn/www/nightly";

$h = `hostname`;
chop $h;
if ($h eq "krbdev.mit.edu") {
    $dataroot = "/var/www/nightly";
} elsif (defined $ENV{TOPDIR}) {
    $dataroot = $ENV{TOPDIR};
}

sub uniq {
    my($i, %z);
    foreach $i (@_) { $z{$i} = 0; }
    return keys %z;
}

sub nicedate {
    my($n) = @_;
    $n =~ s/(20[0-9][0-9])([0-9][0-9])([0-9][0-9])\.[0-9][0-9][0-9][0-9]/$1-$2-$3/;
    return $n;
}

sub record_result {
    # args: version configname datestamp status
    my($v, $cname, $date, $status) = @_;
    my($n) = &nicedate($date);
    $result_by_vcd{$v}{$cname}{$n} = $status;
    $result_by_cvd{$cname}{$v}{$n} = $status;
    $result_by_dcv{$n}{$cname}{$v} = $status;
    $pathname{$v}{$cname}{$n} = "$v/$cname/$date";
}

sub make_link_table() {
    # args: outfileref, attr, list of filenames
    local($fh, $attr, @files) = @_;
    local($f);
    print $fh "<table $attr>\n";
    foreach $f (@files) {
	my ($displayname);
	$displayname = $f;
	$displayname =~ s,!,/,g;
	$displayname =~ s,\.txtgz$,,;
	print $fh "<tr><td align=center><a href=\"$f\">$displayname</a>\n";
    }
    print $fh "</table>\n";
}

sub make_dir_page_link_table() {
    # args: outfileref, pagename, list of filenames
    local($fh, $page, @files) = @_;
    local($f);
    print $fh "<table align=center>\n";
    foreach $f (@files) {
	print $fh "<tr><td><a href=\"$f/$page\">$f</a>\n";
    }
    print $fh "</table>\n";
}

sub look_for_logs() {
    # args: outfileref, tablelabel, basedir, logfilename
    # returns list: files found (possibly empty)
    local($fh, $label, $dir, $fname) = @_;
    local($_, $f);
    local(@files) = ();
    local($cmd);
    if (-r "$dir/config.cache.txtgz") {
	$fname .= ".txtgz";
    }
    open FIND, "(cd $dir && find . -name $fname -print)|";
    if (1) {
	while (<FIND>) {
	    chop;
	    s/^\.\///;
	    push @files, $_;
	}
    }
    close FIND;
    if ($#files >= 0) {
	print $fh "<p align=center>\n$label:\n";
	&make_link_table($fh, "align=center", sort @files);
    } else {
	print $fh "<p align=center>\n$label:\nNone.\n";
    }
}

sub make_status_page() {
    # args: configname, datename
    local($version, $cname, $date) = @_;
    local($d) = "$dataroot/$version/$cname/$date";
    local($kdir);

    if ($version eq "current") {
	$kdir = "krb5-current";
    } else {
	$kdir = "krb5-${version}-current";
    }

    open DPAGE, ">$d/index.html.new";
    print DPAGE "<html>\n";
    print DPAGE "<head>\n";
    print DPAGE "<title>Snapshot build results for $cname ($version, $date)</title>\n";
    print DPAGE "</head>\n";
    print DPAGE "<body>\n";
    print DPAGE "<h1><center>Snapshot build results for $cname</center></h1>\n";
    print DPAGE "<br><center>branch: $version<br>build date stamp: $date</center></h1>\n";
#    print DPAGE "<p><center>(in directory $d)</center><p>\n";
    if (-r "$d/status") {
	print DPAGE "<center>status: <b>";
	open DSTAT, "<$d/status";
	while (<DSTAT>) { print DPAGE; }
	close DSTAT;
	print DPAGE "</b></center>\n<p>\n";
    }
    print DPAGE "<table align=center border=1>\n";
    if (-r "$d/env-info.txtgz") {
	print DPAGE "<tr><td align=center><a href=\"env-info.txtgz\">Environment info</a>\n";
    } elsif (-r "$d/env-info") {
	print DPAGE "<tr><td align=center><a href=\"env-info\">Environment info</a>\n";
    } else {
	print DPAGE "<tr><td align=center>No environment info available\n";
    }
    if (-r "$d/config-log.txtgz") {
	print DPAGE "<tr><td align=center><a href=\"config-log.txtgz\">Configuration log</a>\n";
    } elsif (-r "$d/config-log") {
	print DPAGE "<tr><td align=center><a href=\"config-log\">Configuration log</a>\n";
    } else {
	print DPAGE "<tr><td align=center>No configuration log available\n";
    }
    if (-r "$d/config.cache.txtgz") {
	print DPAGE "<tr><td align=center><a href=\"config.cache.txtgz\">Configure cache</a>\n";
    } elsif (-r "$d/$kdir/src/config.cache") {
	print DPAGE "<tr><td align=center><a href=\"$kdir/src/config.cache\">Configure cache</a>\n";
    } else {
	print DPAGE "<tr><td align=center>No config.cache available\n";
    }
    if (-r "$d/build-log.txtgz") {
	print DPAGE "<tr><td align=center><a href=\"build-log.txtgz\">Build log</a>\n";
    } elsif (-r "$d/build-log") {
	print DPAGE "<tr><td align=center><a href=\"build-log\">Build log</a>\n";
    } else {
	print DPAGE "<tr><td align=center>No build log available\n";
    }
    if (-r "$d/install-log.txtgz") {
	print DPAGE "<tr><td align=center><a href=\"install-log.txtgz\">Installation log</a>\n";
    } elsif (-r "$d/install-log") {
	print DPAGE "<tr><td align=center><a href=\"install-log\">Installation log</a>\n";
    } else {
	print DPAGE "<tr><td align=center>No installation log available\n";
    }
    if (-r "$d/check-log.txtgz") {
	print DPAGE "<tr><td align=center><a href=\"check-log.txtgz\">Check log</a>\n";
    } elsif (-r "$d/check-log") {
	print DPAGE "<tr><td align=center><a href=\"check-log\">Check log</a>\n";
    } else {
	print DPAGE "<tr><td align=center>No check log available\n";
    }
    print DPAGE "</table>\n";

    &look_for_logs(\*DPAGE, "DejaGNU summaries", $d, "\\*.sum");
    &look_for_logs(\*DPAGE, "DejaGNU debug logs", $d, "\\*dbg.log");
    &look_for_logs(\*DPAGE, "Python test logs", $d, "\\*testlog");

    print DPAGE "</body>\n</html>\n";
    close DPAGE;
    rename "$d/index.html.new", "$d/index.html";

}
