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:
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):
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):
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_setstatus(self,username,password,dataset,status):
150
151 - def q_retire(self,username,password,dataset):
152 """
153 set status of dataset to 'OBSOLETE' and change the subcategory
154 in DIF_Plus
155 """
156 if not self.connect(): return None
157 try:
158 self._print(self.server.queue_retire(username,password,dataset))
159
160 except Exception, e:
161 self._print("Caught exception: %s " % str(e))
162
163
164 - def q_clean(self,username,password,dataset):
165 if not self.connect(): return None
166 try:
167 self._print(self.server.queue_clean(username,password,dataset))
168 except Exception, e:
169 self._print("Caught exception: %s " % str(e))
170
171 - def q_delete(self,username,password,dataset):
177
178 - def q_finish(self,username,password,dataset):
184
191
198
199
203
204 - def q_validate(self,username,password,dataset,valid=True):
211
212 - def loaddict(self,odict,username,password,dataset_id):
213 if not self.connect(): return None
214 try:
215 self._print(self.server.loaddict(
216 dumps(odict),
217 username,password,dataset_id))
218 except Exception, e:
219 self._print("Caught exception: %s " % str(e))
220
222
223 if not self.connect(): return None
224 try:
225 return self.server.authenticate(username,password)
226
227 except Exception, e:
228 self._print("Caught exception: %s " % str(e))
229 return False
230
232 if not self.connect(): return None
233 return self.server.printsummary(days)
234
236 if not self.connect(): return None
237 try:
238 return loads(self.server.showrunlist(search_string))
239 except Exception,e:
240 self._print("Caught exception: %s " % str(e))
241 return []
242
244 if not self.connect(): return None
245 try:
246 return loads(self.server.download_config(dataset,defaults,descriptions))
247 except Exception,e:
248 self._print("Caught exception: %s " % str(e))
249
251 if not self.connect(): return None
252 return loads(self.server.check_connection())
253
255 if not self.connect(): return None
256 return loads(self.server.get_simcat_categories())
257
258
260 if not self.connect(): return None
261 return loads(self.server.SwitchMetaProject(dumps(iconfig),id,name,loads(version)))
262
264 if not self.connect(): return None
265 return loads(self.server.GetMetaProjects())
266
270
274
278
280 if not self.connect(): return None
281 return loads(self.server.GetProjectDependencies(project_id,metaproject_id))
282
284 if not self.connect(): return None
285 return loads(self.server.GetServices(project_id))
286
288 if not self.connect(): return None
289 return loads(self.server.GetServicesP(name,dumps(version)))
290
292 if not self.connect(): return None
293 return loads(self.server.GetModules(project_id))
294
296 if not self.connect(): return None
297 return loads(self.server.GetModulesP(name,dumps(version)))
298
300 if not self.connect(): return None
301 return loads(self.server.GetIceProdModules())
302
304 if not self.connect(): return None
305 return loads(self.server.GetParameters(module_id))
306
308 if not self.connect(): return None
309 return loads(self.server.fetch_metaproject_list())
310
312 if not self.connect(): return None
313 return loads(self.server.fetch_project_list(metaproject_id))
314
318
322
324 if not self.connect(): return None
325 return self.server.fetch_service_id(dumps(service),pid)
326
328 if not self.connect(): return None
329 return self.server.fetch_module_id(dumps(module),mid)
330
332 if not self.connect(): return None
333 return loads(self.server.fetch_project_dependencies(project_id,metaproject_id))
334
338
340 if not self.connect(): return None
341 return loads(self.server.fetch_modules_for_project(name,dumps(version)))
342
344 if not self.connect(): return None
345 return loads(self.server.fetch_services_for_project(name,dumps(version)))
346
348 if not self.connect(): return None
349 return loads(self.server.fetch_module_parameters(module_id))
350
352 if not self.connect(): return None
353 return loads(self.server.fetch_service_parameters(module_id))
354