def main(): """ Initializes container """ logging.info("ION CONTAINER initializing... [Start an Instrument Agent]") processes = [] processes.extend(agent_procs) processes.extend(service_procs) # Start the processes sup = yield bootstrap.bootstrap(None, processes) eval_start_arguments() simulator = Simulator(INSTRUMENT_ID, 9000) simulator.start() ia_procs = [ {'name':'SBE49IA','module':'ion.agents.instrumentagents.SBE49_IA','class':'SBE49InstrumentAgent','spawnargs':{'instrument-id':INSTRUMENT_ID}}, ] yield bootstrap.spawn_processes(ia_procs, sup=sup) ia_pid = sup.get_child_id('SBE49IA') iaclient = InstrumentAgentClient(proc=sup, target=ia_pid) yield iaclient.register_resource(INSTRUMENT_ID)
def main(): """ Initializes container """ logging.info("ION CONTAINER initializing... [LCA Java Integration Demo]") processes = [] processes.extend(agent_procs) processes.extend(demo_procs) # Start the processes sup = yield bootstrap.bootstrap(None, processes) simulator = Simulator(INSTRUMENT_ID, 9000) simulator.start() irc = InstrumentRegistryClient(proc=sup) ir1 = InstrumentResource.create_new_resource() ir1.name = "Demo_CTD_1" ir1.model = "SBE49" ir1.serial_num = "12345" ir1.fw_version = "1.334" ir1.manufactorer = "SeaBird" ir1 = yield irc.register_instrument_instance(ir1) ir1_ref = ir1.reference(head=True) ir2 = InstrumentResource.create_new_resource() ir2.name = "Demo_CTD_2" ir2.model = "SBE49" ir2.serial_num = "12399" ir2.fw_version = "1.335" ir2.manufactorer = "SeaBird" ir2 = yield irc.register_instrument_instance(ir2) dprc = DataProductRegistryClient(proc=sup) dp1 = DataProductResource.create_new_resource() dp1.instrument_ref = ir1_ref dp1.name = "Demo_Data_Product_1" dp1.dataformat = "binary" dp1 = yield dprc.register_data_product(dp1) ia_procs = [ { 'name': 'SBE49IA', 'module': 'ion.agents.instrumentagents.SBE49_IA', 'class': 'SBE49InstrumentAgent', 'spawnargs': { 'instrument-id': INSTRUMENT_ID } }, ] yield bootstrap.spawn_processes(ia_procs, sup=sup) ia_pid = sup.get_child_id('SBE49IA') iaclient = InstrumentAgentClient(proc=sup, target=ia_pid) yield iaclient.register_resource(INSTRUMENT_ID)
def op_start_instrument_agent(self, content, headers, msg): """ Service operation: Starts an instrument agent for a type of instrument. """ if 'instrumentID' in content: inst_id = str(content['instrumentID']) else: raise ValueError("Input for instrumentID not present") if 'model' in content: model = str(content['model']) else: raise ValueError("Input for model not present") if model != 'SBE49': raise ValueError("Only SBE49 supported!") agent_pid = yield self.get_agent_pid_for_instrument(inst_id) if agent_pid: raise StandardError("Agent already started for instrument " + str(inst_id)) simulator = Simulator(inst_id) simulator.start() topicname = "Inst/RAW/" + inst_id topic = PubSubTopicResource.create(topicname, "") # Use the service to create a queue and register the topic topic = yield self.dpsc.define_topic(topic) iagent_args = {} iagent_args['instrument-id'] = inst_id driver_args = {} driver_args['port'] = simulator.port driver_args['publish-to'] = topic.RegistryIdentity iagent_args['driver-args'] = driver_args iapd = ProcessDesc( **{ 'name': 'SBE49IA', 'module': 'ion.agents.instrumentagents.SBE49_IA', 'class': 'SBE49InstrumentAgent', 'spawnargs': iagent_args }) iagent_id = yield self.spawn_child(iapd) iaclient = InstrumentAgentClient(proc=self, target=iagent_id) yield iaclient.register_resource(inst_id) yield self.reply_ok(msg, "OK")
def main(): """ Initializes container """ logging.info("ION CONTAINER initializing... [LCA Java Integration Demo]") processes = [] processes.extend(agent_procs) processes.extend(demo_procs) # Start the processes sup = yield bootstrap.bootstrap(None, processes) simulator = Simulator(INSTRUMENT_ID, 9000) simulator.start() irc = InstrumentRegistryClient(proc=sup) ir1 = InstrumentResource.create_new_resource() ir1.name = "Demo_CTD_1" ir1.model = "SBE49" ir1.serial_num = "12345" ir1.fw_version = "1.334" ir1.manufactorer = "SeaBird" ir1 = yield irc.register_instrument_instance(ir1) ir1_ref = ir1.reference(head=True) ir2 = InstrumentResource.create_new_resource() ir2.name = "Demo_CTD_2" ir2.model = "SBE49" ir2.serial_num = "12399" ir2.fw_version = "1.335" ir2.manufactorer = "SeaBird" ir2 = yield irc.register_instrument_instance(ir2) dprc = DataProductRegistryClient(proc=sup) dp1 = DataProductResource.create_new_resource() dp1.instrument_ref = ir1_ref dp1.name = "Demo_Data_Product_1" dp1.dataformat = "binary" dp1 = yield dprc.register_data_product(dp1) ia_procs = [ {'name':'SBE49IA','module':'ion.agents.instrumentagents.SBE49_IA','class':'SBE49InstrumentAgent','spawnargs':{'instrument-id':INSTRUMENT_ID}}, ] yield bootstrap.spawn_processes(ia_procs, sup=sup) ia_pid = sup.get_child_id('SBE49IA') iaclient = InstrumentAgentClient(proc=sup,target=ia_pid) yield iaclient.register_resource(INSTRUMENT_ID)
def op_start_instrument_agent(self, content, headers, msg): """ Service operation: Starts an instrument agent for a type of instrument. """ if 'instrumentID' in content: inst_id = str(content['instrumentID']) else: raise ValueError("Input for instrumentID not present") if 'model' in content: model = str(content['model']) else: raise ValueError("Input for model not present") if model != 'SBE49': raise ValueError("Only SBE49 supported!") agent_pid = yield self.get_agent_pid_for_instrument(inst_id) if agent_pid: raise StandardError("Agent already started for instrument "+str(inst_id)) simulator = Simulator(inst_id) simulator.start() topicname = "Inst/RAW/"+inst_id topic = PubSubTopicResource.create(topicname,"") # Use the service to create a queue and register the topic topic = yield self.dpsc.define_topic(topic) iagent_args = {} iagent_args['instrument-id'] = inst_id driver_args = {} driver_args['port'] = simulator.port driver_args['publish-to'] = topic.RegistryIdentity iagent_args['driver-args'] = driver_args iapd = ProcessDesc(**{'name':'SBE49IA', 'module':'ion.agents.instrumentagents.SBE49_IA', 'class':'SBE49InstrumentAgent', 'spawnargs':iagent_args}) iagent_id = yield self.spawn_child(iapd) iaclient = InstrumentAgentClient(proc=self, target=iagent_id) yield iaclient.register_resource(inst_id) yield self.reply_ok(msg, "OK")
class TestInstMgmtRT(IonTestCase): """ Testing instrument management service in end-to-end roundtrip mode """ @defer.inlineCallbacks def setUp(self): yield self._start_container() services = [ {'name':'instreg','module':'ion.services.coi.agent_registry','class':'AgentRegistryService'}, {'name':'instreg','module':'ion.services.sa.instrument_registry','class':'InstrumentRegistryService'}, {'name':'pubsub_registry','module':'ion.services.dm.distribution.pubsub_registry','class':'DataPubSubRegistryService'}, {'name':'pubsub_service','module':'ion.services.dm.distribution.pubsub_service','class':'DataPubsubService'}, {'name':'dprodreg','module':'ion.services.sa.data_product_registry','class':'DataProductRegistryService'}, {'name':'instmgmt','module':'ion.services.sa.instrument_management','class':'InstrumentManagementService'}, {'name':'SBE49IA','module':'ion.agents.instrumentagents.SBE49_IA','class':'SBE49InstrumentAgent'}, ] sup = yield self._spawn_processes(services) #self.agreg_client = AgentRegistryClient(proc=sup) #yield self.agreg_client.clear_registry() self.ia_pid = sup.get_child_id('SBE49IA') self.iaclient = InstrumentAgentClient(proc=sup, target=self.ia_pid) self.imc = InstrumentManagementClient(proc=sup) self.newInstrument = {'manufacturer' : "SeaBird Electronics", 'model' : "unknown model", 'serial_num' : "1234", 'fw_version' : "1"} instrument = yield self.imc.create_new_instrument(self.newInstrument) self.inst_id = instrument.RegistryIdentity logging.info("*** Instrument created with ID="+str(self.inst_id)) self.simulator = Simulator(self.inst_id, 9000) self.simulator.start() yield self.iaclient.register_resource(self.inst_id) @defer.inlineCallbacks def tearDown(self): yield self.simulator.stop() yield Simulator.stop_all_simulators() yield self._stop_container() @defer.inlineCallbacks def test_get_status(self): """ Get status back from instrument agent associated with instrument id """ res = yield self.imc.get_instrument_state(self.inst_id) self.assertNotEqual(res, None) logging.info("Instrument status: " +str(res)) @defer.inlineCallbacks def test_execute_command(self): """ Execute command through instrument agent associated with instrument id """ res = yield self.imc.execute_command(self.inst_id, 'start', [1]) logging.info("Command result 1" +str(res)) @defer.inlineCallbacks def test_start_agent(self): """ Start the agent with all """ newInstrument = {'manufacturer' : "SeaBird Electronics", 'model' : "SBE49", 'serial_num' : "99931", 'fw_version' : "1"} instrument = yield self.imc.create_new_instrument(newInstrument) inst_id1 = instrument.RegistryIdentity logging.info("*** Instrument 2 created with ID="+str(inst_id1)) res = yield self.imc.start_instrument_agent(inst_id1, 'SBE49') logging.info("Command result 1" +str(res))
class TestInstMgmtRT(IonTestCase): """ Testing instrument management service in end-to-end roundtrip mode """ @defer.inlineCallbacks def setUp(self): yield self._start_container() services = [ { 'name': 'instreg', 'module': 'ion.services.coi.agent_registry', 'class': 'AgentRegistryService' }, { 'name': 'instreg', 'module': 'ion.services.sa.instrument_registry', 'class': 'InstrumentRegistryService' }, { 'name': 'pubsub_registry', 'module': 'ion.services.dm.distribution.pubsub_registry', 'class': 'DataPubSubRegistryService' }, { 'name': 'pubsub_service', 'module': 'ion.services.dm.distribution.pubsub_service', 'class': 'DataPubsubService' }, { 'name': 'dprodreg', 'module': 'ion.services.sa.data_product_registry', 'class': 'DataProductRegistryService' }, { 'name': 'instmgmt', 'module': 'ion.services.sa.instrument_management', 'class': 'InstrumentManagementService' }, { 'name': 'SBE49IA', 'module': 'ion.agents.instrumentagents.SBE49_IA', 'class': 'SBE49InstrumentAgent' }, ] sup = yield self._spawn_processes(services) #self.agreg_client = AgentRegistryClient(proc=sup) #yield self.agreg_client.clear_registry() self.ia_pid = sup.get_child_id('SBE49IA') self.iaclient = InstrumentAgentClient(proc=sup, target=self.ia_pid) self.imc = InstrumentManagementClient(proc=sup) self.newInstrument = { 'manufacturer': "SeaBird Electronics", 'model': "unknown model", 'serial_num': "1234", 'fw_version': "1" } instrument = yield self.imc.create_new_instrument(self.newInstrument) self.inst_id = instrument.RegistryIdentity logging.info("*** Instrument created with ID=" + str(self.inst_id)) self.simulator = Simulator(self.inst_id, 9000) self.simulator.start() yield self.iaclient.register_resource(self.inst_id) @defer.inlineCallbacks def tearDown(self): yield self.simulator.stop() yield Simulator.stop_all_simulators() yield self._stop_container() @defer.inlineCallbacks def test_get_status(self): """ Get status back from instrument agent associated with instrument id """ res = yield self.imc.get_instrument_state(self.inst_id) self.assertNotEqual(res, None) logging.info("Instrument status: " + str(res)) @defer.inlineCallbacks def test_execute_command(self): """ Execute command through instrument agent associated with instrument id """ res = yield self.imc.execute_command(self.inst_id, 'start', [1]) logging.info("Command result 1" + str(res)) @defer.inlineCallbacks def test_start_agent(self): """ Start the agent with all """ newInstrument = { 'manufacturer': "SeaBird Electronics", 'model': "SBE49", 'serial_num': "99931", 'fw_version': "1" } instrument = yield self.imc.create_new_instrument(newInstrument) inst_id1 = instrument.RegistryIdentity logging.info("*** Instrument 2 created with ID=" + str(inst_id1)) res = yield self.imc.start_instrument_agent(inst_id1, 'SBE49') logging.info("Command result 1" + str(res))