def getAuthenticatedKeys():
    from PyFoam.Infrastructure.Authentication import authenticatedKeys,ensureKeyPair
    ensureKeyPair()
    return authenticatedKeys()
    def run(self):
        from PyFoam.Infrastructure.Authentication import ensureKeyPair
        ensureKeyPair()

        if self.opts.zeroconf:
            data = getServerList(self.opts.timeout,
                                 verbose=self.opts.debugZeroconf,
                                 progress=self.opts.progressZeroconf)
        else:
            self.warning(
                "Using the old method of querying the meta-server. This is deprecated"
            )
            try:
                self.server = getServerProxy(self.parser.options.server,
                                             self.parser.options.port)
                data = self.server.list()
            except socket.error as reason:
                print_("Socket error while connecting:", reason)
                sys.exit(1)
            except ProtocolError as reason:
                print_("XMLRPC-problem", reason)
                sys.exit(1)

        if len(data) == 0:
            self.warning("No runs found")
            return

        hostString = "Hostname"
        maxhost = len(hostString)
        cmdString = "Command Line"
        maxcommandline = len(cmdString)

        for name, info in iteritems(data):
            if len(info["commandLine"]) > maxcommandline:
                maxcommandline = len(info["commandLine"])
            if self.opts.ip:
                tmpHost = info["ip"]
            else:
                tmpHost = info["hostname"]
                if tmpHost == "no info":
                    tmpHost = info["ip"]
            if len(tmpHost) > maxhost:
                maxhost = len(tmpHost)

        header = hostString + (
            " " * (maxhost - len(hostString))
        ) + " | " + " Port  | User       | " + cmdString + "\n"
        line = ("-" * (len(header)))
        header += line

        formatString = "%-" + str(maxhost) + "s | %6d | %10s | %s"
        print_(header)

        for name, info in iteritems(data):
            if self.opts.user:
                if self.opts.user != info["user"]:
                    continue

            if self.opts.ip:
                tmpHost = info["ip"]
            else:
                tmpHost = info["hostname"]
                if tmpHost == "no info":
                    tmpHost = info["ip"]

            print_(formatString %
                   (tmpHost, info["port"], info["user"], info["commandLine"]))
            if self.parser.options.process:
                isParallel = self.forwardCommand(info, "isParallel()")
                if isParallel:
                    pidString = "CPUs: %5d" % self.forwardCommand(
                        info, "procNr()")
                else:
                    pidString = "PID: %6d" % info["pid"]
                print_("  %s   Working dir: %s" % (pidString, info["cwd"]))
            if self.parser.options.time:
                startTime = self.forwardCommand(info, "startTime()")
                endTime = self.forwardCommand(info, "endTime()")
                createTime = self.forwardCommand(info, "createTime()")
                nowTime = self.forwardCommand(info, "time()")
                try:
                    progress = (nowTime - createTime) / (endTime - createTime)
                except ZeroDivisionError:
                    progress = 0

                try:
                    progress2 = (nowTime - startTime) / (endTime - startTime)
                except ZeroDivisionError:
                    progress2 = 0

                print_(
                    "  Time: %g Timerange: [ %g , %g ]  Mesh created: %g -> Progress: %.2f%% (Total: %.2f%%)"
                    % (nowTime, startTime, endTime, createTime, progress * 100,
                       progress2 * 100))

                wallTime = self.forwardCommand(info, "wallTime()")
                now = time.time()
                start = now - wallTime
                startString = time.strftime("%Y-%b-%d %H:%M",
                                            time.localtime(start))
                try:
                    estimate = start + wallTime / progress
                    estimateString = time.strftime("%Y-%b-%d %H:%M",
                                                   time.localtime(estimate))
                except ZeroDivisionError:
                    estimate = start
                    estimateString = " - NaN - "

                print_("  Started: %s   Walltime: %8gs  Estimated End: %s" %
                       (startString, wallTime, estimateString))

            if self.opts.resources:
                mem = self.forwardCommand(info, "usedMemory()")
                loads = self.forwardCommand(info, "loadAvg()")
                loadString = ""
                if len(loads) == 3:
                    loadString = "  Load 1m: %.1f - 5m: %.1f - 15m: %.1f" % tuple(
                        loads)
                print(("   Max memory: %f MB" % mem) + loadString)
            if self.parser.options.process or self.parser.options.time:
                print_(line)
            if self.parser.options.dump:
                print_(info)
                print_(line)
def getPublicKey():
    from PyFoam.Infrastructure.Authentication import myPublicKeyText,ensureKeyPair
    ensureKeyPair()
    return myPublicKeyText()
    def run(self):
        from PyFoam.Infrastructure.Authentication import ensureKeyPair
        ensureKeyPair()

        host=self.parser.getArgs()[0]
        port=int(self.parser.getArgs()[1])

        cmd=self.parser.options.command

        try:
            self.server=getServerProxy(host,port)
            methods=self.server.system.listMethods()
            if not cmd:
                print_("Connected to server",host,"on port",port)
                print_(len(methods),"available methods found")
        except socket.error as reason:
            print_("Socket error while connecting:",reason)
            sys.exit(1)
        except ProtocolError as reason:
            print_("XMLRPC-problem",reason)
            sys.exit(1)

        if cmd:
            result=self.executeCommand(cmd)
            if result!=None:
                print_(result)
            sys.exit(0)

        while 1:
            try:
                if PY3:
                    line = input(self.prompt)
                else:
                    line = raw_input(self.prompt)
            except (KeyboardInterrupt,EOFError):    # Catch a ctrl-D
                print_()
                print_("Goodbye")
                sys.exit()
            line.strip()
            parts=line.split()

            if len(parts)==0:
                print_("For help type 'help'")
                continue

            if parts[0]=="help":
                if len(parts)==1:
                    print_("For help on a method type 'help <method>'")
                    print_("Available methods are:")
                    for m in methods:
                        print_("\t",m)
                elif len(parts)==2:
                    name=parts[1]
                    if name in methods:
                        signature=self.executeCommand("system.methodSignature(\""+name+"\")")
                        help=self.executeCommand("system.methodHelp(\""+name+"\")")
                        print_("Method    : ",name)
                        print_("Signature : ",signature)
                        print_(help)
                    else:
                        print_("Method",name,"does not exist")
                else:
                    print_("Too many arguments")
            else:
                result=self.executeCommand(line)
                if result!=None:
                    print_(result)
