def __init__(self, dataprovider, metrilyxGraphReq, logger): self.logger = logger self.__graphReq = metrilyxGraphReq self.__dataprovider = dataprovider request = self.__graphReq.request() if request.has_key('secondaries') and len(request['secondaries']) > 0 and \ request['secondaries'][0]['query'] != "": self.containsSecondaries = True self.__secondariesGraph = SecondariesGraph(request) else: self.containsSecondaries = False self.total = len([o for o in self.__graphReq.split()]) self.completed = 0 self.__graphResponse = self.__initGraphResponse() self.__completedDeferred = Deferred() self.__partialDeferreds = [Deferred() for i in range(self.total)] self.__activePartials = {} self.__fetch()
def __init__(self, dataprovider, metrilyxGraphReq, logger): self.logger = logger self.__graphReq = metrilyxGraphReq self.__dataprovider = dataprovider request = self.__graphReq.request() if request.has_key('secondaries') and len(request['secondaries']) > 0 and \ request['secondaries'][0]['query'] != "": self.containsSecondaries = True self.__secondariesGraph = SecondariesGraph(request) else: self.containsSecondaries = False self.total = len([o for o in self.__graphReq.split()]) self.completed = 0 self.__graphResponse = self.__initGraphResponse() self.__completedDeferred = Deferred() self.__partialDeferreds = [ Deferred() for i in range(self.total) ] self.__activePartials = {} self.__fetch()
class MetrilyxGraphFetcher(object): ''' Handles how each graph query should be broken up. This depends on if it contains 'secondaries' ''' def __init__(self, dataprovider, metrilyxGraphReq, logger): self.logger = logger self.__graphReq = metrilyxGraphReq self.__dataprovider = dataprovider request = self.__graphReq.request() if request.has_key('secondaries') and len(request['secondaries']) > 0 and \ request['secondaries'][0]['query'] != "": self.containsSecondaries = True self.__secondariesGraph = SecondariesGraph(request) else: self.containsSecondaries = False self.total = len([o for o in self.__graphReq.split()]) self.completed = 0 self.__graphResponse = self.__initGraphResponse() self.__completedDeferred = Deferred() self.__partialDeferreds = [ Deferred() for i in range(self.total) ] self.__activePartials = {} self.__fetch() def __initGraphResponse(self): graphResponse = { "series": [] } for k,v in self.__graphReq.request().items(): if k != "series": graphResponse[k] = v return graphResponse def __rmActivePartial(self, urlIdx): if self.__activePartials.has_key(urlIdx): del self.__activePartials[urlIdx] def __partialResponseCallback(self, respBodyStr, response, *cbargs): self.completed += 1 (url, gmeta, idx) = cbargs self.__rmActivePartial(url) respData = checkHttpResponse(respBodyStr, response, url) self.logger.info("Partial response: %s" %(url.split("?")[-1])) if respData.has_key('error'): gmeta['series'][0]['data'] = respData else: gmeta['series'][0]['data'] = self.__dataprovider.responseCallback( respData['data'], url, gmeta) mas = MetrilyxAnalyticsSerie(gmeta['series'][0], graphType=gmeta['graphType']) if self.containsSecondaries: self.__secondariesGraph.add(mas) else: gmeta['series'][0]['data'] = mas.data() gmeta['series'][0]['uuid'] = str(mas.uuid) pprint(gmeta) # may need to remove this ?? self.__partialDeferreds[idx].callback(gmeta) logger.info("--- Done ---") if self.total == self.completed: if self.containsSecondaries: data = self.__secondariesGraph.data() self.__completedDeferred.callback(data) else: self.__completedDeferred.callback(None) def __partialResponseErrback(self, error, *cbargs): self.completed += 1 (url, gmeta, idx) = cbargs self.__rmActivePartial(url) if self.total == self.completed: self.__completedDeferred.errback(error) self.__partialDeferreds[idx].errback(error) def __fetch(self): counter = 0 for gr in self.__graphReq.split(): (url, method, query) = self.__dataprovider.getQuery(gr) a = AsyncHttpJsonClient(uri=url, method=method, body=query) a.addResponseCallback(self.__partialResponseCallback, url, gr, counter) a.addResponseErrback(self.__partialResponseErrback, url, gr, counter) self.__activePartials[url] = a counter += 1 self.logger.info("Partial query (%s): %s" %(gr['_id'], url)) def addCompleteCallback(self, callback, *cbargs): self.__completedDeferred.addCallback(callback, *cbargs) def addCompleteErrback(self, callback, *cbargs): self.__completedDeferred.addErrback(callback, *cbargs) def addPartialResponseCallback(self, callback, *cbargs): for d in self.__partialDeferreds: d.addCallback(callback, *cbargs) def addPartialResponseErrback(self, callback, *cbargs): for d in self.__partialDeferreds: d.addErrback(callback, *cbargs) def cancelRequests(self): for k,d in self.__activePartials.items(): d.cancelRequest() self.__activePartials = None
class MetrilyxGraphFetcher(object): ''' Handles how each graph query should be broken up. This depends on if it contains 'secondaries' ''' def __init__(self, dataprovider, metrilyxGraphReq, logger): self.logger = logger self.__graphReq = metrilyxGraphReq self.__dataprovider = dataprovider request = self.__graphReq.request() if request.has_key('secondaries') and len(request['secondaries']) > 0 and \ request['secondaries'][0]['query'] != "": self.containsSecondaries = True self.__secondariesGraph = SecondariesGraph(request) else: self.containsSecondaries = False self.total = len([o for o in self.__graphReq.split()]) self.completed = 0 self.__graphResponse = self.__initGraphResponse() self.__completedDeferred = Deferred() self.__partialDeferreds = [Deferred() for i in range(self.total)] self.__activePartials = {} self.__fetch() def __initGraphResponse(self): graphResponse = {"series": []} for k, v in self.__graphReq.request().items(): if k != "series": graphResponse[k] = v return graphResponse def __rmActivePartial(self, urlIdx): if self.__activePartials.has_key(urlIdx): del self.__activePartials[urlIdx] def __partialResponseCallback(self, respBodyStr, response, *cbargs): self.completed += 1 (url, gmeta, idx) = cbargs self.__rmActivePartial(url) respData = checkHttpResponse(respBodyStr, response, url) self.logger.info("Partial response: %s" % (url.split("?")[-1])) if respData.has_key('error'): gmeta['series'][0]['data'] = respData else: gmeta['series'][0]['data'] = self.__dataprovider.responseCallback( respData['data'], url, gmeta) mas = MetrilyxAnalyticsSerie(gmeta['series'][0], graphType=gmeta['graphType']) if self.containsSecondaries: self.__secondariesGraph.add(mas) else: gmeta['series'][0]['data'] = mas.data() gmeta['series'][0]['uuid'] = str(mas.uuid) pprint(gmeta) # may need to remove this ?? self.__partialDeferreds[idx].callback(gmeta) logger.info("--- Done ---") if self.total == self.completed: if self.containsSecondaries: data = self.__secondariesGraph.data() self.__completedDeferred.callback(data) else: self.__completedDeferred.callback(None) def __partialResponseErrback(self, error, *cbargs): self.completed += 1 (url, gmeta, idx) = cbargs self.__rmActivePartial(url) if self.total == self.completed: self.__completedDeferred.errback(error) self.__partialDeferreds[idx].errback(error) def __fetch(self): counter = 0 for gr in self.__graphReq.split(): (url, method, query) = self.__dataprovider.getQuery(gr) a = AsyncHttpJsonClient(uri=url, method=method, body=query) a.addResponseCallback(self.__partialResponseCallback, url, gr, counter) a.addResponseErrback(self.__partialResponseErrback, url, gr, counter) self.__activePartials[url] = a counter += 1 self.logger.info("Partial query (%s): %s" % (gr['_id'], url)) def addCompleteCallback(self, callback, *cbargs): self.__completedDeferred.addCallback(callback, *cbargs) def addCompleteErrback(self, callback, *cbargs): self.__completedDeferred.addErrback(callback, *cbargs) def addPartialResponseCallback(self, callback, *cbargs): for d in self.__partialDeferreds: d.addCallback(callback, *cbargs) def addPartialResponseErrback(self, callback, *cbargs): for d in self.__partialDeferreds: d.addErrback(callback, *cbargs) def cancelRequests(self): for k, d in self.__activePartials.items(): d.cancelRequest() self.__activePartials = None