Changeset 201 for trunk


Ignore:
Timestamp:
10/16/09 11:47:08 (15 years ago)
Author:
bas
Message:

examples/new_rack_pbsmon.py:

  • use new data structure + automatically determine the size of the cluster:
    • number of racks
    • number of node per rack
Location:
trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/debian/changelog

    r196 r201  
    55        structure.
    66    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
    712
    813 -- Bas van der Vlies <bas@rc.sara.nl>  Mon, 18 May 2009 17:03:16 +0200
  • trunk/examples/new_rack_pbsmon.py

    r194 r201  
    1515import string
    1616import getopt
     17import re
    1718
    1819import pbs
    1920from PBSQuery import PBSQuery
    2021from 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#
     29NODE_EXPR = re.compile(r"""
     30        (?P<racknr>r[0-9]+)
     31        (?P<nodenr>n[0-9]+)
     32""", re.VERBOSE)
     33
     34SKIP_CHARS_RACK = 1
     35SKIP_CHARS_NODE = 1
     36
     37NODE_SPLIT_STR = '-'
     38NODE_STR = 'r%dn%d'
     39
     40
     41
    2142
    2243
     
    5475
    5576
     77def 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
    5699def pbsmon(server = None):
    57100        global NODES_PER_RACK, N_RACKS, PBS_STATES, OPT_WIDE
     
    79122        node_dict = {}
    80123
     124        number_of_racks, nodes_per_rack = determine_limits(nodes)
     125
    81126        for id in nodes:
    82127
     
    93138                state_char = PBS_STATES[state]
    94139
    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()
    96141
    97142                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]
    99144                        state_char = PBS_STATES[pbs_ND_single]
    100145
    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)
    103151                node_dict[dummy[1]] = state_char
     152
     153
    104154
    105155# print header lines
    106156        print '  ',
    107         for rack in xrange(START_RACK, N_RACKS+1):
     157        for rack in xrange(START_RACK, number_of_racks):
    108158                if not (rack % 10):
    109159                        print '%d' % (rack / 10),
     
    116166
    117167        print '  ',
    118         for rack in xrange(START_RACK, N_RACKS+1):
     168        for rack in xrange(START_RACK, number_of_racks):
    119169                print '%d' % (rack % 10),
    120170                if OPT_WIDE:
     
    123173
    124174# 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):
    126176                print '%2d' % node_nr,
    127177
    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)
    130180
    131181                        if node_dict.has_key(node_name):
Note: See TracChangeset for help on using the changeset viewer.