Skip to content
Snippets Groups Projects
Utils.py 5.26 KiB
Newer Older
###################################################################################################
#    Utilities
###################################################################################################
#
# This file contains usefull function and attributes to simplify life
#
###################################################################################################

import tango
import logging
BRONES Romain's avatar
BRONES Romain committed
import FofbTool.DeviceAttributeConfiguration

# Get the module logger
logger = logging.getLogger("FofbTool")

BRONES Romain's avatar
BRONES Romain committed
tangopath_cellnodes = {
        "cellnode-c01":"ans/dg/fofb-cellnode-c01",
        "cellnode-c06":"ans/dg/fofb-cellnode-c06",
        "cellnode-c09":"ans/dg/fofb-cellnode-c09",
        "cellnode-c14":"ans/dg/fofb-cellnode-c14",
        }

BRONES Romain's avatar
BRONES Romain committed
tangopath_nodes = {
        "centralnode":"ans/dg/fofb-centralnode",
        }
tangopath_nodes.update(tangopath_cellnodes)

tangopath = {
        "fofb-watcher":"ans/dg/fofb-watcher",
        "fofb-command":"ans/dg/fofb-command",
        "fofb-manager":"ans/dg/fofb-manager",
        "bpm-manager":"ans/dg/bpm-manager",
BRONES Romain's avatar
BRONES Romain committed
        }
tangopath.update(tangopath_nodes)

def init_opcua():
    """
    Run init on all OPCUA devices. Catch DevFailed and inform via log.
    """

    for i,(n,p) in enumerate(tangopath_nodes.items()):
        logger.info("Perform init() on {} '{}'".format(n,p))
        try:
            tango.DeviceProxy(p).init()
        except tango.DevFailed as e:
            logger.error("Could not perform init() '{}', got DevFailed.".format(p))
            logger.debug(str(e))

def init_watcher():
    """
    Run init on Fofb-Watcher, waiting for its completion then init on the FofbCommand.
    """

    wprx=tango.DeviceProxy(tangopath["fofb-watcher"])
    wprx.set_timeout_millis(30000)

    logger.info("Perform init() on Fofb-Watcher. This takes nearly a minute.")
    try:
        wprx.init()
    except tango.DevFailed as e:
        logger.error("Could not perform init() on Fofb-Watcher.")

    logger.info("Perform init() on Fofb-Command.")
    tango.DeviceProxy(tangopath["fofb-command"]).init()

def confds_opcua():
    """
    Apply attribute configuration on all OPCUA devices. Catch DevFailed and inform via log.
    """
    for i,(n,p) in enumerate(tangopath_nodes.items()):
        try:
            prx = tango.DeviceProxy(p)
        except tango.DevFailed as e:
            logger.error("Could not get proxy '{}', got DevFailed.".format(p))
            logger.debug(str(e))
            break

        try:
            if 'central' in n:
BRONES Romain's avatar
BRONES Romain committed
                FofbTool.DeviceAttributeConfiguration.set_attr_config_centralnode(prx)
            else:
BRONES Romain's avatar
BRONES Romain committed
                FofbTool.DeviceAttributeConfiguration.set_attr_config_cellnode(prx)
        except tango.DevFailed as e:
            logger.error("Could not set attribute configuration for '{}', got DevFailed.".format(p))
            logger.debug(str(e))


BRONES Romain's avatar
BRONES Romain committed
def check_fofbnotrunning():
    """
    Check if the FOFB is not running.
    If it fails to know, return False and log error.

    RETURN
    ------
    running: Boolean
        True if FOFB is not running
    """

    try:
        prx = tango.DeviceProxy(tangopath["fofb-watcher"])
    except tango.DevFailed as e:
        logger.error("Failed to get the Device proxy to '{}'".format(tangopath["fofb-watcher"]))
        logger.debug(str(e))
        return False

    try:
        return not (prx.fofbrunning_x or prx.fofbrunning_y)
    except tango.DevFailed as e:
        logger.error("Failed to read the FOFB status on device Fofb-Watcher")
        logger.debug(str(e))
        return False

def conf_all_combpm():
    """
    Run default configuration of all combpm blocks.
    Check beforehand that the FOFB is not running.

    RETURN
    ------
    running: Boolean
        True if FOFB is not running
    """

    if not check_fofbnotrunning():
        logger.warning("Not running configuration of combpm because FOFB seems to be running.")
        return False

    success=True
    for i,(n,p) in enumerate(tangopath_cellnodes.items()):
        s=FofbTool.Configuration.cellnode_configure_combpm(n)
        success = success and s

    return success


def conf_all_comcorr():
    """
    Run default configuration of all comcorr blocks.
    Check beforehand that the FOFB is not running.

    RETURN
    ------
    running: Boolean
        True if FOFB is not running
    """

    if not check_fofbnotrunning():
        logger.warning("Not running configuration of comcorr because FOFB seems to be running.")
        return False

    success=True
    for i,(n,p) in enumerate(tangopath_cellnodes.items()):
        s=FofbTool.Configuration.cellnode_configure_comcorr(n)
        success = success and s

    return success


def conf_all_ccn():
    """
    Run default configuration of all comcellnode blocks.
    Check beforehand that the FOFB is not running.

    RETURN
    ------
    running: Boolean
        True if FOFB is not running
    """

    if not check_fofbnotrunning():
        logger.warning("Not running configuration of comcorr because FOFB seems to be running.")
        return False

    success=True
    for i,(n,p) in enumerate(tangopath_cellnodes.items()):
        s=FofbTool.Configuration.cellnode_configure_ccn(n)
        success = success and s

    s=FofbTool.Configuration.centralnode_configure_ccn()
    success = success and s

    return success