1
2
3
4
5
6
7
8
9
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
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
30 self.printtext = printer
31
33 if self.printtext and isinstance(text,str):
34 self.printtext(text)
35 else:
36 print text
37
39 return url.startswith('http://') or url.startswith('https://')
40
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
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):
134
135 - def q_resume(self,username,password,dataset,job=-1):
142
143 - def q_reset(self,username,password,dataset,job=-1):
150
151 - def q_setstatus(self,username,password,dataset,job,status):
158
160 if not self.connect(): return None
161 try:
162 for item in loads(self.server.getdatasetstatus(dataset)):
163
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
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):
203
204 - def q_finish(self,username,password,dataset):
210
217
224
231
238
245
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):
264
265 - def loaddict(self,odict,username,password,dataset_id):
273
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
285 if not self.connect(): return None
286 return self.server.printsummary(days)
287
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
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
304 if not self.connect(): return None
305 return loads(self.server.check_connection())
306
308 if not self.connect(): return None
309 return loads(self.server.get_simcat_categories())
310
311
313 if not self.connect(): return None
314 return loads(self.server.SwitchMetaProject(dumps(iconfig),id,name,loads(version)))
315
317 if not self.connect(): return None
318 return loads(self.server.GetMetaProjects())
319
323
327
331
333 if not self.connect(): return None
334 return loads(self.server.GetProjectDependencies(project_id,metaproject_id))
335
337 if not self.connect(): return None
338 return loads(self.server.GetServices(project_id))
339
341 if not self.connect(): return None
342 return loads(self.server.GetServicesP(name,dumps(version)))
343
345 if not self.connect(): return None
346 return loads(self.server.GetModules(project_id))
347
349 if not self.connect(): return None
350 return loads(self.server.GetModulesP(name,dumps(version)))
351
353 if not self.connect(): return None
354 return loads(self.server.GetIceProdModules())
355
357 if not self.connect(): return None
358 return loads(self.server.GetParameters(module_id))
359
361 if not self.connect(): return None
362 return loads(self.server.fetch_metaproject_list())
363
365 if not self.connect(): return None
366 return loads(self.server.fetch_project_list(metaproject_id))
367
371
375
377 if not self.connect(): return None
378 return self.server.fetch_service_id(dumps(service),pid)
379
381 if not self.connect(): return None
382 return self.server.fetch_module_id(dumps(module),mid)
383
385 if not self.connect(): return None
386 return loads(self.server.fetch_project_dependencies(project_id,metaproject_id))
387
391
393 if not self.connect(): return None
394 return loads(self.server.fetch_modules_for_project(name,dumps(version)))
395
397 if not self.connect(): return None
398 return loads(self.server.fetch_services_for_project(name,dumps(version)))
399
401 if not self.connect(): return None
402 return loads(self.server.fetch_module_parameters(module_id))
403
405 if not self.connect(): return None
406 return loads(self.server.fetch_service_parameters(module_id))
407