コード例 #1
0
def main(argv: List[str]) -> None:
    katsdpservices.setup_logging()
    katsdpservices.setup_restart()
    args = master_controller.parse_args(argv)
    if args.log_level is not None:
        logging.root.setLevel(args.log_level.upper())

    if args.interface_mode:
        logging.warning("Note: Running master controller in interface mode. "
                        "This allows testing of the interface only, "
                        "no actual command logic will be enacted.")

    rewrite_gui_urls: Optional[Callable[[aiokatcp.Sensor], bytes]]
    if args.haproxy:
        rewrite_gui_urls = functools.partial(web.rewrite_gui_urls, args.external_url)
    else:
        rewrite_gui_urls = None

    loop = asyncio.get_event_loop()
    server = master_controller.DeviceServer(args, rewrite_gui_urls=rewrite_gui_urls)
    for sig in [signal.SIGINT, signal.SIGTERM]:
        loop.add_signal_handler(sig, functools.partial(handle_signal, server))
    with katsdpservices.start_aiomonitor(loop, args, locals()):
        loop.run_until_complete(async_main(server, args))
    loop.close()
コード例 #2
0
def main() -> None:
    katsdpservices.setup_logging()
    katsdpservices.setup_restart()
    args = parse_args()
    logger = logging.getLogger("katsdpcam2telstate")

    loop = asyncio.get_event_loop()
    client = Client(args, logger)
    client.parse_streams()
    with katsdpservices.start_aiomonitor(loop, args, locals()):
        loop.run_until_complete(client.run())
コード例 #3
0
ファイル: bf_ingest.py プロジェクト: ska-sa/katsdpbfingest
def main() -> None:
    katsdpservices.setup_logging()
    katsdpservices.setup_restart()

    args = parse_args()
    if args.log_level is not None:
        logging.root.setLevel(args.log_level.upper())
    if args.file_base is None and args.stats is None:
        logging.warning(
            'Neither --file-base nor --stats was given; nothing useful will happen'
        )
    if args.file_base is not None and not os.access(args.file_base, os.W_OK):
        logging.error('Target directory (%s) is not writable', args.file_base)
        sys.exit(1)

    loop = asyncio.get_event_loop()
    server = KatcpCaptureServer(args, loop)
    loop.add_signal_handler(signal.SIGINT, lambda: on_shutdown(server))
    loop.add_signal_handler(signal.SIGTERM, lambda: on_shutdown(server))
    with katsdpservices.start_aiomonitor(loop, args, locals()):
        loop.run_until_complete(server.start())
        loop.run_until_complete(server.join())
    loop.close()
コード例 #4
0
ファイル: vis_writer.py プロジェクト: ska-sa/katsdpdatawriter
                        help='Name of L0 stream from ingest [default=%(default)s]')
    parser.add_argument('--l0-ibv', action='store_true',
                        help='Use ibverbs acceleration to receive L0 stream [default=no]')
    parser.set_defaults(telstate='localhost', port=2046)
    args = parser.parse_args()

    if args.l0_ibv and args.l0_interface is None:
        parser.error('--l0-ibv requires --l0-interface')
    if args.rename_src and args.new_name is None:
        parser.error('--rename-src requires --new-name')

    # Connect to object store
    chunk_store = chunk_store_from_args(parser, args)
    loop = asyncio.get_event_loop()
    server = VisibilityWriterServer(args.host, args.port, loop, args.l0_spead,
                                    args.l0_interface, args.l0_ibv,
                                    chunk_store, ChunkParams.from_args(args),
                                    args.telstate,
                                    args.l0_name,
                                    args.new_name if args.new_name is not None else args.l0_name,
                                    args.rename_src,
                                    args.s3_endpoint_url,
                                    args.workers, args.buffer_dumps)
    if args.dashboard_port is not None:
        dashboard = make_dashboard(server.sensors)
        start_dashboard(dashboard, args)

    with katsdpservices.start_aiomonitor(loop, args, locals()):
        loop.run_until_complete(run(loop, server))
    loop.close()
コード例 #5
0
def main() -> None:
    parser, args = parse_args()
    prepare_env(args)
    katsdpservices.setup_logging()
    katsdpservices.setup_restart()
    if args.log_level is not None:
        logging.root.setLevel(args.log_level.upper())

    logger = logging.getLogger('katsdpcontroller')
    logger.info("Starting SDP product controller...")
    logger.info('katcp: %s:%d', args.host, args.port)
    logger.info('http: %s', args.http_url)

    master_controller = aiokatcp.Client(args.master_controller.host,
                                        args.master_controller.port)
    image_lookup = product_controller.KatcpImageLookup(master_controller)
    try:
        image_resolver_factory = make_image_resolver_factory(
            image_lookup, args)
    except ValueError as exc:
        parser.error(str(exc))

    framework_info = addict.Dict()
    framework_info.user = args.user
    framework_info.name = args.subarray_product_id
    framework_info.checkpoint = True
    framework_info.principal = args.principal
    framework_info.roles = [args.realtime_role, args.batch_role]
    framework_info.capabilities = [{
        'type': 'MULTI_ROLE'
    }, {
        'type': 'TASK_KILLING_STATE'
    }]

    loop = asyncio.get_event_loop()
    sched = scheduler.Scheduler(
        args.realtime_role,
        args.host,
        args.http_port,
        args.http_url,
        task_stats=product_controller.TaskStats(),
        runner_kwargs=dict(access_log_class=web_utils.AccessLogger))
    sched.app.router.add_get('/metrics', web_utils.prometheus_handler)
    sched.app.router.add_get('/health', web_utils.health_handler)
    driver = pymesos.MesosSchedulerDriver(sched,
                                          framework_info,
                                          args.mesos_master,
                                          use_addict=True,
                                          implicit_acknowledgements=False)
    sched.set_driver(driver)
    driver.start()

    dashboard_path = f'/gui/{args.subarray_product_id}/product/dashboard/'
    dashboard_url: Optional[str] = args.dashboard_url
    if args.dashboard_port != 0 and dashboard_url is None:
        dashboard_url = str(
            yarl.URL.build(scheme='http',
                           host=args.external_hostname,
                           port=args.dashboard_port,
                           path=dashboard_path))

    server = product_controller.DeviceServer(
        args.host,
        args.port,
        master_controller,
        args.subarray_product_id,
        sched,
        batch_role=args.batch_role,
        interface_mode=False,
        localhost=args.localhost,
        image_resolver_factory=image_resolver_factory,
        s3_config=args.s3_config if args.s3_config is not None else {},
        graph_dir=args.write_graphs,
        dashboard_url=dashboard_url)
    if args.dashboard_port != 0:
        init_dashboard(server, args, dashboard_path)

    with katsdpservices.start_aiomonitor(loop, args, locals()):
        loop.run_until_complete(run(sched, server))
    loop.close()