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()
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())
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()
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()
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()