#!/usr/bin/env python
#
# Copyright (C) 2007-2008 Anders Logg.
# Licensed under the GNU LGPL Version 2.1.
#
# Utility for running benchmarks

from dolfin_utils.commands import getoutput
from time import time, localtime
from os import uname
from getopt import getopt
from sys import argv, exit

def bench(program, logfile):
    "Run benchmark program and append results to logfile"

    # Run benchmark
    program = " ".join(program)
    print "Running benchmark: %s" % program
    tic = time()
    getoutput(program)
    toc = time() - tic
    print "Elapsed time: " + str(toc)

    # Get system variables
    system_time = "%d-%02d-%02d %02d:%02d:%02d" % localtime()[0:6]
    system_host = "%s (running %s)" % (uname()[1], uname()[0])

    # Get DOLFIN version
    dolfin_version = getoutput("pkg-config --modversion dolfin")
    dolfin_changeset = getoutput("hg log -r tip | grep changeset:").split(":")[2]

    # Write log file
    file = open(logfile, "a")
    file.write("Date:      %s\n" % system_time)
    file.write("Host:      %s\n" % system_host)
    file.write("Version:   %s\n" % dolfin_version)
    file.write("Changeset: %s\n" % dolfin_changeset)
    file.write("\n")
    file.write("CPU time: %g\n" % toc)
    file.write("----------------------------------------\n")
    file.close()

    print "Logfile written to %s" % logfile

if __name__ == "__main__":

    if not len(argv) == 2:
        print "Usage: bench program"
        exit(1)
        
    bench(argv[1], "bench.log")
