Loading csp-lmc-common/csp_lmc_common/CspSubarray.py +33 −37 Original line number Original line Diff line number Diff line Loading @@ -353,44 +353,40 @@ class CspSubarray(SKASubarray): device = self.target device = self.target subelement_thr = {} subelement_thr = {} self.thread_succeeded = {} self.thread_succeeded = {} try: off_failed = False # First loop that start the sub-element threads to get the ObsState.EMPTY # First loop that start the sub-element threads to get the ObsState.EMPTY for fqdn in device._sc_subarray_fqdn: for fqdn in device._sc_subarray_fqdn: # check if the sub-element subarray is already in the # check if the sub-element subarray is already in the # requested state # requested state if device._sc_subarray_state[fqdn] == tango.DevState.OFF: if device._sc_subarray_state[fqdn] == tango.DevState.OFF: continue continue if device._sc_subarray_obs_state[fqdn] != ObsState.EMPTY: if device._sc_subarray_obs_state[fqdn] != ObsState.EMPTY: subelement_thr[fqdn] = threading.Thread(target=self.off_sequence, subelement_thr[fqdn] = threading.Thread(target=self.off_sequence, name="Thread-OffSequence", name="Thread-OffSequence", args=(fqdn,)) args=(fqdn,)) subelement_thr[fqdn].start() subelement_thr[fqdn].start() # Second loop check if the thread is succeeded and send the Off command to sub-element else: self.logger.info(f'ObsState of device {fqdn} is not EMPTY. ObsState:{device._sc_subarray_obs_state[fqdn]}') # Second loop check if the thread is succeeded and send the Off command to sub-element for fqdn in subelement_thr.keys(): subelement_thr[fqdn].join() if any(self.thread_succeeded[fqdn] == True for fqdn in subelement_thr.keys()): for fqdn in subelement_thr.keys(): for fqdn in subelement_thr.keys(): subelement_thr[fqdn].join() try: if not self.thread_succeeded[fqdn]: (result_code, message) = device._sc_subarray_proxies[fqdn].Off() self.logger.info(f'ObsState of device {fqdn} is not EMPTY. ObsState:{device._sc_subarray_obs_state[fqdn]}') except tango.DevFailed as tango_err: # TODO: GM: anche se non sono EMPTY li mandiamo in OFF? message = str(tango_err.args[0].desc) if fqdn != device.CbfSubarray: result_code = ResultCode.FAILED device._health_state = HealthState.DEGRADED continue if result_code == ResultCode.FAILED: else: self.logger.error("Off command failed on device {}".format(fqdn)) # TODO: check message self.logger.info(message) return ResultCode.FAILED, 'CBF is not EMPTY, impossible to send OFF command' off_failed = True # turn off the sub-element (result_code, message) = device._sc_subarray_proxies[fqdn].Off() if off_failed: if result_code == ResultCode.FAILED: return ResultCode.FAILED, 'Off command Failed' self.logger.error("Off command failed on device {}".format(fqdn)) if fqdn != device.CbfSubarray: device._health_state = HealthState.DEGRADED continue else: return ResultCode.FAILED, message # TODO: OFF the CSP-Subarray? except tango.DevFailed as tango_err: message = str(tango_err.args[0].desc) return ResultCode.FAILED, message super().do() message = "Off command completed OK" message = "Off command completed OK" self.logger.info(message) self.logger.info(message) return ResultCode.OK, message return ResultCode.OK, message Loading Loading
csp-lmc-common/csp_lmc_common/CspSubarray.py +33 −37 Original line number Original line Diff line number Diff line Loading @@ -353,44 +353,40 @@ class CspSubarray(SKASubarray): device = self.target device = self.target subelement_thr = {} subelement_thr = {} self.thread_succeeded = {} self.thread_succeeded = {} try: off_failed = False # First loop that start the sub-element threads to get the ObsState.EMPTY # First loop that start the sub-element threads to get the ObsState.EMPTY for fqdn in device._sc_subarray_fqdn: for fqdn in device._sc_subarray_fqdn: # check if the sub-element subarray is already in the # check if the sub-element subarray is already in the # requested state # requested state if device._sc_subarray_state[fqdn] == tango.DevState.OFF: if device._sc_subarray_state[fqdn] == tango.DevState.OFF: continue continue if device._sc_subarray_obs_state[fqdn] != ObsState.EMPTY: if device._sc_subarray_obs_state[fqdn] != ObsState.EMPTY: subelement_thr[fqdn] = threading.Thread(target=self.off_sequence, subelement_thr[fqdn] = threading.Thread(target=self.off_sequence, name="Thread-OffSequence", name="Thread-OffSequence", args=(fqdn,)) args=(fqdn,)) subelement_thr[fqdn].start() subelement_thr[fqdn].start() # Second loop check if the thread is succeeded and send the Off command to sub-element else: self.logger.info(f'ObsState of device {fqdn} is not EMPTY. ObsState:{device._sc_subarray_obs_state[fqdn]}') # Second loop check if the thread is succeeded and send the Off command to sub-element for fqdn in subelement_thr.keys(): subelement_thr[fqdn].join() if any(self.thread_succeeded[fqdn] == True for fqdn in subelement_thr.keys()): for fqdn in subelement_thr.keys(): for fqdn in subelement_thr.keys(): subelement_thr[fqdn].join() try: if not self.thread_succeeded[fqdn]: (result_code, message) = device._sc_subarray_proxies[fqdn].Off() self.logger.info(f'ObsState of device {fqdn} is not EMPTY. ObsState:{device._sc_subarray_obs_state[fqdn]}') except tango.DevFailed as tango_err: # TODO: GM: anche se non sono EMPTY li mandiamo in OFF? message = str(tango_err.args[0].desc) if fqdn != device.CbfSubarray: result_code = ResultCode.FAILED device._health_state = HealthState.DEGRADED continue if result_code == ResultCode.FAILED: else: self.logger.error("Off command failed on device {}".format(fqdn)) # TODO: check message self.logger.info(message) return ResultCode.FAILED, 'CBF is not EMPTY, impossible to send OFF command' off_failed = True # turn off the sub-element (result_code, message) = device._sc_subarray_proxies[fqdn].Off() if off_failed: if result_code == ResultCode.FAILED: return ResultCode.FAILED, 'Off command Failed' self.logger.error("Off command failed on device {}".format(fqdn)) if fqdn != device.CbfSubarray: device._health_state = HealthState.DEGRADED continue else: return ResultCode.FAILED, message # TODO: OFF the CSP-Subarray? except tango.DevFailed as tango_err: message = str(tango_err.args[0].desc) return ResultCode.FAILED, message super().do() message = "Off command completed OK" message = "Off command completed OK" self.logger.info(message) self.logger.info(message) return ResultCode.OK, message return ResultCode.OK, message Loading