def __init__(self, tw, xprocdir): import warnings warnings.warn( "Use of --start, --stop, --status and --log is deprecated. " "You should use a process manager of your OS, for example: " "systemd for Linux, Windows Services, launchd for macOS or " "http://supervisord.org/\n" "Also see the devpi-gen-config command to create example " "configuration files for such services.") self.tw = tw self._extlogfiles = {} self.xproc = XProcess(config=self, rootdir=xprocdir) self.info = self.xproc.getinfo("devpi-server")
def __init__(self, tw, xprocdir): self.tw = tw self._extlogfiles = {} self.xproc = XProcess(config=self, rootdir=xprocdir) self.info = self.xproc.getinfo("devpi-server")
class BackgroundServer: def __init__(self, tw, xprocdir): self.tw = tw self._extlogfiles = {} self.xproc = XProcess(config=self, rootdir=xprocdir) self.info = self.xproc.getinfo("devpi-server") def fatal(self, msg): self.tw.line(msg, red=True) raise SystemExit(1) def line(self, msg, **kw): self.tw.line(msg, **kw) def _waitup(self, url, count=500): # try for 20 seconds to start devpi-server (which remotely # receives a serials list which may take a while) req = new_requests_session(proxies=False) while count > 0: try: req.get(url) except req.ConnectionError: time.sleep(0.1) count -= 1 else: return True return False def start(self, args): filtered_args = [x for x in args._raw if x != "--start"] devpi_server = py.path.local.sysfind("devpi-server") if devpi_server is None: self.fatal("cannot find devpi-server binary, no auto-start") def prepare_devpiserver(cwd): url = "http://%s:%s" % (args.host, args.port) self.line("starting background devpi-server at %s" % url) argv = [ devpi_server, ] + filtered_args #self.line("command: %s" % (argv,)) #self.line("command: %s" % argv) return (lambda: self._waitup(url), argv) self.xproc.ensure("devpi-server", prepare_devpiserver) info = self.xproc.getinfo("devpi-server") self.pid = info.pid self.logfile = info.logpath self.line("logfile is at %s" % self.logfile) def stop(self): info = self.xproc.getinfo("devpi-server") ret = info.kill() if ret == 1: self.line("killed server pid=%s" % info.pid) return 0 elif ret == -1: self.line("failed to kill server pid=%s" % info.pid, red=True) return 1 self.line("no server found", red=True) return 0 def log(self): logpath = self.info.logpath if not logpath.check(): self.line("no logfile found at: %s" % logpath, red=True) return with logpath.open("r") as f: try: f.seek(-30 * 100, 2) except IOError: pass self.line("last lines of devpi-server log", bold=True) lines = f.readlines() for line in lines[1:]: self.line(line.rstrip()) self.line("logfile at: %s" % logpath, bold=True)
class BackgroundServer: def __init__(self, tw, xprocdir): import warnings warnings.warn( "Use of --start, --stop, --status and --log is deprecated. " "You should use a process manager of your OS, for example: " "systemd for Linux, Windows Services, launchd for macOS or " "http://supervisord.org/\n" "Also see the devpi-gen-config command to create example " "configuration files for such services.") self.tw = tw self._extlogfiles = {} self.xproc = XProcess(config=self, rootdir=xprocdir) self.info = self.xproc.getinfo("devpi-server") def fatal(self, msg): self.tw.line(msg, red=True) raise SystemExit(1) def line(self, msg, **kw): self.tw.line(msg, **kw) def _waitup(self, url, count=1800): # try to start devpi-server (which remotely # receives a serials list which may take a while) session = new_requests_session() with no_proxy(urlparse(url).netloc): while count > 0: if not self.xproc.getinfo("devpi-server").isrunning(): return False try: session.get(url) except session.Errors: time.sleep(0.1) count -= 1 else: return True return False def start(self, args, argv): filtered_args = [x for x in argv if x not in ("--start", "--init")] devpi_server = sys.argv[0] if devpi_server is None: self.fatal("cannot find devpi-server binary, no auto-start") devpi_server = os.path.abspath(devpi_server) if devpi_server.endswith(".py") and sys.platform == "win32": devpi_server = str(py.path.local.sysfind("devpi-server")) if not (py.path.local(devpi_server).exists() or py.path.local(devpi_server + '.exe').exists()): self.fatal("not existing devpi-server: %r" % devpi_server) url = "http://%s:%s" % (args.host, args.port) if self._waitup(url, count=1): self.fatal("a server is already running at %s" % url) def prepare_devpiserver(cwd): self.line("starting background devpi-server at %s" % url) argv = [ devpi_server, ] + filtered_args return (lambda: self._waitup(url), argv) self.xproc.ensure("devpi-server", prepare_devpiserver) info = self.xproc.getinfo("devpi-server") self.pid = info.pid self.logfile = info.logpath self.line("logfile is at %s" % self.logfile) def stop(self): info = self.xproc.getinfo("devpi-server") ret = info.kill() if ret == 1: self.line("killed server pid=%s" % info.pid) return 0 elif ret == -1: self.line("failed to kill server pid=%s" % info.pid, red=True) return 1 self.line("no server found", red=True) return 0 def log(self): logpath = self.info.logpath if not logpath.check(): self.line("no logfile found at: %s" % logpath, red=True) return with logpath.open("r") as f: try: f.seek(-30 * 100, 2) except IOError: pass self.line("last lines of devpi-server log", bold=True) lines = f.readlines() for line in lines[1:]: self.line(line.rstrip()) self.line("logfile at: %s" % logpath, bold=True)
class BackgroundServer: def __init__(self, tw, xprocdir): self.tw = tw self._extlogfiles = {} self.xproc = XProcess(config=self, rootdir=xprocdir) self.info = self.xproc.getinfo("devpi-server") def fatal(self, msg): self.tw.line(msg, red=True) raise SystemExit(1) def line(self, msg, **kw): self.tw.line(msg, **kw) def _waitup(self, url, count=1800): # try to start devpi-server (which remotely # receives a serials list which may take a while) session = new_requests_session(proxies=False) while count > 0: try: session.get(url) except session.Errors: time.sleep(0.1) count -= 1 else: return True return False def start(self, args): filtered_args = [x for x in args._raw if x != "--start"] devpi_server = sys.argv[0] if devpi_server is None: self.fatal("cannot find devpi-server binary, no auto-start") if devpi_server.endswith(".py") and sys.platform == "win32": devpi_server = str(py.path.local.sysfind("devpi-server")) if not py.path.local(devpi_server).exists(): self.fatal("not existing devpi-server: %r" % devpi_server) url = "http://%s:%s" % (args.host, args.port) if self._waitup(url, count=1): self.fatal("a server is already running at %s" % url) def prepare_devpiserver(cwd): self.line("starting background devpi-server at %s" % url) argv = [devpi_server, ] + filtered_args #self.line("command: %s" % (argv,)) #self.line("command: %s" % argv) return (lambda: self._waitup(url), argv) self.xproc.ensure("devpi-server", prepare_devpiserver) info = self.xproc.getinfo("devpi-server") self.pid = info.pid self.logfile = info.logpath self.line("logfile is at %s" % self.logfile) def stop(self): info = self.xproc.getinfo("devpi-server") ret = info.kill() if ret == 1: self.line("killed server pid=%s" % info.pid) return 0 elif ret == -1: self.line("failed to kill server pid=%s" % info.pid, red=True) return 1 self.line("no server found", red=True) return 0 def log(self): logpath = self.info.logpath if not logpath.check(): self.line("no logfile found at: %s" % logpath, red=True) return with logpath.open("r") as f: try: f.seek(-30*100, 2) except IOError: pass self.line("last lines of devpi-server log", bold=True) lines = f.readlines() for line in lines[1:]: self.line(line.rstrip()) self.line("logfile at: %s" % logpath, bold=True)