Changeset 139
- Timestamp:
- 10/18/06 11:19:04 (18 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/PBSQuery.py
r137 r139 60 60 """ 61 61 import pbs 62 import UserDict 63 import sys 62 64 63 65 class PBSError(Exception): 64 def __init__(self, msg=''): 65 self.msg = msg 66 Exception.__init__(self, msg) 67 def __repr__(self): 68 return self.msg 69 __str__ = __repr__ 66 def __init__(self, msg=''): 67 self.msg = msg 68 Exception.__init__(self, msg) 69 70 def __repr__(self): 71 return self.msg 72 73 __str__ = __repr__ 70 74 71 75 72 76 class PBSQuery: 73 def __init__(self, server=None): 74 if not server: 75 self.server = pbs.pbs_default() 76 else: 77 self.server = server 78 79 80 def _connect(self): 81 """Connect to the PBS/Torque server""" 82 self.con = pbs.pbs_connect(self.server) 83 if self.con < 0: 84 str = "Could not make an connection with %s\n" %(self.server) 85 raise PBSError(str) 86 87 def _disconnect(self): 88 """Close the PBS/Torque connection""" 89 pbs.pbs_disconnect(self.con) 90 self.attribs = 'NULL' 91 92 def _list_2_attrib(self, list): 93 """Convert an python list to an attrib list suitable for pbs""" 94 self.attribs = pbs.new_attrl( len(list) ) 95 i = 0 96 for attrib in list: 97 self.attribs[i].name = attrib 98 i = i + 1 99 100 def _pbsstr_2_list(self, str, delimiter): 101 """Convert an string to an python list and use delimiter as spit char""" 102 l = sting.splitfields(str, delimiter) 103 if len(l) > 1: 104 return l 105 106 def _list_2_dict(self, l, class_func): 107 """Convert an pbsstat function list to an class dictionary""" 108 self.d = {} 109 for item in l: 110 new = class_func() 111 for a in item.attribs: 112 new.name = item.name 113 if a.resource: 114 new.attribs[a.name + '.' + a.resource] = a.value 115 else: 116 new.attribs[a.name] = a.value 117 self.d[item.name] = new 118 self._free(l) 77 def __init__(self, server=None): 78 if not server: 79 self.server = pbs.pbs_default() 80 else: 81 self.server = server 82 83 84 def _connect(self): 85 """Connect to the PBS/Torque server""" 86 self.con = pbs.pbs_connect(self.server) 87 if self.con < 0: 88 str = "Could not make an connection with %s\n" %(self.server) 89 raise PBSError(str) 90 91 def _disconnect(self): 92 """Close the PBS/Torque connection""" 93 pbs.pbs_disconnect(self.con) 94 self.attribs = 'NULL' 95 96 def _list_2_attrib(self, list): 97 """Convert an python list to an attrib list suitable for pbs""" 98 self.attribs = pbs.new_attrl( len(list) ) 99 i = 0 100 for attrib in list: 101 self.attribs[i].name = attrib 102 i = i + 1 103 104 def _pbsstr_2_list(self, str, delimiter): 105 """Convert an string to an python list and use delimiter as spit char""" 106 l = sting.splitfields(str, delimiter) 107 if len(l) > 1: 108 return l 109 110 def _list_2_dict(self, l, class_func): 111 """Convert an pbsstat function list to an class dictionary""" 112 self.d = {} 113 for item in l: 114 new = class_func() 115 self.d[item.name] = new 116 117 for a in item.attribs: 118 new.name = item.name 119 if a.resource: 120 #new.attribs[a.name + '.' + a.resource] = a.value 121 new[a.name + '.' + a.resource] = a.value 122 else: 123 #new.attribs[a.name] = a.value 124 new[a.name] = a.value 125 126 #print new 127 print 'Basje' 128 print self.d['q_express'].has_key('resources_max.walltime') 129 #print 'items ', new.items() 130 q_attr = self.d['q_express'] 131 print 'q_attr: ', type(q_attr) 132 print 'q_attr class: ', q_attr.__class__ 133 print 'has_key', q_attr.has_key('resources_max.walltime') 134 self._free(l) 119 135 120 def _free(self, memory): 121 pbs.pbs_statfree(memory) 122 123 def _statserver(self, attrib_list=None): 124 """Get the server config from the pbs server""" 125 if attrib_list: 126 self._list_2_attrib(attrib_list) 127 else: 128 self.attribs = 'NULL' 129 130 self._connect() 131 serverinfo = pbs.pbs_statserver(self.con, self.attribs, 'NULL') 132 self._disconnect() 133 134 self.serverinfo = {} 135 self._list_2_dict(serverinfo, server) 136 137 def get_serverinfo(self, attrib_list=None): 138 self._statserver(attrib_list) 139 return self.d 140 141 def _statqueue(self, queue_name='', attrib_list=None): 142 """Get the queue config from the pbs server""" 143 if attrib_list: 144 self._list_2_attrib(attrib_list) 145 else: 146 self.attribs = 'NULL' 147 148 self._connect() 149 queues = pbs.pbs_statque(self.con, queue_name, self.attribs, 'NULL') 150 self._disconnect() 151 152 self.queues = {} 153 self._list_2_dict(queues, queue) 154 155 def getqueue(self, name, attrib_list=None): 156 self._statqueue(name, attrib_list) 157 return self.d 136 def _free(self, memory): 137 pbs.pbs_statfree(memory) 138 139 def _statserver(self, attrib_list=None): 140 """Get the server config from the pbs server""" 141 if attrib_list: 142 self._list_2_attrib(attrib_list) 143 else: 144 self.attribs = 'NULL' 145 146 self._connect() 147 serverinfo = pbs.pbs_statserver(self.con, self.attribs, 'NULL') 148 self._disconnect() 149 150 self.serverinfo = {} 151 self._list_2_dict(serverinfo, server) 152 153 def get_serverinfo(self, attrib_list=None): 154 self._statserver(attrib_list) 155 return self.d 156 157 def _statqueue(self, queue_name='', attrib_list=None): 158 """Get the queue config from the pbs server""" 159 if attrib_list: 160 self._list_2_attrib(attrib_list) 161 else: 162 self.attribs = 'NULL' 163 164 self._connect() 165 queues = pbs.pbs_statque(self.con, queue_name, self.attribs, 'NULL') 166 self._disconnect() 167 168 self._list_2_dict(queues, queue) 169 170 def getqueue(self, name, attrib_list=None): 171 self._statqueue(name, attrib_list) 172 print 'getqueue ', self.d['q_express'].has_key('resources_max.walltime') 173 q_attrs = self.d['q_express'] 174 print 'getqueue has_key', q_attrs.has_key('resources_max.walltime') 175 return self.d 158 176 159 160 161 return self.d162 163 164 165 166 167 168 self.attribs = 'NULL'169 170 171 172 self._disconnect() 173 174 175 self._list_2_dict(nodes, node)176 177 178 179 return self.d177 def getqueues(self, attrib_list=None): 178 self._statqueue('', attrib_list) 179 return self.d 180 181 def _statnode(self, node_name='', attrib_list=None): 182 """Get the node config from the pbs server""" 183 if attrib_list: 184 self._list_2_attrib(attrib_list) 185 else: 186 self.attribs = 'NULL' 187 188 self._connect() 189 nodes = pbs.pbs_statnode(self.con, node_name, self.attribs, 'NULL') 190 self._disconnect() 191 192 self.nodes = {} 193 self._list_2_dict(nodes, node) 194 195 def getnode(self, name, attrib_list=None): 196 self._statnode(name, attrib_list) 197 return self.d 180 198 181 182 183 return self.d184 185 186 187 188 189 190 self.attribs = 'NULL'191 192 193 194 self._disconnect() 195 196 197 self._list_2_dict(jobs, job)198 199 200 201 return self.d199 def getnodes(self, attrib_list=None): 200 self._statnode('', attrib_list) 201 return self.d 202 203 def _statjob(self, job_name='', attrib_list=None): 204 """Get the job config from the pbs server""" 205 if attrib_list: 206 self._list_2_attrib(attrib_list) 207 else: 208 self.attribs = 'NULL' 209 210 self._connect() 211 jobs = pbs.pbs_statjob(self.con, job_name, self.attribs, 'NULL') 212 self._disconnect() 213 214 self.jobs = {} 215 self._list_2_dict(jobs, job) 216 217 def getjob(self, name, attrib_list=None): 218 self._statjob(name, attrib_list) 219 return self.d 202 220 203 def getjobs(self, attrib_list=None): 204 self._statjob('', attrib_list) 205 return self.d 206 207 class _PBSobject: 208 TRUE = 1 209 FALSE = 0 210 211 def __init__(self): 212 self.attribs = {} 213 self.name = None 214 215 def __len__(self): 216 return(len(self.attribs.keys())) 217 218 def __str__(self): 219 data = self.name + '\n' 220 for name,value in self.attribs.items(): 221 data = data + '\t%s = %s\n' %(name, value) 222 return(data) 223 224 __repr__ = __str__ 225 226 def __getitem__(self,key): 227 if key == 'name': 228 return self.name 229 230 return(self.attribs[key]) 231 232 def get_value(self, key): 233 if self.attribs.has_key(key): 234 return self.attribs[key] 235 else: 236 return None 237 238 def has_key(self, key): 239 if self.attribs.has_key(key): 240 return self.TRUE 241 else: 242 return self.FAlSE 243 244 def keys(self): 245 return self.attribs.keys() 246 247 def values(self): 248 return self.attribs.values() 249 250 def items(self): 251 return self.attribs.items() 252 221 def getjobs(self, attrib_list=None): 222 self._statjob('', attrib_list) 223 return self.d 224 225 class _PBSobject(UserDict.UserDict): 226 TRUE = 1 227 FALSE = 0 228 229 def __init__(self): 230 UserDict.UserDict.__init__(self) 231 self.name = None 232 233 def get_value(self, key): 234 if self.has_key(key): 235 return self[key] 236 else: 237 return None 238 253 239 class job(_PBSobject): 254 """PBS job class""" 255 256 def is_running(self): 257 if self.get_value('job_state') == 'Q': 258 return self.FALSE 259 else: 260 return self.TRUE 240 """PBS job class""" 241 def is_running(self): 242 if self.get_value('job_state') == 'Q': 243 return self.FALSE 244 else: 245 return self.TRUE 261 246 262 247 class node(_PBSobject): 263 264 265 266 267 268 269 else:270 271 272 273 274 275 276 else:277 248 """PBS node class""" 249 250 def is_free(self): 251 """Check if node is free""" 252 if self.get_value('state') == 'free': 253 return self.TRUE 254 else: 255 return self.FALSE 256 257 def has_job(self): 258 """Does the node run a job""" 259 if self.get_value('jobs'): 260 return self.TRUE 261 else: 262 return self.FALSE 278 263 279 264 class queue(_PBSobject): 280 """PBS queue class""" 281 282 def is_enabled(self): 283 if self.get_value('enabled') == 'True': 284 return self.TRUE 285 else: 286 return self.FALSE 287 288 def is_execution(self): 289 if self.get_value('queue_type') == 'Execution': 290 return self.TRUE 291 else: 292 return self.FALSE 293 265 """PBS queue class""" 266 def __init__(self): 267 UserDict.UserDict.__init__(self) 268 self.name = None 269 270 def is_enabled(self): 271 if self.get_value('enabled') == 'True': 272 return self.TRUE 273 else: 274 return self.FALSE 275 276 def is_execution(self): 277 if self.get_value('queue_type') == 'Execution': 278 return self.TRUE 279 else: 280 return self.FALSE 294 281 295 282 class server(_PBSobject): 296 283 """PBS server class""" 297 284 298 285 def main(): 299 p = PBSQuery() 300 301 serverinfo = p.get_serverinfo() 302 for name, server in serverinfo.items(): 303 print server 286 p = PBSQuery() 287 serverinfo = p.get_serverinfo() 288 for name, server in serverinfo.items(): 289 print server 304 290 for key in server.keys(): 305 291 print key, ' = ', server[key] 306 292 307 308 309 if queue.is_execution():310 311 312 313 314 if job.is_running():315 316 317 318 319 320 321 293 queues = p.getqueues() 294 for queue in queues.values(): 295 if queue.is_execution(): 296 print queue 297 298 jobs = p.getjobs() 299 for name,job in jobs.items(): 300 if job.is_running(): 301 print job 302 303 l = ['state'] 304 nodes = p.getnodes(l) 305 for name,node in nodes.items(): 306 if node.is_free(): 307 print node 322 308 323 309 if __name__ == "__main__": 324 310 main()
Note: See TracChangeset
for help on using the changeset viewer.