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