class KairosDBFinder(object):
    def __init__(self):
        self.mt = MetricType()
        self.mt.openConnection()
        #self.mt = GLOBAL_METRIC_TYPE

    def getLeafNode(self, mname, reader, avoidIntervals=False):
        ln = LeafNode(mname, reader)  #, avoidIntervals=avoidIntervals)
        return ln

    def getBranchNode(self, mname):
        bn = BranchNode(mname)
        return bn

    def find_nodes(self, query):
        timeStart = time.time()
        
        cacheKey = "find_node_qpList:%s" % query.pattern
        tupes = cache.get(cacheKey)
        if not tupes:
            tupes = self.mt.find_nodes(query.pattern)
            cache.set(cacheKey, tupes, 30*60)
         
        nodes = []
        try:
            for mname, nodeType in tupes:
                if nodeType == 'L':
                    reader  = KairosdbReader(KAIROSDB_URL, mname)
                    nodes.append(self.getLeafNode(mname, reader, avoidIntervals=True))
                elif nodeType == 'B':
                    nodes.append(BranchNode(mname))
                else:
                    assert False, "KairosDBFinder.find_nodes(): ERROR: got wrong node type back from nodeType: %s" % (nodeType)
        except Exception as e:
            tb = traceback.format_exc()
            log.info("finders.KairosDBFinder.find_nodes(%s) EXCEPTION: e: %s, %s, tupes: %s." % (query, e, tb, tupes))
        if 0:
            log.info("finders.KairosDBFinder.find_nodes(%s) saving data! %d nodes." % (query.pattern, len(nodes)))
            if 0:
                log.info("finders.KairosDBFinder.find_nodes(%s) nodes to save: %s" % (query.pattern, nodes))
        delay = time.time() - timeStart
        log.info("KairosDBFinder.find_nodes(): kdbFindNodesDelay: %05.08f #tupes: %s query: %s" % (delay, len(tupes), query))
        return nodes
 def __init__(self):
     self.mt = MetricType()
     self.mt.openConnection()