From d111a8be090e40207b7d63bd43cc2836f85960fe Mon Sep 17 00:00:00 2001 From: David Robert Verelst <dave@dtu.dk> Date: Thu, 13 Oct 2016 10:04:40 +0200 Subject: [PATCH] fix and improvements from wetb.utils MR toolbox/WindEnergyToolbox!16 --- pbswrap.py | 108 +++++++++++++++++++++++++---------------------------- 1 file changed, 51 insertions(+), 57 deletions(-) diff --git a/pbswrap.py b/pbswrap.py index fd02c8b..0c98858 100755 --- a/pbswrap.py +++ b/pbswrap.py @@ -22,14 +22,14 @@ def print_dashboard(users, host, pbsnodes): # jber 3 0 0 0 print - print '-'*54 - print 'cpus'.rjust(18) + 'nodes'.rjust(9) - print 'User'.rjust(9) + 'Running'.rjust(9) + 'Running'.rjust(9) \ - +'Queued'.rjust(9) + 'Waiting'.rjust(9) + 'Other'.rjust(9) + print ('-' * 54) + print ('cpus'.rjust(18) + 'nodes'.rjust(9)) + print ('User'.rjust(9) + 'Running'.rjust(9) + 'Running'.rjust(9) \ + + 'Queued'.rjust(9) + 'Waiting'.rjust(9) + 'Other'.rjust(9)) # nodeSum: overview (summation of all jobs) nodes per user: # nodeSum = [running, queued, waiting, other, cpus] nodeSum = [0, 0, 0, 0, 0] - print '-'*54 + print ('-' * 54) # print all values in the table: the nodes used per user #userlist = users['users'].keys() #userlist.sort() @@ -44,11 +44,11 @@ def print_dashboard(users, host, pbsnodes): Q = users[uid]['Q'] W = users[uid]['W'] O = users[uid]['E'] + users[uid]['H'] + users[uid]['T'] \ - +users[uid]['S'] + users[uid]['O'] + users[uid]['C'] + + users[uid]['S'] + users[uid]['O'] + users[uid]['C'] cpus = users[uid]['cpus'] - print uid.rjust(9) + str(cpus).rjust(9) + str(R).rjust(9) \ - + str(Q).rjust(9) + str(W).rjust(9) + str(O).rjust(9) + print (uid.rjust(9) + str(cpus).rjust(9) + str(R).rjust(9) \ + + str(Q).rjust(9) + str(W).rjust(9) + str(O).rjust(9)) nodeSum[0] += R nodeSum[1] += Q nodeSum[2] += W @@ -58,18 +58,18 @@ def print_dashboard(users, host, pbsnodes): nr_nodes = pbsnodes['nr_nodes'] down = pbsnodes['down'] others = pbsnodes['others'] - total_cpu = host['cpu_per_node']*nr_nodes + total_cpu = host['cpu_per_node'] * nr_nodes # the summed up for each node status (queued, running,...) - print '-'*54 - print 'total'.rjust(9)+str(nodeSum[4]).rjust(9) +str(nodeSum[0]).rjust(9) \ + print ('-' * 54) + print ('total'.rjust(9) + str(nodeSum[4]).rjust(9) + str(nodeSum[0]).rjust(9) \ + str(nodeSum[1]).rjust(9) + str(nodeSum[2]).rjust(9)\ - + str(nodeSum[3]).rjust(9) - print '-'*54 - print 'free'.rjust(9)+str(total_cpu - nodeSum[4]).rjust(9) \ - + str(nr_nodes-nodeSum[0]-others-down).rjust(9) - print 'down'.rjust(9)+str(down).rjust(18) - print '-'*54 + + str(nodeSum[3]).rjust(9)) + print ('-' * 54) + print ('free'.rjust(9) + str(total_cpu - nodeSum[4]).rjust(9) \ + + str(nr_nodes - nodeSum[0] - others - down).rjust(9)) + print ('down'.rjust(9) + str(down).rjust(18)) + print ('-' * 54) print @@ -79,7 +79,7 @@ def print_node_loading(users, host, nodes, nodesload): """ if len(host) < 1: - print 'It is very quit, nobody is working on the cluster.' + print ('It is very quit, nobody is working on the cluster.') return hostname = host['name'] @@ -88,15 +88,15 @@ def print_node_loading(users, host, nodes, nodesload): print # print a header if hostname == 'gorm': - print '-'*79 - header = '|'.join([str(k).center(5) for k in range(1,13,1)]) + '|' - print 'id'.center(5), header - print '-'*79 + print ('-' * 79) + header = '|'.join([str(k).center(5) for k in range(1, 13, 1)]) + '|' + print ('id'.center(5), header) + print ('-' * 79) elif hostname == 'jess': - print '-'*126 - header = '|'.join([str(k).center(5) for k in range(1,21,1)]) + '|' - print 'id'.center(5), header - print '-'*126 + print ('-' * 126) + header = '|'.join([str(k).center(5) for k in range(1, 21, 1)]) + '|' + print ('id'.center(5), header) + print ('-' * 126) # print who is using the nodes for node in sorted(nodes): @@ -104,7 +104,7 @@ def print_node_loading(users, host, nodes, nodesload): # now we have a list of user on this node try: users = sorted(nodesload[node]) - for kk in range(len(users),cpunode): + for kk in range(len(users), cpunode): users.append('') # limit uid names to 5 characters printlist = '|'.join([k[:5].center(5) for k in users]) + '|' @@ -112,17 +112,17 @@ def print_node_loading(users, host, nodes, nodesload): except KeyError: printlist = status.center(5) - print node, printlist + print (node, printlist) # print a header if hostname == 'gorm': - print '-'*79 - print 'id'.center(5), header - print '-'*79 + print ('-' * 79) + print ('id'.center(5), header) + print ('-' * 79) elif hostname == 'jess': - print '-'*126 - print 'id'.center(5), header - print '-'*126 + print ('-' * 126) + print ('id'.center(5), header) + print ('-' * 126) #print @@ -176,7 +176,7 @@ def parse_pbsnode_lall(output): return pbsnodes, nodes -def parse_qstat_n1(output): +def parse_qstat_n1(output, hostname=None): """ Parse the output of qstat -n1 """ @@ -188,26 +188,22 @@ def parse_qstat_n1(output): host = {} users = {} # get the hostname - hostname = socket.gethostname() - if hostname[:5] == 'g-000': - host['name'] = 'gorm' - host['cpu_per_node'] = 12 - else: - # 272 nodes are 2 x 10 core (twenty) processors + if hostname is None: + hostname = socket.gethostname() + if 'jess' in hostname: host['name'] = 'jess' - #total_nodes = 80 host['cpu_per_node'] = 20 + else: + host['name'] = 'gorm' + host['cpu_per_node'] = 12 + # take the available nodes in nr_nodes: it excludes the ones # who are down #queue['_total_cpu_'] = cpu_node*nr_nodes - ii = 0 - for line in output: - # first 5 are not relevant - if ii < 5: - ii += 1 + for line in output[5:]: + if len(line.strip()) == 0: continue - items = line.split() queue = items[2] @@ -268,8 +264,6 @@ def parse_qstat_n1(output): except KeyError: nodesload[node] = [userid] - ii += 1 - return users, host, nodesload # FIXME: counts diffferent compared to launch.py.... @@ -296,8 +290,8 @@ def count_cpus(users, host, pbsnodes): + users[uid]['O'] + users[uid]['C'] # free cpus - down_cpu = host['cpu_per_node']*pbsnodes['down'] - total_cpu = host['cpu_per_node']*pbsnodes['nr_nodes'] + down_cpu = host['cpu_per_node'] * pbsnodes['down'] + total_cpu = host['cpu_per_node'] * pbsnodes['nr_nodes'] cpu_free = total_cpu - down_cpu - nodeSum['used_cpu'] return cpu_free, nodeSum @@ -334,9 +328,9 @@ def create_input(walltime='00:59:59', queue='xpresq', pbs_in='pbs_in/', ppn=1, Create a PBS script for a command. Optionally, define a python environment. """ - pbs_err_file = os.path.join(pbs_out, jobname+'.err') - pbs_out_file = os.path.join(pbs_out, jobname+'.out') - pbs_in_file = os.path.join(pbs_in, jobname+'.pbswrap') + pbs_err_file = os.path.join(pbs_out, jobname + '.err') + pbs_out_file = os.path.join(pbs_out, jobname + '.out') + pbs_in_file = os.path.join(pbs_in, jobname + '.pbswrap') pbs_script = PBS_TEMP pbs_script = pbs_script.replace('[jobname]', jobname) @@ -348,8 +342,8 @@ def create_input(walltime='00:59:59', queue='xpresq', pbs_in='pbs_in/', ppn=1, pbs_script = pbs_script.replace('[queue]', queue) pbs_script = pbs_script.replace('[commands]', commands) - print 'following commands will be executed on the cluster:' - print '%s' % (commands) + print ('following commands will be executed on the cluster:') + print ('%s' % (commands)) # make sure a pbs_in and pbs_out directory exists if not os.path.exists(pbs_in): -- GitLab