예제 #1
0
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
예제 #2
0
	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)