Skip to content
Snippets Groups Projects
FofbTool 4.37 KiB
Newer Older
BRONES Romain's avatar
BRONES Romain committed
#!/usr/bin/env python
###################################################################################################
#   COMMAND LINE INTERFACE
###################################################################################################
#
# This file gives the Command Line Interface for FofbTool
#
###################################################################################################

if __name__ == '__main__':
    import logging
    import argparse
    import os
    import sys

    # Safer import: add the parent dir in path
    sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))
    import FofbTool.Utils
BRONES Romain's avatar
BRONES Romain committed
    import FofbTool.Configuration # Still needs for one function, TODO
BRONES Romain's avatar
BRONES Romain committed

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

    # Add a Stream handler to the module logger
    sh=logging.StreamHandler()
    sh.setLevel(logging.DEBUG)
    sh.setFormatter(logging.Formatter("{levelname:8}: {message}", style='{'))
    logger.addHandler(sh)

    parser = argparse.ArgumentParser("FofbTool", description="version {}".format(FofbTool.__version__))
BRONES Romain's avatar
BRONES Romain committed
    parser.add_argument("--log", default="info",
            help="Log level (error, warning, info, debug)")
BRONES Romain's avatar
BRONES Romain committed

    parser.add_argument("--force", action="store_true",
            help="Force operation even if FOFB is running.")

    parser.add_argument("--fileconfig", type=str,
            help="Path to config file to apply.")

BRONES Romain's avatar
BRONES Romain committed
    parser.add_argument("--DS-init-opcua", action="store_true",
            help="Run init on opcua devices.")
BRONES Romain's avatar
BRONES Romain committed
    parser.add_argument("--DS-init-watcher", action="store_true",
            help="Run init on the Fofb-Watcher device, and then the Fofb-Command.")
BRONES Romain's avatar
BRONES Romain committed
    parser.add_argument("--DS-conf", action="store_true",
            help="Applying attribute configuration on Tango Device Servers. This is required after restart of devices.")
BRONES Romain's avatar
BRONES Romain committed

BRONES Romain's avatar
BRONES Romain committed
    parser.add_argument("--stop", action="store_true",
            help="Stop command for the CCN and ComBPM applications blocks.")
    parser.add_argument("--stop-combpm", action="store_true",
            help="Stop command for the ComBPM applications blocks.")
    parser.add_argument("--stop-ccn", action="store_true",
            help="Stop command for the ComBPM applications blocks.")

    parser.add_argument("--configure", choices=["combpm", "ccn", "comcorr", "corr", "all"],
            nargs='?', const='all',
BRONES Romain's avatar
BRONES Romain committed
            help="Configuration commands for the Fofb applications blocs."+
            " 'all' is for all com and corrector. Default is 'all'")
BRONES Romain's avatar
BRONES Romain committed
    parser.add_argument("--start", action="store_true",
            help="Start command for the CCN and ComBPM applications blocks.")
    parser.add_argument("--start-combpm", action="store_true",
            help="Start command for the ComBPM applications blocks.")
    parser.add_argument("--start-ccn", action="store_true",
            help="Start command for the ComBPM applications blocks.")


BRONES Romain's avatar
BRONES Romain committed
    args = parser.parse_args()

    # Set log level from args
    logger.setLevel(getattr(logging, args.log.upper()))

    logger.debug(args)
    logger.info("FofbTool version {}".format(FofbTool.__version__))
    if not args.fileconfig is None:
        FofbTool.Configuration.loadconfig(args.fileconfig)
    FofbTool.Configuration.logdebugconf()

    ## Check running
    if not FofbTool.Utils.check_fofbnotrunning():
        logger.warning("FOFB is running")
        if not args.force:
            logger.warning("Stoping here")
            exit(1)
        else:
            logger.warning("Action forced")

BRONES Romain's avatar
BRONES Romain committed
    ## Device Server related commands
    if args.DS_init_opcua:
        FofbTool.Utils.init_opcua()

BRONES Romain's avatar
BRONES Romain committed
    if args.DS_init_watcher:
        FofbTool.Utils.init_watcher()
BRONES Romain's avatar
BRONES Romain committed
    if args.DS_conf:
        FofbTool.Utils.confds_opcua()
BRONES Romain's avatar
BRONES Romain committed
    if args.stop or args.stop_combpm:
        FofbTool.Utils.stop_all_combpm()
    if args.stop or args.stop_ccn:
        FofbTool.Utils.stop_all_ccn()

    if args.configure in ("combpm", "all"):
        FofbTool.Utils.conf_all_combpm()
    if args.configure in ("comcorr", "all"):
        FofbTool.Utils.conf_all_comcorr()
    if args.configure in ("ccn", "all"):
        FofbTool.Utils.conf_all_ccn()
    if args.configure in ("corr", "all"):
        FofbTool.Configuration.centralnode_configure_corr()
BRONES Romain's avatar
BRONES Romain committed

    if args.start or args.start_combpm:
        FofbTool.Utils.start_all_combpm()
    if args.start or args.start_ccn:
        FofbTool.Utils.start_all_ccn()
BRONES Romain's avatar
BRONES Romain committed