source: trunk/pbs_swig/distro/examples/pbsmon.py @ 54

Last change on this file since 54 was 54, checked in by bas, 20 years ago

pbsomon.py:

Fixed an error for a one node cluster

  • Property svn:keywords set to Id
File size: 2.8 KB
Line 
1#!/usr/bin/env python
2#
3# Author: Bas van der Vlies <basv@sara.nl>
4# Date  : 17 Aug 2001
5# Desc. : This script displays the status of the PBS batch.
6#         It display the status of a node. The ideas are
7#         based on the awk-script of Willem Vermin
8#
9# CVS info:
10# $Id: pbsmon.py 54 2003-11-25 14:48:56Z bas $
11#
12import sys
13import string
14import re
15
16import pbs
17
18translate_state = {
19    pbs.ND_free             : '_',
20    pbs.ND_down             : 'X',
21    pbs.ND_offline          : '.',
22    pbs.ND_reserve          : 'R',
23    pbs.ND_job_exclusive    : 'J',
24    pbs.ND_job_sharing      : 'S',
25    pbs.ND_busy             : '*',
26    pbs.ND_state_unknown    : '?',   
27    pbs.ND_timeshared       : 'T',
28    pbs.ND_cluster          : 'C'
29}
30
31
32
33def display_cluster_status(nl, sl):
34
35  # Thanks to Daniel Olson, we have now code that can handle
36  # 2 and 3 digit hostname numbers
37  #
38  if len(nl) == 1: 
39    width = len( nl[0] )
40  else:
41    width = len( nl[1] )
42
43  # Determine what format we have to use
44  #
45  if width == 3:
46    step = end = 19
47    format = '%3s'
48  else:
49    step  = end = 25
50    format = '%2s'
51
52  start = 0 
53
54  items = len(nl)
55
56  # Sanity check
57  if end > items:
58    end = items
59
60  while start < items:
61
62    print ' ',
63    for j in range(start,end):
64      print format %(nl[j]) ,
65
66    print '\n ',
67    for j in range(start,end):
68      print format %(sl[j]) ,
69   
70    print '\n'
71
72    start = end
73    end = end + step
74
75    if end > items:
76      end = items
77   
78  # Now some statistics
79  #
80  n = 0
81  for key in translate_state.keys():
82    value = translate_state[key]
83    print "%2s %-15s : %d\t |" %( value, key, sl.count(value) ),
84    if n%2:
85      print ''
86    n = n + 1
87
88def main():
89  state_list = []
90  node_list  = []
91  node_nr    = 0
92
93  if len(sys.argv) > 1:
94    pbs_server = sys.argv[1]
95  else:
96    pbs_server = pbs.pbs_default()
97    if not pbs_server:
98      print "No default pbs server, usage: pbsmon [server] "
99      sys.exit(1)
100
101  con = pbs.pbs_connect(pbs_server)
102  if con < 0:
103   print  pbs.pbs_geterrmsg(con)
104   sys.exit(1)
105
106  # We are only interested in the state of a node
107  #
108  attrl = pbs.new_attrl(1);
109  attrl[0].name='state'
110
111
112  nodes = pbs.pbs_statnode(con, "", attrl, "NULL")
113
114  # Some is het None dan weer NULL, beats me
115  #
116  for node in nodes:
117
118    # display_node_status(batch_info)
119    node_attr = node.attribs
120
121    # A node can have serveral states, huh. We are only
122    # interested in first entry.
123    #
124    temp = string.splitfields(node_attr[0].value, ',')
125    state_list.append(translate_state[ temp[0] ])
126
127    re_host = re.compile(r"""
128
129      (?P<name>\d+)
130
131      """, re.VERBOSE)
132
133    result = re_host.search(node.name)
134    if result:
135      node_list.append( result.group('name') )
136    else:
137      node_nr = node_nr + 1
138      node_list.append( node_nr )
139
140  display_cluster_status(node_list, state_list)
141
142main()
Note: See TracBrowser for help on using the repository browser.