def getAuthenticatedKeys():
    from PyFoam.Infrastructure.Authentication import authenticatedKeys, ensureKeyPair
    ensureKeyPair()
    return authenticatedKeys()
def getPublicKey():
    from PyFoam.Infrastructure.Authentication import myPublicKeyText, ensureKeyPair
    ensureKeyPair()
    return myPublicKeyText()
    def run(self):
        from PyFoam.Infrastructure.Authentication import ensureKeyPair
        ensureKeyPair()

        if self.opts.zeroconf:
            data=getServerList(self.opts.timeout,
                               verbose=self.opts.debugZeroconf,
                               progress=self.opts.progressZeroconf)
        else:
            self.warning("Using the old method of querying the meta-server. This is deprecated")
            try:
                self.server=getServerProxy(self.parser.options.server,self.parser.options.port)
                data=self.server.list()
            except socket.error as reason:
                print_("Socket error while connecting:",reason)
                sys.exit(1)
            except ProtocolError as reason:
                print_("XMLRPC-problem",reason)
                sys.exit(1)

        if len(data)==0:
            self.warning("No runs found")
            return

        hostString="Hostname"
        maxhost=len(hostString)
        cmdString="Command Line"
        maxcommandline=len(cmdString)

        for name,info in iteritems(data):
            if len(info["commandLine"])>maxcommandline:
                maxcommandline=len(info["commandLine"])
            if self.opts.ip:
                tmpHost=info["ip"]
            else:
                tmpHost=info["hostname"]
                if tmpHost=="no info":
                    tmpHost=info["ip"]
            if len(tmpHost)>maxhost:
                maxhost=len(tmpHost)

        header=hostString+(" "*(maxhost-len(hostString)))+" | "+" Port  | User       | "+cmdString+"\n"
        line=("-"*(len(header)))
        header+=line

        formatString="%-"+str(maxhost)+"s | %6d | %10s | %s"
        print_(header)

        for name,info in iteritems(data):
            if self.opts.user:
                if self.opts.user!=info["user"]:
                    continue

            if self.opts.ip:
                tmpHost=info["ip"]
            else:
                tmpHost=info["hostname"]
                if tmpHost=="no info":
                    tmpHost=info["ip"]

            print_(formatString % (tmpHost,info["port"],info["user"],info["commandLine"]))
            if self.parser.options.process:
                isParallel=self.forwardCommand(info,"isParallel()")
                if isParallel:
                    pidString="CPUs: %5d" % self.forwardCommand(info,"procNr()")
                else:
                    pidString="PID: %6d" % info["pid"]
                print_("  %s   Working dir: %s" % (pidString,info["cwd"]))
            if self.parser.options.time:
                startTime=self.forwardCommand(info,"startTime()")
                endTime=self.forwardCommand(info,"endTime()")
                createTime=self.forwardCommand(info,"createTime()")
                nowTime=self.forwardCommand(info,"time()")
                try:
                    progress=(nowTime-createTime)/(endTime-createTime)
                except ZeroDivisionError:
                    progress=0

                try:
                    progress2=(nowTime-startTime)/(endTime-startTime)
                except ZeroDivisionError:
                    progress2=0

                print_("  Time: %g Timerange: [ %g , %g ]  Mesh created: %g -> Progress: %.2f%% (Total: %.2f%%)" % (nowTime,startTime,endTime,createTime,progress*100,progress2*100))

                wallTime=self.forwardCommand(info,"wallTime()")
                now=time.time()
                start=now-wallTime
                startString=time.strftime("%Y-%b-%d %H:%M",time.localtime(start))
                try:
                    estimate=start+wallTime/progress
                    estimateString=time.strftime("%Y-%b-%d %H:%M",time.localtime(estimate))
                except ZeroDivisionError:
                    estimate=start
                    estimateString=" - NaN - "

                print_("  Started: %s   Walltime: %8gs  Estimated End: %s" % (startString,wallTime,estimateString))

            if self.opts.resources:
                mem=self.forwardCommand(info,"usedMemory()")
                loads=self.forwardCommand(info,"loadAvg()")
                loadString=""
                try:
                    if len(loads)==3:
                        loadString="  Load 1m: %.1f - 5m: %.1f - 15m: %.1f" % tuple(loads)
                except TypeError:
                    loadString="  Load: "+str(loads)
                print(("   Max memory: %f MB" % mem)+loadString)
            if self.parser.options.process or self.parser.options.time:
                print_(line)
            if self.parser.options.dump:
                print_(info)
                print_(line)