Changeset 202 for trunk


Ignore:
Timestamp:
10/16/09 17:49:16 (15 years ago)
Author:
bas
Message:

examples/new_rack_pbsmon.py:

  • automatic determiine number of racks and nodes per rack
  • skip printing of empty racks
  • removed wide option
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/examples/new_rack_pbsmon.py

    r201 r202  
    3535SKIP_CHARS_NODE = 1
    3636
    37 NODE_SPLIT_STR = '-'
    38 NODE_STR = 'r%dn%d'
    39 
    40 
    41 
    42 
    43 
    44 NODES_PER_RACK = 32
    4537START_RACK = 1
    46 N_RACKS = 43
    4738
    4839pbs_ND_single                   = 'job (single)'
     
    7162OPT_NODESTATUS = 1
    7263OPT_SUMMARY = 0
    73 OPT_WIDE = 0
    7464OPT_SERVERNAME = None
    75 
    76 
    77 def determine_limits(nodes):
     65OPT_SKIP_EMPTY_RACKS = 1
     66
     67
     68def parse_hostname(id):
    7869        """
    7970        Determiine the the limits of the cluster:
     
    8172          - What is the max amount of nodes per rack
    8273        """
    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)
     74        result = NODE_EXPR.search(id)
     75        if result:
     76                r = int(result.group('racknr')[SKIP_CHARS_RACK:])
     77                n = int(result.group('nodenr')[SKIP_CHARS_NODE:])
     78
     79        return (r,n)
    9780               
    9881
    9982def pbsmon(server = None):
    100         global NODES_PER_RACK, N_RACKS, PBS_STATES, OPT_WIDE
     83        global PBS_STATES
    10184
    10285        try:
     
    122105        node_dict = {}
    123106
    124         number_of_racks, nodes_per_rack = determine_limits(nodes)
     107        number_of_racks = nodes_per_rack = 0
     108        #determine_limits(nodes)
    125109
    126110        for id in nodes:
     
    144128                        state_char = PBS_STATES[pbs_ND_single]
    145129
    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)
    151                 node_dict[dummy[1]] = state_char
    152 
    153 
     130                #print 'TD: %s %s' % (id, state_char)
     131
     132                racknr, nodenr = parse_hostname(id)
     133
     134                if racknr > number_of_racks:
     135                        number_of_racks = racknr
     136
     137                if nodenr > nodes_per_rack:
     138                        nodes_per_rack = nodenr
     139
     140                try:
     141                        node_dict[racknr][nodenr] = state_char
     142                except KeyError:
     143                        node_dict[racknr] = dict()
     144                        node_dict[racknr][nodenr] = state_char
     145                       
    154146
    155147# print header lines
     148        save_column = None
    156149        print '  ',
    157         for rack in xrange(START_RACK, number_of_racks):
     150        for rack in xrange(START_RACK, number_of_racks + 1):
     151
    158152                if not (rack % 10):
    159                         print '%d' % (rack / 10),
    160                 else:
    161                         print ' ',
    162 
    163                 if OPT_WIDE:
    164                         print '',
     153                        char = '%d' %(rack/10)
     154                        save_column = char
     155                else:
     156                        char = ' '
     157
     158                if OPT_SKIP_EMPTY_RACKS:
     159                        if node_dict.has_key(rack):
     160                                if save_column:
     161                                        char = save_column
     162                                        save_column = None
     163
     164                                print char,
     165                else:
     166                        print char,
    165167        print
    166168
    167169        print '  ',
    168         for rack in xrange(START_RACK, number_of_racks):
    169                 print '%d' % (rack % 10),
    170                 if OPT_WIDE:
    171                         print '',
     170        for rack in xrange(START_RACK, number_of_racks + 1):
     171               
     172                char = rack % 10
     173                if OPT_SKIP_EMPTY_RACKS:
     174                        if node_dict.has_key(rack):
     175                                print char,
     176                else:
     177                        print char,
    172178        print
    173179
    174 # print nodes with r%dn%d naming scheme
    175         for node_nr in xrange(1, nodes_per_rack):
     180
     181        for node_nr in xrange(1, nodes_per_rack + 1):
    176182                print '%2d' % node_nr,
    177183
    178                 for rack in xrange(START_RACK, number_of_racks):
    179                         node_name = NODE_STR %(rack, node_nr)
    180 
    181                         if node_dict.has_key(node_name):
    182                                 print '%s' % node_dict[node_name],
    183 
    184                                 del node_dict[node_name]
    185                         else:
     184                for rack in xrange(START_RACK, number_of_racks + 1):
     185
     186                        if OPT_SKIP_EMPTY_RACKS:
     187                                if not node_dict.has_key(rack):
     188                                        continue
     189                        try:
     190                                print node_dict[rack][node_nr],
     191                        except KeyError:
    186192                                print ' ',
    187                
    188                         if OPT_WIDE:
    189                                 print '',
    190 
    191193                print
    192194
    193         print
    194 
    195 # any other nodes?
    196         arr = node_dict.keys()
    197         if arr:
    198                 arr.sort()
    199 
    200                 for node in arr:
    201                         print '%s %s' % (node, node_dict[node])
    202 
    203                 print
    204 
    205 
    206195#
    207196#       summary() counts the number of nodes in a particular state
    208197#
    209198def pbsmon_summary(server = None):
    210         global NODES_PER_RACK, N_RACKS, PBS_STATES
     199        global PBS_STATES
    211200
    212201        try:
     
    315304
    316305def getopts():
    317         global PROGNAME, OPT_NODESTATUS, OPT_SUMMARY, OPT_WIDE, OPT_SERVERNAME
     306        global PROGNAME, OPT_NODESTATUS, OPT_SUMMARY, OPT_SKIP_EMPTY_RACKS, OPT_SERVERNAME
    318307
    319308        if len(sys.argv) <= 1:
     
    355344
    356345                if opt in ('-w', '--wide'):
    357                         OPT_WIDE = 1
     346                        OPT_SKIP_EMPTY_RACKS = 0
    358347                        continue
    359348
Note: See TracChangeset for help on using the changeset viewer.