def getCampaign(self, campaign=None): """ returns a list of all campaigns if no argument, and a list of all requests in a campaign if there is an argument """ if campaign == None: return Campaign.listCampaigns() else: return Campaign.listRequestsByCampaign(campaign)
def putCampaign(self, campaign, request=None): """ Adds a campaign if it doesn't already exist, and optionally associates a request with it """ if request: requestID = GetRequest.requestID(request) if requestID: return Campaign.associateCampaign(campaign, requestID) else: return False else: Campaign.addCampaign(campaign)
def putCampaign(self, campaign, request=None): """ Adds a campaign if it doesn't already exist, and optionally associates a request with it """ if request: requestID = GetRequest.requestID(request) if requestID: result = Campaign.associateCampaign(campaign, requestID) Utilities.associateCampaign(campaign = campaign, requestName = request, couchURL = self.couchUrl, couchDBName = self.workloadDBName) return result else: return False else: Campaign.addCampaign(campaign)
def index(self): """ Main web page for creating requests """ # Get the scram Architecture from the keys and the # CMSSW versions from the values self.scramArchs = SoftwareAdmin.listSoftware().keys() versionLists = SoftwareAdmin.listSoftware().values() self.versions = [] for l in versionLists: for v in l: if not v in self.versions: self.versions.append(v) self.versions.sort() # see if this was configured with a hardcoded user. If not, take from the request header requestor = self.requestor if not requestor: requestor = cherrypy.request.user["login"] if not requestor: return "No username found in your certificate" if not requestor in Registration.listUsers(): return "User %s is not registered. Contact a ReqMgr administrator." % requestor groups = GroupInfo.groupsForUser(requestor).keys() if groups == []: return "User " + requestor + " is not in any groups. Contact a ReqMgr administrator." campaigns = Campaign.listCampaigns() return self.templatepage("WebRequestSchema", yuiroot=self.yuiroot, requestor=requestor, groups=groups, versions=self.versions, archs=self.scramArchs, alldocs=Utilities.unidecode(self.allDocs()), allcampaigns=campaigns, defaultVersion=self.cmsswVersion, defaultArch=self.defaultArch, defaultSkimConfig=self.defaultSkimConfig)
def index(self): """ Main web page for creating requests """ # Get the scram Architecture from the keys and the # CMSSW versions from the values self.scramArchs = SoftwareAdmin.listSoftware().keys() versionLists = SoftwareAdmin.listSoftware().values() self.versions = [] for l in versionLists: for v in l: if not v in self.versions: self.versions.append(v) self.versions.sort() # see if this was configured with a hardcoded user. If not, take from the request header requestor = self.requestor if not requestor: requestor = cherrypy.request.user["login"] if not requestor: return "No username found in your certificate" if not requestor in Registration.listUsers(): return "User %s is not registered. Contact a ReqMgr administrator." % requestor groups = GroupInfo.groupsForUser(requestor).keys() if groups == []: return "User " + requestor + " is not in any groups. Contact a ReqMgr administrator." campaigns = Campaign.listCampaigns() return self.templatepage("WebRequestSchema", yuiroot=self.yuiroot, requestor=requestor, groups=groups, versions=self.versions, archs = self.scramArchs, alldocs = Utilities.unidecode(self.allDocs()), allcampaigns = campaigns, defaultVersion=self.cmsswVersion, defaultSkimConfig=self.defaultSkimConfig)
def putCampaign(self, campaign, request=None): """ Adds a campaign if it doesn't already exist, and optionally associates a request with it """ if request: requestID = GetRequest.requestID(request) if requestID: result = Campaign.associateCampaign(campaign, requestID) Utilities.associateCampaign(campaign=campaign, requestName=request, couchURL=self.couchUrl, couchDBName=self.workloadDBName) return result else: return False else: Campaign.addCampaign(campaign)
def deleteCampaign(self, campaign): return Campaign.deleteCampaign(campaign)
_raiseCheckInError(request, ex, "Unable to Associate input datasets to request") try: for ds in request['OutputDatasets']: # request['OutputDatasets'] may contain a list of lists (each sublist for a task) # which is actually not understood why but seems to be correct (Steve) # dirty if isinstance(ds, list): for dss in ds: MakeRequest.associateOutputDataset(requestName, dss) else: MakeRequest.associateOutputDataset(requestName, ds) except Exception, ex: _raiseCheckInError(request, ex, "Unable to Associate output datasets to request") try: for sw in request['SoftwareVersions']: MakeRequest.associateSoftware(requestName, sw) except Exception, ex: _raiseCheckInError(request, ex, "Unable to associate software for this request") if request["RequestNumEvents"] != None: MakeRequest.updateRequestSize(requestName, request["RequestNumEvents"], request.get("RequestSizeFiles", 0), request.get("RequestEventSize", 0) ) campaign = request.get("Campaign", "") if campaign != "" and campaign != None: Campaign.associateCampaign(campaign, reqId) logging.info("Request '%s' built with request id '%s"'' % (requestName, request['RequestID']))
def checkIn(request, requestType='None'): """ _CheckIn_ Check in of a request manager Given a new request, check it in to the DB and add the appropriate IDs. """ # // # // First try and register the request in the DB #// requestName = request['RequestName'] # test if the software versions are registered first versions = SoftwareManagement.listSoftware() scramArch = request.get('ScramArch') if requestType.lower() in ['resubmission']: # Do nothing, as we have no valid software version yet pass else: if not scramArch in versions.keys(): m = ( "Cannot find scramArch %s in ReqMgr (the one(s) available: %s)" % (scramArch, versions)) raise RequestCheckInError(m) for version in request.get('SoftwareVersions', []): if not version in versions[scramArch]: raise RequestCheckInError( "Cannot find software version %s in ReqMgr for " "scramArch %s. Supported versions: %s" % (version, scramArch, versions[scramArch])) try: reqId = MakeRequest.createRequest(request['Requestor'], request['Group'], requestName, request['RequestType'], request['RequestWorkflow'], request.get('PrepID', None), request.get('RequestPriority', None)) except Exception as ex: msg = "Error creating new request:\n" msg += str(ex) raise RequestCheckInError(msg) #FIXME LAST_INSERT_ID doesn't work on oracle reqId = GetRequest.requestID(requestName) request['RequestID'] = reqId logging.info("Request %s created with request id %s" % (requestName, request['RequestID'])) # // # // add metadata about the request #// try: if request['InputDatasetTypes'] != {}: for ds, dsType in request['InputDatasetTypes'].items(): MakeRequest.associateInputDataset(requestName, ds, dsType) elif isinstance(request['InputDatasets'], list): for ds in request['InputDatasets']: MakeRequest.associateInputDataset(requestName, ds) else: MakeRequest.associateInputDataset(requestName, request['InputDatasets']) except Exception as ex: _raiseCheckInError(request, ex, "Unable to Associate input datasets to request") try: for ds in request['OutputDatasets']: # request['OutputDatasets'] may contain a list of lists (each sublist for a task) # which is actually not understood why but seems to be correct (Steve) # dirty if isinstance(ds, list): for dss in ds: MakeRequest.associateOutputDataset(requestName, dss) else: MakeRequest.associateOutputDataset(requestName, ds) except Exception as ex: _raiseCheckInError(request, ex, "Unable to Associate output datasets to request") try: for sw in request['SoftwareVersions']: MakeRequest.associateSoftware(requestName, sw) except Exception as ex: _raiseCheckInError(request, ex, "Unable to associate software for this request") MakeRequest.updateRequestSize(requestName, request.get("RequestNumEvents", 0), request.get("RequestSizeFiles", 0), request.get("SizePerEvent", 0)) campaign = request.get("Campaign", "") if campaign != "" and campaign != None: Campaign.associateCampaign(campaign, reqId) logging.info("Request '%s' built with request id '%s" '' % (requestName, request['RequestID']))
for ds in request['OutputDatasets']: # request['OutputDatasets'] may contain a list of lists (each sublist for a task) # which is actually not understood why but seems to be correct (Steve) # dirty if isinstance(ds, list): for dss in ds: MakeRequest.associateOutputDataset(requestName, dss) else: MakeRequest.associateOutputDataset(requestName, ds) except Exception, ex: _raiseCheckInError(request, ex, "Unable to Associate output datasets to request") try: for sw in request['SoftwareVersions']: MakeRequest.associateSoftware(requestName, sw) except Exception, ex: _raiseCheckInError(request, ex, "Unable to associate software for this request") if request["RequestNumEvents"] != None: MakeRequest.updateRequestSize(requestName, request["RequestNumEvents"], request.get("RequestSizeFiles", 0), request.get("RequestEventSize", 0)) campaign = request.get("Campaign", "") if campaign != "" and campaign != None: Campaign.associateCampaign(campaign, reqId) logging.info("Request '%s' built with request id '%s" '' % (requestName, request['RequestID']))
def checkIn(request, requestType="None"): """ _CheckIn_ Check in of a request manager Given a new request, check it in to the DB and add the appropriate IDs. """ # // # // First try and register the request in the DB # // requestName = request["RequestName"] # test if the software versions are registered first versions = SoftwareManagement.listSoftware() scramArch = request.get("ScramArch") if requestType.lower() in ["resubmission"]: # Do nothing, as we have no valid software version yet pass else: if not scramArch in versions.keys(): m = "Cannot find scramArch %s in ReqMgr (the one(s) available: %s)" % (scramArch, versions) raise RequestCheckInError(m) for version in request.get("SoftwareVersions", []): if not version in versions[scramArch]: raise RequestCheckInError( "Cannot find software version %s in ReqMgr for " "scramArch %s. Supported versions: %s" % (version, scramArch, versions[scramArch]) ) try: reqId = MakeRequest.createRequest( request["Requestor"], request["Group"], requestName, request["RequestType"], request["RequestWorkflow"], request.get("PrepID", None), request.get("RequestPriority", None), ) except Exception as ex: msg = "Error creating new request:\n" msg += str(ex) raise RequestCheckInError(msg) # FIXME LAST_INSERT_ID doesn't work on oracle reqId = GetRequest.requestID(requestName) request["RequestID"] = reqId logging.info("Request %s created with request id %s" % (requestName, request["RequestID"])) # // # // add metadata about the request # // try: if request["InputDatasetTypes"] != {}: for ds, dsType in request["InputDatasetTypes"].items(): MakeRequest.associateInputDataset(requestName, ds, dsType) elif isinstance(request["InputDatasets"], list): for ds in request["InputDatasets"]: MakeRequest.associateInputDataset(requestName, ds) else: MakeRequest.associateInputDataset(requestName, request["InputDatasets"]) except Exception as ex: _raiseCheckInError(request, ex, "Unable to Associate input datasets to request") try: for ds in request["OutputDatasets"]: # request['OutputDatasets'] may contain a list of lists (each sublist for a task) # which is actually not understood why but seems to be correct (Steve) # dirty if isinstance(ds, list): for dss in ds: MakeRequest.associateOutputDataset(requestName, dss) else: MakeRequest.associateOutputDataset(requestName, ds) except Exception as ex: _raiseCheckInError(request, ex, "Unable to Associate output datasets to request") try: for sw in request["SoftwareVersions"]: MakeRequest.associateSoftware(requestName, sw) except Exception as ex: _raiseCheckInError(request, ex, "Unable to associate software for this request") MakeRequest.updateRequestSize( requestName, request.get("RequestNumEvents", 0), request.get("RequestSizeFiles", 0), request.get("SizePerEvent", 0), ) campaign = request.get("Campaign", "") if campaign != "" and campaign != None: Campaign.associateCampaign(campaign, reqId) logging.info("Request '%s' built with request id '%s" "" % (requestName, request["RequestID"]))