#!/usr/bin/env python3

__copyright__ = "Copyright 2014-2016, http://radical.rutgers.edu"
__license__   = "MIT"

import sys

import radical.utils as ru
import radical.pilot as rp


# ------------------------------------------------------------------------------
#
def run(fpath, cname, raptor_id):

    # load worker class from fname if that is a valid string
    cls = None

    # Create the worker class and run it's work loop.
    if fpath:
        cls = ru.load_class(fpath, cname, rp.raptor.Worker)

    else:
        if   cname == 'DefaultWorker': cls = rp.raptor.DefaultWorker
        elif cname == 'MPIWorker'    : cls = rp.raptor.MPIWorker

    if not cls:
        raise RuntimeError('no worker [%s] [%s]' % (cname, fpath))

    worker = cls(raptor_id)
    worker.start()

    ret = worker.join()
    sys.exit(ret)


# ------------------------------------------------------------------------------
#
if __name__ == "__main__":

    # FIXME: daemonization a'la component

    if len(sys.argv) < 2:
        raise ValueError('missing parameter: worker file path')

    if len(sys.argv) < 3:
        raise ValueError('missing parameter: worker class name')

    if len(sys.argv) < 4:
        raise ValueError('missing parameter: raptor id')

    run(sys.argv[1], sys.argv[2], sys.argv[3])


# ------------------------------------------------------------------------------

