#!/usr/bin/env python
import sys
import exceptions
from twisted.internet import defer, reactor

from ooni.utils import log
from ooni.report import cli

exitCode = 128

def failed(failure):
    global exitCode

    r = failure.trap(exceptions.SystemExit,
                     Exception)
    if r != exceptions.SystemExit:
        log.err("Failed to run oonireport")
        log.exception(failure)
        exitCode = 127
    else:
        exitCode = failure.value.code
    reactor.stop()


def done(result):
    global exitCode
    exitCode = 0

    reactor.stop()

def start():
    d = defer.maybeDeferred(cli.run)
    d.addCallback(done)
    d.addErrback(failed)

reactor.callWhenRunning(start)
reactor.run()
sys.exit(exitCode)
