async def start_service(self, request: Dict[str, Any]): service_command = request["service"] error = None success = False testing = False if "testing" in request: testing = request["testing"] if not validate_service(service_command): error = "unknown service" if service_command in self.services: service = self.services[service_command] r = service is not None and service.poll() is None if r is False: self.services.pop(service_command) error = None else: error = f"Service {service_command} already running" if error is None: try: exe_command = service_command if testing is True: exe_command = f"{service_command} --testing=true" process, pid_path = launch_service(self.root_path, exe_command) self.services[service_command] = process success = True except (subprocess.SubprocessError, IOError): log.exception(f"problem starting {service_command}") error = "start failed" response = {"success": success, "service": service_command, "error": error} return response
async def start_service(request: web.Request) -> web.Response: service_name = request.query.get("service") if service_name is None or not validate_service(service_name): r = f"{service_name} unknown service" return web.Response(text=str(r)) if is_running(services, service_name): r = f"{service_name} already running" return web.Response(text=str(r)) try: process, pid_path = launch_service(root_path, service_name) services[service_name] = process r = f"{service_name} started" except (subprocess.SubprocessError, IOError): log.exception(f"problem starting {service_name}") r = f"{service_name} start failed" return web.Response(text=str(r))