41
41
from collections import defaultdict
42
42
from timeit import default_timer as timer
43
43
from time import sleep
44
+ from threading import Thread
44
45
45
46
47
+ local_cache = []
48
+
46
49
class MetadataHandler (metaclass = Singleton ):
47
50
48
51
def __init__ (self , ** kwargs ):
@@ -153,6 +156,7 @@ def __getSuggest(self, params):
153
156
154
157
if params .get ('q' ):
155
158
searchStr = params ['q' ].strip ()
159
+ self .logger .trace (f'Suggest for { searchStr } called' )
156
160
# if '*' and tagv, then it denotes a grouping key value: do not process
157
161
if not (searchStr == '*' and params ['type' ] == 'tagv' ):
158
162
# Since grafana sends the candidate string quickly, one character at a time, it
@@ -194,6 +198,7 @@ def __getLookup(self, params):
194
198
res = LookupResultObj (searchMetric )
195
199
res .parseResultTags (identifiersMap )
196
200
res .parseRequestTags (filterBy )
201
+ self .logger .trace (f'lookUp result { res } ' )
197
202
resp = res .__dict__
198
203
199
204
except Exception as e :
@@ -545,6 +550,7 @@ def parseTags(self, logger, filtersMap, columnInfo):
545
550
ident = [key .parent ]
546
551
ident .extend (key .identifier )
547
552
logger .debug (MSG ['ReceivAttrValues' ].format ('Single ts identifiers' , ', ' .join (ident )))
553
+ found = False
548
554
for filtersDict in filtersMap :
549
555
if all ((value in filtersDict .values ()) for value in ident ):
550
556
logger .debug (MSG ['ReceivAttrValues' ].format ('filtersKeys' , ', ' .join (filtersDict .keys ())))
@@ -553,7 +559,20 @@ def parseTags(self, logger, filtersMap, columnInfo):
553
559
else :
554
560
for _key , _value in filtersDict .items ():
555
561
tagsDict [_key ].add (_value )
562
+ found = True
556
563
break
564
+ # detected zimon key, do we need refresh local TOPO?
565
+ if not found :
566
+ already_reported = False
567
+ for cache_item in local_cache :
568
+ if set (cache ) == set (ident ):
569
+ logger .trace (MSG ['NewKeyAlreadyReported' ].format (ident ))
570
+ already_reported = True
571
+ break
572
+ if not already_reported :
573
+ logger .debug (MSG ['NewKeyDetected' ].format (ident ))
574
+ local_cache .append (ident )
575
+ Thread (name = 'AdHocMetaDataUpdate' , target = refresh_metadata ).start ()
557
576
558
577
for _key , _values in tagsDict .items ():
559
578
if len (_values ) > 1 :
0 commit comments