Example #1
0
    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
Example #4
0
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