예제 #1
0
    def spawn(self, supProc=None):
        """
        Spawns this process description with the initialized attributes.
        @param supProc  the process instance that should be set as supervisor
        """
        assert self.procState == 'DEFINED', "Cannot spawn process twice"
        self.supProcess = supProc
        if self.procNode == None:
            logging.info('Spawning name=%s node=%s' % (self.procName, self.procNode))

            # Importing service module
            proc_mod = pu.get_module(self.procModule)
            self.procModObj = proc_mod

            # Spawn instance of a process
            # During spawn, the supervisor process id, system name and proc name
            # get provided as spawn args, in addition to any give spawn args.
            spawnargs = {'proc-name':self.procName,
                         'sup-id':self.supProcess.receiver.spawned.id.full,
                         'sys-name':self.supProcess.sysName}
            if self.spawnArgs:
                spawnargs.update(self.spawnArgs)
            #logging.debug("spawn(%s, args=%s)" % (self.procModule, spawnargs))
            proc_id = yield spawn(proc_mod, None, spawnargs)
            self.procId = proc_id
            self.procState = 'SPAWNED'

            #logging.info("Process "+self.procClass+" ID: "+str(proc_id))
        else:
            logging.error('Cannot spawn '+self.procClass+' on node='+str(self.procNode))
        defer.returnValue(self.procId)
예제 #2
0
    def build(self, spawnArgs={}):
        """Factory method return a new receiver for a new process. At the same
        time instantiate class.
        """
        logging.info("ProcessProtocolFactory.build() with args="+str(spawnArgs))
        svcmodule = spawnArgs.get('svcmodule',None)
        if not svcmodule:
            logging.error("No spawn argument svcmodule given. Cannot spawn")
            return None
        
        svcclass = spawnArgs.get('svcclass',None)

        svc_mod = pu.get_module(svcmodule)
        
        if hasattr(svc_mod,'factory'):
            logging.info("Found module factory. Using factory to get service receiver")
            return svc_mod.factory.build()
        elif hasattr(svc_mod,'receiver'):
            logging.info("Found module receiver")
            return svc_mod.receiver
        elif svcclass:
            logging.info("Service process module instantiate from class:"+svcclass)
            return self.create_process_instance(svc_mod,'name')
        else:
            logging.error("Service process module cannot be spawned")
예제 #3
0
    def build(self, spawnArgs={}):
        """Factory method return a new receiver for a new process. At the same
        time instantiate class.
        """
        logging.info("ProcessProtocolFactory.build() with args="+str(spawnArgs))
        svcmodule = spawnArgs.get('svcmodule',None)
        if not svcmodule:
            logging.error("No spawn argument svcmodule given. Cannot spawn")
            return None
        
        svcclass = spawnArgs.get('svcclass',None)

        svc_mod = pu.get_module(svcmodule)
        
        if hasattr(svc_mod,'factory'):
            logging.info("Found module factory. Using factory to get service receiver")
            return svc_mod.factory.build()
        elif hasattr(svc_mod,'receiver'):
            logging.info("Found module receiver")
            return svc_mod.receiver
        elif svcclass:
            logging.info("Service process module instantiate from class:"+svcclass)
            return self.create_process_instance(svc_mod,'name')
        else:
            logging.error("Service process module cannot be spawned")
예제 #4
0
 def _load_package(self, pack, recurse=False):
     #logging.info('Loading Package %s' % (pack))
     try:
         packo = pu.get_module(pack)
         ppath = packo.__path__
         for path1 in ppath:
             dirList = os.listdir(path1)
             for fname in dirList:
                 if fname.endswith('.py') and fname != '__init__.py':
                     self._load_module(pack + '.' + fname[:len(fname) - 3])
                 elif os.path.isdir(os.path.join(path1, fname)) and recurse:
                     self._load_package(pack + '.' + fname)
     except Exception, ie:
         logging.error("Error importing package: " + str(pack))
예제 #5
0
 def _load_package(self, pack, recurse=False):
     #logging.info('Loading Package %s' % (pack))
     try:
         packo = pu.get_module(pack)
         ppath = packo.__path__
         for path1 in ppath:
             dirList=os.listdir(path1)
             for fname in dirList:
                 if fname.endswith('.py') and fname != '__init__.py':
                     self._load_module(pack+'.'+fname[:len(fname)-3])
                 elif os.path.isdir(os.path.join(path1,fname)) and recurse:
                     self._load_package(pack+'.'+fname)
     except Exception, ie:
         logging.error("Error importing package: "+str(pack))
예제 #6
0
from carrot.backends.base import BaseMessage
from ion.core import ioninit
import ion.util.procutils as pu

# Configuration
CONF = ioninit.config(__name__)
master_off = CONF.getValue('master_off', False)
msg_sign = CONF.getValue('msg_sign', True)
encrypt = CONF.getValue('encrypt', False)
encrypt_mod = CONF.getValue('encrypt_mod', None)
encrypt_key = CONF.getValue('encrypt_key', None)
encrypt_pad = CONF.getValue('encrypt_pad', 16)

if encrypt:
    try:
        mod = pu.get_module(encrypt_mod)
        encrypter = mod.new(encrypt_key)
    except ImportError:
        encrypter = None
else:
    encrypter = None

class IdmInterceptor(Interceptor):
    """Message interceptor for identity management and security purposes.
    Called last before message hits the wire, and first after message received.
    """
    @classmethod
    def transform(cls, msg):
        """Identity management transform
        """
        if master_off: return msg
예제 #7
0
 def _load_module(self, mod):
     #logging.info('Loading Module %s' % (mod))
     try:
         modo = pu.get_module(mod)
     except Exception, ie:
         logging.error("Error importing module: " + str(mod))
예제 #8
0
from carrot.backends.base import BaseMessage
from ion.core import ioninit
import ion.util.procutils as pu

# Configuration
CONF = ioninit.config(__name__)
master_off = CONF.getValue('master_off', False)
msg_sign = CONF.getValue('msg_sign', True)
encrypt = CONF.getValue('encrypt', False)
encrypt_mod = CONF.getValue('encrypt_mod', None)
encrypt_key = CONF.getValue('encrypt_key', None)
encrypt_pad = CONF.getValue('encrypt_pad', 16)

if encrypt:
    try:
        mod = pu.get_module(encrypt_mod)
        encrypter = mod.new(encrypt_key)
    except ImportError:
        encrypter = None
else:
    encrypter = None


class IdmInterceptor(Interceptor):
    """Message interceptor for identity management and security purposes.
    Called last before message hits the wire, and first after message received.
    """
    @classmethod
    def transform(cls, msg):
        """Identity management transform
        """
예제 #9
0
 def _load_module(self, mod):
     #logging.info('Loading Module %s' % (mod))
     try:
         modo = pu.get_module(mod)
     except Exception, ie:
         logging.error("Error importing module: "+str(mod))