def getRequestInfoFromReqMgr(serviceURL): """ get the request info from requestManager """ service = RequestManager({"endpoint": serviceURL}) try: baseResults = service.getRequestNames() urls = service.getWorkQueue() except Exception, ex: logging.error(str(ex)) return DFormatter.errorFormatter(serviceURL, "RequestManger Down")
def getRequestInfoFromReqMgr(serviceURL): """ get the request info from requestManager """ ###TODO: add back when GlobalMonitor spins out as a separate application service = RequestManager({'endpoint':serviceURL}) try: ### use request manager funtion directly ### TODO: remove this when GlobalMonitor spins out as a separate application if serviceURL.lower() == "local": baseResults = getOverview() urls = getGlobalQueues() else: baseResults = service.getRequestNames() urls = service.getWorkQueue() except Exception, ex: logging.error(str(ex)) return DFormatter.errorFormatter(serviceURL, "RequestManger Down")
class ReqMgrTester(object): def __init__(self, reqMgrUrl): self.reqMgrUrl = reqMgrUrl self.restSender = JSONRequests(reqMgrUrl) d = dict(endpoint = self.reqMgrUrl) self.reqMgrService = RequestManager(d) def queryAllRequests(self): """ Returns all requests stored at ReqMgr instance. """ logging.info("Querying all requests at ReqMgr instance ...") r = self.reqMgrService.getRequestNames() print "Found %s requests:" % len(r) for req in r: print req def queryRequest(self, requestName): """ Query a specific request according to the input argument. """ urlQuery = "request/%s" % requestName logging.info("Querying request '%s'" % requestName) logging.info("Query: '%s':" % urlQuery) r = self.restSender.get(urlQuery) print str(r) def createRequests(self, numRequests): """ Inject new numRequests into ReqMgr instance. (see ReqMgr_t testE how to create a request) """ logging.info("Creating %s new requests ..." % numRequests) schema = ReReco.getTestArguments() schema['RequestName'] = 'TestReReco' schema['RequestType'] = 'ReReco' schema['CmsPath'] = "/uscmst1/prod/sw/cms" schema['Requestor'] = '%s' % "testinguser" schema['Group'] = '%s' % "PeopleLikeMe" schema['BlockWhitelist'] = ['/dataset/dataset/dataset#alpha'] schema['BlockBlacklist'] = ['/dataset/dataset/dataset#beta'] schema['Campaign'] = 'MyTestCampaign' for i in range(numRequests): urlQuery = "request/testRequest" logging.info("Query: '%s':" % urlQuery) r = self.restSender.put(urlQuery, schema) # print "request creating response: ", r print "created: ", r[0]["RequestName"] def deleteRequest(self, requestNames): """ Delete requests specified in the input, more request names are comma-separated. """ logging.info("Deleting requests ...") for reqName in requestNames.split(','): reqName = reqName.strip() urlQuery = "request/%s" % reqName logging.info("Deleting request (request_name): '%s'" % reqName) logging.info("Query: '%s':" % urlQuery) r = self.restSender.delete(urlQuery) def injectOpsClipboard(self, reqName, couchUrl, couchDbName): """ Once a request reaches "ops-hold" state, it can be injected into CouchDB, application OpsClipboard, for further manipulation. Do this here with the reqName request. OpsClipboard.inject() method which does in the CouchDB injection is called from WMCore/HTTPFrontEnd/RequestManager/Assign.py handleAssignmentPage method (which currently, 2012-01, doesn't have any unittest nor REST API) (used only from the Assignment webpage) Works when running locally accessing CouchDB behind frontend: py test/data/ReqMgr/reqmgr-load_example_data.py -u https://localhost:2000/reqmgr/reqMgr/ \ -t testinguser_120131_213320_2161 -i -o https://localhost:2000/couchdb/ \ -a ops_clipboard """ # find out campaign name associated with this request r = self.restSender.get("request/%s" % reqName) campaign = r[0]["Campaign"] logging.info("Campaign: %s" % campaign) requests = [{u"RequestName": reqName, u"CampaignName": campaign}] OpsClipboard.inject(couchUrl, couchDbName, *requests) def requestChangeStates(self, reqName, injectOpsClipboard, couchUrl, couchDbName): """ Route the request (spec. by the request name) in the input through a series of possible request states. """ logging.info("Changing state of request %s ..." % reqName) def changeState(requestName, urlQuery): logging.info("Query: '%s' ..." % urlQuery) r = self.restSender.put(urlQuery) r = self.restSender.get("request/%s" % requestName) #assert r[0]["RequestStatus"] == statusName logging.info("Querying modified request, new state: %s" % r[0]["RequestStatus"]) # once a request is created, it's in 'new' state # states transition has to be an allowed one as defined here: # WMCore/RequestManager/RequestDB/Settings/RequestStatus.py statesQueries = ["request/%s?status=%s" % (reqName, "testing-approved"), "request/%s?status=%s" % (reqName, "testing"), "request/%s?status=%s" % (reqName, "tested"), "request/%s?status=%s" % (reqName, "assignment-approved"), # create an assignment now # need quote because of space in the team name urllib.quote("assignment/%s/%s" % (TEAM_NAME, reqName)), "request/%s?status=%s" % (reqName, "ops-hold")] for query in statesQueries: changeState(reqName, query) if injectOpsClipboard: self.injectOpsClipboard(reqName, couchUrl, couchDbName) def setup(self): """ Setup ReqMgr instance for dealing with requests - needs to create a user, group, SW releases entries, etc. as done in test/python/WMCore_t/RequestManager_t/ReqMgr_t.py """ logging.info("ReqMgr setup ...") def doQuery(urlQuery): logging.info("Query: '%s' ..." % urlQuery) r = None try: r = self.restSender.put(urlQuery) except Exception as ex: print "exception" print str(ex) print "response:", r queries = ["user/[email protected]", "group/PeopleLikeMe", "group/PeopleLikeMe/testinguser", urllib.quote("team/" + TEAM_NAME), "version/%s" % "CMSSW_3_5_8"] for q in queries: doQuery(q) logging.info("ReqMgr setup finished, listing known users ...") q = "user/" r = self.restSender.get(q) print r
class ReqMgrTester(object): def __init__(self, reqMgrUrl): self.reqMgrUrl = reqMgrUrl self.restSender = JSONRequests(reqMgrUrl) d = dict(endpoint = self.reqMgrUrl) self.reqMgrService = RequestManager(d) def queryAllRequests(self): """ Returns all requests stored at ReqMgr instance. """ logging.info("Querying all requests at ReqMgr instance ...") r = self.reqMgrService.getRequestNames() print "Found %s requests:" % len(r) for req in r: print req def queryRequest(self, requestName): """ Query a specific request according to the input argument. """ urlQuery = "request/%s" % requestName logging.info("Querying request '%s'" % requestName) logging.info("Query: '%s':" % urlQuery) r = self.restSender.get(urlQuery) print str(r) def createRequests(self, numRequests): """ Inject new numRequests into ReqMgr instance. (see ReqMgr_t testE how to create a request) """ logging.info("Creating %s new requests ..." % numRequests) schema = ReReco.getTestArguments() schema['RequestName'] = 'TestReReco' schema['RequestType'] = 'ReReco' schema['CmsPath'] = "/uscmst1/prod/sw/cms" schema['Requestor'] = '%s' % "zmaxa" schema['Group'] = '%s' % "DATAOPS" schema['BlockWhitelist'] = ['/dataset/dataset/dataset#alpha'] schema['BlockBlacklist'] = ['/dataset/dataset/dataset#beta'] schema['Campaign'] = 'MyTestCampaign' for i in range(numRequests): urlQuery = "request/testRequest" print "Query: '%s':" % urlQuery print "Schema (request): '%s'" % schema r = self.restSender.put(urlQuery, schema) # print "request creating response: ", r print "created: ", r[0]["RequestName"] def deleteRequest(self, requestNames): """ Delete requests specified in the input, more request names are comma-separated. """ logging.info("Deleting requests ...") for reqName in requestNames.split(','): reqName = reqName.strip() urlQuery = "request/%s" % reqName logging.info("Deleting request (request_name): '%s'" % reqName) logging.info("Query: '%s':" % urlQuery) r = self.restSender.delete(urlQuery) def requestChangeStates(self, reqName): """ Route the request (spec. by the request name) in the input through a series of possible request states. """ logging.info("Changing state of request %s ..." % reqName) def changeState(requestName, urlQuery): logging.info("Query: '%s' ..." % urlQuery) r = self.restSender.put(urlQuery) r = self.restSender.get("request/%s" % requestName) #assert r[0]["RequestStatus"] == statusName logging.info("Querying modified request, new state: %s" % r[0]["RequestStatus"]) # once a request is created, it's in 'new' state # states transition has to be an allowed one as defined here: # WMCore/RequestManager/RequestDB/Settings/RequestStatus.py statesQueries = ["request/%s?status=%s" % (reqName, "testing-approved"), "request/%s?status=%s" % (reqName, "testing"), "request/%s?status=%s" % (reqName, "tested"), "request/%s?status=%s" % (reqName, "assignment-approved"), # create an assignment now # need quote because of space in the team name # (previous name - White Sox) urllib.quote("assignment/%s/%s" % (TEAM_NAME, reqName))] for query in statesQueries: changeState(reqName, query) def setup(self): """ Setup ReqMgr instance for dealing with requests - needs to create a user, group, SW releases entries, etc. as done in test/python/WMCore_t/RequestManager_t/ReqMgr_t.py """ logging.info("ReqMgr setup ...") def doQuery(urlQuery): logging.info("Query: '%s' ..." % urlQuery) r = None try: r = self.restSender.put(urlQuery) except Exception as ex: print "exception" print str(ex) print "response:", r queries = ["user/[email protected]", "group/DATAOPS", "group/DATAOPS/zmaxa", urllib.quote("team/" + TEAM_NAME), "version/%s" % "CMSSW_3_5_8"] for q in queries: doQuery(q) logging.info("ReqMgr setup finished, listing known users ...") q = "user/" r = self.restSender.get(q) print r
class ReqMgrTester(object): def __init__(self, reqMgrUrl): self.reqMgrUrl = reqMgrUrl self.restSender = JSONRequests(reqMgrUrl) d = dict(endpoint=self.reqMgrUrl) self.reqMgrService = RequestManager(d) def queryAllRequests(self): """ Returns all requests stored at ReqMgr instance. """ logging.info("Querying all requests at ReqMgr instance ...") r = self.reqMgrService.getRequestNames() print "Found %s requests:" % len(r) for req in r: print req def queryRequest(self, requestName): """ Query a specific request according to the input argument. """ urlQuery = "request/%s" % requestName logging.info("Querying request '%s'" % requestName) logging.info("Query: '%s':" % urlQuery) r = self.restSender.get(urlQuery) print str(r) def createRequests(self, numRequests): """ Inject new numRequests into ReqMgr instance. (see ReqMgr_t testE how to create a request) """ logging.info("Creating %s new requests ..." % numRequests) schema = ReReco.getTestArguments() schema['RequestName'] = 'TestReReco' schema['RequestType'] = 'ReReco' schema['CmsPath'] = "/uscmst1/prod/sw/cms" schema['Requestor'] = '%s' % "zmaxa" schema['Group'] = '%s' % "DATAOPS" schema['BlockWhitelist'] = ['/dataset/dataset/dataset#alpha'] schema['BlockBlacklist'] = ['/dataset/dataset/dataset#beta'] schema['Campaign'] = 'MyTestCampaign' for i in range(numRequests): urlQuery = "request/testRequest" print "Query: '%s':" % urlQuery print "Schema (request): '%s'" % schema r = self.restSender.put(urlQuery, schema) # print "request creating response: ", r print "created: ", r[0]["RequestName"] def deleteRequest(self, requestNames): """ Delete requests specified in the input, more request names are comma-separated. """ logging.info("Deleting requests ...") for reqName in requestNames.split(','): reqName = reqName.strip() urlQuery = "request/%s" % reqName logging.info("Deleting request (request_name): '%s'" % reqName) logging.info("Query: '%s':" % urlQuery) r = self.restSender.delete(urlQuery) def requestChangeStates(self, reqName): """ Route the request (spec. by the request name) in the input through a series of possible request states. """ logging.info("Changing state of request %s ..." % reqName) def changeState(requestName, urlQuery): logging.info("Query: '%s' ..." % urlQuery) r = self.restSender.put(urlQuery) r = self.restSender.get("request/%s" % requestName) #assert r[0]["RequestStatus"] == statusName logging.info("Querying modified request, new state: %s" % r[0]["RequestStatus"]) # once a request is created, it's in 'new' state # states transition has to be an allowed one as defined here: # WMCore/RequestManager/RequestDB/Settings/RequestStatus.py statesQueries = [ "request/%s?status=%s" % (reqName, "testing-approved"), "request/%s?status=%s" % (reqName, "testing"), "request/%s?status=%s" % (reqName, "tested"), "request/%s?status=%s" % (reqName, "assignment-approved"), # create an assignment now # need quote because of space in the team name # (previous name - White Sox) urllib.quote("assignment/%s/%s" % (TEAM_NAME, reqName)) ] for query in statesQueries: changeState(reqName, query) def setup(self): """ Setup ReqMgr instance for dealing with requests - needs to create a user, group, SW releases entries, etc. as done in test/python/WMCore_t/RequestManager_t/ReqMgr_t.py """ logging.info("ReqMgr setup ...") def doQuery(urlQuery): logging.info("Query: '%s' ..." % urlQuery) r = None try: r = self.restSender.put(urlQuery) except Exception as ex: print "exception" print str(ex) print "response:", r queries = [ "user/[email protected]", "group/DATAOPS", "group/DATAOPS/zmaxa", urllib.quote("team/" + TEAM_NAME), "version/%s" % "CMSSW_3_5_8" ] for q in queries: doQuery(q) logging.info("ReqMgr setup finished, listing known users ...") q = "user/" r = self.restSender.get(q) print r