Skip to content

Instantly share code, notes, and snippets.

@wonglkd
Last active November 1, 2019 00:49
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save wonglkd/338c368d4d91eddc4a97d151a3309875 to your computer and use it in GitHub Desktop.
Save wonglkd/338c368d4d91eddc4a97d151a3309875 to your computer and use it in GitHub Desktop.
pssh.py
#!/usr/bin/python
import argparse
import subprocess
def pssh(servers, cmd):
ps = [subprocess.Popen(['ssh', srv, cmd], stdout=subprocess.PIPE)
for srv in servers]
outputs = []
for srv, p in zip(servers, ps):
p.wait()
output = p.stdout.read().strip()
outputs.append(output)
print("===={}====: {}".format(srv, output))
return outputs
def postprocess(servers, outputs):
utils = [float(l.split()[1]) for l in outputs]
results = sorted(zip(utils, servers))
print("{} is most free ({})".format(results[0][1], results[0][0]))
def main():
parser = argparse.ArgumentParser()
parser.add_argument('cmd', nargs='?',
default="top -b -d1 -n1 |grep Cpu | cut -c 1-16")
parser.add_argument('--servers',
default="n1 n2")
parser.add_argument('--domain', default='.xxx.local.cmu.edu')
args = parser.parse_args()
servers = [x + args.domain if '.' not in x else x
for x in args.servers.split()]
outputs = pssh(servers, args.cmd)
if 'top' in args.cmd:
postprocess(servers, outputs)
if __name__ == '__main__':
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment