#! /usr/bin/env perl
#
#    Perl script to build an html index for the segment directory. The
#    script has a single argument which is the directory names that is
#    to be indexed. The directory name is assumed to be of the form:
#
#       <root-dir>/<run-id>/<ifo>
#
$|=1;
$SegDir  = $ARGV[0];
$SegDir  =~ s|/$||;
@SegList = split('/', $SegDir);
$nLvl    = $SegList;
$Ifo     = $SegList[$nLvl-1];
$RunID   = $SegList[$nLvl-2];

#---------------------------------------  Print html header
open(INXF, ">$SegDir/index.html");
print(INXF "<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">\n");
print(INXF "<html>\n");
print(INXF "<head>\n");
print(INXF "  <meta http-equiv=\"content-type\"\n");
print(INXF " content=\"text/html; charset=ISO-8859-1\">\n");
print(INXF "  <title>$Ifo Segment List for $RunID</title>\n");
print(INXF "</head>\n");
print(INXF "<body>\n");
print(INXF "<h1 style=\"text-align: center;\">$Ifo Segment List for $RunID</h1>\n");
print(INXF "<hr style=\"width: 100%; height: 2px;\"><br>\n");
print(INXF "<table cellpadding=\"2\" cellspacing=\"2\" border=\"1\"\n");
print(INXF " style=\"text-align: left; width: 100%;\">\n");
print(INXF "  <tbody>\n");
print(INXF "    <tr>\n");
print(INXF "      <td style=\"vertical-align: top;\">ID</td>\n");
print(INXF "      <td style=\"vertical-align: top;\">GPS</td>\n");
print(INXF "      <td style=\"vertical-align: top;\">Duration</td>\n");
print(INXF "      <td style=\"vertical-align: top;\">Status</td>\n");
print(INXF "      <td style=\"vertical-align: top;\">Monitor Statistics</td>\n");
print(INXF "    </tr>\n");

#---------------------------------------  Build a list of segments
@Segments = ();
opendir(DIRHANDLE, $SegDir);
while (defined($SID = readdir(DIRHANDLE))) {
    push(@Segments, $SID) if ($SID =~ /$Ifo-\d+$/);
}
closedir(DIRHANDLE);

#---------------------------------------  Loop over known segments
foreach $SID (sort(@Segments)) {
    #-----------------------------------  Get segment parameters
    my $Start = `cat $SegDir/$SID/StartTime`;
    chomp $Start;
    my $Dur  = "-";
    my $dTxt = "Unknown";
    my $SegStat = "Unknown";
    if (! (-f "$SegDir/$SID/EndTime") ) {
	$Dur = "-";
	$SegStat = "Current";
	$dTxt = "Segment not ended";
    } else {
	my $End = `cat $SegDir/$SID/EndTime`;
	chomp $End;
	$Dur = $End - $Start;
	my $dh = int($Dur/3600);
	my $ds = $Dur - ($dh * 3600);
	my $dm = int($ds/60);
	$ds -= $dm * 60;
	$dTxt = sprintf("%d:%02d:%02d", $dh, $dm, $ds);
	$SegStat = readlink("$SegDir/$SID/fillStat");
    }

    #-----------------------------------  Fill in a table row
    print(INXF "    <tr>\n");
    print(INXF "      <td style=\"vertical-align: top;\">$SID</td>\n");
    my $utc = `when -u $Start "%2d %3M %Y %2H:%02N:%02S UTC"`;
    chomp $utc;
    print(INXF "      <td style=\"vertical-align: top;\"><a title=\"$utc\">$Start</a></td>\n");

    print(INXF "      <td style=\"vertical-align: top; text-align: right;\"><a title=\"$dTxt\">$Dur</a></td>\n");
    print(INXF "      <td style=\"vertical-align: top;\">$SegStat</td>\n");

    #-----------------------------------  Build a list of segments
    my @UnsMonitors = ();
    opendir(DIRHANDLE, "$SegDir/$SID");
    while (defined($MID = readdir(DIRHANDLE))) {
	push(@UnsMonitors, $MID) if ($MID =~ s/\.txt$//);
    }
    closedir(DIRHANDLE);
    my @Monitors = sort(@UnsMonitors);

    print(INXF "      <td style=\"vertical-align: top;\">\n");
    my $nLvl = $Monitors;
    foreach $MID (@Monitors) {
	my $MonID = $MID;
	$MonID =~ s/_$Ifo$//;
	print(INXF "         <a href=\"$SID/${MID}.txt\">$MonID</a>");
	if ($MID eq $Monitors[$nLvl-1]) {
	    print(INXF "\n");
	} else {
	    print(INXF ",\n");
	}
    }
    print(INXF "      </td>\n");
    print(INXF "    </tr>\n");
}
print(INXF "  </tbody>\n");
print(INXF "</table>\n");
print(INXF "<br>\n");
$curt=localtime;
print(INXF "<hr style=\"width: 100%; height: 2px;\">Generated: $curt<br>\n");
print(INXF "Contact: <a href=mailto:zweizig_j\@ligo.caltech.edu>John Zweizig</a> with questions/suggestions.<br>\n");
print(INXF "<br>\n");
print(INXF "</body>\n");
print(INXF "</html>\n");
close(INXF);
