Package iceprod :: Package client :: Module soaptrayclient
[hide private]
[frames] | no frames]

Source Code for Module iceprod.client.soaptrayclient

  1  #!/bin/env python 
  2  #   copyright  (c) 2005 
  3  #   the icecube collaboration 
  4  #   $Id: $ 
  5  # 
  6  #   @version $Revision: $ 
  7  #   @date $Date: $ 
  8  #   @author Juan Carlos Diaz Velez <juancarlos@icecube.wisc.edu> 
  9  #    @brief icetray connections frame for GtkIcetraConfig application 
 10  ######################################################################### 
 11  from iceprod.core.xmlparser import IceTrayXMLParser 
 12  from iceprod.core.xmlwriter import IceTrayXMLWriter 
 13  from iceprod.core.dataclasses import * 
 14  from cPickle import loads,dumps 
 15  import sys,os,traceback 
 16  import getpass 
 17  import getopt 
 18  import xmlrpclib 
 19   
20 -class i3SOAPClient:
21
22 - def __init__(self,url=None,geturl=lambda:'https://condor.icecube.wisc.edu:9080'):
23 self.url = url 24 self.geturl = geturl 25 self.printtext = lambda x: sys.stdout.write(x+"\n") 26 self.connected = False 27 self.cached = True
28
29 - def SetPrinter(self,printer):
30 self.printtext = printer
31
32 - def _print(self,text):
33 if self.printtext and isinstance(text,str): 34 self.printtext(text) 35 else: 36 print text
37
38 - def checkURL(self,url):
39 return url.startswith('http://') or url.startswith('https://')
40
41 - def connect(self):
42 if not self.connected: 43 if not self.url: 44 self.url = self.geturl() 45 if self.checkURL(self.url): 46 self.server = xmlrpclib.ServerProxy(self.url) 47 self.connected = True 48 else: 49 self.printtext("Please specify a valid url: %s" % self.url) 50 return self.connected
51
52 - def submit(self,i3steering,username,passwd,prodflag=False,submitter="%s@%s" % (getpass.getuser(),os.uname()[1])):
53 54 if not self.connect(): return None 55 56 try: 57 if prodflag: 58 status,i3q_pkl,ex = self.server.submit( 59 dumps(i3steering), 60 username,passwd,submitter,prodflag) 61 self._print(status) 62 if (i3q_pkl) and loads(i3q_pkl): 63 return loads(i3q_pkl) 64 elif ex: 65 ex = loads(ex) 66 self._print("Remote Exception: %s" % str(ex)) 67 return None 68 69 # non-production 70 pmaxjobs = i3steering.GetParameter('MAXJOBS') 71 maxjobs = int(pmaxjobs.GetValue()) 72 stepsize = 20 73 74 cookie = I3Cookie() 75 for i in range(0,maxjobs,stepsize): 76 status,i3q_pkl,ex = self.server.submit( 77 dumps(i3steering), 78 username, 79 passwd, 80 submitter, 81 prodflag, 82 i, min(i+stepsize,maxjobs), 83 cookie.dataset_id) 84 self._print(status) 85 86 if (i3q_pkl) and loads(i3q_pkl): 87 i3q = loads(i3q_pkl) 88 cookie.dataset_id = i3q.dataset_id 89 for job_id in i3q.GetJobIds(): 90 cookie.AddJobId(job_id) 91 elif ex: 92 ex = loads(ex) 93 self._print("Remote Exception: %s" % str(ex)) 94 return None 95 return cookie 96 97 except Exception, e: 98 self._print("Caught exception: %s " % str(e)) 99 traceback.print_exc(file=sys.stdout) 100 return None
101
102 - def enqueue(self,i3steering,username,passwd,submitter=getpass.getuser()):
103 104 if not self.connect(): return None 105 return self.server.enqueue( 106 dumps(i3steering), username,passwd,submitter)
107 108
109 - def check_q(self,i3q,username,password):
110 111 if not self.connect(): return None 112 try: 113 self._print(self.server.checkjobs(dumps(i3q),username,password)) 114 115 except Exception, e: 116 self._print("Caught exception: %s " % str(e))
117
118 - def q_remove(self,i3q,username,password,job=-1):
119 120 if not self.connect(): return None 121 try: 122 self._print(self.server.queue_remove(dumps(i3q),username,password)) 123 124 except Exception, e: 125 self._print("Caught exception: %s " % str(e))
126
127 - def q_suspend(self,username,password,dataset,job=-1):
128 if not self.connect(): return None 129 try: 130 self._print(self.server.queue_suspend(username,password,dataset,job)) 131 132 except Exception, e: 133 self._print("Caught exception: %s " % str(e))
134
135 - def q_resume(self,username,password,dataset,job=-1):
136 if not self.connect(): return None 137 try: 138 self._print(self.server.queue_resume(username,password,dataset,job)) 139 140 except Exception, e: 141 self._print("Caught exception: %s " % str(e))
142
143 - def q_reset(self,username,password,dataset,job=-1):
144 if not self.connect(): return None 145 try: 146 self._print(self.server.queue_reset(username,password,dataset,job)) 147 148 except Exception, e: 149 self._print("Caught exception: %s " % str(e))
150
151 - def q_setstatus(self,username,password,dataset,job,status):
152 if not self.connect(): return None 153 try: 154 self._print(self.server.queue_setstatus(username,password,dataset,job,status)) 155 156 except Exception, e: 157 self._print("Caught exception: %s " % str(e))
158
159 - def q_dataset_getstatus(self,dataset):
160 if not self.connect(): return None 161 try: 162 for item in loads(self.server.getdatasetstatus(dataset)): 163 #for key,value in item.items(): 164 self._print( "Dataset %s status: %s" % (item['dataset_id'],item['status'])) 165 166 except Exception, e: 167 self._print("Caught exception: %s " % str(e))
168
169 - def q_dataset_setstatus(self,username,password,dataset,status):
170 if not self.connect(): return None 171 try: 172 self._print(self.server.queue_dataset_setstatus(username,password,dataset,status)) 173 174 except Exception, e: 175 self._print("Caught exception: %s " % str(e))
176
177 - def q_retire(self,username,password,dataset):
178 """ 179 set status of dataset to 'OBSOLETE' and change the subcategory 180 in DIF_Plus 181 """ 182 if not self.connect(): return None 183 try: 184 self._print(self.server.queue_retire(username,password,dataset)) 185 186 except Exception, e: 187 self._print("Caught exception: %s " % str(e))
188 189
190 - def q_clean(self,username,password,dataset):
191 if not self.connect(): return None 192 try: 193 self._print(self.server.queue_clean(username,password,dataset)) 194 except Exception, e: 195 self._print("Caught exception: %s " % str(e))
196
197 - def q_delete(self,username,password,dataset):
198 if not self.connect(): return None 199 try: 200 self._print(self.server.queue_delete(username,password,dataset)) 201 except Exception, e: 202 self._print("Caught exception: %s " % str(e))
203
204 - def q_finish(self,username,password,dataset):
205 if not self.connect(): return None 206 try: 207 self._print(self.server.queue_dataset_finish(username,password,dataset)) 208 except Exception, e: 209 self._print("Caught exception: %s " % str(e))
210
211 - def q_daemon_suspend(self,username,password,grid,daemon):
212 if not self.connect(): return None 213 try: 214 self._print(self.server.daemon_suspend(username,password,grid,daemon)) 215 except Exception, e: 216 self._print("Caught exception: %s " % str(e))
217
218 - def q_daemon_resume(self,username,password,grid,daemon):
219 if not self.connect(): return None 220 try: 221 self._print(self.server.daemon_resume(username,password,grid,daemon)) 222 except Exception, e: 223 self._print("Caught exception: %s " % str(e))
224
225 - def q_grid_suspend_dataset(self,username,password,grid,dataset):
226 if not self.connect(): return None 227 try: 228 self._print(self.server.grid_suspend_dataset(username,password,grid,dataset,1)) 229 except Exception, e: 230 self._print("Caught exception: %s " % str(e))
231
232 - def q_grid_resume_dataset(self,username,password,grid,dataset):
233 if not self.connect(): return None 234 try: 235 self._print(self.server.grid_suspend_dataset(username,password,grid,dataset,0)) 236 except Exception, e: 237 self._print("Caught exception: %s " % str(e))
238
239 - def q_grid_add_dataset(self,username,password,grid,dataset):
240 if not self.connect(): return None 241 try: 242 self._print(self.server.grid_add(username,password,grid,dataset)) 243 except Exception, e: 244 self._print("Caught exception: %s " % str(e))
245
246 - def q_status(self,dataset,job=-1):
247 if not self.connect(): return None 248 num = 0 249 for item in loads(self.server.getstatus(dataset,job)): 250 for key,value in item.items(): 251 if value and value != "0" and value != 0: 252 self._print( "%s: %s" % (key,value)) 253 num += 1 254 if num == 0: 255 self._print("No jobs for dataset %d" % dataset)
256
257 - def q_validate(self,username,password,dataset,valid=True):
258 if not self.connect(): return None 259 try: 260 self._print(self.server.queue_validate(username,password,dataset,valid)) 261 262 except Exception, e: 263 self._print("Caught exception: %s " % str(e))
264
265 - def loaddict(self,odict,username,password,dataset_id):
266 if not self.connect(): return None 267 try: 268 self._print(self.server.loaddict( 269 dumps(odict), 270 username,password,dataset_id)) 271 except Exception, e: 272 self._print("Caught exception: %s " % str(e))
273
274 - def authenticate(self,username,password):
275 276 if not self.connect(): return None 277 try: 278 return self.server.authenticate(username,password) 279 280 except Exception, e: 281 self._print("Caught exception: %s " % str(e)) 282 return False
283
284 - def printsummary(self,days):
285 if not self.connect(): return None 286 return self.server.printsummary(days)
287
288 - def show_dataset_table(self,search_string=""):
289 if not self.connect(): return None 290 try: 291 return loads(self.server.showrunlist(search_string)) 292 except Exception,e: 293 self._print("Caught exception: %s " % str(e)) 294 return [] 295
296 - def download_config(self,dataset,defaults=False,descriptions=False):
297 if not self.connect(): return None 298 try: 299 return loads(self.server.download_config(dataset,defaults,descriptions)) 300 except Exception,e: 301 self._print("Caught exception: %s " % str(e)) 302
303 - def check_server(self):
304 if not self.connect(): return None 305 return loads(self.server.check_connection()) 306
307 - def GetSimCategories(self):
308 if not self.connect(): return None 309 return loads(self.server.get_simcat_categories()) 310 311 # ParamDB wrappers
312 - def SwitchMetaProject(self,iconfig,id,name,version):
313 if not self.connect(): return None 314 return loads(self.server.SwitchMetaProject(dumps(iconfig),id,name,loads(version))) 315
316 - def GetMetaProjects(self):
317 if not self.connect(): return None 318 return loads(self.server.GetMetaProjects()) 319
320 - def GetProjectsSM(self,module,metaproj):
321 if not self.connect(): return None 322 return loads(self.server.GetProjectsSM(dumps(module),dumps(metaproj)))
323
324 - def GetProjectsMM(self,module,metaproj):
325 if not self.connect(): return None 326 return loads(self.server.GetProjectsMM(dumps(module),dumps(metaproj)))
327
328 - def GetProjects(self,metaproject_id):
329 if not self.connect(): return None 330 return loads(self.server.GetProjects(metaproject_id))
331
332 - def GetProjectDependencies(self,project_id,metaproject_id):
333 if not self.connect(): return None 334 return loads(self.server.GetProjectDependencies(project_id,metaproject_id)) 335
336 - def GetServices(self,project_id):
337 if not self.connect(): return None 338 return loads(self.server.GetServices(project_id)) 339
340 - def GetServicesP(self,name,version):
341 if not self.connect(): return None 342 return loads(self.server.GetServicesP(name,dumps(version))) 343
344 - def GetModules(self,project_id):
345 if not self.connect(): return None 346 return loads(self.server.GetModules(project_id)) 347
348 - def GetModulesP(self,name,version):
349 if not self.connect(): return None 350 return loads(self.server.GetModulesP(name,dumps(version))) 351
352 - def GetIceProdModules(self):
353 if not self.connect(): return None 354 return loads(self.server.GetIceProdModules()) 355
356 - def GetParameters(self,module_id):
357 if not self.connect(): return None 358 return loads(self.server.GetParameters(module_id)) 359
360 - def fetch_metaproject_list(self):
361 if not self.connect(): return None 362 return loads(self.server.fetch_metaproject_list()) 363
364 - def fetch_project_list(self,metaproject_id):
365 if not self.connect(): return None 366 return loads(self.server.fetch_project_list(metaproject_id)) 367
368 - def fetch_project(self,id):
369 if not self.connect(): return None 370 return loads(self.server.fetch_project(id))
371
372 - def fetch_project_id(self,pname,pversion):
373 if not self.connect(): return None 374 return loads(self.server.fetch_project_id(name,dumps(pversion)))
375
376 - def fetch_service_id(self,service,pid):
377 if not self.connect(): return None 378 return self.server.fetch_service_id(dumps(service),pid) 379
380 - def fetch_module_id(self,module,mid):
381 if not self.connect(): return None 382 return self.server.fetch_module_id(dumps(module),mid) 383
384 - def fetch_project_dependencies(self,project_id,metaproject_id):
385 if not self.connect(): return None 386 return loads(self.server.fetch_project_dependencies(project_id,metaproject_id)) 387
388 - def fetch_modules_from_project_id(self,project_id):
389 if not self.connect(): return None 390 return loads(self.server.fetch_modules_from_project_id(project_id))
391
392 - def fetch_modules_for_project(self,name,version):
393 if not self.connect(): return None 394 return loads(self.server.fetch_modules_for_project(name,dumps(version))) 395
396 - def fetch_services_for_project(self,name,version):
397 if not self.connect(): return None 398 return loads(self.server.fetch_services_for_project(name,dumps(version))) 399
400 - def fetch_module_parameters(self,module_id):
401 if not self.connect(): return None 402 return loads(self.server.fetch_module_parameters(module_id)) 403
404 - def fetch_service_parameters(self,module_id):
405 if not self.connect(): return None 406 return loads(self.server.fetch_service_parameters(module_id)) 407