class SpawnWorkerSrv(PyTango.Device_4Impl): #--------- Add you global variables here -------------------------- #------------------------------------------------------------------ # Device constructor #------------------------------------------------------------------ def __init__(self,cl, name): PyTango.Device_4Impl.__init__(self,cl,name) self.server = None self.init_device() #------------------------------------------------------------------ # Device destructor #------------------------------------------------------------------ def delete_device(self): #print "[Device delete_device method] for device",self.get_name() if not(self.server == None): self.Stop() sighandler.term_interrupt = True #------------------------------------------------------------------ # Device initialization #------------------------------------------------------------------ def init_device(self): #print "In ", self.get_name(), "::init_device()" # Check that the device is not already running if self.server is not None: self.Stop() self.set_state(PyTango.DevState.OFF) self.get_device_properties(self.get_device_class()) self.server = None self.Start() #------------------------------------------------------------------ # Always excuted hook method #------------------------------------------------------------------ def always_executed_hook(self): pass #print "In ", self.get_name(), "::always_excuted_hook()" #================================================================== # # SpawnWorkerSrv read/write attribute methods # #================================================================== #------------------------------------------------------------------ # Read Attribute Hardware #------------------------------------------------------------------ def read_attr_hardware(self,data): pass #print "In ", self.get_name(), "::read_attr_hardware()" #------------------------------------------------------------------ # Read ConcurrentProcs attribute #------------------------------------------------------------------ def read_ConcurrentProcs(self, attr): #print "In ", self.get_name(), "::read_ConcurrentProcs()" # Add your own code here attr.set_value(self.server.num_processes) #------------------------------------------------------------------ # Write ConcurrentProcs attribute #------------------------------------------------------------------ def write_ConcurrentProcs(self, attr): #print "In ", self.get_name(), "::write_ConcurrentProcs()" data = attr.get_write_value(extract_as=PyTango.ExtractAs.Numpy) #print "Attribute value = ", data, ' Type = ', type(data) # Add your own code here self.server.num_processes = data #------------------------------------------------------------------ # Read MaxLocalQueueSize attribute #------------------------------------------------------------------ def read_MaxLocalQueueSize(self, attr): #print "In ", self.get_name(), "::read_MaxLocalQueueSize()" # Add your own code here attr.set_value(self.server.maxjobs) #------------------------------------------------------------------ # Write MaxLocalQueueSize attribute #------------------------------------------------------------------ def write_MaxLocalQueueSize(self, attr): #print "In ", self.get_name(), "::write_MaxLocalQueueSize()" data = attr.get_write_value(extract_as=PyTango.ExtractAs.Numpy) #print "Attribute value = ", data, ' Type = ', type(data) # Add your own code here self.server.maxjobs = data #------------------------------------------------------------------ # Read DefaultJobMetaInfo attribute #------------------------------------------------------------------ def read_DefaultJobMetaInfo(self, attr): #print "In ", self.get_name(), "::read_DefaultJobMetaInfo()" # Add your own code here attr_DefaultJobMetaInfo_read = '>'.join(self.server.defaultjobmetainfo) attr.set_value(attr_DefaultJobMetaInfo_read) #------------------------------------------------------------------ # Write DefaultJobMetaInfo attribute #------------------------------------------------------------------ def write_DefaultJobMetaInfo(self, attr): #print "In ", self.get_name(), "::write_DefaultJobMetaInfo()" data = attr.get_write_value(extract_as=PyTango.ExtractAs.String) #print "Attribute value = ", data, ' Type = ', type(data) # Add your own code here metainfo = data.split(">") while len(metainfo) < 3: metainfo.append('') self.server.defaultjobmetainfo = tuple(metainfo) #------------------------------------------------------------------ # Read DefaultPostMetaInfo attribute #------------------------------------------------------------------ def read_DefaultPostMetaInfo(self, attr): #print "In ", self.get_name(), "::read_DefaultPostMetaInfo()" # Add your own code here attr_DefaultPostMetaInfo_read = '>'.join(self.server.defaultpostmetainfo) attr.set_value(attr_DefaultPostMetaInfo_read) #------------------------------------------------------------------ # Write DefaultPostMetaInfo attribute #------------------------------------------------------------------ def write_DefaultPostMetaInfo(self, attr): #print "In ", self.get_name(), "::write_DefaultPostMetaInfo()" data = attr.get_write_value(extract_as=PyTango.ExtractAs.String) #print "Attribute value = ", data, ' Type = ', type(data) # Add your own code here metainfo = data.split(">") while len(metainfo) < 3: metainfo.append('') self.server.defaultpostmetainfo = tuple(metainfo) #------------------------------------------------------------------ # Read LatestQueueEntry attribute #------------------------------------------------------------------ def read_LatestQueueEntry(self, attr): #print "In ", self.get_name(), "::read_LatestQueueEntry()" # Add your own code here try: attr_LatestQueueEntry_read = '>'.join(self.server.tangoqueue.queue[-1]) except IndexError: attr_LatestQueueEntry_read = '' attr.set_value(attr_LatestQueueEntry_read) #------------------------------------------------------------------ # Write LatestQueueEntry attribute #------------------------------------------------------------------ def write_LatestQueueEntry(self, attr): #print "In ", self.get_name(), "::write_LatestQueueEntry()" data = attr.get_write_value(extract_as=PyTango.ExtractAs.String) #print "Attribute value = ", data, ' Type = ', type(data) # Add your own code here self.server.tangoqueue.put(tuple(data.split(">"))) #------------------------------------------------------------------ # Read QueueSize attribute #------------------------------------------------------------------ def read_QueueSize(self, attr): #print "In ", self.get_name(), "::read_QueueSize()" # Add your own code here attr_QueueSize_read = self.server.tangoqueue.qsize() attr.set_value(attr_QueueSize_read) #------------------------------------------------------------------ # Read ProcessingState attribute #------------------------------------------------------------------ def read_ProcessingState(self, attr): val = self.ProcessingState() attr.set_value(val) #------------------------------------------------------------------ # Read ProcessingState attribute #------------------------------------------------------------------ def read_ErrorState(self, attr): val = self.ErrorState() attr.set_value(val) #================================================================== # # SpawnWorkerSrv command methods # #================================================================== #------------------------------------------------------------------ # Start command: # # Description: Starts the Work Spawner server # #------------------------------------------------------------------ def Start(self): #print "In ", self.get_name(), "::Start()" # Add your own code here self.server = WorkSpawnerServer() self.server.start() self.set_state(PyTango.DevState.ON) #---- Start command State Machine ----------------- def is_Start_allowed(self): if self.get_state() in [PyTango.DevState.ON]: # End of Generated Code # Re-Start of Generated Code return False return True #------------------------------------------------------------------ # Stop command: # # Description: Command that STOPs the server # #------------------------------------------------------------------ def Stop(self): #print "In ", self.get_name(), "::Stop()" # Add your own code here self.server.runningflag = False self.server.join() self.server = None self.set_state(PyTango.DevState.OFF) #---- Stop command State Machine ----------------- def is_Stop_allowed(self): if self.get_state() in [PyTango.DevState.OFF]: # End of Generated Code # Re-Start of Generated Code return False return True #------------------------------------------------------------------ # ProcessingState command: # # Description: returns the status of the workspawner. # #------------------------------------------------------------------ def ProcessingState(self): if self.server is None: return PyTango.DevState.OFF # Status of processing of WorkSpawnerServer state = self.server.getProcessingState() if state == WorkSpawnerServer.STANDBY: return PyTango.DevState.STANDBY elif state == WorkSpawnerServer.RUNNING: return PyTango.DevState.RUNNING else: return PyTango.DevState.UNKNOWN #------------------------------------------------------------------ # ErrorState command: # # Description: returns the status of the workspawner. # #------------------------------------------------------------------ def ErrorState(self): if self.server is None: return PyTango.DevState.OFF # Status of error log of WorkSpawnerServer state = self.server.getErrorState() if state == WorkSpawnerServer.NONE: return PyTango.DevState.ON elif state == WorkSpawnerServer.ERROR: return PyTango.DevState.FAULT elif state == WorkSpawnerServer.WARN: return PyTango.DevState.ALARM else: return PyTango.DevState.UNKNOWN #------------------------------------------------------------------ # ReloadConfig command: # # Description: Force reloading of all the worker processes. # #------------------------------------------------------------------ def ReloadConfig(self): #print "In ", self.get_name(), "::ReloadConfig()" # Add your own code here if self.server is not None: self.server.reload = True def is_ReloadConfig_allowed(self): if self.server is None: return False return True #------------------------------------------------------------------ # getErrors command: # # Description: get latest errors # #------------------------------------------------------------------ def getErrors(self, argin): if self.server is not None and self.server.log_server is not None: errnum = self.server.log_server.countErrors() if argin is not None: num = int(argin) else: num = 10 if num > errnum: num = errnum lst = [] for i in range(errnum - num, errnum): lst.append(self.server.log_server.getError(i)) return lst else: return [] def is_getErrors_allowed(self): if self.server is None: return False return True #------------------------------------------------------------------ # getErrors command: # # Description: get latest errors # #------------------------------------------------------------------ def setLogLevel(self, argin): if self.server is not None and self.server.log_server is not None: self.server.log_server.setLevel(str(argin)) def is_getErrors_allowed(self): if self.server is None: return False return True
def Start(self): #print "In ", self.get_name(), "::Start()" # Add your own code here self.server = WorkSpawnerServer() self.server.start() self.set_state(PyTango.DevState.ON)