def _start_thread(self): # Create a CPC_UHP node under proper COM port: com_port_node = as_node('/interfaces/' + self.com_port) self._cpc_uhp_node = CpcNode() cd = {'parent': com_port_node, 'name': 'CPC_UHP'} self._cpc_uhp_node.configure(cd) self._cpc_uhp_node.start() # Create Circuits and Racks children: ckts_svc_node = CompositeNode() cd = {'parent': self, 'name': 'Circuits'} ckts_svc_node.configure(cd) racks_svc_node = CompositeNode() cd = {'parent': self, 'name': 'Racks'} racks_svc_node.configure(cd) # Force complete autodiscovery to create CPC node subtree: start_time = time.time() dev_nodes = self._cpc_uhp_node.children_nodes() for dev_node in dev_nodes: item_type_nodes = dev_node.children_nodes() for item_type_node in item_type_nodes: item_nodes = item_type_node.children_nodes() for item_node in item_nodes: obj_nodes = item_node.children_nodes() for obj_node in obj_nodes: prop_nodes = obj_node.children_nodes() self.debug_print( '%s: Finished autodiscover of CPC_UHP nodetree' % time.time(), 1) # Scan CPC_UHP subnodetree for nodes needed for Vista handler clients: self._setup() self.debug_print('%s: Finished _setup()' % time.time(), 1) ckts_svc_node.start() # starts all children as well racks_svc_node.start() # starts all children as well self.debug_print( '%s: Finished starting Circuits and Racks children of vista_cpc node' % time.time(), 1) ## # Create a CpcClient at proper place in nodetree: self._setup_alarm_nodes() self.debug_print('%s: Finished creating Alarm CpcClient' % time.time(), 1) self._start_thread_inst = None self._ready = 1 return
def _start_thread(self): # Create a CPC_UHP node under proper COM port: com_port_node = as_node('/interfaces/' + self.com_port) self._cpc_uhp_node = CpcNode() cd = {'parent':com_port_node,'name':'CPC_UHP'} self._cpc_uhp_node.configure(cd) self._cpc_uhp_node.start() # Create Circuits and Racks children: ckts_svc_node = CompositeNode() cd = {'parent':self,'name':'Circuits'} ckts_svc_node.configure(cd) racks_svc_node = CompositeNode() cd = {'parent':self,'name':'Racks'} racks_svc_node.configure(cd) # Force complete autodiscovery to create CPC node subtree: start_time = time.time() dev_nodes = self._cpc_uhp_node.children_nodes() for dev_node in dev_nodes: item_type_nodes = dev_node.children_nodes() for item_type_node in item_type_nodes: item_nodes = item_type_node.children_nodes() for item_node in item_nodes: obj_nodes = item_node.children_nodes() for obj_node in obj_nodes: prop_nodes = obj_node.children_nodes() self.debug_print('%s: Finished autodiscover of CPC_UHP nodetree' % time.time(), 1) # Scan CPC_UHP subnodetree for nodes needed for Vista handler clients: self._setup() self.debug_print('%s: Finished _setup()' % time.time(),1) ckts_svc_node.start() # starts all children as well racks_svc_node.start() # starts all children as well self.debug_print('%s: Finished starting Circuits and Racks children of vista_cpc node' % time.time(),1) ## # Create a CpcClient at proper place in nodetree: self._setup_alarm_nodes() self.debug_print('%s: Finished creating Alarm CpcClient' % time.time(),1) self._start_thread_inst = None self._ready = 1 return
class VistaCpcServiceNode(CompositeNode): def __init__(self): CompositeNode.__init__(self) self._cpc_uhp_node = None self._cases = [] self._racks = [] self.running = 0 self._start_thread_inst = None self._ready = 0 self.debug_lvl = 1 return def configure(self, cd): set_attribute(self, 'com_port', 'com1', cd, str) cd['name'] = 'vista_cpc_%s' % self.com_port CompositeNode.configure(self, cd) return def configuration(self): cd = CompositeNode.configuration(self) get_attribute(self, 'com_port', cd, str) return cd def start(self): self._start_thread_inst = Thread(name='Vista CPC Startup', target=self._start_thread) self._start_thread_inst.start() self.running = 1 return def stop(self): self.running = 0 return def _start_thread(self): # Create a CPC_UHP node under proper COM port: com_port_node = as_node('/interfaces/' + self.com_port) self._cpc_uhp_node = CpcNode() cd = {'parent': com_port_node, 'name': 'CPC_UHP'} self._cpc_uhp_node.configure(cd) self._cpc_uhp_node.start() # Create Circuits and Racks children: ckts_svc_node = CompositeNode() cd = {'parent': self, 'name': 'Circuits'} ckts_svc_node.configure(cd) racks_svc_node = CompositeNode() cd = {'parent': self, 'name': 'Racks'} racks_svc_node.configure(cd) # Force complete autodiscovery to create CPC node subtree: start_time = time.time() dev_nodes = self._cpc_uhp_node.children_nodes() for dev_node in dev_nodes: item_type_nodes = dev_node.children_nodes() for item_type_node in item_type_nodes: item_nodes = item_type_node.children_nodes() for item_node in item_nodes: obj_nodes = item_node.children_nodes() for obj_node in obj_nodes: prop_nodes = obj_node.children_nodes() self.debug_print( '%s: Finished autodiscover of CPC_UHP nodetree' % time.time(), 1) # Scan CPC_UHP subnodetree for nodes needed for Vista handler clients: self._setup() self.debug_print('%s: Finished _setup()' % time.time(), 1) ckts_svc_node.start() # starts all children as well racks_svc_node.start() # starts all children as well self.debug_print( '%s: Finished starting Circuits and Racks children of vista_cpc node' % time.time(), 1) ## # Create a CpcClient at proper place in nodetree: self._setup_alarm_nodes() self.debug_print('%s: Finished creating Alarm CpcClient' % time.time(), 1) self._start_thread_inst = None self._ready = 1 return ## # is_ready(): Called by any entity interested in calling get_XXX() methods, # and getting non-error values. # @return 1: CPC node tree is ready, 0: CPC node tree is not yet ready def is_ready(self): return self._ready def get_case_temps(self): return self._cases ## # get_cases(): Called by Vista handlers to get CaseTemp data. Handlers # display this data to user to allow user to associate CaseTemps with widgets. # @return List of lists: [[<ckt_name>,<case_temp_idx>,<temp_url>,<stat_url>,<desc_url>],...] def get_cases(self): return self._cases ## # get_racks(): Called by Vista handlers to get Rack data. Handlers # display this data to user to allow user to associate Racks with widgets. # @return List of lists: [[<rack_name>,<stat_url>],...] def get_racks(self): return self._racks ## # _setup(): Called by self._start_thread(), to scan existing CPC_UHP subtrees, # and to use the garnered info to create appropriate child nodes. These # children aggregate Rack and Case statuses for easy monitoring by Vista. def _setup(self): ckts_svc_node = self.get_child('Circuits') racks_svc_node = self.get_child('Racks') dev_nodes = self._cpc_uhp_node.children_nodes() has_CircuitStatus_node = 0 for dev_node in dev_nodes: ckt_svc_nodes = [] if dev_node.has_child('Circuit'): ckts_dev_node = dev_node.get_child('Circuit') ckt_dev_nodes = ckts_dev_node.children_nodes() for ckt_dev_node in ckt_dev_nodes: ckt_name = ckt_dev_node.get_child('Name').get() ckt_svc_node = CktStatusXltrNode(ckt_dev_node) cd = {'parent': ckts_svc_node, 'name': ckt_dev_node.name} ckt_svc_node.configure(cd) ckt_svc_nodes.append(ckt_svc_node) num_temps_node = ckt_dev_node.get_child( 'NumberOfTempSensors') num_temps = num_temps_node.get() if (num_temps is None) or isinstance(num_temps, Exception): num_temps = 6 for i in range(num_temps): case_temp_dev_node = ckt_dev_node.get_child( 'CaseTemps' + str(i)) case_temp_svc_node = CompositeNode() cd = { 'parent': ckt_svc_node, 'name': str(case_temp_dev_node._obj_inst_num) } case_temp_svc_node.configure(cd) status_svc_node = CktCaseTempsStatusXltrNode( ckt_svc_node, case_temp_dev_node) cd = {'parent': case_temp_svc_node, 'name': 'Status'} status_svc_node.configure(cd) descr_svc_node = SingleAttrNode('Not initialized') cd = { 'parent': case_temp_svc_node, 'name': 'Description' } descr_svc_node.configure(cd) self._cases.append([ckt_name, \ case_temp_dev_node._obj_inst_num, \ as_node_url(case_temp_dev_node), \ as_node_url(status_svc_node), as_node_url(descr_svc_node)],) rack_svc_node = CompositeNode() cd = {'parent': racks_svc_node, 'name': dev_node.name} rack_svc_node.configure(cd) rack_status_node = RackStatusXltrNode(dev_node, ckt_svc_nodes) cd = {'parent': rack_svc_node, 'name': 'Status'} rack_status_node.configure(cd) dev_name = dev_node._dev.get_name() self._racks.append([dev_name, as_node_url(rack_status_node)]) return def _setup_alarm_nodes(self): services = as_node('/services') if not services.has_child('External Alarms'): alarms_node = CompositeNode() alarms_node.configure({ 'name': 'External Alarms', 'parent': services }) alarms_node = as_node('/services/External Alarms') alarm_node = alarms.Manager() alarm_node.configure({'name': 'CPC Alarm', 'parent': alarms_node}) cpc_client_node = cpc_client.CpcClient(self._cpc_uhp_node) cpc_client_node.configure({ 'name': 'CPC Client', 'parent': alarm_node, 'node': '' }) ewebconnect_client_node = ewebconnect.EWebConnectAlarmClient() ewebconnect_client_node.configure({ 'name': 'eWebConnect Alarm Client', 'parent': alarm_node, 'host': '10.0.1.88', #'mother.envenergy.com', 'port': 16161, 'enabled': 1, }) alarms_node.start() return def debug_print(self, msg, msg_lvl): if msg_lvl < self.debug_lvl: if isinstance(msg, array.ArrayType): utils.print_array_as_hex(msg, 16) else: print 'opt.trane.vista.cpc.VistaCpcServiceNode: ' + msg return
class VistaCpcServiceNode(CompositeNode): def __init__(self): CompositeNode.__init__(self) self._cpc_uhp_node = None self._cases = [] self._racks = [] self.running = 0 self._start_thread_inst = None self._ready = 0 self.debug_lvl = 1 return def configure(self, cd): set_attribute(self, 'com_port', 'com1', cd, str) cd['name'] = 'vista_cpc_%s' % self.com_port CompositeNode.configure(self, cd) return def configuration(self): cd = CompositeNode.configuration(self) get_attribute(self, 'com_port', cd, str) return cd def start(self): self._start_thread_inst = Thread(name='Vista CPC Startup',target=self._start_thread) self._start_thread_inst.start() self.running = 1 return def stop(self): self.running = 0 return def _start_thread(self): # Create a CPC_UHP node under proper COM port: com_port_node = as_node('/interfaces/' + self.com_port) self._cpc_uhp_node = CpcNode() cd = {'parent':com_port_node,'name':'CPC_UHP'} self._cpc_uhp_node.configure(cd) self._cpc_uhp_node.start() # Create Circuits and Racks children: ckts_svc_node = CompositeNode() cd = {'parent':self,'name':'Circuits'} ckts_svc_node.configure(cd) racks_svc_node = CompositeNode() cd = {'parent':self,'name':'Racks'} racks_svc_node.configure(cd) # Force complete autodiscovery to create CPC node subtree: start_time = time.time() dev_nodes = self._cpc_uhp_node.children_nodes() for dev_node in dev_nodes: item_type_nodes = dev_node.children_nodes() for item_type_node in item_type_nodes: item_nodes = item_type_node.children_nodes() for item_node in item_nodes: obj_nodes = item_node.children_nodes() for obj_node in obj_nodes: prop_nodes = obj_node.children_nodes() self.debug_print('%s: Finished autodiscover of CPC_UHP nodetree' % time.time(), 1) # Scan CPC_UHP subnodetree for nodes needed for Vista handler clients: self._setup() self.debug_print('%s: Finished _setup()' % time.time(),1) ckts_svc_node.start() # starts all children as well racks_svc_node.start() # starts all children as well self.debug_print('%s: Finished starting Circuits and Racks children of vista_cpc node' % time.time(),1) ## # Create a CpcClient at proper place in nodetree: self._setup_alarm_nodes() self.debug_print('%s: Finished creating Alarm CpcClient' % time.time(),1) self._start_thread_inst = None self._ready = 1 return ## # is_ready(): Called by any entity interested in calling get_XXX() methods, # and getting non-error values. # @return 1: CPC node tree is ready, 0: CPC node tree is not yet ready def is_ready(self): return self._ready def get_case_temps(self): return self._cases ## # get_cases(): Called by Vista handlers to get CaseTemp data. Handlers # display this data to user to allow user to associate CaseTemps with widgets. # @return List of lists: [[<ckt_name>,<case_temp_idx>,<temp_url>,<stat_url>,<desc_url>],...] def get_cases(self): return self._cases ## # get_racks(): Called by Vista handlers to get Rack data. Handlers # display this data to user to allow user to associate Racks with widgets. # @return List of lists: [[<rack_name>,<stat_url>],...] def get_racks(self): return self._racks ## # _setup(): Called by self._start_thread(), to scan existing CPC_UHP subtrees, # and to use the garnered info to create appropriate child nodes. These # children aggregate Rack and Case statuses for easy monitoring by Vista. def _setup(self): ckts_svc_node = self.get_child('Circuits') racks_svc_node = self.get_child('Racks') dev_nodes = self._cpc_uhp_node.children_nodes() has_CircuitStatus_node = 0 for dev_node in dev_nodes: ckt_svc_nodes = [] if dev_node.has_child('Circuit'): ckts_dev_node = dev_node.get_child('Circuit') ckt_dev_nodes = ckts_dev_node.children_nodes() for ckt_dev_node in ckt_dev_nodes: ckt_name = ckt_dev_node.get_child('Name').get() ckt_svc_node = CktStatusXltrNode(ckt_dev_node) cd = {'parent':ckts_svc_node,'name':ckt_dev_node.name} ckt_svc_node.configure(cd) ckt_svc_nodes.append(ckt_svc_node) num_temps_node = ckt_dev_node.get_child('NumberOfTempSensors') num_temps = num_temps_node.get() if (num_temps is None) or isinstance(num_temps,Exception): num_temps = 6 for i in range(num_temps): case_temp_dev_node = ckt_dev_node.get_child('CaseTemps' + str(i)) case_temp_svc_node = CompositeNode() cd = {'parent':ckt_svc_node,'name':str(case_temp_dev_node._obj_inst_num)} case_temp_svc_node.configure(cd) status_svc_node = CktCaseTempsStatusXltrNode(ckt_svc_node,case_temp_dev_node) cd = {'parent':case_temp_svc_node,'name':'Status'} status_svc_node.configure(cd) descr_svc_node = SingleAttrNode('Not initialized') cd = {'parent':case_temp_svc_node,'name':'Description'} descr_svc_node.configure(cd) self._cases.append([ckt_name, \ case_temp_dev_node._obj_inst_num, \ as_node_url(case_temp_dev_node), \ as_node_url(status_svc_node), as_node_url(descr_svc_node)],) rack_svc_node = CompositeNode() cd = {'parent':racks_svc_node,'name':dev_node.name} rack_svc_node.configure(cd) rack_status_node = RackStatusXltrNode(dev_node,ckt_svc_nodes) cd = {'parent':rack_svc_node,'name':'Status'} rack_status_node.configure(cd) dev_name = dev_node._dev.get_name() self._racks.append([dev_name, as_node_url(rack_status_node)]) return def _setup_alarm_nodes(self): services = as_node('/services') if not services.has_child('External Alarms'): alarms_node = CompositeNode() alarms_node.configure({'name':'External Alarms','parent':services}) alarms_node = as_node('/services/External Alarms') alarm_node = alarms.Manager() alarm_node.configure({'name':'CPC Alarm','parent':alarms_node}) cpc_client_node = cpc_client.CpcClient(self._cpc_uhp_node) cpc_client_node.configure({'name':'CPC Client', 'parent':alarm_node,'node':''}) ewebconnect_client_node = ewebconnect.EWebConnectAlarmClient() ewebconnect_client_node.configure({ 'name':'eWebConnect Alarm Client', 'parent':alarm_node, 'host':'10.0.1.88', #'mother.envenergy.com', 'port':16161, 'enabled':1, }) alarms_node.start() return def debug_print(self, msg, msg_lvl): if msg_lvl < self.debug_lvl: if isinstance(msg, array.ArrayType): utils.print_array_as_hex(msg, 16) else: print 'opt.trane.vista.cpc.VistaCpcServiceNode: ' + msg return