import logging
import contextlib
import datetime

from ..orchestra import run

log = logging.getLogger(__name__)

@contextlib.contextmanager
def task(ctx, config):
    """
    Timer

    Measure the time that this set of tasks takes and save that value in the summary file.
    Config is a description of what we are timing.

    example:

    tasks:
    - ceph:
    - foo:
    - timer: "fsx run"
    - fsx:

    """
    start = datetime.datetime.now()
    log.debug("got here in timer")
    try:
        yield
    finally:
        nowinfo = datetime.datetime.now()
        elapsed = nowinfo - start
        datesaved = nowinfo.isoformat(' ')
        hourz, remainder = divmod(elapsed.seconds, 3600)
        minutez, secondz = divmod(remainder, 60)
        elapsedtime = "%02d:%02d:%02d.%06d" % (hourz,minutez,secondz, elapsed.microseconds)
        dateinfo = (datesaved, elapsedtime)
        if not 'timer' in ctx.summary:
            ctx.summary['timer'] = {config : [dateinfo]}
        else:
            if config in ctx.summary['timer']:
                ctx.summary['timer'][config].append(dateinfo)
            else:
                ctx.summary['timer'][config] = [dateinfo]
        log.info('Elapsed time for %s -- %s' % (config,elapsedtime))