Source code for ska_oso_scripting.engineering.low.workarounds.tmc

"""Workarounds for TMC"""

import logging

from ska_control_model import ObsState
from tango import DeviceProxy

from ska_oso_scripting.engineering.low.utils.aiv_utils import (
    get_mccs_devices,
    get_tmc_devices,
)
from ska_oso_scripting.engineering.low.utils.tango_utils import member, wait_for

__all__ = [
    "check_mccs_subarray_leaf_node_obsstate",
]

LOG = logging.getLogger(__name__)


[docs] def check_mccs_subarray_leaf_node_obsstate(subarray_id: int): """ Restart MCCS subarray leaf node if it's out of sync with MCCS subarray. This should be called after AssignResources is issued, as it will wait for MCCS to reach IDLE. See https://jira.skatelescope.org/browse/SKB-997. """ mccs = get_mccs_devices() tmc = get_tmc_devices() [leaf_node] = ( dev for dev in tmc.mccs_subarray_leafnodes if int(member(dev)) == subarray_id ) [mccs_subarray] = (dev for dev in mccs.subarrays if int(member(dev)) == subarray_id) # Give TMC leaf node ten seconds to reach IDLE after MCCS subarray has wait_for(mccs_subarray, "obsState", ObsState.IDLE) try: wait_for(leaf_node, "obsState", ObsState.IDLE, timeout=10) except ValueError: LOG.warning( f"SKB-997: {leaf_node.dev_name()} not reflecting MCCS ObsState updates. " "Restarting it." ) leaf_node_ds = DeviceProxy(leaf_node.adm_name()) leaf_node_ds.RestartServer() wait_for(leaf_node, "obsState", ObsState.IDLE)