Changeset 201
- Timestamp:
- 10/16/09 11:47:08 (15 years ago)
- Location:
- trunk
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/debian/changelog
r196 r201 5 5 structure. 6 6 Author: Bas van der Vlies 7 8 * new_rack_pbsmon.py 9 Rewrite to new data structure and automatically determine how many nodes 10 and racks a cluster has. 11 Author: Bas van der Vlies 7 12 8 13 -- Bas van der Vlies <bas@rc.sara.nl> Mon, 18 May 2009 17:03:16 +0200 -
trunk/examples/new_rack_pbsmon.py
r194 r201 15 15 import string 16 16 import getopt 17 import re 17 18 18 19 import pbs 19 20 from PBSQuery import PBSQuery 20 21 from PBSQuery import PBSError 22 23 # A node has the following syntax gb-r10n10 24 # r10 is rack name -> skip one char --> gives us rack number = 10 25 # n10 is node name -> skip one char --> gives us node number = 10 26 # Then we have to set these variables to determine automatically the 27 # number of nodes and racks 28 # 29 NODE_EXPR = re.compile(r""" 30 (?P<racknr>r[0-9]+) 31 (?P<nodenr>n[0-9]+) 32 """, re.VERBOSE) 33 34 SKIP_CHARS_RACK = 1 35 SKIP_CHARS_NODE = 1 36 37 NODE_SPLIT_STR = '-' 38 NODE_STR = 'r%dn%d' 39 40 41 21 42 22 43 … … 54 75 55 76 77 def determine_limits(nodes): 78 """ 79 Determiine the the limits of the cluster: 80 - How many racks are in the cluster 81 - What is the max amount of nodes per rack 82 """ 83 rack_max = node_max = 0 84 for id in nodes: 85 result = NODE_EXPR.search(id) 86 if result: 87 88 number = int(result.group('racknr')[SKIP_CHARS_RACK:]) 89 if number > rack_max: 90 rack_max = number 91 92 number = int(result.group('nodenr')[SKIP_CHARS_NODE:]) 93 if number > node_max: 94 node_max = number 95 96 return (rack_max+1, node_max+1) 97 98 56 99 def pbsmon(server = None): 57 100 global NODES_PER_RACK, N_RACKS, PBS_STATES, OPT_WIDE … … 79 122 node_dict = {} 80 123 124 number_of_racks, nodes_per_rack = determine_limits(nodes) 125 81 126 for id in nodes: 82 127 … … 93 138 state_char = PBS_STATES[state] 94 139 95 #print 'TD: ', nodes[id].name, nodes[id].is_free() ,nodes[id].has_job()140 #print 'TD: ', nodes[id].name, nodes[id].is_free() ,nodes[id].has_job() 96 141 97 142 if nodes[id].is_free() and nodes[id].has_job(): # single job 98 # print 'TD: %s' % nodename, node 143 #print 'TD: %s' % id, nodes[id] 99 144 state_char = PBS_STATES[pbs_ND_single] 100 145 101 # print 'TD: %s %s' % (nodename, state_char) 102 dummy = string.split(nodes[id].name, '-') 146 #print 'TD: %s %s' % (nodename, state_char) 147 148 # Remove the prefix of the node, eg gb-r15n1 --> r15n1 149 # 150 dummy = string.split(nodes[id].name, NODE_SPLIT_STR) 103 151 node_dict[dummy[1]] = state_char 152 153 104 154 105 155 # print header lines 106 156 print ' ', 107 for rack in xrange(START_RACK, N_RACKS+1):157 for rack in xrange(START_RACK, number_of_racks): 108 158 if not (rack % 10): 109 159 print '%d' % (rack / 10), … … 116 166 117 167 print ' ', 118 for rack in xrange(START_RACK, N_RACKS+1):168 for rack in xrange(START_RACK, number_of_racks): 119 169 print '%d' % (rack % 10), 120 170 if OPT_WIDE: … … 123 173 124 174 # print nodes with r%dn%d naming scheme 125 for node_nr in xrange(1, NODES_PER_RACK+1):175 for node_nr in xrange(1, nodes_per_rack): 126 176 print '%2d' % node_nr, 127 177 128 for rack in xrange(START_RACK, N_RACKS+1):129 node_name = 'r%dn%d' %(rack, node_nr)178 for rack in xrange(START_RACK, number_of_racks): 179 node_name = NODE_STR %(rack, node_nr) 130 180 131 181 if node_dict.has_key(node_name):
Note: See TracChangeset
for help on using the changeset viewer.