#!/usr/bin/env tclsh
set usage {extFileTool [options] cmd
    Tool for running various extFile management tools.

    cmd is one of:
       - update - run update and generated extFile dumps
       - dump - generate extFile dumps
    Options
      -db=db - Update only this database.  Maybe repeated.
}

proc report {stat msg} {
    global host cmd logFh
    set out "$stat $host $cmd: $msg"
    puts $logFh $out
    exec mail -s "$host $cmd" <<$out markd
}

proc loadDbs {dbFile} {
    return [split [exec fgrep -v "#" $dbFile] \n]
}

proc dumpExtFile {db} {
    global host env
    set date [clock format [clock seconds] -format {%Y.%m.%d}]
    set dumpFile "var/dbload/$host/extFile/$date/$db.extFile.txt";
    set dumpTmp $dumpFile.tooltmp
    file mkdir [file dirname $dumpTmp]

    exec hgsql -N -e {select * from gbExtFile} $db >$dumpTmp
    file rename -force $dumpTmp $dumpFile
}

proc extFileUpdate {dbs logFh} {
    foreach db $dbs {
        puts $logFh "==== begin $db ===="
        exec bin/x86_64/extFileUpdate $db >&@$logFh
        dumpExtFile $db
        puts $logFh "==== end $db ===="
        flush $logFh
    }
}

proc extFileDump {dbs logFh} {
    foreach db $dbs {
        puts $logFh "==== begin $db ===="
        dumpExtFile $db
        puts $logFh "==== end $db ===="
        flush $logFh
    }
}

# load the list of databases for the specified host
proc loadDbs {dbFile host} {
    return [split [exec fgrep -v "#"  $dbFile] \n]
}

set dbs {}
while {[string match -* [lindex $argv 0]]} {
    set opt [lindex $argv 0]
    set argv [lrange $argv 1 end]
    switch -glob -- $opt {
        -db=* {
            lappend dbs [string range $opt 4 end]
        }
        default {
            error "unknown option: $opt \n$usage"
        }
    }
}

if {[llength $argv] != 1} {
    error "wrong number of args: \n$usage"
}
set cmd [lindex $argv 0]
set host [lindex [split [exec hostname] .] 0]

# host specific setup
switch -glob $host {
    hgwdev {
        set genbankRoot /cluster/data/genbank
        set dbFile etc/hgwdev.dbs
        set env(HGDB_CONF) etc/.hg.conf
    }
    hgwbeta {
        set genbankRoot /genbank
        set dbFile etc/hgwbeta.dbs
        set env(HGDB_CONF) etc/.hg.mysqlbeta.conf
    }
    hgnfs1 {
        set genbankRoot /genbank
        set dbFile etc/rr.dbs
        set env(HGDB_CONF) etc/.hg.mysqlrr.conf
    }
    default {
        error "don't know how to handle $host"
    }
}
cd $genbankRoot
set env(PATH) bin/$tcl_platform(machine):$env(PATH)

if {[llength $dbs] == 0} {
    set dbs [loadDbs $dbFile $host]
}
set logFh [open misc/$host.$cmd.log w]

if {[catch {
    switch $cmd {
        update {
            extFileUpdate $dbs $logFh
        }
        dump {
            extFileDump $dbs $logFh
        }
        default {
            error "unknown command: $cmd\n$usage"
        }
    }
} msg]} {
    report Error $msg 
    exit 1
}
report Ok complete



